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) -> EMI_RECIPE?, ) { - registerCategory(registry, category) - category - .getAllHolders(registry.recipeManager) - .mapNotNull { holder: RecipeHolder -> + registry.recipeManager + .getAllRecipesFor(recipeType.get()) + .asSequence() + .mapNotNull { holder: RecipeHolder -> val id: ResourceLocation = holder.id val recipe: BASE = holder.value if (recipe is RECIPE) { @@ -428,19 +416,18 @@ class RagiumEmiPlugin : EmiPlugin { RagiumAPI.LOGGER.warn("Skipped recipe for EMI registration: $id") null } - }.mapNotNull(factory.partially1(category)) + }.mapNotNull(factory) .forEach(registry::addRecipe) } private fun addItemStackRecipes( registry: EmiRegistry, - category: HTEmiRecipeCategory, + prefix: String, recipeFactory: (ItemStack) -> RECIPE?, - factory: (HTEmiRecipeCategory, ResourceLocation, RECIPE) -> EMI_RECIPE?, + factory: Factory, ) { addRecipes( registry, - category, ITEM_LOOKUP .listElements() .asSequence() @@ -448,9 +435,7 @@ class RagiumEmiPlugin : EmiPlugin { val item: Item = holder.value() val stack: ItemStack = item.defaultInstance val recipe: RECIPE = recipeFactory(stack) ?: return@mapNotNull null - val typeId: ResourceLocation = category.id - val id: ResourceLocation = holder.idOrThrow.withPrefix("/${typeId.namespace}/${typeId.path}/") - id to recipe + holder.idOrThrow.withPrefix("/$prefix/") to recipe }, factory, ) @@ -462,20 +447,17 @@ class RagiumEmiPlugin : EmiPlugin { * @param T [DataMapType]のクラス * @param RECIPE [recipeFactory]で渡す一覧のクラス * @param EMI_RECIPE [factory]で返すレシピのクラス - * @return 渡された[category] * @see mekanism.client.recipe_viewer.emi.MekanismEmi.addCategoryAndRecipes */ private fun addDataMapRecipes( registry: EmiRegistry, - category: HTEmiRecipeCategory, lookup: HolderLookup.RegistryLookup, dataMapType: DataMapType, recipeFactory: (Holder, T) -> RECIPE?, - factory: (HTEmiRecipeCategory, ResourceLocation, RECIPE) -> EMI_RECIPE?, + factory: Factory, ) { addRecipes( registry, - category, lookup .getHolderDataMap(dataMapType) .mapNotNull { (holder: Holder.Reference, value: T) -> @@ -492,21 +474,13 @@ class RagiumEmiPlugin : EmiPlugin { * 指定された引数からレシピを生成し,登録します。 * @param RECIPE [recipes]で渡す一覧のクラス * @param EMI_RECIPE [factory]で返すレシピのクラス - * @return 渡された[category] */ private fun addRecipes( registry: EmiRegistry, - category: HTEmiRecipeCategory, recipes: Sequence>, - factory: (HTEmiRecipeCategory, ResourceLocation, RECIPE) -> EMI_RECIPE?, + factory: Factory, ) { - registerCategory(registry, category) - recipes.mapNotNull { (id: ResourceLocation, recipe: RECIPE) -> factory(category, id, recipe) }.forEach(registry::addRecipe) - } - - private fun registerCategory(registry: EmiRegistry, category: HTEmiRecipeCategory) { - registry.addCategory(category) - category.workStations.forEach(registry::addWorkstation.partially1(category)) + recipes.mapNotNull(factory::create).forEach(registry::addRecipe) } private fun EmiRegistry.addInteraction( @@ -534,4 +508,10 @@ class RagiumEmiPlugin : EmiPlugin { rightInput(flowing.toFluidEmi(1000).copyAsCatalyst(), false) } } + + private fun interface Factory { + fun create(id: ResourceLocation, recipe: RECIPE): EMI_RECIPE? + + fun create(pair: Pair): EMI_RECIPE? = create(pair.first, pair.second) + } } diff --git a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/category/HTEmiRecipeCategory.kt b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/category/HTEmiRecipeCategory.kt index 014ead9f6..db96eac9c 100644 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/category/HTEmiRecipeCategory.kt +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/category/HTEmiRecipeCategory.kt @@ -7,10 +7,12 @@ import dev.emi.emi.api.render.EmiRenderable import dev.emi.emi.api.stack.EmiStack import hiiragi283.ragium.api.math.HTBounds import hiiragi283.ragium.api.registry.HTItemHolderLike +import hiiragi283.ragium.api.registry.impl.HTDeferredRecipeType import hiiragi283.ragium.api.text.HTHasText import hiiragi283.ragium.client.integration.emi.toEmi import net.minecraft.network.chat.Component import net.minecraft.resources.ResourceLocation +import net.minecraft.world.level.ItemLike import java.util.Comparator open class HTEmiRecipeCategory( @@ -49,6 +51,19 @@ open class HTEmiRecipeCategory( item, sorter = sorter, ) + + @JvmStatic + fun create( + bounds: HTBounds, + recipeType: HTDeferredRecipeType<*, *>, + workStations: List, + icon: EmiRenderable, + ): HTEmiRecipeCategory = + HTEmiRecipeCategory(bounds, recipeType, workStations, recipeType.id, icon, icon, EmiRecipeSorting.compareOutputThenInput()) + + @JvmStatic + fun create(bounds: HTBounds, recipeType: HTDeferredRecipeType<*, *>, vararg workStations: ItemLike): HTEmiRecipeCategory = + create(bounds, recipeType, workStations.map(ItemLike::toEmi), workStations[0].toEmi()) } override fun getName(): Component = hasText.getText() diff --git a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/category/HTRegistryEmiRecipeCategory.kt b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/category/HTRegistryEmiRecipeCategory.kt deleted file mode 100644 index df24531cc..000000000 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/category/HTRegistryEmiRecipeCategory.kt +++ /dev/null @@ -1,26 +0,0 @@ -package hiiragi283.ragium.client.integration.emi.category - -import dev.emi.emi.api.recipe.EmiRecipeSorting -import dev.emi.emi.api.render.EmiRenderable -import dev.emi.emi.api.stack.EmiStack -import hiiragi283.ragium.api.math.HTBounds -import hiiragi283.ragium.api.recipe.HTRecipeType -import hiiragi283.ragium.api.registry.impl.HTDeferredRecipeType -import hiiragi283.ragium.client.integration.emi.toEmi -import net.minecraft.world.item.crafting.Recipe -import net.minecraft.world.item.crafting.RecipeInput -import net.minecraft.world.level.ItemLike - -class HTRegistryEmiRecipeCategory>( - bounds: HTBounds, - private val recipeType: HTDeferredRecipeType, - workStations: List, - icon: EmiRenderable, -) : HTEmiRecipeCategory(bounds, recipeType, workStations, recipeType.id, icon, icon, EmiRecipeSorting.compareOutputThenInput()), - HTRecipeType by recipeType { - constructor( - bounds: HTBounds, - recipeType: HTDeferredRecipeType, - vararg workStations: ItemLike, - ) : this(bounds, recipeType, workStations.map(ItemLike::toEmi), workStations[0].toEmi()) -} 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 508939834..88c6e7417 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 @@ -1,19 +1,14 @@ package hiiragi283.ragium.client.integration.emi.category +import dev.emi.emi.api.EmiRegistry +import dev.emi.emi.api.recipe.VanillaEmiRecipeCategories +import hiiragi283.ragium.api.function.partially1 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.HTRecipeInput -import hiiragi283.ragium.api.recipe.multi.HTCombineRecipe -import hiiragi283.ragium.api.recipe.multi.HTComplexRecipe -import hiiragi283.ragium.api.recipe.multi.HTItemWithCatalystRecipe -import hiiragi283.ragium.api.recipe.multi.HTRockGeneratingRecipe -import hiiragi283.ragium.api.recipe.multi.HTShapelessInputsRecipe -import hiiragi283.ragium.api.recipe.single.HTSingleFluidRecipe import hiiragi283.ragium.api.registry.HTItemHolderLike import hiiragi283.ragium.api.registry.impl.HTDeferredRecipeType import hiiragi283.ragium.api.text.HTHasText +import hiiragi283.ragium.client.integration.emi.toEmi import hiiragi283.ragium.common.material.RagiumMaterialKeys import hiiragi283.ragium.common.text.RagiumCommonTranslation import hiiragi283.ragium.setup.RagiumBlocks @@ -65,69 +60,114 @@ object RagiumEmiRecipeCategories { @JvmField val COMBUSTION: HTEmiRecipeCategory = generator(RagiumBlocks.COMBUSTION_GENERATOR) - // Machines // + // Processors // @JvmStatic private fun > machine( recipeType: HTDeferredRecipeType, vararg workStations: ItemLike, - ): HTRegistryEmiRecipeCategory = HTRegistryEmiRecipeCategory(MACHINE_BOUNDS, recipeType, *workStations) + ): HTEmiRecipeCategory = HTEmiRecipeCategory.create(MACHINE_BOUNDS, recipeType, *workStations) // Basic @JvmField - val ALLOYING: HTRegistryEmiRecipeCategory = + val ALLOYING: HTEmiRecipeCategory = machine(RagiumRecipeTypes.ALLOYING, RagiumBlocks.ALLOY_SMELTER) @JvmField - val COMPRESSING: HTRegistryEmiRecipeCategory = + val COMPRESSING: HTEmiRecipeCategory = machine(RagiumRecipeTypes.COMPRESSING, RagiumBlocks.COMPRESSOR) @JvmField - val CRUSHING: HTRegistryEmiRecipeCategory = + val CRUSHING: HTEmiRecipeCategory = machine(RagiumRecipeTypes.CRUSHING, RagiumBlocks.PULVERIZER, RagiumBlocks.CRUSHER) @JvmField - val CUTTING: HTRegistryEmiRecipeCategory = + val CUTTING: HTEmiRecipeCategory = machine(RagiumRecipeTypes.CUTTING, RagiumBlocks.CUTTING_MACHINE) @JvmField - val EXTRACTING: HTRegistryEmiRecipeCategory = + val EXTRACTING: HTEmiRecipeCategory = machine(RagiumRecipeTypes.EXTRACTING, RagiumBlocks.EXTRACTOR) // Advanced @JvmField - val MELTING: HTRegistryEmiRecipeCategory = + val MELTING: HTEmiRecipeCategory = machine(RagiumRecipeTypes.MELTING, RagiumBlocks.MELTER) @JvmField - val MIXING: HTRegistryEmiRecipeCategory = + val MIXING: HTEmiRecipeCategory = machine(RagiumRecipeTypes.MIXING, RagiumBlocks.MIXER, RagiumBlocks.ADVANCED_MIXER) @JvmField - val REFINING: HTRegistryEmiRecipeCategory = + val REFINING: HTEmiRecipeCategory = machine(RagiumRecipeTypes.REFINING, RagiumBlocks.REFINERY) // Elite @JvmField - val BREWING: HTRegistryEmiRecipeCategory = + val BREWING: HTEmiRecipeCategory = machine(RagiumRecipeTypes.BREWING, RagiumBlocks.BREWERY) @JvmField - val PLANTING: HTRegistryEmiRecipeCategory = + val PLANTING: HTEmiRecipeCategory = machine(RagiumRecipeTypes.PLANTING, RagiumBlocks.PLANTER) // Ultimate @JvmField - val ENCHANTING: HTRegistryEmiRecipeCategory = + val ENCHANTING: HTEmiRecipeCategory = machine(RagiumRecipeTypes.ENCHANTING, RagiumBlocks.ENCHANTER) @JvmField - val SIMULATING: HTRegistryEmiRecipeCategory = + val SIMULATING: HTEmiRecipeCategory = machine(RagiumRecipeTypes.SIMULATING, RagiumBlocks.SIMULATOR) // Device // @JvmField - val ROCK_GENERATING: HTRegistryEmiRecipeCategory = + val ROCK_GENERATING: HTEmiRecipeCategory = machine(RagiumRecipeTypes.ROCK_GENERATING, RagiumBlocks.STONE_COLLECTOR) + + // Register // + + @JvmStatic + fun register(registry: EmiRegistry) { + register(registry, MACHINE_UPGRADE) + // Generator + register(registry, THERMAL) + + register(registry, CULINARY) + register(registry, MAGMATIC) + + register(registry, BIOMASS) + register(registry, COOLANT) + register(registry, COMBUSTION) + // Processor + register(registry, ALLOYING) + register(registry, COMPRESSING) + register(registry, CRUSHING) + register(registry, CUTTING) + register(registry, EXTRACTING) + + register(registry, MELTING) + register(registry, MIXING) + register(registry, REFINING) + + register(registry, BREWING) + register(registry, PLANTING) + 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()) + } + + register(registry, ENCHANTING) + register(registry, SIMULATING) + // Device + register(registry, ROCK_GENERATING) + } + + @JvmStatic + private fun register(registry: EmiRegistry, category: HTEmiRecipeCategory) { + registry.addCategory(category) + category.workStations.forEach(registry::addWorkstation.partially1(category)) + } } 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 f8d152b04..a31f48b73 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,10 +6,8 @@ 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( - category: HTEmiRecipeCategory, - holder: RecipeHolder, -) : HTEmiHolderRecipe(category, holder) { +abstract class HTMultiOutputsEmiRecipe(category: HTEmiRecipeCategory, holder: RecipeHolder) : + HTEmiHolderRecipe(category, holder) { init { initInputs() addOutputs(recipe.results) diff --git a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/custom/HTCopyEnchantingEmiRecipe.kt b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/custom/HTCopyEnchantingEmiRecipe.kt index 0803bf342..5dae7674e 100644 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/custom/HTCopyEnchantingEmiRecipe.kt +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/custom/HTCopyEnchantingEmiRecipe.kt @@ -6,7 +6,7 @@ import dev.emi.emi.api.stack.EmiStack import dev.emi.emi.api.widget.WidgetHolder import hiiragi283.ragium.client.integration.emi.addArrow import hiiragi283.ragium.client.integration.emi.addPlus -import hiiragi283.ragium.client.integration.emi.category.HTEmiRecipeCategory +import hiiragi283.ragium.client.integration.emi.category.RagiumEmiRecipeCategories import hiiragi283.ragium.client.integration.emi.recipe.HTEmiRecipe import hiiragi283.ragium.client.integration.emi.toFluidEmi import hiiragi283.ragium.common.recipe.machine.HTCopyEnchantingRecipe @@ -15,8 +15,8 @@ import net.minecraft.resources.ResourceLocation import net.minecraft.world.item.Items import net.minecraft.world.item.crafting.RecipeHolder -class HTCopyEnchantingEmiRecipe(category: HTEmiRecipeCategory, id: ResourceLocation) : - HTEmiRecipe(category, id, HTCopyEnchantingRecipe) { +class HTCopyEnchantingEmiRecipe(id: ResourceLocation) : + HTEmiRecipe(RagiumEmiRecipeCategories.ENCHANTING, id, HTCopyEnchantingRecipe) { companion object { @JvmStatic private val UNIQUE_ID: Int = EmiUtil.RANDOM.nextInt() diff --git a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/custom/HTExpExtractingEmiRecipe.kt b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/custom/HTExpExtractingEmiRecipe.kt index fa9c628b2..4396ca309 100644 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/custom/HTExpExtractingEmiRecipe.kt +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/custom/HTExpExtractingEmiRecipe.kt @@ -4,7 +4,7 @@ import dev.emi.emi.EmiUtil import dev.emi.emi.api.stack.EmiStack import dev.emi.emi.api.widget.WidgetHolder import hiiragi283.ragium.client.integration.emi.addArrow -import hiiragi283.ragium.client.integration.emi.category.HTEmiRecipeCategory +import hiiragi283.ragium.client.integration.emi.category.RagiumEmiRecipeCategories import hiiragi283.ragium.client.integration.emi.recipe.HTEmiRecipe import hiiragi283.ragium.client.integration.emi.toFluidEmi import hiiragi283.ragium.common.recipe.machine.HTExpExtractingRecipe @@ -13,8 +13,8 @@ import net.minecraft.resources.ResourceLocation import net.minecraft.world.item.Items import net.minecraft.world.item.crafting.RecipeHolder -class HTExpExtractingEmiRecipe(category: HTEmiRecipeCategory, id: ResourceLocation) : - HTEmiRecipe(category, id, HTExpExtractingRecipe) { +class HTExpExtractingEmiRecipe(id: ResourceLocation) : + HTEmiRecipe(RagiumEmiRecipeCategories.EXTRACTING, id, HTExpExtractingRecipe) { companion object { @JvmStatic private val UNIQUE_ID: Int = EmiUtil.RANDOM.nextInt() diff --git a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/custom/HTMachineUpgradeEmiRecipe.kt b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/custom/HTMachineUpgradeEmiRecipe.kt index e8c6e0236..7da61b240 100644 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/custom/HTMachineUpgradeEmiRecipe.kt +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/custom/HTMachineUpgradeEmiRecipe.kt @@ -7,14 +7,14 @@ import dev.emi.emi.api.recipe.EmiResolutionRecipe import dev.emi.emi.api.stack.EmiIngredient import dev.emi.emi.api.stack.EmiStack import hiiragi283.ragium.api.RagiumPlatform +import hiiragi283.ragium.client.integration.emi.category.RagiumEmiRecipeCategories import hiiragi283.ragium.setup.RagiumDataComponents import net.minecraft.core.Holder import net.minecraft.core.HolderSet import net.minecraft.resources.ResourceLocation import net.minecraft.world.level.block.entity.BlockEntityType -class HTMachineUpgradeEmiRecipe(private val category: EmiRecipeCategory, private val id: ResourceLocation, private val upgrade: EmiStack) : - EmiIngredientRecipe() { +class HTMachineUpgradeEmiRecipe(private val id: ResourceLocation, private val upgrade: EmiStack) : EmiIngredientRecipe() { override fun getIngredient(): EmiIngredient = upgrade override fun getStacks(): List = upgrade @@ -30,7 +30,7 @@ class HTMachineUpgradeEmiRecipe(private val category: EmiRecipeCategory, private override fun getRecipeContext(stack: EmiStack, offset: Int): EmiRecipe = EmiResolutionRecipe(upgrade, stack) - override fun getCategory(): EmiRecipeCategory = category + override fun getCategory(): EmiRecipeCategory = RagiumEmiRecipeCategories.MACHINE_UPGRADE override fun getId(): ResourceLocation = id } diff --git a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/device/HTRockGeneratingEmiRecipe.kt b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/device/HTRockGeneratingEmiRecipe.kt index a086d1d0d..7ecb081c0 100644 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/device/HTRockGeneratingEmiRecipe.kt +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/device/HTRockGeneratingEmiRecipe.kt @@ -4,13 +4,13 @@ import dev.emi.emi.api.widget.WidgetHolder import hiiragi283.ragium.api.recipe.multi.HTRockGeneratingRecipe import hiiragi283.ragium.client.integration.emi.addArrow import hiiragi283.ragium.client.integration.emi.addPlus -import hiiragi283.ragium.client.integration.emi.category.HTEmiRecipeCategory +import hiiragi283.ragium.client.integration.emi.category.RagiumEmiRecipeCategories import hiiragi283.ragium.client.integration.emi.recipe.HTEmiHolderRecipe import net.minecraft.world.item.crafting.RecipeHolder import kotlin.jvm.optionals.getOrNull -class HTRockGeneratingEmiRecipe(category: HTEmiRecipeCategory, holder: RecipeHolder) : - HTEmiHolderRecipe(category, holder) { +class HTRockGeneratingEmiRecipe(holder: RecipeHolder) : + HTEmiHolderRecipe(RagiumEmiRecipeCategories.ROCK_GENERATING, holder) { init { addInput(recipe.left) recipe.right.map(::addInput, ::addInput) diff --git a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/generator/HTBiomassEmiRecipe.kt b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/generator/HTBiomassEmiRecipe.kt index d15d02f78..20821854e 100644 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/generator/HTBiomassEmiRecipe.kt +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/generator/HTBiomassEmiRecipe.kt @@ -2,13 +2,13 @@ package hiiragi283.ragium.client.integration.emi.recipe.generator import dev.emi.emi.api.widget.WidgetHolder import hiiragi283.ragium.client.integration.emi.addArrow -import hiiragi283.ragium.client.integration.emi.category.HTEmiRecipeCategory +import hiiragi283.ragium.client.integration.emi.category.RagiumEmiRecipeCategories import hiiragi283.ragium.client.integration.emi.data.HTBiomassRecipeData import hiiragi283.ragium.client.integration.emi.recipe.HTEmiRecipe import net.minecraft.resources.ResourceLocation -class HTBiomassEmiRecipe(category: HTEmiRecipeCategory, id: ResourceLocation, recipe: HTBiomassRecipeData) : - HTEmiRecipe(category, id, recipe) { +class HTBiomassEmiRecipe(id: ResourceLocation, recipe: HTBiomassRecipeData) : + HTEmiRecipe(RagiumEmiRecipeCategories.BIOMASS, id, recipe) { init { addInput(recipe.input) diff --git a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/generator/HTCoolantEmiRecipe.kt b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/generator/HTCoolantEmiRecipe.kt index ca49ff40c..93b083b5e 100644 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/generator/HTCoolantEmiRecipe.kt +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/generator/HTCoolantEmiRecipe.kt @@ -2,12 +2,12 @@ package hiiragi283.ragium.client.integration.emi.recipe.generator import dev.emi.emi.api.stack.EmiStack import dev.emi.emi.api.widget.WidgetHolder -import hiiragi283.ragium.client.integration.emi.category.HTEmiRecipeCategory +import hiiragi283.ragium.client.integration.emi.category.RagiumEmiRecipeCategories import hiiragi283.ragium.client.integration.emi.recipe.HTEmiRecipe import net.minecraft.resources.ResourceLocation -class HTCoolantEmiRecipe(category: HTEmiRecipeCategory, id: ResourceLocation, recipe: EmiStack) : - HTEmiRecipe(category, id, recipe) { +class HTCoolantEmiRecipe(id: ResourceLocation, recipe: EmiStack) : + HTEmiRecipe(RagiumEmiRecipeCategories.COOLANT, id, recipe) { init { addInput(recipe) } diff --git a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTAlloyingEmiRecipe.kt b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTAlloyingEmiRecipe.kt index 0fa6c5f40..cc3ccfe00 100644 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTAlloyingEmiRecipe.kt +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTAlloyingEmiRecipe.kt @@ -3,13 +3,13 @@ package hiiragi283.ragium.client.integration.emi.recipe.processor import dev.emi.emi.api.render.EmiTexture import dev.emi.emi.api.widget.WidgetHolder import hiiragi283.ragium.client.integration.emi.addArrow -import hiiragi283.ragium.client.integration.emi.category.HTEmiRecipeCategory +import hiiragi283.ragium.client.integration.emi.category.RagiumEmiRecipeCategories import hiiragi283.ragium.client.integration.emi.recipe.HTEmiHolderRecipe import hiiragi283.ragium.impl.recipe.HTAlloyingRecipe import net.minecraft.world.item.crafting.RecipeHolder -class HTAlloyingEmiRecipe(category: HTEmiRecipeCategory, holder: RecipeHolder) : - HTEmiHolderRecipe(category, holder) { +class HTAlloyingEmiRecipe(holder: RecipeHolder) : + HTEmiHolderRecipe(RagiumEmiRecipeCategories.ALLOYING, holder) { init { recipe.ingredients.forEach(::addInput) diff --git a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTBrewingEmiRecipe.kt b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTBrewingEmiRecipe.kt index 403bd3106..edc062592 100644 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTBrewingEmiRecipe.kt +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTBrewingEmiRecipe.kt @@ -3,15 +3,15 @@ package hiiragi283.ragium.client.integration.emi.recipe.processor import dev.emi.emi.api.stack.EmiIngredient import dev.emi.emi.api.stack.EmiStack import hiiragi283.ragium.api.item.alchemy.HTPotionHelper -import hiiragi283.ragium.client.integration.emi.category.HTEmiRecipeCategory +import hiiragi283.ragium.client.integration.emi.category.RagiumEmiRecipeCategories import hiiragi283.ragium.client.integration.emi.recipe.base.HTCombineEmiRecipe import hiiragi283.ragium.client.integration.emi.toEmi import hiiragi283.ragium.impl.recipe.HTBrewingRecipe import hiiragi283.ragium.setup.RagiumItems import net.minecraft.world.item.crafting.RecipeHolder -class HTBrewingEmiRecipe(category: HTEmiRecipeCategory, holder: RecipeHolder) : - HTCombineEmiRecipe(category, holder) { +class HTBrewingEmiRecipe(holder: RecipeHolder) : + HTCombineEmiRecipe(RagiumEmiRecipeCategories.BREWING, holder) { override fun getFluidIngredient(recipe: HTBrewingRecipe): EmiIngredient = HTBrewingRecipe.FLUID_INGREDIENT.toEmi() override fun getResult(recipe: HTBrewingRecipe): EmiStack = diff --git a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTEnchantingEmiRecipe.kt b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTEnchantingEmiRecipe.kt index cef33bb40..d00e5e4a3 100644 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTEnchantingEmiRecipe.kt +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTEnchantingEmiRecipe.kt @@ -3,7 +3,7 @@ package hiiragi283.ragium.client.integration.emi.recipe.processor import dev.emi.emi.api.stack.EmiIngredient import dev.emi.emi.api.stack.EmiStack import hiiragi283.ragium.api.item.createEnchantedBook -import hiiragi283.ragium.client.integration.emi.category.HTEmiRecipeCategory +import hiiragi283.ragium.client.integration.emi.category.RagiumEmiRecipeCategories import hiiragi283.ragium.client.integration.emi.recipe.base.HTCombineEmiRecipe import hiiragi283.ragium.client.integration.emi.toEmi import hiiragi283.ragium.client.integration.emi.toFluidEmi @@ -11,8 +11,8 @@ import hiiragi283.ragium.impl.recipe.HTEnchantingRecipe import hiiragi283.ragium.setup.RagiumFluidContents import net.minecraft.world.item.crafting.RecipeHolder -class HTEnchantingEmiRecipe(category: HTEmiRecipeCategory, holder: RecipeHolder) : - HTCombineEmiRecipe(category, holder) { +class HTEnchantingEmiRecipe(holder: RecipeHolder) : + HTCombineEmiRecipe(RagiumEmiRecipeCategories.ENCHANTING, holder) { override fun getFluidIngredient(recipe: HTEnchantingRecipe): EmiIngredient = RagiumFluidContents.EXPERIENCE.toFluidEmi(recipe.getRequiredExpFluid()) diff --git a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTItemWithCatalystEmiRecipe.kt b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTItemWithCatalystEmiRecipe.kt index 23754b9ed..2e9481ddb 100644 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTItemWithCatalystEmiRecipe.kt +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTItemWithCatalystEmiRecipe.kt @@ -3,6 +3,7 @@ package hiiragi283.ragium.client.integration.emi.recipe.processor import dev.emi.emi.api.widget.WidgetHolder import hiiragi283.ragium.client.integration.emi.addArrow import hiiragi283.ragium.client.integration.emi.category.HTEmiRecipeCategory +import hiiragi283.ragium.client.integration.emi.category.RagiumEmiRecipeCategories import hiiragi283.ragium.client.integration.emi.recipe.base.HTMultiOutputsEmiRecipe import hiiragi283.ragium.impl.recipe.HTCompressingRecipe import hiiragi283.ragium.impl.recipe.HTExtractingRecipe @@ -13,6 +14,20 @@ import kotlin.jvm.optionals.getOrNull class HTItemWithCatalystEmiRecipe(category: HTEmiRecipeCategory, holder: RecipeHolder) : HTMultiOutputsEmiRecipe(category, holder) { + companion object { + @JvmStatic + fun compressing(holder: RecipeHolder): HTItemWithCatalystEmiRecipe = + HTItemWithCatalystEmiRecipe(RagiumEmiRecipeCategories.COMPRESSING, holder) + + @JvmStatic + fun extracting(holder: RecipeHolder): HTItemWithCatalystEmiRecipe = + HTItemWithCatalystEmiRecipe(RagiumEmiRecipeCategories.EXTRACTING, holder) + + @JvmStatic + fun simulating(holder: RecipeHolder): HTItemWithCatalystEmiRecipe = + HTItemWithCatalystEmiRecipe(RagiumEmiRecipeCategories.SIMULATING, holder) + } + override fun initInputs() { when (recipe) { is HTCompressingRecipe -> { diff --git a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTMeltingEmiRecipe.kt b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTMeltingEmiRecipe.kt index a91f74d0c..ca38e7249 100644 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTMeltingEmiRecipe.kt +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTMeltingEmiRecipe.kt @@ -5,13 +5,13 @@ import dev.emi.emi.api.stack.EmiStack import dev.emi.emi.api.widget.WidgetHolder import hiiragi283.ragium.client.integration.emi.addArrow import hiiragi283.ragium.client.integration.emi.addTank -import hiiragi283.ragium.client.integration.emi.category.HTEmiRecipeCategory +import hiiragi283.ragium.client.integration.emi.category.RagiumEmiRecipeCategories import hiiragi283.ragium.client.integration.emi.recipe.HTEmiHolderRecipe import hiiragi283.ragium.impl.recipe.base.HTBasicSingleFluidRecipe import net.minecraft.world.item.crafting.RecipeHolder -class HTMeltingEmiRecipe(category: HTEmiRecipeCategory, holder: RecipeHolder) : - HTEmiHolderRecipe(category, holder) { +class HTMeltingEmiRecipe(holder: RecipeHolder) : + HTEmiHolderRecipe(RagiumEmiRecipeCategories.MELTING, holder) { init { addInput(recipe.ingredient) diff --git a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTMixingEmiRecipe.kt b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTMixingEmiRecipe.kt index a55b191fe..fdeae2949 100644 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTMixingEmiRecipe.kt +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTMixingEmiRecipe.kt @@ -2,15 +2,15 @@ package hiiragi283.ragium.client.integration.emi.recipe.processor import dev.emi.emi.api.widget.WidgetHolder import hiiragi283.ragium.client.integration.emi.addArrow -import hiiragi283.ragium.client.integration.emi.category.HTEmiRecipeCategory +import hiiragi283.ragium.client.integration.emi.category.RagiumEmiRecipeCategories import hiiragi283.ragium.client.integration.emi.recipe.base.HTMultiOutputsEmiRecipe import hiiragi283.ragium.impl.recipe.HTMixingRecipe import hiiragi283.ragium.impl.recipe.HTSimpleMixingRecipe import hiiragi283.ragium.impl.recipe.base.HTBasicComplexRecipe import net.minecraft.world.item.crafting.RecipeHolder -class HTMixingEmiRecipe(category: HTEmiRecipeCategory, holder: RecipeHolder) : - HTMultiOutputsEmiRecipe(category, holder) { +class HTMixingEmiRecipe(holder: RecipeHolder) : + HTMultiOutputsEmiRecipe(RagiumEmiRecipeCategories.MIXING, holder) { override fun initInputs() { when (recipe) { is HTMixingRecipe -> { diff --git a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTPlantingEmiRecipe.kt b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTPlantingEmiRecipe.kt index b724cc64b..c3c1cde04 100644 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTPlantingEmiRecipe.kt +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTPlantingEmiRecipe.kt @@ -5,7 +5,7 @@ import dev.emi.emi.api.widget.WidgetHolder import hiiragi283.ragium.api.recipe.extra.HTPlantingRecipe import hiiragi283.ragium.client.integration.emi.addArrow import hiiragi283.ragium.client.integration.emi.addPlus -import hiiragi283.ragium.client.integration.emi.category.HTEmiRecipeCategory +import hiiragi283.ragium.client.integration.emi.category.RagiumEmiRecipeCategories import hiiragi283.ragium.client.integration.emi.recipe.HTEmiHolderRecipe import hiiragi283.ragium.client.integration.emi.toEmi import net.minecraft.resources.ResourceKey @@ -13,8 +13,8 @@ import net.minecraft.tags.TagKey import net.minecraft.world.item.Item import net.minecraft.world.item.crafting.RecipeHolder -class HTPlantingEmiRecipe(category: HTEmiRecipeCategory, holder: RecipeHolder) : - HTEmiHolderRecipe(category, holder) { +class HTPlantingEmiRecipe(holder: RecipeHolder) : + HTEmiHolderRecipe(RagiumEmiRecipeCategories.PLANTING, holder) { init { recipe.seed .unwrap() diff --git a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTRefiningEmiRecipe.kt b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTRefiningEmiRecipe.kt index 8670a9393..a5f724ffc 100644 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTRefiningEmiRecipe.kt +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTRefiningEmiRecipe.kt @@ -3,14 +3,14 @@ package hiiragi283.ragium.client.integration.emi.recipe.processor import dev.emi.emi.api.widget.WidgetHolder import hiiragi283.ragium.client.integration.emi.addArrow import hiiragi283.ragium.client.integration.emi.addTank -import hiiragi283.ragium.client.integration.emi.category.HTEmiRecipeCategory +import hiiragi283.ragium.client.integration.emi.category.RagiumEmiRecipeCategories import hiiragi283.ragium.client.integration.emi.recipe.HTEmiHolderRecipe import hiiragi283.ragium.impl.recipe.HTRefiningRecipe import net.minecraft.world.item.crafting.RecipeHolder import kotlin.jvm.optionals.getOrNull -class HTRefiningEmiRecipe(category: HTEmiRecipeCategory, holder: RecipeHolder) : - HTEmiHolderRecipe(category, holder) { +class HTRefiningEmiRecipe(holder: RecipeHolder) : + HTEmiHolderRecipe(RagiumEmiRecipeCategories.REFINING, holder) { init { addInput(recipe.fluidIngredient) addCatalyst(recipe.itemIngredient.getOrNull()) diff --git a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTSingleExtraItemEmiRecipe.kt b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTSingleExtraItemEmiRecipe.kt index f325c9102..1e860da4b 100644 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTSingleExtraItemEmiRecipe.kt +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTSingleExtraItemEmiRecipe.kt @@ -3,6 +3,7 @@ package hiiragi283.ragium.client.integration.emi.recipe.processor import dev.emi.emi.api.widget.WidgetHolder import hiiragi283.ragium.client.integration.emi.addArrow import hiiragi283.ragium.client.integration.emi.category.HTEmiRecipeCategory +import hiiragi283.ragium.client.integration.emi.category.RagiumEmiRecipeCategories import hiiragi283.ragium.client.integration.emi.recipe.HTEmiHolderRecipe import hiiragi283.ragium.client.integration.emi.toEmi import hiiragi283.ragium.impl.recipe.base.HTBasicSingleExtraItemRecipe @@ -12,6 +13,16 @@ import kotlin.jvm.optionals.getOrNull class HTSingleExtraItemEmiRecipe(category: HTEmiRecipeCategory, holder: RecipeHolder) : HTEmiHolderRecipe(category, holder) { + companion object { + @JvmStatic + fun crushing(holder: RecipeHolder): HTSingleExtraItemEmiRecipe = + HTSingleExtraItemEmiRecipe(RagiumEmiRecipeCategories.CRUSHING, holder) + + @JvmStatic + fun cutting(holder: RecipeHolder): HTSingleExtraItemEmiRecipe = + HTSingleExtraItemEmiRecipe(RagiumEmiRecipeCategories.CUTTING, holder) + } + init { addInput(recipe.ingredient) From 3bc13897fe324d4b9174a9999ace8edeeb2df6fe Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Wed, 10 Dec 2025 04:11:55 +0900 Subject: [PATCH 03/49] refactor: removed parameter from HTIngredient.getRequiredAmount(STACK) --- .../ragium/api/recipe/ingredient/HTFluidIngredient.kt | 2 -- .../ragium/api/recipe/ingredient/HTIngredient.kt | 4 +--- .../ragium/api/recipe/ingredient/HTItemIngredient.kt | 4 +--- .../ragium/api/recipe/input/HTRecipeInput.kt | 2 +- .../ragium/api/recipe/multi/HTCombineRecipe.kt | 6 +++--- .../ragium/api/recipe/multi/HTComplexRecipe.kt | 6 ++---- .../ragium/api/recipe/multi/HTRockGeneratingRecipe.kt | 10 +++++----- .../generator/base/HTItemGeneratorBlockEntity.kt | 2 +- .../entity/processor/HTAlloySmelterBlockEntity.kt | 2 +- .../entity/processor/HTCuttingMachineBlockEntity.kt | 2 +- .../block/entity/processor/HTMelterBlockEntity.kt | 2 +- .../block/entity/processor/HTMixerBlockEntity.kt | 7 +++---- .../block/entity/processor/HTRefineryBlockEntity.kt | 3 +-- .../processor/base/HTAbstractCombinerBlockEntity.kt | 7 +++---- .../processor/base/HTAbstractCrusherBlockEntity.kt | 2 +- .../processor/base/HTAbstractSmelterBlockEntity.kt | 2 +- .../processor/base/HTItemWithCatalystBlockEntity.kt | 4 ++-- .../ragium/common/recipe/HTVanillaSingleItemRecipe.kt | 2 +- .../common/recipe/machine/HTCopyEnchantingRecipe.kt | 6 +++--- .../common/recipe/machine/HTExpExtractingRecipe.kt | 2 +- .../hiiragi283/ragium/common/util/HTStackSlotHelper.kt | 4 ++-- .../hiiragi283/ragium/impl/recipe/HTBrewingRecipe.kt | 2 +- .../ragium/impl/recipe/HTCompressingRecipe.kt | 3 +-- .../ragium/impl/recipe/HTEnchantingRecipe.kt | 2 +- .../ragium/impl/recipe/HTExtractingRecipe.kt | 3 +-- .../hiiragi283/ragium/impl/recipe/HTMixingRecipe.kt | 6 ++---- .../hiiragi283/ragium/impl/recipe/HTRefiningRecipe.kt | 8 +++----- .../ragium/impl/recipe/HTSimpleMixingRecipe.kt | 10 ++++------ .../ragium/impl/recipe/HTSimulatingRecipe.kt | 3 +-- .../ragium/impl/recipe/base/HTBasicCombineRecipe.kt | 4 ++-- .../impl/recipe/base/HTBasicSingleExtraItemRecipe.kt | 2 +- .../impl/recipe/base/HTBasicSingleFluidRecipe.kt | 2 +- 32 files changed, 53 insertions(+), 73 deletions(-) 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 de0bc9629..a23e58e03 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/recipe/ingredient/HTFluidIngredient.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/recipe/ingredient/HTFluidIngredient.kt @@ -40,8 +40,6 @@ data class HTFluidIngredient(private val ingredient: FluidIngredient, private va 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 getRequiredAmount(): Int = this.amount override fun unwrap(): Either, Int>, List> = when (ingredient) { 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 be0652f7b..6bebf9eca 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/recipe/ingredient/HTIngredient.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/recipe/ingredient/HTIngredient.kt @@ -24,10 +24,8 @@ interface HTIngredient> : Predic fun testOnlyType(stack: STACK): Boolean /** - * 指定された[stack]から,この[HTIngredient]に合致する数量を返します。 + * この[HTIngredient]に合致する数量を返します。 */ - fun getRequiredAmount(stack: STACK): Int - 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 688723ca9..2b4c1b0f4 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/recipe/ingredient/HTItemIngredient.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/recipe/ingredient/HTItemIngredient.kt @@ -21,7 +21,7 @@ import java.util.function.IntUnaryOperator */ class HTItemIngredient(private val ingredient: Ingredient, private val count: Int) : HTIngredient { fun interface CountGetter { - fun getRequiredCount(stack: ImmutableItemStack): Int + fun getRequiredCount(): Int } companion object { @@ -57,8 +57,6 @@ class HTItemIngredient(private val ingredient: Ingredient, private val count: In 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 getRequiredAmount(): Int = this.count override fun unwrap(): Either, Int>, List> { diff --git a/src/api/kotlin/hiiragi283/ragium/api/recipe/input/HTRecipeInput.kt b/src/api/kotlin/hiiragi283/ragium/api/recipe/input/HTRecipeInput.kt index 8502617a7..ecf5935e5 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/recipe/input/HTRecipeInput.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/recipe/input/HTRecipeInput.kt @@ -40,7 +40,7 @@ data class HTRecipeInput private constructor(val items: List { - fun getLeftRequiredCount(stack: ImmutableItemStack): Int + fun getLeftRequiredCount(): Int - fun getRightRequiredCount(stack: ImmutableItemStack): Int + fun getRightRequiredCount(): Int - fun getRequiredAmount(input: HTRecipeInput, stack: ImmutableFluidStack): Int + fun getRequiredAmount(input: HTRecipeInput): Int override fun matches(input: HTRecipeInput, level: Level): Boolean { val left: ImmutableItemStack = input.item(0) ?: return false 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 fea756b4a..a21a235f4 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,12 @@ package hiiragi283.ragium.api.recipe.multi import hiiragi283.ragium.api.recipe.HTFluidRecipe -import hiiragi283.ragium.api.stack.ImmutableFluidStack -import hiiragi283.ragium.api.stack.ImmutableItemStack /** * 複数のインプット(アイテム,液体)から複数の完成品(アイテム,液体)を生産するレシピ */ interface HTComplexRecipe : HTFluidRecipe { - fun getRequiredCount(index: Int, stack: ImmutableItemStack): Int + fun getRequiredCount(index: Int): Int - fun getRequiredAmount(index: Int, stack: ImmutableFluidStack): Int + fun getRequiredAmount(index: Int): Int } 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 b711d92a7..d0048f815 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/recipe/multi/HTRockGeneratingRecipe.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/recipe/multi/HTRockGeneratingRecipe.kt @@ -21,14 +21,14 @@ class HTRockGeneratingRecipe( val bottom: Optional, val result: HTItemResult, ) : HTComplexRecipe { - override fun getRequiredCount(index: Int, stack: ImmutableItemStack): Int = when (index) { - 1 -> right.left().map { ingredient: HTItemIngredient -> ingredient.getRequiredAmount(stack) } + override fun getRequiredCount(index: Int): Int = when (index) { + 1 -> right.left().map(HTItemIngredient::getRequiredAmount) else -> Optional.empty() }.orElse(0) - override fun getRequiredAmount(index: Int, stack: ImmutableFluidStack): Int = when (index) { - 0 -> left.getRequiredAmount(stack) - 1 -> right.right().map { ingredient: HTFluidIngredient -> ingredient.getRequiredAmount(stack) }.orElse(0) + override fun getRequiredAmount(index: Int): Int = when (index) { + 0 -> left.getRequiredAmount() + 1 -> right.right().map(HTFluidIngredient::getRequiredAmount).orElse(0) else -> 0 } diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/generator/base/HTItemGeneratorBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/generator/base/HTItemGeneratorBlockEntity.kt index 30de989d4..8649f53fe 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/generator/base/HTItemGeneratorBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/generator/base/HTItemGeneratorBlockEntity.kt @@ -59,7 +59,7 @@ abstract class HTItemGeneratorBlockEntity(blockHolder: Holder, pos: Block val remainder: ImmutableItemStack? = remainderSlot.insert(stack, HTStorageAction.EXECUTE, HTStorageAccess.INTERNAL) HTItemDropHelper.dropStackAt(level, pos, remainder) }, - { 1 }, + 1, HTStorageAction.EXECUTE, ) } 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 1123f914a..62d0062df 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 @@ -64,7 +64,7 @@ class HTAlloySmelterBlockEntity(pos: BlockPos, state: BlockState) : // 実際にインプットを減らす val ingredients: List = recipe.ingredients HTRecipeInput.getMatchingSlots(ingredients, input.items).forEachIndexed { index: Int, slot: Int -> - HTStackSlotHelper.shrinkStack(inputSlots[slot], ingredients[index]::getRequiredAmount, HTStorageAction.EXECUTE) + inputSlots[slot].extract(ingredients[index].getRequiredAmount(), HTStorageAction.EXECUTE, HTStorageAccess.INTERNAL) } // SEを鳴らす level.playSound(null, pos, SoundEvents.FIRE_EXTINGUISH, SoundSource.BLOCKS, 0.5f, 0.5f) 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 f659b6598..bf2b53d5e 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 @@ -70,7 +70,7 @@ class HTCuttingMachineBlockEntity(pos: BlockPos, state: BlockState) : extraSlot.insert(recipe.assembleExtraItem(input, access), HTStorageAction.EXECUTE, HTStorageAccess.INTERNAL) } // インプットを減らす - HTStackSlotHelper.shrinkStack(inputSlot, recipe::getRequiredCount, HTStorageAction.EXECUTE) + inputSlot.extract(recipe.getRequiredCount(), HTStorageAction.EXECUTE, HTStorageAccess.INTERNAL) // SEを鳴らす level.playSound(null, pos, SoundEvents.UI_STONECUTTER_TAKE_RESULT, SoundSource.BLOCKS, 1f, 1f) } 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 5e4ec61c2..30d7d9200 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 @@ -81,7 +81,7 @@ class HTMelterBlockEntity(pos: BlockPos, state: BlockState) : val remainder: ImmutableItemStack? = remainderSlot.insert(stack, HTStorageAction.EXECUTE, HTStorageAccess.INTERNAL) HTItemDropHelper.dropStackAt(level, pos, remainder) }, - recipe::getRequiredCount, + recipe.getRequiredCount(), HTStorageAction.EXECUTE, ) // SEを鳴らす 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 a40512afe..10ffb7abc 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 @@ -1,10 +1,10 @@ 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.HTRecipeInput import hiiragi283.ragium.api.recipe.multi.HTComplexRecipe +import hiiragi283.ragium.api.storage.HTStorageAccess import hiiragi283.ragium.api.storage.HTStorageAction import hiiragi283.ragium.api.storage.holder.HTSlotInfo import hiiragi283.ragium.api.util.HTContentListener @@ -14,7 +14,6 @@ import hiiragi283.ragium.common.storage.fluid.tank.HTVariableFluidTank import hiiragi283.ragium.common.storage.holder.HTBasicFluidTankHolder import hiiragi283.ragium.common.storage.holder.HTBasicItemSlotHolder import hiiragi283.ragium.common.storage.item.slot.HTBasicItemSlot -import hiiragi283.ragium.common.util.HTStackSlotHelper import hiiragi283.ragium.setup.RagiumBlocks import net.minecraft.core.BlockPos import net.minecraft.server.level.ServerLevel @@ -62,7 +61,7 @@ class HTMixerBlockEntity(pos: BlockPos, state: BlockState) : ) { super.completeRecipe(level, pos, state, input, recipe) // 実際にインプットを減らす - HTStackSlotHelper.shrinkStack(inputSlot, recipe::getRequiredCount.partially1(0), HTStorageAction.EXECUTE) - HTStackSlotHelper.shrinkStack(inputTank, recipe::getRequiredAmount.partially1(0), HTStorageAction.EXECUTE) + inputSlot.extract(recipe.getRequiredCount(0), HTStorageAction.EXECUTE, HTStorageAccess.INTERNAL) + inputTank.extract(recipe.getRequiredAmount(0), 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 d76522016..3ca2edb33 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 @@ -1,7 +1,6 @@ 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.HTRecipeInput import hiiragi283.ragium.api.recipe.multi.HTComplexRecipe @@ -96,7 +95,7 @@ class HTRefineryBlockEntity(pos: BlockPos, state: BlockState) : outputSlot.insert(recipe.assembleItem(input, access), HTStorageAction.EXECUTE, HTStorageAccess.INTERNAL) outputTank.insert(recipe.assembleFluid(input, access), HTStorageAction.EXECUTE, HTStorageAccess.INTERNAL) // インプットを減らす - HTStackSlotHelper.shrinkStack(inputTank, recipe::getRequiredAmount.partially1(0), HTStorageAction.EXECUTE) + inputTank.extract(recipe.getRequiredAmount(0), HTStorageAction.EXECUTE, HTStorageAccess.INTERNAL) // SEを鳴らす level.playSound(null, pos, SoundEvents.BREWING_STAND_BREW, SoundSource.BLOCKS, 1f, 0.5f) } 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 eeadb1652..20bd3bc41 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 @@ -1,7 +1,6 @@ package hiiragi283.ragium.common.block.entity.processor.base 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.HTRecipeInput @@ -99,8 +98,8 @@ abstract class HTAbstractCombinerBlockEntity : HTProcessorBlockEntity.Cached, pos: Blo // 実際にアウトプットに搬出する completeOutput(level, input, recipe) // インプットを減らす - HTStackSlotHelper.shrinkStack(inputSlot, recipe::getRequiredCount, HTStorageAction.EXECUTE) + inputSlot.extract(recipe.getRequiredCount(), HTStorageAction.EXECUTE, HTStorageAccess.INTERNAL) // 潤滑油があれば減らす if (hasUpgrade(RagiumItems.EFFICIENT_CRUSH_UPGRADE)) { inputTank.extract(RagiumConst.LUBRICANT_CONSUME, HTStorageAction.EXECUTE, HTStorageAccess.INTERNAL) 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 1de661727..4311efd6a 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 @@ -86,7 +86,7 @@ abstract class HTAbstractSmelterBlockEntity(blockHolder: Holder, pos: Blo // 実際にアウトプットに搬出する outputSlot.insert(recipe.assembleItem(input, level.registryAccess()), HTStorageAction.EXECUTE, HTStorageAccess.INTERNAL) // インプットを減らす - HTStackSlotHelper.shrinkStack(inputSlot, recipe::getRequiredCount, HTStorageAction.EXECUTE) + inputSlot.extract(recipe.getRequiredCount(), HTStorageAction.EXECUTE, HTStorageAccess.INTERNAL) // SEを鳴らす level.playSound(null, pos, SoundEvents.FIRE_EXTINGUISH, SoundSource.BLOCKS, 0.5f, 1f) } diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/base/HTItemWithCatalystBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/base/HTItemWithCatalystBlockEntity.kt index 9f2241c50..d70dd6023 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/base/HTItemWithCatalystBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/base/HTItemWithCatalystBlockEntity.kt @@ -3,13 +3,13 @@ package hiiragi283.ragium.common.block.entity.processor.base import hiiragi283.ragium.api.recipe.HTRecipeFinder import hiiragi283.ragium.api.recipe.input.HTRecipeInput import hiiragi283.ragium.api.recipe.multi.HTItemWithCatalystRecipe +import hiiragi283.ragium.api.storage.HTStorageAccess import hiiragi283.ragium.api.storage.HTStorageAction import hiiragi283.ragium.api.storage.holder.HTSlotInfo import hiiragi283.ragium.api.util.HTContentListener import hiiragi283.ragium.common.inventory.HTSlotHelper import hiiragi283.ragium.common.storage.holder.HTBasicItemSlotHolder import hiiragi283.ragium.common.storage.item.slot.HTBasicItemSlot -import hiiragi283.ragium.common.util.HTStackSlotHelper import net.minecraft.core.BlockPos import net.minecraft.core.Holder import net.minecraft.server.level.ServerLevel @@ -53,6 +53,6 @@ abstract class HTItemWithCatalystBlockEntity( ) { super.completeRecipe(level, pos, state, input, recipe) // 実際にインプットを減らす - HTStackSlotHelper.shrinkStack(inputSlot, recipe::getRequiredCount, HTStorageAction.EXECUTE) + inputSlot.extract(recipe.getRequiredCount(), HTStorageAction.EXECUTE, HTStorageAccess.INTERNAL) } } diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/HTVanillaSingleItemRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/HTVanillaSingleItemRecipe.kt index b33452ed2..e61c50812 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/recipe/HTVanillaSingleItemRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/HTVanillaSingleItemRecipe.kt @@ -35,5 +35,5 @@ open class HTVanillaSingleItemRecipe>( override fun test(stack: ImmutableItemStack): Boolean = ingredient.test(stack) - override fun getRequiredCount(stack: ImmutableItemStack): Int = ingredient.getRequiredAmount(stack) + override fun getRequiredCount(): Int = ingredient.getRequiredAmount() } 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 b3e21d45e..7625ac697 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/recipe/machine/HTCopyEnchantingRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/machine/HTCopyEnchantingRecipe.kt @@ -16,11 +16,11 @@ import net.minecraft.world.item.enchantment.EnchantmentHelper import net.minecraft.world.item.enchantment.ItemEnchantments object HTCopyEnchantingRecipe : HTCombineRecipe { - override fun getLeftRequiredCount(stack: ImmutableItemStack): Int = 1 + override fun getLeftRequiredCount(): Int = 1 - override fun getRightRequiredCount(stack: ImmutableItemStack): Int = 0 + override fun getRightRequiredCount(): Int = 0 - override fun getRequiredAmount(input: HTRecipeInput, stack: ImmutableFluidStack): Int { + override fun getRequiredAmount(input: HTRecipeInput): Int { val tool: ImmutableItemStack = input.items[0]?.copyWithAmount(1) ?: return 0 val book: ImmutableItemStack = input.items[1] ?: return 0 return getFilteredEnchantments(tool, book) 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 3b47f88f6..3b37e748b 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/recipe/machine/HTExpExtractingRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/machine/HTExpExtractingRecipe.kt @@ -45,5 +45,5 @@ data object HTExpExtractingRecipe : HTItemWithCatalystRecipe { override fun getType(): RecipeType<*> = RagiumRecipeTypes.EXTRACTING.get() - override fun getRequiredCount(stack: ImmutableItemStack): Int = 1 + override fun getRequiredCount(): Int = 1 } diff --git a/src/main/kotlin/hiiragi283/ragium/common/util/HTStackSlotHelper.kt b/src/main/kotlin/hiiragi283/ragium/common/util/HTStackSlotHelper.kt index 6e75f80b3..39caf6471 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/util/HTStackSlotHelper.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/util/HTStackSlotHelper.kt @@ -140,7 +140,7 @@ object HTStackSlotHelper { slot: HTItemSlot, remainderGetter: (ImmutableItemStack) -> ItemStack, stackSetter: (ImmutableItemStack) -> Unit, - ingredient: ToIntFunction, + amount: Int, action: HTStorageAction, ): Int { val stackIn: ImmutableItemStack = slot.getStack() ?: return 0 @@ -150,7 +150,7 @@ object HTStackSlotHelper { .let(ItemStack::toImmutable) ?.let(stackSetter) } - return slot.extract(ingredient.applyAsInt(stackIn), action, HTStorageAccess.INTERNAL)?.amount() ?: 0 + return slot.extract(amount, action, HTStorageAccess.INTERNAL)?.amount() ?: 0 } @JvmStatic diff --git a/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTBrewingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTBrewingRecipe.kt index 8905e6917..94b739030 100644 --- a/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTBrewingRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTBrewingRecipe.kt @@ -26,7 +26,7 @@ class HTBrewingRecipe(itemIngredients: Pair, override fun testFluid(stack: ImmutableFluidStack): Boolean = FLUID_INGREDIENT.test(stack) - override fun getRequiredAmount(input: HTRecipeInput, stack: ImmutableFluidStack): Int = FLUID_INGREDIENT.getRequiredAmount(stack) + override fun getRequiredAmount(input: HTRecipeInput): Int = FLUID_INGREDIENT.getRequiredAmount() override fun assembleItem(input: HTRecipeInput, provider: HolderLookup.Provider): ImmutableItemStack? = HTPotionHelper.createPotion(RagiumItems.POTION_DROP, contents).toImmutable() diff --git a/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTCompressingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTCompressingRecipe.kt index 2d2f5497d..4bdc56344 100644 --- a/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTCompressingRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTCompressingRecipe.kt @@ -4,7 +4,6 @@ import hiiragi283.ragium.api.recipe.RagiumRecipeTypes import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient 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.crafting.RecipeSerializer @@ -24,5 +23,5 @@ class HTCompressingRecipe(ingredient: HTItemIngredient, catalyst: Optional = RagiumRecipeTypes.COMPRESSING.get() - override fun getRequiredCount(stack: ImmutableItemStack): Int = required.getRequiredAmount(stack) + override fun getRequiredCount(): Int = required.getRequiredAmount() } diff --git a/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTEnchantingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTEnchantingRecipe.kt index de5093514..eb5dc03a0 100644 --- a/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTEnchantingRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTEnchantingRecipe.kt @@ -31,7 +31,7 @@ class HTEnchantingRecipe(itemIngredients: Pair = RagiumRecipeTypes.ENCHANTING.get() - override fun getRequiredAmount(input: HTRecipeInput, stack: ImmutableFluidStack): Int = getRequiredExpFluid() + override fun getRequiredAmount(input: HTRecipeInput): 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 fe4402290..490e193a7 100644 --- a/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTExtractingRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTExtractingRecipe.kt @@ -4,7 +4,6 @@ import hiiragi283.ragium.api.recipe.RagiumRecipeTypes import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient 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.crafting.RecipeSerializer @@ -24,5 +23,5 @@ class HTExtractingRecipe(ingredient: HTItemIngredient, catalyst: Optional = RagiumRecipeTypes.EXTRACTING.get() - override fun getRequiredCount(stack: ImmutableItemStack): Int = required.getRequiredAmount(stack) + override fun getRequiredCount(): Int = required.getRequiredAmount() } diff --git a/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTMixingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTMixingRecipe.kt index 13c6ce449..f41862973 100644 --- a/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTMixingRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTMixingRecipe.kt @@ -5,8 +5,6 @@ import hiiragi283.ragium.api.recipe.ingredient.HTFluidIngredient import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient 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 import hiiragi283.ragium.impl.recipe.base.HTBasicComplexRecipe import hiiragi283.ragium.setup.RagiumRecipeSerializers import net.minecraft.world.item.crafting.RecipeSerializer @@ -28,7 +26,7 @@ class HTMixingRecipe( override fun getType(): RecipeType<*> = RagiumRecipeTypes.MIXING.get() - override fun getRequiredCount(index: Int, stack: ImmutableItemStack): Int = itemIngredients[index].getRequiredAmount(stack) + override fun getRequiredCount(index: Int): Int = itemIngredients[index].getRequiredAmount() - override fun getRequiredAmount(index: Int, stack: ImmutableFluidStack): Int = fluidIngredients[index].getRequiredAmount(stack) + override fun getRequiredAmount(index: Int): Int = fluidIngredients[index].getRequiredAmount() } diff --git a/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTRefiningRecipe.kt b/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTRefiningRecipe.kt index e3c6ad290..1a30cc9a5 100644 --- a/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTRefiningRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTRefiningRecipe.kt @@ -5,8 +5,6 @@ import hiiragi283.ragium.api.recipe.ingredient.HTFluidIngredient import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient 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 import hiiragi283.ragium.impl.recipe.base.HTBasicComplexRecipe import hiiragi283.ragium.setup.RagiumRecipeSerializers import net.minecraft.world.item.crafting.RecipeSerializer @@ -26,10 +24,10 @@ class HTRefiningRecipe(val itemIngredient: Optional, val fluid override fun getType(): RecipeType<*> = RagiumRecipeTypes.REFINING.get() - override fun getRequiredCount(index: Int, stack: ImmutableItemStack): Int = 0 + override fun getRequiredCount(index: Int): Int = 0 - override fun getRequiredAmount(index: Int, stack: ImmutableFluidStack): Int = when (index) { - 0 -> fluidIngredient.getRequiredAmount(stack) + override fun getRequiredAmount(index: Int): Int = when (index) { + 0 -> fluidIngredient.getRequiredAmount() else -> 0 } } diff --git a/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTSimpleMixingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTSimpleMixingRecipe.kt index 15dc23dad..9e8dd94aa 100644 --- a/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTSimpleMixingRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTSimpleMixingRecipe.kt @@ -5,8 +5,6 @@ import hiiragi283.ragium.api.recipe.ingredient.HTFluidIngredient import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient 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 import hiiragi283.ragium.impl.recipe.base.HTBasicComplexRecipe import hiiragi283.ragium.setup.RagiumRecipeSerializers import net.minecraft.world.item.crafting.RecipeSerializer @@ -25,13 +23,13 @@ class HTSimpleMixingRecipe(val itemIngredient: HTItemIngredient, val fluidIngred override fun getType(): RecipeType<*> = RagiumRecipeTypes.MIXING.get() - override fun getRequiredCount(index: Int, stack: ImmutableItemStack): Int = when (index) { - 0 -> itemIngredient.getRequiredAmount(stack) + override fun getRequiredCount(index: Int): Int = when (index) { + 0 -> itemIngredient.getRequiredAmount() else -> 0 } - override fun getRequiredAmount(index: Int, stack: ImmutableFluidStack): Int = when (index) { - 0 -> fluidIngredient.getRequiredAmount(stack) + override fun getRequiredAmount(index: Int): Int = when (index) { + 0 -> fluidIngredient.getRequiredAmount() else -> 0 } } diff --git a/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTSimulatingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTSimulatingRecipe.kt index 11b4a444e..efd1cf2db 100644 --- a/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTSimulatingRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTSimulatingRecipe.kt @@ -4,7 +4,6 @@ import hiiragi283.ragium.api.recipe.RagiumRecipeTypes import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient 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.crafting.RecipeSerializer @@ -24,5 +23,5 @@ class HTSimulatingRecipe(catalyst: HTItemIngredient, ingredient: Optional = RagiumRecipeTypes.SIMULATING.get() - override fun getRequiredCount(stack: ImmutableItemStack): Int = optional.map { it.getRequiredAmount(stack) }.orElse(0) + override fun getRequiredCount(): Int = optional.map(HTItemIngredient::getRequiredAmount).orElse(0) } 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 3eecd510a..4674b2f67 100644 --- a/src/main/kotlin/hiiragi283/ragium/impl/recipe/base/HTBasicCombineRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/impl/recipe/base/HTBasicCombineRecipe.kt @@ -6,9 +6,9 @@ import hiiragi283.ragium.api.stack.ImmutableFluidStack import hiiragi283.ragium.api.stack.ImmutableItemStack abstract class HTBasicCombineRecipe(val itemIngredients: Pair) : HTCombineRecipe { - final override fun getLeftRequiredCount(stack: ImmutableItemStack): Int = itemIngredients.first.getRequiredAmount(stack) + final override fun getLeftRequiredCount(): Int = itemIngredients.first.getRequiredAmount() - final override fun getRightRequiredCount(stack: ImmutableItemStack): Int = itemIngredients.second.getRequiredAmount(stack) + final override fun getRightRequiredCount(): Int = itemIngredients.second.getRequiredAmount() final override fun test(left: ImmutableItemStack, right: ImmutableItemStack, fluid: ImmutableFluidStack): Boolean { val bool1: Boolean = itemIngredients.first.test(left) 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 d157ed8be..edfb98372 100644 --- a/src/main/kotlin/hiiragi283/ragium/impl/recipe/base/HTBasicSingleExtraItemRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/impl/recipe/base/HTBasicSingleExtraItemRecipe.kt @@ -16,7 +16,7 @@ abstract class HTBasicSingleExtraItemRecipe(val ingredient: HTItemIngredient, va 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 getRequiredCount(): Int = ingredient.getRequiredAmount() 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 55323a74a..158d7dc01 100644 --- a/src/main/kotlin/hiiragi283/ragium/impl/recipe/base/HTBasicSingleFluidRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/impl/recipe/base/HTBasicSingleFluidRecipe.kt @@ -14,7 +14,7 @@ import net.minecraft.core.HolderLookup abstract class HTBasicSingleFluidRecipe(val ingredient: HTItemIngredient, val result: HTFluidResult) : HTSingleFluidRecipe { final override fun test(stack: ImmutableItemStack): Boolean = ingredient.test(stack) - final override fun getRequiredCount(stack: ImmutableItemStack): Int = ingredient.getRequiredAmount(stack) + final override fun getRequiredCount(): Int = ingredient.getRequiredAmount() final override fun assembleFluid(input: HTRecipeInput, provider: HolderLookup.Provider): ImmutableFluidStack? = result.getStackOrNull(provider) From b4bbcbf3b18e45c6cf1f77938958f87143de7a41 Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Wed, 10 Dec 2025 04:36:26 +0900 Subject: [PATCH 04/49] refactor: refined scripts --- .../ragium/api/recipe/RecipeHolders.kt | 7 ------- .../ragium/api/recipe/input/HTRecipeInput.kt | 7 +------ .../ragium/api/recipe/result/HTRecipeResult.kt | 6 ------ .../recipe/RagiumMaterialRecipeProvider.kt | 2 +- .../processor/HTAdvancedMixerBlockEntity.kt | 9 ++++----- .../processor/HTAlloySmelterBlockEntity.kt | 4 ++-- .../processor/HTCuttingMachineBlockEntity.kt | 4 +++- .../entity/processor/HTMixerBlockEntity.kt | 6 +++--- .../entity/processor/HTMobCrusherBlockEntity.kt | 17 +++++++++-------- .../entity/processor/HTProcessorBlockEntity.kt | 11 ++++++++++- .../entity/processor/HTRefineryBlockEntity.kt | 6 +++--- .../base/HTAbstractCombinerBlockEntity.kt | 8 ++++---- .../base/HTItemWithCatalystBlockEntity.kt | 6 +++--- .../base/HTSingleItemInputBlockEntity.kt | 8 +++++--- .../ragium/impl/recipe/HTAlloyingRecipe.kt | 11 ++--------- .../recipe/base/HTBasicShapelessInputsRecipe.kt | 13 +++++++++++++ 16 files changed, 63 insertions(+), 62 deletions(-) delete mode 100644 src/api/kotlin/hiiragi283/ragium/api/recipe/RecipeHolders.kt create mode 100644 src/main/kotlin/hiiragi283/ragium/impl/recipe/base/HTBasicShapelessInputsRecipe.kt diff --git a/src/api/kotlin/hiiragi283/ragium/api/recipe/RecipeHolders.kt b/src/api/kotlin/hiiragi283/ragium/api/recipe/RecipeHolders.kt deleted file mode 100644 index 691d7ca12..000000000 --- a/src/api/kotlin/hiiragi283/ragium/api/recipe/RecipeHolders.kt +++ /dev/null @@ -1,7 +0,0 @@ -package hiiragi283.ragium.api.recipe - -import net.minecraft.world.item.crafting.Recipe -import net.minecraft.world.item.crafting.RecipeHolder - -@Suppress("UNCHECKED_CAST") -fun , R2 : R1> RecipeHolder.castRecipe(): RecipeHolder? = (this.value as? R2)?.let { RecipeHolder(this.id, it) } diff --git a/src/api/kotlin/hiiragi283/ragium/api/recipe/input/HTRecipeInput.kt b/src/api/kotlin/hiiragi283/ragium/api/recipe/input/HTRecipeInput.kt index ecf5935e5..c7292abd2 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/recipe/input/HTRecipeInput.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/recipe/input/HTRecipeInput.kt @@ -19,17 +19,12 @@ data class HTRecipeInput private constructor(val items: List 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.isEmpty() || isEmpty(stacks)) return intArrayOf() if (ingredients.size > stacks.size) return intArrayOf() val stacks1: MutableList = stacks.toMutableList() diff --git a/src/api/kotlin/hiiragi283/ragium/api/recipe/result/HTRecipeResult.kt b/src/api/kotlin/hiiragi283/ragium/api/recipe/result/HTRecipeResult.kt index 73face4c6..09449f155 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/recipe/result/HTRecipeResult.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/recipe/result/HTRecipeResult.kt @@ -30,10 +30,4 @@ interface HTRecipeResult> { * @return 完成品がない場合は`null` */ fun getStackOrNull(provider: HolderLookup.Provider?): STACK? = getStackResult(provider).result() - - /** - * 完成品が存在するか判定します。 - * @return [getStackResult]が[HTTextResult.failure]の場合は`true` - */ - fun hasNoMatchingStack(): Boolean = getStackResult(null).isFailure } diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumMaterialRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumMaterialRecipeProvider.kt index f9894eb14..57694050f 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumMaterialRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumMaterialRecipeProvider.kt @@ -241,7 +241,7 @@ object RagiumMaterialRecipeProvider : HTRecipeProvider.Direct() { .crushing( ore, resultHelper.item(CommonMaterialPrefixes.DUST, primary, 8), - resultHelper.item(CommonMaterialPrefixes.GEM, secondary, 2), + resultHelper.item(CommonMaterialPrefixes.GEM, secondary), ).saveSuffixed(output, "_from_ore") // Mixing with Lava HTComplexRecipeBuilder 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 102176740..f31bf487d 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 @@ -16,7 +16,6 @@ import hiiragi283.ragium.common.storage.item.slot.HTBasicItemSlot import hiiragi283.ragium.common.storage.item.slot.HTOutputItemSlot import hiiragi283.ragium.setup.RagiumBlocks import net.minecraft.core.BlockPos -import net.minecraft.server.level.ServerLevel import net.minecraft.world.level.block.state.BlockState class HTAdvancedMixerBlockEntity(pos: BlockPos, state: BlockState) : @@ -63,9 +62,9 @@ class HTAdvancedMixerBlockEntity(pos: BlockPos, state: BlockState) : ) } - override fun createRecipeInput(level: ServerLevel, pos: BlockPos): HTRecipeInput? = HTRecipeInput.create { - items.addAll(inputSlots.map(HTBasicItemSlot::getStack)) - fluids += firstInputTank.getStack() - fluids += secondInputTank.getStack() + override fun buildRecipeInput(builder: HTRecipeInput.Builder) { + builder.items.addAll(inputSlots.map(HTBasicItemSlot::getStack)) + builder.fluids += firstInputTank.getStack() + builder.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 62d0062df..706c475b7 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 @@ -45,8 +45,8 @@ class HTAlloySmelterBlockEntity(pos: BlockPos, state: BlockState) : override fun shouldCheckRecipe(level: ServerLevel, pos: BlockPos): Boolean = outputSlot.getNeeded() > 0 - override fun createRecipeInput(level: ServerLevel, pos: BlockPos): HTRecipeInput? = HTRecipeInput.create { - items.addAll(inputSlots.map(HTBasicItemSlot::getStack)) + override fun buildRecipeInput(builder: HTRecipeInput.Builder) { + builder.items.addAll(inputSlots.map(HTBasicItemSlot::getStack)) } override fun canProgressRecipe(level: ServerLevel, input: HTRecipeInput, recipe: HTShapelessInputsRecipe): Boolean = 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 bf2b53d5e..1796d8d38 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 @@ -44,7 +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): HTRecipeInput? = HTRecipeInput.single(inputSlot.getStack()) + override fun buildRecipeInput(builder: HTRecipeInput.Builder) { + builder.items += inputSlot.getStack() + } override fun canProgressRecipe(level: ServerLevel, input: HTRecipeInput, recipe: HTSingleExtraItemRecipe): Boolean { // アウトプットに搬出できるか判定する 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 10ffb7abc..15dba9595 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 @@ -47,9 +47,9 @@ class HTMixerBlockEntity(pos: BlockPos, state: BlockState) : outputSlot = upperOutput(builder, listener) } - override fun createRecipeInput(level: ServerLevel, pos: BlockPos): HTRecipeInput? = HTRecipeInput.create { - items += inputSlot.getStack() - fluids += inputTank.getStack() + override fun buildRecipeInput(builder: HTRecipeInput.Builder) { + builder.items += inputSlot.getStack() + builder.fluids += inputTank.getStack() } override fun completeRecipe( 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 65cec7d62..3d1a6334f 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,7 +3,6 @@ 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 @@ -35,6 +34,7 @@ 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 @@ -44,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 @@ -104,14 +104,15 @@ 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): HTRecipeInput? = HTRecipeInput.single(inputSlot.getStack()) + override fun createRecipeInput(level: ServerLevel, pos: BlockPos): SingleRecipeInput? = + inputSlot.getStack()?.unwrap()?.let(::SingleRecipeInput) /** * @see net.minecraft.server.commands.LootCommand.dropKillLoot */ - 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 + override fun getMatchedRecipe(input: SingleRecipeInput, level: ServerLevel): MobLootRecipe? { + val stack: ItemStack = input.item() + val entityType: EntityType<*> = (stack.item as? SpawnEggItem)?.getType(stack) ?: return null val fakeEntity: LivingEntity = entityType.create(level) as? LivingEntity ?: return null val fakePlayer: ServerPlayer = getFakePlayer(level) @@ -137,7 +138,7 @@ class HTMobCrusherBlockEntity(pos: BlockPos, state: BlockState) : override fun getRecipeTime(recipe: MobLootRecipe): Int = super.getRecipeTime(recipe) / 4 - override fun canProgressRecipe(level: ServerLevel, input: HTRecipeInput, recipe: MobLootRecipe): Boolean { + override fun canProgressRecipe(level: ServerLevel, input: SingleRecipeInput, recipe: MobLootRecipe): Boolean { // アウトプットに搬出できるか判定する for (stackIn: ImmutableItemStack in recipe.drops) { if (HTStackSlotHelper.insertStacks(outputSlots, stackIn, HTStorageAction.SIMULATE) != null) { @@ -153,7 +154,7 @@ class HTMobCrusherBlockEntity(pos: BlockPos, state: BlockState) : level: ServerLevel, pos: BlockPos, state: BlockState, - input: HTRecipeInput, + input: SingleRecipeInput, recipe: MobLootRecipe, ) { val (_, _, drops: List) = recipe 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 1e392374d..021fddbba 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 @@ -130,6 +130,15 @@ abstract class HTProcessorBlockEntity(blockHolder: Ho recipe: RECIPE, ) + // RecipeBased // + + abstract class RecipeBased(blockHolder: Holder, pos: BlockPos, state: BlockState) : + HTProcessorBlockEntity(blockHolder, pos, state) { + final override fun createRecipeInput(level: ServerLevel, pos: BlockPos): HTRecipeInput? = HTRecipeInput.create(::buildRecipeInput) + + protected abstract fun buildRecipeInput(builder: HTRecipeInput.Builder) + } + // Cached // /** @@ -140,7 +149,7 @@ abstract class HTProcessorBlockEntity(blockHolder: Ho blockHolder: Holder, pos: BlockPos, state: BlockState, - ) : HTProcessorBlockEntity(blockHolder, pos, state) { + ) : RecipeBased(blockHolder, pos, state) { constructor( finder: HTRecipeFinder, blockHolder: Holder, 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 3ca2edb33..fddf3fe23 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 @@ -71,9 +71,9 @@ 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): HTRecipeInput? = HTRecipeInput.create { - items += catalystSlot.getStack() - fluids += inputTank.getStack() + override fun buildRecipeInput(builder: HTRecipeInput.Builder) { + builder.items += catalystSlot.getStack() + builder.fluids += inputTank.getStack() } // アウトプットに搬出できるか判定する 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 20bd3bc41..ba6a91d2a 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 @@ -79,10 +79,10 @@ abstract class HTAbstractCombinerBlockEntity : HTProcessorBlockEntity.Cached 0 - final override fun createRecipeInput(level: ServerLevel, pos: BlockPos): HTRecipeInput? = HTRecipeInput.create { - items += leftInputSlot.getStack() - items += rightInputSlot.getStack() - fluids += inputTank.getStack() + final override fun buildRecipeInput(builder: HTRecipeInput.Builder) { + builder.items += leftInputSlot.getStack() + builder.items += rightInputSlot.getStack() + builder.fluids += inputTank.getStack() } final override fun canProgressRecipe(level: ServerLevel, input: HTRecipeInput, recipe: HTCombineRecipe): Boolean = diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/base/HTItemWithCatalystBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/base/HTItemWithCatalystBlockEntity.kt index d70dd6023..2cebed5d5 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/base/HTItemWithCatalystBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/base/HTItemWithCatalystBlockEntity.kt @@ -39,9 +39,9 @@ abstract class HTItemWithCatalystBlockEntity( outputSlot = upperOutput(builder, listener) } - final override fun createRecipeInput(level: ServerLevel, pos: BlockPos): HTRecipeInput? = HTRecipeInput.create { - items += inputSlot.getStack() - items += catalystSlot.getStack() + final override fun buildRecipeInput(builder: HTRecipeInput.Builder) { + builder.items += inputSlot.getStack() + builder.items += catalystSlot.getStack() } override fun completeRecipe( 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 9df872d00..4c7f34876 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 @@ -17,12 +17,14 @@ import net.minecraft.server.level.ServerLevel 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) { +abstract class HTSingleItemInputBlockEntity(blockHolder: Holder, pos: BlockPos, state: BlockState) : + HTProcessorBlockEntity.RecipeBased(blockHolder, pos, state) { lateinit var inputSlot: HTBasicItemSlot protected set - final override fun createRecipeInput(level: ServerLevel, pos: BlockPos): HTRecipeInput? = HTRecipeInput.single(inputSlot.getStack()) + final override fun buildRecipeInput(builder: HTRecipeInput.Builder) { + builder.items += inputSlot.getStack() + } // Cached // diff --git a/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTAlloyingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTAlloyingRecipe.kt index de4620e56..ec7786556 100644 --- a/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTAlloyingRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTAlloyingRecipe.kt @@ -2,20 +2,13 @@ package hiiragi283.ragium.impl.recipe import hiiragi283.ragium.api.recipe.RagiumRecipeTypes import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient -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.impl.recipe.base.HTBasicShapelessInputsRecipe 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), - HTShapelessInputsRecipe { - override fun matches(input: HTRecipeInput, level: Level): Boolean = HTRecipeInput.hasMatchingSlots(ingredients, input.items) +class HTAlloyingRecipe(ingredients: List, result: HTItemResult) : HTBasicShapelessInputsRecipe(ingredients, result) { override fun getSerializer(): RecipeSerializer<*> = RagiumRecipeSerializers.ALLOYING override fun getType(): RecipeType<*> = RagiumRecipeTypes.ALLOYING.get() diff --git a/src/main/kotlin/hiiragi283/ragium/impl/recipe/base/HTBasicShapelessInputsRecipe.kt b/src/main/kotlin/hiiragi283/ragium/impl/recipe/base/HTBasicShapelessInputsRecipe.kt new file mode 100644 index 000000000..4922aac00 --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/impl/recipe/base/HTBasicShapelessInputsRecipe.kt @@ -0,0 +1,13 @@ +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.multi.HTShapelessInputsRecipe +import hiiragi283.ragium.api.recipe.result.HTItemResult +import net.minecraft.world.level.Level + +abstract class HTBasicShapelessInputsRecipe(final override val ingredients: List, result: HTItemResult) : + HTBasicSingleOutputRecipe(result), + HTShapelessInputsRecipe { + final override fun matches(input: HTRecipeInput, level: Level): Boolean = HTRecipeInput.hasMatchingSlots(ingredients, input.items) +} From 430300574fd0dc350089f80b9ddc9bcf9bbd74b2 Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Wed, 10 Dec 2025 16:22:23 +0900 Subject: [PATCH 05/49] feat: added usage for Ragium Powder feta: added recipe to obtain Crude Bio --- .../ragium/api/tag/RagiumModTags.kt | 26 ++++++++-- .../data/client/RagiumEnglishProvider.kt | 1 + .../data/client/RagiumJapaneseProvider.kt | 1 + .../recipe/RagiumChemistryRecipeProvider.kt | 2 + .../recipe/RagiumEnchantingRecipeProvider.kt | 12 +---- .../recipe/RagiumMaterialRecipeProvider.kt | 25 +++++---- .../compat/RagiumMekanismRecipeProvider.kt | 6 +++ .../material/RagiumMaterialRecipeData.kt | 2 +- .../client/integration/emi/RagiumEmiPlugin.kt | 51 ++++++++++--------- .../emi/category/RagiumEmiRecipeCategories.kt | 6 --- .../emi/data/HTBiomassRecipeData.kt | 6 --- .../recipe/base/HTMultiOutputsEmiRecipe.kt | 11 ++-- .../recipe/generator/HTBiomassEmiRecipe.kt | 26 ---------- .../processor/HTItemWithCatalystEmiRecipe.kt | 19 ++++++- .../gui/screen/HTFluidCollectorScreen.kt | 2 +- .../common/block/entity/HTBlockEntity.kt | 21 ++++++++ .../device/HTFluidCollectorBlockEntity.kt | 28 +++------- .../event/RagiumRuntimeRecipeHandler.kt | 21 ++++++++ .../recipe/machine/HTBioExtractingRecipe.kt | 51 +++++++++++++++++++ .../recipe/machine/HTCopyEnchantingRecipe.kt | 6 +++ .../recipe/machine/HTExpExtractingRecipe.kt | 6 +++ .../hiiragi283/ragium/setup/RagiumItems.kt | 4 +- .../ragium/setup/RagiumRecipeSerializers.kt | 13 ++++- 23 files changed, 227 insertions(+), 119 deletions(-) delete mode 100644 src/integration/kotlin/hiiragi283/ragium/client/integration/emi/data/HTBiomassRecipeData.kt delete mode 100644 src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/generator/HTBiomassEmiRecipe.kt create mode 100644 src/main/kotlin/hiiragi283/ragium/common/recipe/machine/HTBioExtractingRecipe.kt diff --git a/src/api/kotlin/hiiragi283/ragium/api/tag/RagiumModTags.kt b/src/api/kotlin/hiiragi283/ragium/api/tag/RagiumModTags.kt index da16abcbe..83048f303 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/tag/RagiumModTags.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/tag/RagiumModTags.kt @@ -2,12 +2,14 @@ package hiiragi283.ragium.api.tag import hiiragi283.ragium.api.RagiumAPI import net.minecraft.core.registries.Registries +import net.minecraft.resources.ResourceLocation import net.minecraft.tags.TagKey import net.minecraft.world.damagesource.DamageType import net.minecraft.world.entity.EntityType import net.minecraft.world.item.Item import net.minecraft.world.level.block.Block import net.minecraft.world.level.block.entity.BlockEntityType +import net.minecraft.world.level.material.Fluid object RagiumModTags { // Blocks // @@ -92,6 +94,17 @@ object RagiumModTags { // Fluids // + object Fluids { + @JvmStatic + private fun create(path: String): TagKey = create(RagiumAPI.id(path)) + + @JvmStatic + private fun create(prefix: String, suffix: String): TagKey = create(RagiumAPI.id(prefix, suffix)) + + @JvmStatic + private fun create(id: ResourceLocation): TagKey = Registries.FLUID.createTagKey(id) + } + // Items // object Items { @@ -127,13 +140,13 @@ object RagiumModTags { // Enchantments @JvmField - val CAPACITY_ENCHANTABLE: TagKey = create("enchantable/capacity") + val CAPACITY_ENCHANTABLE: TagKey = create("enchantable", "capacity") @JvmField - val RANGE_ENCHANTABLE: TagKey = create("enchantable/range") + val RANGE_ENCHANTABLE: TagKey = create("enchantable", "range") @JvmField - val STRIKE_ENCHANTABLE: TagKey = create("enchantable/strike") + val STRIKE_ENCHANTABLE: TagKey = create("enchantable", "strike") // Flux @JvmField @@ -157,9 +170,12 @@ object RagiumModTags { val TOOLS_HAMMER: TagKey = create("tools", "hammer") @JvmStatic - private fun create(path: String): TagKey = Registries.ITEM.createTagKey(RagiumAPI.id(path)) + private fun create(path: String): TagKey = create(RagiumAPI.id(path)) + + @JvmStatic + private fun create(vararg path: String): TagKey = create(RagiumAPI.id(*path)) @JvmStatic - private fun create(prefix: String, suffix: String): TagKey = create("$prefix/$suffix") + private fun create(id: ResourceLocation): TagKey = Registries.ITEM.createTagKey(id) } } diff --git a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt index cd7453bdc..fc548ee02 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt @@ -240,6 +240,7 @@ class RagiumEnglishProvider(output: PackOutput) : HTLanguageProvider.English(out add(RagiumItems.POTION_DROP, "Potion Drop") add(RagiumItems.RAGI_ALLOY_COMPOUND, "Ragi-Alloy Compound") add(RagiumItems.RAGI_COKE, "Ragi-Coke") + add(RagiumItems.RAGIUM_POWDER, "Ragium Powder") add(RagiumItems.ROSIN, "Rosin") add(RagiumItems.TAR, "Tar") add(RagiumItems.WITHER_DOLl, "Wither Doll") diff --git a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt index f72264d6e..0b295a027 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt @@ -231,6 +231,7 @@ class RagiumJapaneseProvider(output: PackOutput) : HTLanguageProvider.Japanese(o add(RagiumItems.POTION_DROP, "ポーションの雫") add(RagiumItems.RAGI_ALLOY_COMPOUND, "ラギ合金混合物") add(RagiumItems.RAGI_COKE, "らぎコークス") + add(RagiumItems.RAGIUM_POWDER, "ラギウムパウダー") add(RagiumItems.ROSIN, "ロジン") add(RagiumItems.TAR, "タール") add(RagiumItems.WITHER_DOLl, "ウィザー人形") diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumChemistryRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumChemistryRecipeProvider.kt index 40e76bcaf..8ed5a32b2 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumChemistryRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumChemistryRecipeProvider.kt @@ -15,6 +15,7 @@ import hiiragi283.ragium.common.material.HTColorMaterial import hiiragi283.ragium.common.material.RagiumMaterialKeys import hiiragi283.ragium.common.material.RagiumMoltenCrystalData import hiiragi283.ragium.common.material.VanillaMaterialKeys +import hiiragi283.ragium.common.recipe.machine.HTBioExtractingRecipe import hiiragi283.ragium.common.variant.HTColoredVariant import hiiragi283.ragium.impl.data.recipe.HTComplexRecipeBuilder import hiiragi283.ragium.impl.data.recipe.HTCookingRecipeBuilder @@ -605,6 +606,7 @@ object RagiumChemistryRecipeProvider : HTRecipeProvider.Direct() { @JvmStatic private fun biomass() { + save(HTBioExtractingRecipe.RECIPE_ID, HTBioExtractingRecipe) // Biomass -> Crude Bio HTSingleRecipeBuilder .melting( diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumEnchantingRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumEnchantingRecipeProvider.kt index 37da37e5a..03389ce4b 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumEnchantingRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumEnchantingRecipeProvider.kt @@ -1,7 +1,5 @@ package hiiragi283.ragium.data.server.recipe -import hiiragi283.ragium.api.RagiumAPI -import hiiragi283.ragium.api.RagiumConst import hiiragi283.ragium.api.data.recipe.HTRecipeProvider import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient import hiiragi283.ragium.common.material.CommonMaterialPrefixes @@ -24,14 +22,8 @@ object RagiumEnchantingRecipeProvider : HTRecipeProvider.Direct() { private val enchLookup: HolderGetter by lazy { provider.lookupOrThrow(Registries.ENCHANTMENT) } override fun buildRecipeInternal() { - save( - RagiumAPI.id(RagiumConst.EXTRACTING, "experience_from_items"), - HTExpExtractingRecipe, - ) - save( - RagiumAPI.id(RagiumConst.ENCHANTING, "copy_from_book"), - HTCopyEnchantingRecipe, - ) + save(HTExpExtractingRecipe.RECIPE_ID, HTExpExtractingRecipe) + save(HTCopyEnchantingRecipe.RECIPE_ID, HTCopyEnchantingRecipe) // Vanilla enchanting( diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumMaterialRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumMaterialRecipeProvider.kt index 57694050f..6d51301c0 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumMaterialRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumMaterialRecipeProvider.kt @@ -14,6 +14,7 @@ import hiiragi283.ragium.api.registry.impl.HTSimpleDeferredBlock import hiiragi283.ragium.api.registry.impl.HTSimpleDeferredItem import hiiragi283.ragium.api.tag.RagiumCommonTags import hiiragi283.ragium.api.util.Ior +import hiiragi283.ragium.common.HTMoldType import hiiragi283.ragium.common.material.CommonMaterialKeys import hiiragi283.ragium.common.material.CommonMaterialPrefixes import hiiragi283.ragium.common.material.ModMaterialKeys @@ -91,6 +92,20 @@ object RagiumMaterialRecipeProvider : HTRecipeProvider.Direct() { .save(output) alloyFromData(RagiumMaterialRecipeData.RAGI_CRYSTAL) + // Ragium Powder + HTComplexRecipeBuilder + .mixing() + .addIngredient(itemCreator.fromTagKey(CommonMaterialPrefixes.GEM, RagiumMaterialKeys.RAGI_CRYSTAL)) + .addIngredient(fluidCreator.fromHolder(RagiumFluidContents.EXPERIENCE, 1000)) + .setResult(resultHelper.item(RagiumItems.RAGIUM_POWDER)) + .save(output) + + meltAndFreeze( + HTMoldType.GEM, + RagiumItems.RAGIUM_POWDER, + RagiumFluidContents.DESTABILIZED_RAGINITE, + 100, + ) } @JvmStatic @@ -267,21 +282,13 @@ object RagiumMaterialRecipeProvider : HTRecipeProvider.Direct() { CommonMaterialKeys.Metals.OSMIUM to CommonMaterialKeys.Metals.URANIUM, CommonMaterialKeys.Metals.URANIUM to CommonMaterialKeys.Metals.OSMIUM, ).forEach { (primary: HTMaterialLike, secondary: HTMaterialLike) -> - val ore: HTItemIngredient = itemCreator.fromTagKey(CommonMaterialPrefixes.ORE, primary) // Crushing HTSingleExtraItemRecipeBuilder .crushing( - ore, + itemCreator.fromTagKey(CommonMaterialPrefixes.ORE, primary), resultHelper.item(CommonMaterialPrefixes.DUST, primary, 2), resultHelper.item(CommonMaterialPrefixes.DUST, secondary), ).saveSuffixed(output, "_from_ore") - // Mixing with Crimson Blood - HTComplexRecipeBuilder - .mixing() - .addIngredient(ore) - .addIngredient(fluidCreator.fromHolder(RagiumFluidContents.CRIMSON_BLOOD, 250)) - .setResult(resultHelper.item(CommonMaterialPrefixes.INGOT, primary, 4)) - .saveSuffixed(output, "_from_ore") } // Gems diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumMekanismRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumMekanismRecipeProvider.kt index aa0ca9df9..3660df682 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumMekanismRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumMekanismRecipeProvider.kt @@ -66,6 +66,12 @@ object RagiumMekanismRecipeProvider : HTRecipeProvider.Integration(RagiumConst.M essenceType.asStack(80), ).build(output, id("$prefix/$name/from_enriched")) } + + // Ragium Powder -> Chemical + factory( + itemHelper.from(RagiumItems.RAGIUM_POWDER), + RagiumEssenceType.RAGIUM.asStack(320), + ).build(output, id("$prefix/ragium/from_powder")) } toChemical(ItemStackToChemicalRecipeBuilder::chemicalConversion, "chemical_conversion") diff --git a/src/data/kotlin/hiiragi283/ragium/impl/data/recipe/material/RagiumMaterialRecipeData.kt b/src/data/kotlin/hiiragi283/ragium/impl/data/recipe/material/RagiumMaterialRecipeData.kt index 819c0e88d..528b6e1f9 100644 --- a/src/data/kotlin/hiiragi283/ragium/impl/data/recipe/material/RagiumMaterialRecipeData.kt +++ b/src/data/kotlin/hiiragi283/ragium/impl/data/recipe/material/RagiumMaterialRecipeData.kt @@ -153,7 +153,7 @@ data object RagiumMaterialRecipeData { addInput(Items.HEART_OF_THE_SEA) addInput(Items.DRAGON_BREATH) - addInput(RagiumFluidContents.DESTABILIZED_RAGINITE, 8000) + addInput(RagiumFluidContents.DESTABILIZED_RAGINITE, 1000) addOutput(RagiumItems.IRIDESCENT_POWDER, null) } 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 b2d0a3e5f..ab244a7b4 100644 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/RagiumEmiPlugin.kt +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/RagiumEmiPlugin.kt @@ -12,34 +12,34 @@ import dev.emi.emi.api.recipe.VanillaEmiRecipeCategories import dev.emi.emi.api.stack.Comparison import dev.emi.emi.api.stack.EmiStack import hiiragi283.ragium.api.RagiumAPI -import hiiragi283.ragium.api.RagiumConst import hiiragi283.ragium.api.data.map.HTFluidCoolantData import hiiragi283.ragium.api.data.map.HTFluidFuelData import hiiragi283.ragium.api.data.map.RagiumDataMapTypes +import hiiragi283.ragium.api.data.recipe.HTResultHelper import hiiragi283.ragium.api.function.partially1 import hiiragi283.ragium.api.item.alchemy.HTPotionHelper 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.ingredient.HTItemIngredient 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.api.stack.ImmutableFluidStack +import hiiragi283.ragium.api.util.Ior +import hiiragi283.ragium.api.util.wrapOptional import hiiragi283.ragium.client.integration.emi.category.HTEmiRecipeCategory import hiiragi283.ragium.client.integration.emi.category.RagiumEmiRecipeCategories -import hiiragi283.ragium.client.integration.emi.data.HTBiomassRecipeData import hiiragi283.ragium.client.integration.emi.data.HTEmiFluidFuelData import hiiragi283.ragium.client.integration.emi.handler.HTEmiRecipeHandler import hiiragi283.ragium.client.integration.emi.recipe.custom.HTCopyEnchantingEmiRecipe import hiiragi283.ragium.client.integration.emi.recipe.custom.HTExpExtractingEmiRecipe import hiiragi283.ragium.client.integration.emi.recipe.custom.HTMachineUpgradeEmiRecipe import hiiragi283.ragium.client.integration.emi.recipe.device.HTRockGeneratingEmiRecipe -import hiiragi283.ragium.client.integration.emi.recipe.generator.HTBiomassEmiRecipe import hiiragi283.ragium.client.integration.emi.recipe.generator.HTCoolantEmiRecipe import hiiragi283.ragium.client.integration.emi.recipe.generator.HTFuelGeneratorEmiRecipe import hiiragi283.ragium.client.integration.emi.recipe.processor.HTAlloyingEmiRecipe @@ -56,6 +56,10 @@ import hiiragi283.ragium.common.block.entity.HTBlockEntity import hiiragi283.ragium.common.block.entity.generator.HTCulinaryGeneratorBlockEntity import hiiragi283.ragium.common.material.CommonMaterialPrefixes import hiiragi283.ragium.common.material.FoodMaterialKeys +import hiiragi283.ragium.common.recipe.machine.HTBioExtractingRecipe +import hiiragi283.ragium.common.recipe.machine.HTCopyEnchantingRecipe +import hiiragi283.ragium.common.recipe.machine.HTExpExtractingRecipe +import hiiragi283.ragium.impl.recipe.HTExtractingRecipe import hiiragi283.ragium.setup.DeferredBEMenu import hiiragi283.ragium.setup.RagiumBlocks import hiiragi283.ragium.setup.RagiumDataComponents @@ -76,15 +80,14 @@ 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.Ingredient import net.minecraft.world.item.crafting.RecipeHolder import net.minecraft.world.level.ItemLike +import net.minecraft.world.level.block.ComposterBlock import net.minecraft.world.level.material.Fluid import net.minecraft.world.level.material.Fluids import net.neoforged.neoforge.common.Tags import net.neoforged.neoforge.registries.datamaps.DataMapType -import net.neoforged.neoforge.registries.datamaps.builtin.Compostable -import net.neoforged.neoforge.registries.datamaps.builtin.NeoForgeDataMaps -import org.apache.commons.lang3.math.Fraction import kotlin.streams.asSequence @EmiEntrypoint @@ -293,20 +296,6 @@ class RagiumEmiPlugin : EmiPlugin { ::HTFuelGeneratorEmiRecipe.partially1(RagiumEmiRecipeCategories.CULINARY), ) // Elite - addDataMapRecipes( - registry, - ITEM_LOOKUP, - NeoForgeDataMaps.COMPOSTABLES, - { holder: Holder, compostable: Compostable -> - val chance: Fraction = compostable.chance().toFraction() - HTBiomassRecipeData( - holder.value().toEmi(), - RagiumFluidContents.CRUDE_BIO.toFluidEmi((1000 * chance).toInt()), - ) - }, - ::HTBiomassEmiRecipe, - ) - addDataMapRecipes( registry, FLUID_LOOKUP, @@ -328,7 +317,21 @@ class RagiumEmiPlugin : EmiPlugin { addRegistryRecipes(registry, RagiumRecipeTypes.CUTTING, HTSingleExtraItemEmiRecipe::cutting) addRegistryRecipes(registry, RagiumRecipeTypes.EXTRACTING, HTItemWithCatalystEmiRecipe::extracting) - registry.addRecipeSafe(RagiumAPI.id("/${RagiumConst.EXTRACTING}", "experience_from_items"), ::HTExpExtractingEmiRecipe) + addItemStackRecipes( + registry, + "crude_bio", + { stack: ItemStack -> + val crudeBio: ImmutableFluidStack = HTBioExtractingRecipe.getCrudeBio(ComposterBlock.getValue(stack)) + ?: return@addItemStackRecipes null + HTExtractingRecipe( + HTItemIngredient(Ingredient.of(stack), 1), + HTItemIngredient(Ingredient.of(Items.COMPOSTER), 1).wrapOptional(), + Ior.Right(HTResultHelper.fluid(crudeBio.getId(), crudeBio.amount())), + ) + }, + HTItemWithCatalystEmiRecipe::extracting, + ) + registry.addRecipeSafe(HTExpExtractingRecipe.RECIPE_ID.withPrefix("/"), ::HTExpExtractingEmiRecipe) // Advanced addRegistryRecipes(registry, RagiumRecipeTypes.MELTING, ::HTMeltingEmiRecipe) addRegistryRecipes(registry, RagiumRecipeTypes.MIXING, ::HTMixingEmiRecipe) @@ -340,7 +343,7 @@ class RagiumEmiPlugin : EmiPlugin { addRegistryRecipes(registry, RagiumRecipeTypes.ENCHANTING, ::HTEnchantingEmiRecipe) addRegistryRecipes(registry, RagiumRecipeTypes.SIMULATING, HTItemWithCatalystEmiRecipe::simulating) - registry.addRecipeSafe(RagiumAPI.id("/${RagiumConst.ENCHANTING}", "copy_from_book"), ::HTCopyEnchantingEmiRecipe) + registry.addRecipeSafe(HTCopyEnchantingRecipe.RECIPE_ID.withPrefix("/"), ::HTCopyEnchantingEmiRecipe) // Device addRegistryRecipes(registry, RagiumRecipeTypes.ROCK_GENERATING, ::HTRockGeneratingEmiRecipe) 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 88c6e7417..4d03ea911 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 @@ -12,7 +12,6 @@ import hiiragi283.ragium.client.integration.emi.toEmi import hiiragi283.ragium.common.material.RagiumMaterialKeys import hiiragi283.ragium.common.text.RagiumCommonTranslation import hiiragi283.ragium.setup.RagiumBlocks -import hiiragi283.ragium.setup.RagiumFluidContents import hiiragi283.ragium.setup.RagiumItems import net.minecraft.world.item.crafting.Recipe import net.minecraft.world.item.crafting.RecipeInput @@ -50,10 +49,6 @@ object RagiumEmiRecipeCategories { val MAGMATIC: HTEmiRecipeCategory = generator(RagiumBlocks.MAGMATIC_GENERATOR) // Elite - @JvmField - val BIOMASS: HTEmiRecipeCategory = - HTEmiRecipeCategory.create(HTBounds(0, 0, 5 * 18, 1 * 18), RagiumFluidContents.CRUDE_BIO.bucket) - @JvmField val COOLANT: HTEmiRecipeCategory = generator(RagiumBlocks.COMBUSTION_GENERATOR) @@ -137,7 +132,6 @@ object RagiumEmiRecipeCategories { register(registry, CULINARY) register(registry, MAGMATIC) - register(registry, BIOMASS) register(registry, COOLANT) register(registry, COMBUSTION) // Processor diff --git a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/data/HTBiomassRecipeData.kt b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/data/HTBiomassRecipeData.kt deleted file mode 100644 index 23ab2c558..000000000 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/data/HTBiomassRecipeData.kt +++ /dev/null @@ -1,6 +0,0 @@ -package hiiragi283.ragium.client.integration.emi.data - -import dev.emi.emi.api.stack.EmiStack - -@JvmRecord -data class HTBiomassRecipeData(val input: EmiStack, val output: EmiStack) 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 a31f48b73..48fc51bbb 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 @@ -4,11 +4,16 @@ import dev.emi.emi.api.widget.WidgetHolder import hiiragi283.ragium.client.integration.emi.category.HTEmiRecipeCategory import hiiragi283.ragium.client.integration.emi.recipe.HTEmiHolderRecipe import hiiragi283.ragium.impl.recipe.base.HTBasicComplexOutputRecipe +import net.minecraft.resources.ResourceLocation import net.minecraft.world.item.crafting.RecipeHolder -abstract class HTMultiOutputsEmiRecipe(category: HTEmiRecipeCategory, holder: RecipeHolder) : - HTEmiHolderRecipe(category, holder) { - init { +abstract class HTMultiOutputsEmiRecipe : HTEmiHolderRecipe { + constructor(category: HTEmiRecipeCategory, id: ResourceLocation, recipe: RECIPE) : super(category, id, recipe) { + initInputs() + addOutputs(recipe.results) + } + + constructor(category: HTEmiRecipeCategory, holder: RecipeHolder) : super(category, holder) { initInputs() addOutputs(recipe.results) } diff --git a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/generator/HTBiomassEmiRecipe.kt b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/generator/HTBiomassEmiRecipe.kt deleted file mode 100644 index 20821854e..000000000 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/generator/HTBiomassEmiRecipe.kt +++ /dev/null @@ -1,26 +0,0 @@ -package hiiragi283.ragium.client.integration.emi.recipe.generator - -import dev.emi.emi.api.widget.WidgetHolder -import hiiragi283.ragium.client.integration.emi.addArrow -import hiiragi283.ragium.client.integration.emi.category.RagiumEmiRecipeCategories -import hiiragi283.ragium.client.integration.emi.data.HTBiomassRecipeData -import hiiragi283.ragium.client.integration.emi.recipe.HTEmiRecipe -import net.minecraft.resources.ResourceLocation - -class HTBiomassEmiRecipe(id: ResourceLocation, recipe: HTBiomassRecipeData) : - HTEmiRecipe(RagiumEmiRecipeCategories.BIOMASS, id, recipe) { - init { - addInput(recipe.input) - - addOutputs(recipe.output) - } - - override fun addWidgets(widgets: WidgetHolder) { - widgets.addArrow(getPosition(2), getPosition(0)) - - // input - widgets.addSlot(input(0), getPosition(0), getPosition(0)) - // output - widgets.addOutput(0, getPosition(4), getPosition(0)) - } -} diff --git a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTItemWithCatalystEmiRecipe.kt b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTItemWithCatalystEmiRecipe.kt index 2e9481ddb..f90d5a382 100644 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTItemWithCatalystEmiRecipe.kt +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTItemWithCatalystEmiRecipe.kt @@ -9,16 +9,31 @@ import hiiragi283.ragium.impl.recipe.HTCompressingRecipe import hiiragi283.ragium.impl.recipe.HTExtractingRecipe import hiiragi283.ragium.impl.recipe.HTSimulatingRecipe import hiiragi283.ragium.impl.recipe.base.HTBasicItemWithCatalystRecipe +import net.minecraft.resources.ResourceLocation import net.minecraft.world.item.crafting.RecipeHolder import kotlin.jvm.optionals.getOrNull -class HTItemWithCatalystEmiRecipe(category: HTEmiRecipeCategory, holder: RecipeHolder) : - HTMultiOutputsEmiRecipe(category, holder) { +class HTItemWithCatalystEmiRecipe : HTMultiOutputsEmiRecipe { + constructor(category: HTEmiRecipeCategory, id: ResourceLocation, recipe: HTBasicItemWithCatalystRecipe) : super( + category, + id, + recipe, + ) + + constructor(category: HTEmiRecipeCategory, holder: RecipeHolder) : super( + category, + holder, + ) + companion object { @JvmStatic fun compressing(holder: RecipeHolder): HTItemWithCatalystEmiRecipe = HTItemWithCatalystEmiRecipe(RagiumEmiRecipeCategories.COMPRESSING, holder) + @JvmStatic + fun extracting(id: ResourceLocation, recipe: HTBasicItemWithCatalystRecipe): HTItemWithCatalystEmiRecipe = + HTItemWithCatalystEmiRecipe(RagiumEmiRecipeCategories.EXTRACTING, id, recipe) + @JvmStatic fun extracting(holder: RecipeHolder): HTItemWithCatalystEmiRecipe = HTItemWithCatalystEmiRecipe(RagiumEmiRecipeCategories.EXTRACTING, holder) diff --git a/src/main/kotlin/hiiragi283/ragium/client/gui/screen/HTFluidCollectorScreen.kt b/src/main/kotlin/hiiragi283/ragium/client/gui/screen/HTFluidCollectorScreen.kt index e08993401..cc428cf4e 100644 --- a/src/main/kotlin/hiiragi283/ragium/client/gui/screen/HTFluidCollectorScreen.kt +++ b/src/main/kotlin/hiiragi283/ragium/client/gui/screen/HTFluidCollectorScreen.kt @@ -25,7 +25,7 @@ class HTFluidCollectorScreen(menu: HTBlockEntityContainerMenu = listOf(fluidWidget) diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTBlockEntity.kt index f1cdc3da1..758183dc2 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTBlockEntity.kt @@ -7,6 +7,7 @@ import hiiragi283.ragium.api.block.entity.HTOwnedBlockEntity import hiiragi283.ragium.api.registry.impl.HTDeferredBlockEntityType import hiiragi283.ragium.api.serialization.value.HTValueInput import hiiragi283.ragium.api.serialization.value.HTValueOutput +import hiiragi283.ragium.api.stack.ImmutableFluidStack import hiiragi283.ragium.api.stack.ImmutableItemStack import hiiragi283.ragium.api.storage.HTHandlerProvider import hiiragi283.ragium.api.storage.energy.HTEnergyBattery @@ -29,6 +30,8 @@ import hiiragi283.ragium.common.storage.fluid.tank.HTBasicFluidTank import hiiragi283.ragium.common.storage.resolver.HTEnergyStorageManager import hiiragi283.ragium.common.storage.resolver.HTFluidHandlerManager import hiiragi283.ragium.common.storage.resolver.HTItemHandlerManager +import hiiragi283.ragium.common.util.HTExperienceHelper +import hiiragi283.ragium.setup.RagiumFluidContents import net.minecraft.core.BlockPos import net.minecraft.core.Direction import net.minecraft.core.Holder @@ -41,6 +44,7 @@ import net.minecraft.network.chat.Component import net.minecraft.network.chat.ComponentSerialization import net.minecraft.server.level.ServerLevel import net.minecraft.world.Nameable +import net.minecraft.world.entity.ExperienceOrb import net.minecraft.world.entity.player.Player import net.minecraft.world.item.enchantment.ItemEnchantments import net.minecraft.world.level.Level @@ -249,6 +253,23 @@ abstract class HTBlockEntity(val blockHolder: Holder, pos: BlockPos, stat final override fun getFluidHandler(direction: Direction?): IFluidHandler? = fluidHandlerManager?.resolve(direction) + override fun onRemove(level: Level, pos: BlockPos) { + super.onRemove(level, pos) + val expFluidAmount: Int = getFluidTanks(getFluidSideFor()) + .mapNotNull(HTFluidTank::getStack) + .filter(RagiumFluidContents.EXPERIENCE::isOf) + .sumOf(ImmutableFluidStack::amount) + if (expFluidAmount > 0) { + ExperienceOrb( + level, + pos.x.toDouble(), + pos.y.toDouble(), + pos.z.toDouble(), + HTExperienceHelper.expAmountFromFluid(expFluidAmount), + ).let(level::addFreshEntity) + } + } + // Energy /** diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTFluidCollectorBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTFluidCollectorBlockEntity.kt index d69f98615..82408a25a 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTFluidCollectorBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTFluidCollectorBlockEntity.kt @@ -11,11 +11,9 @@ import hiiragi283.ragium.common.storage.fluid.tank.HTBasicFluidTank import hiiragi283.ragium.common.storage.fluid.tank.HTExpOrbTank import hiiragi283.ragium.common.storage.fluid.tank.HTVariableFluidTank import hiiragi283.ragium.common.storage.holder.HTBasicFluidTankHolder -import hiiragi283.ragium.common.util.HTExperienceHelper import hiiragi283.ragium.common.util.HTStackSlotHelper import hiiragi283.ragium.config.RagiumConfig import hiiragi283.ragium.setup.RagiumBlocks -import hiiragi283.ragium.setup.RagiumFluidContents import hiiragi283.ragium.setup.RagiumItems import net.minecraft.core.BlockPos import net.minecraft.core.Direction @@ -34,31 +32,19 @@ import net.minecraft.world.level.block.state.BlockState class HTFluidCollectorBlockEntity(pos: BlockPos, state: BlockState) : HTDeviceBlockEntity.Tickable(RagiumBlocks.FLUID_COLLECTOR, pos, state) { - lateinit var tank: HTBasicFluidTank + lateinit var outputTank: HTBasicFluidTank private set override fun initializeFluidTanks(builder: HTBasicFluidTankHolder.Builder, listener: HTContentListener) { // output - tank = builder.addSlot( + outputTank = builder.addSlot( HTSlotInfo.OUTPUT, HTVariableFluidTank.output(listener, RagiumConfig.COMMON.deviceCollectorTankCapacity), ) } - override fun onRemove(level: Level, pos: BlockPos) { - super.onRemove(level, pos) - if (RagiumFluidContents.EXPERIENCE.isOf(tank.getStack())) { - ExperienceOrb( - level, - pos.x.toDouble(), - pos.y.toDouble(), - pos.z.toDouble(), - HTExperienceHelper.expAmountFromFluid(tank.getAmount()), - ).let(level::addFreshEntity) - } - } - - override fun getComparatorOutput(state: BlockState, level: Level, pos: BlockPos): Int = HTStackSlotHelper.calculateRedstoneLevel(tank) + override fun getComparatorOutput(state: BlockState, level: Level, pos: BlockPos): Int = + HTStackSlotHelper.calculateRedstoneLevel(outputTank) // Ticking // @@ -80,7 +66,7 @@ class HTFluidCollectorBlockEntity(pos: BlockPos, state: BlockState) : .asSequence() .filter(ExperienceOrb::isAlive) .map(::HTExpOrbTank) - .forEach { tank: HTExpOrbTank -> HTStackSlotHelper.moveStack(tank, this.tank) } + .forEach { tank: HTExpOrbTank -> HTStackSlotHelper.moveStack(tank, this.outputTank) } return true } @@ -89,8 +75,8 @@ class HTFluidCollectorBlockEntity(pos: BlockPos, state: BlockState) : val amount: Int = calculateWaterAmount(level, pos) val stack: ImmutableFluidStack = HTFluidHolderLike.WATER.toImmutableStack(amount) ?: return false // 液体を搬入できるかチェック - if (!HTStackSlotHelper.canInsertStack(tank, stack, false)) return false - tank.insert(stack, HTStorageAction.EXECUTE, HTStorageAccess.INTERNAL) + if (!HTStackSlotHelper.canInsertStack(outputTank, stack, false)) return false + outputTank.insert(stack, HTStorageAction.EXECUTE, HTStorageAccess.INTERNAL) level.playSound(null, pos, SoundEvents.BUCKET_FILL, SoundSource.BLOCKS) return true } diff --git a/src/main/kotlin/hiiragi283/ragium/common/event/RagiumRuntimeRecipeHandler.kt b/src/main/kotlin/hiiragi283/ragium/common/event/RagiumRuntimeRecipeHandler.kt index 5bdf94817..99f7835b0 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/event/RagiumRuntimeRecipeHandler.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/event/RagiumRuntimeRecipeHandler.kt @@ -13,9 +13,11 @@ import hiiragi283.ragium.api.recipe.HTRegisterRuntimeRecipeEvent import hiiragi283.ragium.api.tag.RagiumModTags import hiiragi283.ragium.common.HTMoldType import hiiragi283.ragium.common.material.CommonMaterialPrefixes +import hiiragi283.ragium.impl.data.recipe.HTComplexRecipeBuilder import hiiragi283.ragium.impl.data.recipe.HTItemWithCatalystRecipeBuilder import hiiragi283.ragium.impl.data.recipe.HTShapelessInputsRecipeBuilder import hiiragi283.ragium.impl.data.recipe.HTSingleExtraItemRecipeBuilder +import hiiragi283.ragium.setup.RagiumFluidContents import net.minecraft.tags.TagKey import net.minecraft.world.item.Item import net.neoforged.bus.api.SubscribeEvent @@ -35,6 +37,8 @@ object RagiumRuntimeRecipeHandler { compressing(event, key, definition) // Crushing crushing(event, key, definition) + // Mixing + mixingMetalOre(event, key, definition) } } @@ -193,4 +197,21 @@ object RagiumRuntimeRecipeHandler { event.resultHelper.item(outputPrefix, key, outputCount), ).saveSuffixed(event.output, "_from_${inputPrefix.asPrefixName()}") } + + // Mixing // + + @JvmStatic + private fun mixingMetalOre(event: HTRegisterRuntimeRecipeEvent, key: HTMaterialKey, definition: HTMaterialDefinition) { + val basePrefix: HTMaterialPrefix = definition.getDefaultPrefix() ?: return + if (!basePrefix.isOf(CommonMaterialPrefixes.INGOT)) return + if (!event.isPresentTag(CommonMaterialPrefixes.ORE, key)) return + if (!event.isPresentTag(CommonMaterialPrefixes.INGOT, key)) return + + HTComplexRecipeBuilder + .mixing() + .addIngredient(event.itemCreator.fromTagKey(CommonMaterialPrefixes.ORE, key)) + .addIngredient(event.fluidCreator.fromHolder(RagiumFluidContents.CRIMSON_BLOOD, 250)) + .setResult(event.resultHelper.item(CommonMaterialPrefixes.INGOT, key, 4)) + .saveSuffixed(event.output, "_from_ore") + } } diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/machine/HTBioExtractingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/machine/HTBioExtractingRecipe.kt new file mode 100644 index 000000000..1f0d44193 --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/machine/HTBioExtractingRecipe.kt @@ -0,0 +1,51 @@ +package hiiragi283.ragium.common.recipe.machine + +import hiiragi283.ragium.api.RagiumAPI +import hiiragi283.ragium.api.RagiumConst +import hiiragi283.ragium.api.math.times +import hiiragi283.ragium.api.math.toFraction +import hiiragi283.ragium.api.recipe.RagiumRecipeTypes +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.setup.RagiumFluidContents +import hiiragi283.ragium.setup.RagiumRecipeSerializers +import net.minecraft.core.HolderLookup +import net.minecraft.resources.ResourceLocation +import net.minecraft.world.item.Items +import net.minecraft.world.item.crafting.RecipeSerializer +import net.minecraft.world.item.crafting.RecipeType +import net.minecraft.world.level.Level +import net.minecraft.world.level.block.ComposterBlock + +data object HTBioExtractingRecipe : HTItemWithCatalystRecipe { + @JvmField + val RECIPE_ID: ResourceLocation = RagiumAPI.id(RagiumConst.EXTRACTING, "crude_bio_from_items") + + @JvmStatic + fun getCrudeBio(chance: Float): ImmutableFluidStack? { + if (chance <= 0f) return null + return RagiumFluidContents.CRUDE_BIO.toImmutableStack((1000 * chance.toFraction()).toInt()) + } + + override fun assembleFluid(input: HTRecipeInput, provider: HolderLookup.Provider): ImmutableFluidStack? = input + .item(0) + ?.unwrap() + ?.let(ComposterBlock::getValue) + ?.let(::getCrudeBio) + + override fun assembleItem(input: HTRecipeInput, provider: HolderLookup.Provider): ImmutableItemStack? = null + + override fun matches(input: HTRecipeInput, level: Level): Boolean { + val bool1: Boolean = input.testItem(0) { stack: ImmutableItemStack -> ComposterBlock.getValue(stack.unwrap()) > 0f } + val bool2: Boolean = input.testItem(1) { stack: ImmutableItemStack -> stack.isOf(Items.COMPOSTER) } + return bool1 && bool2 + } + + override fun getSerializer(): RecipeSerializer<*> = RagiumRecipeSerializers.BIO_EXTRACTING + + override fun getType(): RecipeType<*> = RagiumRecipeTypes.EXTRACTING.get() + + override fun getRequiredCount(): Int = 1 +} 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 7625ac697..a6877126f 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/recipe/machine/HTCopyEnchantingRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/machine/HTCopyEnchantingRecipe.kt @@ -1,5 +1,7 @@ package hiiragi283.ragium.common.recipe.machine +import hiiragi283.ragium.api.RagiumAPI +import hiiragi283.ragium.api.RagiumConst import hiiragi283.ragium.api.item.component.filter import hiiragi283.ragium.api.recipe.RagiumRecipeTypes import hiiragi283.ragium.api.recipe.input.HTRecipeInput @@ -10,12 +12,16 @@ import hiiragi283.ragium.common.util.HTExperienceHelper import hiiragi283.ragium.setup.RagiumRecipeSerializers import net.minecraft.core.HolderLookup import net.minecraft.core.component.DataComponents +import net.minecraft.resources.ResourceLocation 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.item.enchantment.ItemEnchantments object HTCopyEnchantingRecipe : HTCombineRecipe { + @JvmField + val RECIPE_ID: ResourceLocation = RagiumAPI.id(RagiumConst.ENCHANTING, "copy_from_book") + override fun getLeftRequiredCount(): Int = 1 override fun getRightRequiredCount(): Int = 0 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 3b37e748b..0c5e7a53c 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/recipe/machine/HTExpExtractingRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/machine/HTExpExtractingRecipe.kt @@ -1,5 +1,7 @@ package hiiragi283.ragium.common.recipe.machine +import hiiragi283.ragium.api.RagiumAPI +import hiiragi283.ragium.api.RagiumConst import hiiragi283.ragium.api.recipe.RagiumRecipeTypes import hiiragi283.ragium.api.recipe.input.HTRecipeInput import hiiragi283.ragium.api.recipe.multi.HTItemWithCatalystRecipe @@ -9,6 +11,7 @@ import hiiragi283.ragium.common.util.HTExperienceHelper import hiiragi283.ragium.setup.RagiumFluidContents import hiiragi283.ragium.setup.RagiumRecipeSerializers import net.minecraft.core.HolderLookup +import net.minecraft.resources.ResourceLocation import net.minecraft.world.item.Items import net.minecraft.world.item.crafting.RecipeSerializer import net.minecraft.world.item.crafting.RecipeType @@ -16,6 +19,9 @@ import net.minecraft.world.item.enchantment.EnchantmentHelper import net.minecraft.world.level.Level data object HTExpExtractingRecipe : HTItemWithCatalystRecipe { + @JvmField + val RECIPE_ID: ResourceLocation = RagiumAPI.id(RagiumConst.EXTRACTING, "experience_from_items") + override fun assembleFluid(input: HTRecipeInput, provider: HolderLookup.Provider): ImmutableFluidStack? = input .item(0) ?.unwrap() diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumItems.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumItems.kt index 0ca4951cc..829455b0e 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumItems.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumItems.kt @@ -153,9 +153,7 @@ object RagiumItems { val RAGI_COKE: HTSimpleDeferredItem = REGISTER.registerSimpleItem("ragi_coke") @JvmField - val RAGIUM_POWDER: HTSimpleDeferredItem = REGISTER.registerSimpleItem("ragium_powder") { - it.requiredFeatures(RagiumAPI.WORK_IN_PROGRESS) - } + val RAGIUM_POWDER: HTSimpleDeferredItem = REGISTER.registerSimpleItem("ragium_powder") // Wood @JvmField diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeSerializers.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeSerializers.kt index 2dd1e4727..600601c50 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeSerializers.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeSerializers.kt @@ -16,6 +16,7 @@ import hiiragi283.ragium.common.recipe.crafting.HTGravitationalUpgradeRecipe import hiiragi283.ragium.common.recipe.crafting.HTIceCreamSodaRecipe import hiiragi283.ragium.common.recipe.crafting.HTPotionDropRecipe import hiiragi283.ragium.common.recipe.crafting.HTUpgradeChargeRecipe +import hiiragi283.ragium.common.recipe.machine.HTBioExtractingRecipe import hiiragi283.ragium.common.recipe.machine.HTCopyEnchantingRecipe import hiiragi283.ragium.common.recipe.machine.HTExpExtractingRecipe import hiiragi283.ragium.impl.recipe.HTAlloyingRecipe @@ -53,15 +54,23 @@ object RagiumRecipeSerializers { private fun > register(name: String, codec: MapBiCodec): RecipeSerializer = register(name, SimpleSerializer(codec)) + @JvmStatic + private fun > register(name: String, recipe: RECIPE): RecipeSerializer = + register(name, MapBiCodec.unit(recipe)) + // Custom // + @JvmField + val BIO_EXTRACTING: RecipeSerializer = + register("bio_extracting", HTBioExtractingRecipe) + @JvmField val CLEAR_COMPONENT: RecipeSerializer = register("clear_component", HTClearComponentRecipe.CODEC) @JvmField val COPY_ENCHANTING: RecipeSerializer = - register("copy_enchanting", MapBiCodec.unit(HTCopyEnchantingRecipe)) + register("copy_enchanting", HTCopyEnchantingRecipe) @JvmField val ETERNAL_UPGRADE: RecipeSerializer = @@ -69,7 +78,7 @@ object RagiumRecipeSerializers { @JvmField val EXP_EXTRACTING: RecipeSerializer = - register("exp_extracting", MapBiCodec.unit(HTExpExtractingRecipe)) + register("exp_extracting", HTExpExtractingRecipe) @JvmField val GRAVITATIONAL_UPGRADE: RecipeSerializer = From fb0295f10021048a0add631ede4589759fa1ff6b Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Wed, 10 Dec 2025 16:56:44 +0900 Subject: [PATCH 06/49] fix: drop incorrect exp orbs when level loaded --- .../ragium/common/block/HTTypedEntityBlock.kt | 6 +-- .../common/block/entity/HTBlockEntity.kt | 46 ++++++++++-------- .../block/entity/HTMachineBlockEntity.kt | 4 +- .../entity/storage/HTCrateBlockEntity.kt | 2 +- .../block/entity/storage/HTDrumBlockEntity.kt | 3 ++ .../common/entity/vehicle/HTMinecart.kt | 3 +- .../ragium/textures/item/ragium_powder.png | Bin 0 -> 325 bytes 7 files changed, 34 insertions(+), 30 deletions(-) create mode 100644 src/main/resources/assets/ragium/textures/item/ragium_powder.png diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/HTTypedEntityBlock.kt b/src/main/kotlin/hiiragi283/ragium/common/block/HTTypedEntityBlock.kt index a260b0a26..57b7e6f07 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/HTTypedEntityBlock.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/HTTypedEntityBlock.kt @@ -8,11 +8,9 @@ import hiiragi283.ragium.api.block.attribute.getAttribute import hiiragi283.ragium.api.block.attribute.hasAttribute import hiiragi283.ragium.api.block.type.HTEntityBlockType import hiiragi283.ragium.api.registry.impl.HTDeferredBlockEntityType -import hiiragi283.ragium.api.stack.ImmutableItemStack import hiiragi283.ragium.api.storage.fluid.HTFluidTank import hiiragi283.ragium.api.world.getTypedBlockEntity import hiiragi283.ragium.common.block.entity.HTBlockEntity -import hiiragi283.ragium.common.util.HTItemDropHelper import hiiragi283.ragium.common.util.HTStackSlotHelper import hiiragi283.ragium.setup.RagiumMenuTypes import net.minecraft.core.BlockPos @@ -123,9 +121,7 @@ open class HTTypedEntityBlock(type: TYPE, properties: ) { if (!state.`is`(newState.block)) { level.getTypedBlockEntity(pos)?.let { blockEntity: HTBlockEntity -> - blockEntity.collectDrops { stack: ImmutableItemStack -> - HTItemDropHelper.dropStackAt(level, pos, stack) - } + blockEntity.onBlockRemoved(state, level, pos) } } super.onRemove(state, level, pos, newState, movedByPiston) diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTBlockEntity.kt index 758183dc2..3050343b1 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTBlockEntity.kt @@ -31,6 +31,7 @@ import hiiragi283.ragium.common.storage.resolver.HTEnergyStorageManager import hiiragi283.ragium.common.storage.resolver.HTFluidHandlerManager import hiiragi283.ragium.common.storage.resolver.HTItemHandlerManager import hiiragi283.ragium.common.util.HTExperienceHelper +import hiiragi283.ragium.common.util.HTItemDropHelper import hiiragi283.ragium.setup.RagiumFluidContents import net.minecraft.core.BlockPos import net.minecraft.core.Direction @@ -50,6 +51,7 @@ import net.minecraft.world.item.enchantment.ItemEnchantments import net.minecraft.world.level.Level import net.minecraft.world.level.block.Block import net.minecraft.world.level.block.state.BlockState +import net.minecraft.world.phys.Vec3 import net.neoforged.neoforge.energy.IEnergyStorage import net.neoforged.neoforge.fluids.capability.IFluidHandler import net.neoforged.neoforge.items.IItemHandler @@ -120,6 +122,29 @@ abstract class HTBlockEntity(val blockHolder: Holder, pos: BlockPos, stat protected abstract fun onUpdateServer(level: ServerLevel, pos: BlockPos, state: BlockState): Boolean + open fun onBlockRemoved(state: BlockState, level: Level, pos: BlockPos) { + // Drop remaining items + collectItemDrops { stack: ImmutableItemStack -> HTItemDropHelper.dropStackAt(level, pos, stack) } + // Drop remaining fluids + collectFluidDrops(level, Vec3.atCenterOf(pos)) + } + + open fun collectItemDrops(consumer: Consumer) { + getItemSlots(getItemSideFor()).mapNotNull(HTItemSlot::getStack).forEach(consumer) + } + + open fun collectFluidDrops(level: Level, pos: Vec3) { + if (level !is ServerLevel) return + val expAmount: Int = getFluidTanks(getFluidSideFor()) + .mapNotNull(HTFluidTank::getStack) + .filter(RagiumFluidContents.EXPERIENCE::isOf) + .sumOf(ImmutableFluidStack::amount) + .let(HTExperienceHelper::expAmountFromFluid) + if (expAmount > 0) { + ExperienceOrb.award(level, pos, expAmount) + } + } + // Save & Read // var enchantment: ItemEnchantments @@ -253,23 +278,6 @@ abstract class HTBlockEntity(val blockHolder: Holder, pos: BlockPos, stat final override fun getFluidHandler(direction: Direction?): IFluidHandler? = fluidHandlerManager?.resolve(direction) - override fun onRemove(level: Level, pos: BlockPos) { - super.onRemove(level, pos) - val expFluidAmount: Int = getFluidTanks(getFluidSideFor()) - .mapNotNull(HTFluidTank::getStack) - .filter(RagiumFluidContents.EXPERIENCE::isOf) - .sumOf(ImmutableFluidStack::amount) - if (expFluidAmount > 0) { - ExperienceOrb( - level, - pos.x.toDouble(), - pos.y.toDouble(), - pos.z.toDouble(), - HTExperienceHelper.expAmountFromFluid(expFluidAmount), - ).let(level::addFreshEntity) - } - } - // Energy /** @@ -300,9 +308,5 @@ abstract class HTBlockEntity(val blockHolder: Holder, pos: BlockPos, stat final override fun getItemSlots(side: Direction?): List = itemHandlerManager?.getContainers(side) ?: listOf() - open fun collectDrops(consumer: Consumer) { - getItemSlots(getItemSideFor()).mapNotNull(HTItemSlot::getStack).forEach(consumer) - } - final override fun getItemHandler(direction: Direction?): IItemHandler? = itemHandlerManager?.resolve(direction) } diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTMachineBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTMachineBlockEntity.kt index e6c955aea..5d7c610aa 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTMachineBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTMachineBlockEntity.kt @@ -100,8 +100,8 @@ abstract class HTMachineBlockEntity(blockHolder: Holder, pos: BlockPos, s return filter.isOf(getBlockEntityType(this.blockHolder)) } - override fun collectDrops(consumer: Consumer) { - super.collectDrops(consumer) + override fun collectItemDrops(consumer: Consumer) { + super.collectItemDrops(consumer) upgradeSlots.mapNotNull(HTBasicItemSlot::getStack).forEach(consumer) } diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTCrateBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTCrateBlockEntity.kt index ed33f2d50..d79f17588 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTCrateBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTCrateBlockEntity.kt @@ -44,7 +44,7 @@ class HTCrateBlockEntity(blockHolder: Holder, pos: BlockPos, state: Block ) } - override fun collectDrops(consumer: Consumer) {} + override fun collectItemDrops(consumer: Consumer) {} override fun getComparatorOutput(state: BlockState, level: Level, pos: BlockPos): Int = HTStackSlotHelper.calculateRedstoneLevel(slot) diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTDrumBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTDrumBlockEntity.kt index dc3affd59..cc7524918 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTDrumBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTDrumBlockEntity.kt @@ -18,6 +18,7 @@ import net.minecraft.server.level.ServerLevel import net.minecraft.world.level.Level import net.minecraft.world.level.block.Block import net.minecraft.world.level.block.state.BlockState +import net.minecraft.world.phys.Vec3 abstract class HTDrumBlockEntity(blockHolder: Holder, pos: BlockPos, state: BlockState) : HTConfigurableBlockEntity(blockHolder, pos, state) { @@ -49,6 +50,8 @@ abstract class HTDrumBlockEntity(blockHolder: Holder, pos: BlockPos, stat override fun getComparatorOutput(state: BlockState, level: Level, pos: BlockPos): Int = HTStackSlotHelper.calculateRedstoneLevel(tank) + override fun collectFluidDrops(level: Level, pos: Vec3) {} + // Save & Read // override fun applyImplicitComponents(componentInput: DataComponentInput) { diff --git a/src/main/kotlin/hiiragi283/ragium/common/entity/vehicle/HTMinecart.kt b/src/main/kotlin/hiiragi283/ragium/common/entity/vehicle/HTMinecart.kt index a13a39d99..6932a5331 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/entity/vehicle/HTMinecart.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/entity/vehicle/HTMinecart.kt @@ -69,9 +69,10 @@ abstract class HTMinecart : result.set(DataComponents.CUSTOM_NAME, this.customName) } this.spawnAtLocation(result) - bindBlockEntity().collectDrops { stack: ImmutableItemStack -> + bindBlockEntity().collectItemDrops { stack: ImmutableItemStack -> this.spawnAtLocation(stack.unwrap()) } + bindBlockEntity().collectFluidDrops(level(), position()) } } diff --git a/src/main/resources/assets/ragium/textures/item/ragium_powder.png b/src/main/resources/assets/ragium/textures/item/ragium_powder.png new file mode 100644 index 0000000000000000000000000000000000000000..23fa2b69e35112868c2d2f49fdbf5a384b1cda83 GIT binary patch literal 325 zcmV-L0lNN)P);dw?gRd<|ICYh~_S|O`24t9+b4n z{onnUYY%@$)O3(w@E^zLo@siijc@V%=<=BCEuEfBDcuBVK+qVM< zB~!&z-4Jr*w7|*w)waj?pv46FbfMKH<{PIKh9-04AYM6VVL+CH1ci`8T|mwtN2Lpa zz5}TM>4_f}kWdSdX2zMingY5VfhRl%MZeguxf;X}*d3wJ!CKx3N zDU6F`rmGwbkUGPooQgM^Vw^?4^{~Z3Kpj@!Yy6Sg#v1?t|NlBwkmdjY00v1!K~w_( XR)dBUQV`(U00000NkvXXu0mjf655S$ literal 0 HcmV?d00001 From 0f1610aadf11354453b9c6d9675201c4bb7aa6f9 Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Wed, 10 Dec 2025 17:24:40 +0900 Subject: [PATCH 07/49] build: removed dependency Hostile Neural Network --- gradle/libs.versions.toml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 12eca5d84..aeafa5211 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -21,7 +21,7 @@ delight = "1.21.1-1.2.9" emi = "1.1.22+1.21.1" ender-io = "8.0.6-alpha" fusion = "1.2.11b-neoforge-mc1.21" -hostile = "1.21.1-6.3.0" +#hostile = "1.21.1-6.3.0" immersive = "1.21.1-12.4.2-194" jade = "15.10.3+neoforge" kc = "1.1.1-neoforge+mc1.21.1" @@ -58,7 +58,7 @@ curious = { group = "top.theillusivec4.curios", name = "curios-neoforge", versio delight = { group = "maven.modrinth", name = "farmers-delight", version.ref = "delight" } emi = { group = "dev.emi", name = "emi-neoforge", version.ref = "emi" } fusion = { group = "maven.modrinth", name = "fusion-connected-textures", version.ref = "fusion" } -hostile = { group = "dev.shadowsoffire", name = "HostileNeuralNetworks", version.ref = "hostile" } +#hostile = { group = "dev.shadowsoffire", name = "HostileNeuralNetworks", version.ref = "hostile" } immersive = { group = "blusunrize.immersiveengineering", name = "ImmersiveEngineering", version.ref = "immersive" } jade = { group = "maven.modrinth", name = "jade", version.ref = "jade" } kc = { group = "maven.modrinth", name = "kaleidoscope-cookery", version.ref = "kc" } @@ -89,7 +89,6 @@ mods-impl = [ "almost", "delight", "emi", - "hostile", "immersive", "jade", "kc", From f0d88cced0b8cd0dcd59ac26dd908bd51e00fafe Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Wed, 10 Dec 2025 17:25:21 +0900 Subject: [PATCH 08/49] feat: added integration recipe for Create: Enchantment Industry --- .../hiiragi283/ragium/api/RagiumConst.kt | 1 + .../ragium/api/data/HTDataGenerator.kt | 4 +- .../ragium/api/data/HTDataPackGenerator.kt | 6 +-- .../ragium/api/data/HTRootDataGenerator.kt | 47 +++++++++++-------- .../hiiragi283/ragium/data/RagiumDatagen.kt | 44 +++++++++-------- .../data/server/RagiumRecipeProvider.kt | 2 + .../compat/RagiumCreateEnchRecipeProvider.kt | 23 +++++++++ 7 files changed, 79 insertions(+), 48 deletions(-) create mode 100644 src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumCreateEnchRecipeProvider.kt diff --git a/src/api/kotlin/hiiragi283/ragium/api/RagiumConst.kt b/src/api/kotlin/hiiragi283/ragium/api/RagiumConst.kt index b55983dfb..c10a5f33e 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/RagiumConst.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/RagiumConst.kt @@ -42,6 +42,7 @@ object RagiumConst { const val ARS_NOUVEAU = "ars_nouveau" const val COMMON = "c" const val CREATE = "create" + const val CREATE_ENCH = "create_enchantment_industry" const val EIO = "enderio" const val EIO_BASE = "enderio_base" const val EIO_MACHINES = "enderio_machines" diff --git a/src/data/kotlin/hiiragi283/ragium/api/data/HTDataGenerator.kt b/src/data/kotlin/hiiragi283/ragium/api/data/HTDataGenerator.kt index bb4e63e7b..c47abf97e 100644 --- a/src/data/kotlin/hiiragi283/ragium/api/data/HTDataGenerator.kt +++ b/src/data/kotlin/hiiragi283/ragium/api/data/HTDataGenerator.kt @@ -3,9 +3,9 @@ package hiiragi283.ragium.api.data import net.minecraft.data.DataProvider interface HTDataGenerator { - fun addProvider(run: Boolean, factory: DataProvider.Factory): DATA + fun addProvider(factory: DataProvider.Factory): DATA - fun addProvider(run: Boolean, factory: Factory): DATA + fun addProvider(factory: Factory): DATA fun interface Factory { fun create(context: HTDataGenContext): DATA diff --git a/src/data/kotlin/hiiragi283/ragium/api/data/HTDataPackGenerator.kt b/src/data/kotlin/hiiragi283/ragium/api/data/HTDataPackGenerator.kt index b15039653..ff508bcf2 100644 --- a/src/data/kotlin/hiiragi283/ragium/api/data/HTDataPackGenerator.kt +++ b/src/data/kotlin/hiiragi283/ragium/api/data/HTDataPackGenerator.kt @@ -12,8 +12,8 @@ data class HTDataPackGenerator( val registries: CompletableFuture, val fileHelper: ExistingFileHelper, ) : HTDataGenerator { - override fun addProvider(run: Boolean, factory: DataProvider.Factory): DATA = generator.addProvider(factory) + override fun addProvider(factory: DataProvider.Factory): DATA = generator.addProvider(factory) - override fun addProvider(run: Boolean, factory: HTDataGenerator.Factory): DATA = - addProvider(run) { output: PackOutput -> factory.create(HTDataGenContext(output, registries, fileHelper)) } + override fun addProvider(factory: HTDataGenerator.Factory): DATA = + addProvider { output: PackOutput -> factory.create(HTDataGenContext(output, registries, fileHelper)) } } diff --git a/src/data/kotlin/hiiragi283/ragium/api/data/HTRootDataGenerator.kt b/src/data/kotlin/hiiragi283/ragium/api/data/HTRootDataGenerator.kt index 09806c7b4..9de7df83f 100644 --- a/src/data/kotlin/hiiragi283/ragium/api/data/HTRootDataGenerator.kt +++ b/src/data/kotlin/hiiragi283/ragium/api/data/HTRootDataGenerator.kt @@ -11,45 +11,52 @@ import net.neoforged.neoforge.common.data.DatapackBuiltinEntriesProvider import net.neoforged.neoforge.common.data.ExistingFileHelper import net.neoforged.neoforge.data.event.GatherDataEvent import java.util.concurrent.CompletableFuture +import java.util.function.BooleanSupplier /** * データ生成でよく使うインスタンスを束ねたデータクラス */ +@ConsistentCopyVisibility @JvmRecord -data class HTRootDataGenerator( +data class HTRootDataGenerator private constructor( private val generator: DataGenerator, + private val doRun: BooleanSupplier, val registries: CompletableFuture, val fileHelper: ExistingFileHelper, ) : HTDataGenerator { companion object { @JvmStatic - fun withDataPack(event: GatherDataEvent, builderAction: RegistrySetBuilder.() -> Unit): HTRootDataGenerator { + fun withDataPack( + event: GatherDataEvent, + builderAction: RegistrySetBuilder.() -> Unit, + ): Pair { val generator: DataGenerator = event.generator val registries: CompletableFuture = generator - .addProvider( - event.includeServer(), - { output: PackOutput -> - DatapackBuiltinEntriesProvider( - output, - event.lookupProvider, - RegistrySetBuilder().apply(builderAction), - RagiumConst.BUILTIN_IDS, - ) - }, - ).registryProvider - return HTRootDataGenerator(generator, registries, event.existingFileHelper) + .addProvider(event.includeServer()) { output: PackOutput -> + DatapackBuiltinEntriesProvider( + output, + event.lookupProvider, + RegistrySetBuilder().apply(builderAction), + RagiumConst.BUILTIN_IDS, + ) + }.registryProvider + val fileHelper: ExistingFileHelper = event.existingFileHelper + return Pair( + HTRootDataGenerator(generator, event::includeServer, registries, fileHelper), + HTRootDataGenerator(generator, event::includeClient, registries, fileHelper), + ) } } - fun createDataPackGenerator(toRun: Boolean, id: ResourceLocation): HTDataPackGenerator = HTDataPackGenerator( - generator.getBuiltinDatapack(toRun, id.namespace, id.path), + fun createDataPackGenerator(id: ResourceLocation): HTDataPackGenerator = HTDataPackGenerator( + generator.getBuiltinDatapack(doRun.asBoolean, id.namespace, id.path), registries, fileHelper, ) - override fun addProvider(run: Boolean, factory: DataProvider.Factory): DATA = - generator.addProvider(run, factory) + override fun addProvider(factory: DataProvider.Factory): DATA = + generator.addProvider(doRun.asBoolean, factory) - override fun addProvider(run: Boolean, factory: HTDataGenerator.Factory): DATA = - addProvider(run) { output: PackOutput -> factory.create(HTDataGenContext(output, registries, fileHelper)) } + override fun addProvider(factory: HTDataGenerator.Factory): DATA = + addProvider { output: PackOutput -> factory.create(HTDataGenContext(output, registries, fileHelper)) } } diff --git a/src/data/kotlin/hiiragi283/ragium/data/RagiumDatagen.kt b/src/data/kotlin/hiiragi283/ragium/data/RagiumDatagen.kt index 794b182ac..bf35e6343 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/RagiumDatagen.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/RagiumDatagen.kt @@ -2,9 +2,9 @@ package hiiragi283.ragium.data import com.simibubi.create.api.registry.CreateRegistries import hiiragi283.ragium.api.RagiumAPI -import hiiragi283.ragium.api.data.HTDataGenContext import hiiragi283.ragium.api.data.HTRootDataGenerator import hiiragi283.ragium.api.data.advancement.HTAdvancementProvider +import hiiragi283.ragium.api.function.partially1 import hiiragi283.ragium.api.text.RagiumTranslation import hiiragi283.ragium.data.client.RagiumBlockStateProvider import hiiragi283.ragium.data.client.RagiumEnglishProvider @@ -47,7 +47,7 @@ import java.util.concurrent.CompletableFuture object RagiumDatagen { @SubscribeEvent fun gatherData(event: GatherDataEvent) { - val generator: HTRootDataGenerator = HTRootDataGenerator.withDataPack(event) { + val (server: HTRootDataGenerator, client: HTRootDataGenerator) = HTRootDataGenerator.withDataPack(event) { add(Registries.ENCHANTMENT, RagiumEnchantmentProvider) add(Registries.CONFIGURED_FEATURE, RagiumConfiguredProvider) add(Registries.PLACED_FEATURE, RagiumPlacedProvider) @@ -60,34 +60,32 @@ object RagiumDatagen { RagiumMaterialManager.gatherAttributes() // server - generator.addProvider( - event.includeServer(), + server.addProvider( RagiumLootTableProvider.create( ::RagiumBlockLootProvider to LootContextParamSets.BLOCK, RagiumCustomLootProvider::Block to LootContextParamSets.BLOCK, RagiumCustomLootProvider::Entity to LootContextParamSets.ENTITY, ), ) - generator.addProvider(event.includeServer(), ::RagiumGlobalLootProvider) + server.addProvider(::RagiumGlobalLootProvider) - generator.addProvider(event.includeServer(), HTAdvancementProvider.create(RagiumAdvancementGenerator)) + server.addProvider(HTAdvancementProvider.create(RagiumAdvancementGenerator)) - generator.addProvider(event.includeServer(), ::RagiumRecipeProvider) + server.addProvider(::RagiumRecipeProvider) - generator.addProvider(event.includeServer(), ::RagiumBlockEntityTypeTagsProvider) - generator.addProvider(event.includeServer(), ::RagiumDamageTypeTagsProvider) - generator.addProvider(event.includeServer(), ::RagiumEnchantmentTagsProvider) - generator.addProvider(event.includeServer(), ::RagiumEntityTypeTagsProvider) - generator.addProvider(event.includeServer(), ::RagiumFluidTagsProvider) - val blockContents: CompletableFuture> = - generator.addProvider(event.includeServer(), ::RagiumBlockTagsProvider).contentsGetter() - generator.addProvider(event.includeServer()) { context: HTDataGenContext -> RagiumItemTagsProvider(blockContents, context) } + server.addProvider(::RagiumBlockEntityTypeTagsProvider) + server.addProvider(::RagiumDamageTypeTagsProvider) + server.addProvider(::RagiumEnchantmentTagsProvider) + server.addProvider(::RagiumEntityTypeTagsProvider) + server.addProvider(::RagiumFluidTagsProvider) + val blockContents: CompletableFuture> = server.addProvider(::RagiumBlockTagsProvider).contentsGetter() + server.addProvider(::RagiumItemTagsProvider.partially1(blockContents)) - generator.addProvider(event.includeServer(), ::RagiumDataMapProvider) + server.addProvider(::RagiumDataMapProvider) - generator - .createDataPackGenerator(event.includeServer(), RagiumAPI.id("work_in_progress")) - .addProvider(event.includeServer()) { output: PackOutput -> + server + .createDataPackGenerator(RagiumAPI.id("work_in_progress")) + .addProvider { output: PackOutput -> PackMetadataGenerator.forFeaturePack( output, RagiumTranslation.DATAPACK_WIP.translate(), @@ -97,11 +95,11 @@ object RagiumDatagen { RagiumAPI.LOGGER.info("Gathered server resources!") // client - generator.addProvider(event.includeClient(), ::RagiumEnglishProvider) - generator.addProvider(event.includeClient(), ::RagiumJapaneseProvider) + client.addProvider(::RagiumEnglishProvider) + client.addProvider(::RagiumJapaneseProvider) - generator.addProvider(event.includeClient(), ::RagiumBlockStateProvider) - generator.addProvider(event.includeClient(), ::RagiumItemModelProvider) + client.addProvider(::RagiumBlockStateProvider) + client.addProvider(::RagiumItemModelProvider) RagiumAPI.LOGGER.info("Gathered client resources!") } diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/RagiumRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/RagiumRecipeProvider.kt index a82e74bb3..9f7362dd9 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/RagiumRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/RagiumRecipeProvider.kt @@ -17,6 +17,7 @@ import hiiragi283.ragium.data.server.recipe.RagiumSimulatingRecipeProvider import hiiragi283.ragium.data.server.recipe.RagiumToolRecipeProvider import hiiragi283.ragium.data.server.recipe.compat.RagiumAARecipeProvider import hiiragi283.ragium.data.server.recipe.compat.RagiumAE2RecipeProvider +import hiiragi283.ragium.data.server.recipe.compat.RagiumCreateEnchRecipeProvider import hiiragi283.ragium.data.server.recipe.compat.RagiumCreateRecipeProvider import hiiragi283.ragium.data.server.recipe.compat.RagiumDelightRecipeProvider import hiiragi283.ragium.data.server.recipe.compat.RagiumEIORecipeProvider @@ -48,6 +49,7 @@ class RagiumRecipeProvider(context: HTDataGenContext) : RecipeProvider(context.o RagiumAARecipeProvider.buildRecipes(recipeOutput, holderLookup) RagiumAE2RecipeProvider.buildRecipes(recipeOutput, holderLookup) + RagiumCreateEnchRecipeProvider.buildRecipes(recipeOutput, holderLookup) RagiumCreateRecipeProvider.buildRecipes(recipeOutput, holderLookup) RagiumDelightRecipeProvider.buildRecipes(recipeOutput, holderLookup) RagiumEIORecipeProvider.buildRecipes(recipeOutput, holderLookup) diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumCreateEnchRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumCreateEnchRecipeProvider.kt new file mode 100644 index 000000000..9a881a5c0 --- /dev/null +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumCreateEnchRecipeProvider.kt @@ -0,0 +1,23 @@ +package hiiragi283.ragium.data.server.recipe.compat + +import hiiragi283.ragium.api.RagiumConst +import hiiragi283.ragium.api.data.recipe.HTRecipeProvider +import hiiragi283.ragium.setup.RagiumBlocks +import plus.dragons.createenchantmentindustry.common.kinetics.grindstone.GrindingRecipe +import plus.dragons.createenchantmentindustry.common.registry.CEIFluids + +object RagiumCreateEnchRecipeProvider : HTRecipeProvider.Integration(RagiumConst.CREATE_ENCH) { + override fun buildRecipeInternal() { + grinding() + } + + @JvmStatic + private fun grinding() { + // Exp Berries -> Exp + GrindingRecipe + .builder(RagiumBlocks.EXP_BERRIES.id) + .require(RagiumBlocks.EXP_BERRIES) + .output(CEIFluids.EXPERIENCE.get(), 50) + .build(output) + } +} From 4e1545d151314b0f8308e038a1596e5d727a8b5d Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Wed, 10 Dec 2025 17:47:12 +0900 Subject: [PATCH 09/49] refactor: updated textures for custom Matter Types --- .../api/data/lang/HTLanguageProvider.kt | 7 +-- .../compat/RagiumReplicationRecipeProvider.kt | 57 +++++++++--------- .../api/registry/impl/HTDeferredMatterType.kt | 25 -------- .../impl/HTDeferredMatterTypeRegister.kt | 48 --------------- .../ragium/setup/DefaultMatterTypes.kt | 38 ------------ .../ragium/setup/RagiumMatterTypes.kt | 38 ++++++++++-- .../textures/gui/mattertypes/azure.png | Bin 156 -> 182 bytes .../textures/gui/mattertypes/deep.png | Bin 156 -> 168 bytes 8 files changed, 64 insertions(+), 149 deletions(-) delete mode 100644 src/integration/kotlin/hiiragi283/ragium/api/registry/impl/HTDeferredMatterType.kt delete mode 100644 src/integration/kotlin/hiiragi283/ragium/api/registry/impl/HTDeferredMatterTypeRegister.kt delete mode 100644 src/integration/kotlin/hiiragi283/ragium/setup/DefaultMatterTypes.kt diff --git a/src/data/kotlin/hiiragi283/ragium/api/data/lang/HTLanguageProvider.kt b/src/data/kotlin/hiiragi283/ragium/api/data/lang/HTLanguageProvider.kt index ca3d2b18b..5e08f0f93 100644 --- a/src/data/kotlin/hiiragi283/ragium/api/data/lang/HTLanguageProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/api/data/lang/HTLanguageProvider.kt @@ -1,6 +1,5 @@ package hiiragi283.ragium.api.data.lang -import com.buuz135.replication.api.IMatterType import hiiragi283.ragium.api.RagiumAPI import hiiragi283.ragium.api.RagiumConst import hiiragi283.ragium.api.collection.ImmutableTable @@ -12,8 +11,8 @@ import hiiragi283.ragium.api.material.HTMaterialKey import hiiragi283.ragium.api.material.HTMaterialLike import hiiragi283.ragium.api.material.prefix.HTPrefixLike import hiiragi283.ragium.api.registry.HTFluidContent +import hiiragi283.ragium.api.registry.HTHolderLike import hiiragi283.ragium.api.registry.impl.HTDeferredBlock -import hiiragi283.ragium.api.registry.impl.HTDeferredMatterType import hiiragi283.ragium.api.registry.toDescriptionKey import hiiragi283.ragium.api.text.HTHasTranslationKey import hiiragi283.ragium.api.text.RagiumTranslation @@ -108,8 +107,8 @@ abstract class HTLanguageProvider(output: PackOutput, val type: HTLanguageType) add(RagiumChemicals.getChemical(data), value) } // Replication - for ((essence: RagiumEssenceType, matterType: HTDeferredMatterType) in RagiumMatterTypes.MATTER_TYPES) { - add("${RagiumConst.REPLICATION}.matter_type.${matterType.name}", essence.getTranslatedName(type)) + for ((essence: RagiumEssenceType, matterType: HTHolderLike) in RagiumMatterTypes.MATTER_TYPES) { + add("${RagiumConst.REPLICATION}.matter_type.${matterType.getPath()}", essence.getTranslatedName(type)) } } diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumReplicationRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumReplicationRecipeProvider.kt index fe1e7f68a..5b51aeab2 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumReplicationRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumReplicationRecipeProvider.kt @@ -1,5 +1,7 @@ package hiiragi283.ragium.data.server.recipe.compat +import com.buuz135.replication.api.IMatterType +import com.buuz135.replication.api.MatterType import com.buuz135.replication.calculation.MatterValue import com.buuz135.replication.recipe.MatterValueRecipe import hiiragi283.ragium.api.RagiumConst @@ -11,7 +13,6 @@ import hiiragi283.ragium.common.material.CommonMaterialPrefixes import hiiragi283.ragium.common.material.FoodMaterialKeys import hiiragi283.ragium.common.material.RagiumEssenceType import hiiragi283.ragium.common.material.RagiumMaterialKeys -import hiiragi283.ragium.setup.DefaultMatterTypes import hiiragi283.ragium.setup.RagiumMatterTypes import net.minecraft.resources.ResourceLocation import net.minecraft.tags.TagKey @@ -29,90 +30,90 @@ object RagiumReplicationRecipeProvider : HTRecipeProvider.Integration(RagiumCons register( CommonMaterialPrefixes.DUST, RagiumMaterialKeys.RAGINITE, - RagiumMatterTypes.getType(RagiumEssenceType.RAGIUM).toValue(9.0), + RagiumMatterTypes.getType(RagiumEssenceType.RAGIUM) to 9.0, ) register( CommonMaterialPrefixes.INGOT, RagiumMaterialKeys.ADVANCED_RAGI_ALLOY, - DefaultMatterTypes.PRECIOUS.toValue(9.0), - DefaultMatterTypes.METALLIC.toValue(9.0), - RagiumMatterTypes.getType(RagiumEssenceType.RAGIUM).toValue(36.0), + MatterType.PRECIOUS to 9.0, + MatterType.METALLIC to 9.0, + RagiumMatterTypes.getType(RagiumEssenceType.RAGIUM) to 36.0, ) // Azure register( CommonMaterialPrefixes.GEM, RagiumEssenceType.AZURE, - RagiumMatterTypes.getType(RagiumEssenceType.AZURE).toValue(2.0), - DefaultMatterTypes.PRECIOUS.toValue(5.0), + RagiumMatterTypes.getType(RagiumEssenceType.AZURE) to 2.0, + MatterType.PRECIOUS to 5.0, ) register( CommonMaterialPrefixes.INGOT, RagiumMaterialKeys.AZURE_STEEL, - RagiumMatterTypes.getType(RagiumEssenceType.AZURE).toValue(4.0), - DefaultMatterTypes.METALLIC.toValue(9.0), - DefaultMatterTypes.PRECIOUS.toValue(10.0), + RagiumMatterTypes.getType(RagiumEssenceType.AZURE) to 4.0, + MatterType.METALLIC to 9.0, + MatterType.PRECIOUS to 10.0, ) // Deep register( RagiumCommonTags.Items.ORES_DEEP_SCRAP, - DefaultMatterTypes.PRECIOUS.toValue(18.0), - RagiumMatterTypes.getType(RagiumEssenceType.DEEP).toValue(18.0), + MatterType.PRECIOUS to 18.0, + RagiumMatterTypes.getType(RagiumEssenceType.DEEP) to 18.0, ) register( CommonMaterialPrefixes.SCRAP, RagiumEssenceType.DEEP, - DefaultMatterTypes.PRECIOUS.toValue(18.0), - RagiumMatterTypes.getType(RagiumEssenceType.DEEP).toValue(18.0), + MatterType.PRECIOUS to 18.0, + RagiumMatterTypes.getType(RagiumEssenceType.DEEP) to 18.0, ) // Crimson register( CommonMaterialPrefixes.GEM, RagiumMaterialKeys.CRIMSON_CRYSTAL, - DefaultMatterTypes.PRECIOUS.toValue(4.0), - DefaultMatterTypes.NETHER.toValue(4.0), + MatterType.PRECIOUS to 4.0, + MatterType.NETHER to 4.0, ) // Warped register( CommonMaterialPrefixes.GEM, RagiumMaterialKeys.WARPED_CRYSTAL, - DefaultMatterTypes.PRECIOUS.toValue(4.0), - DefaultMatterTypes.ENDER.toValue(4.0), + MatterType.PRECIOUS to 4.0, + MatterType.ENDER to 4.0, ) // Eldritch register( CommonMaterialPrefixes.GEM, RagiumMaterialKeys.ELDRITCH_PEARL, - DefaultMatterTypes.PRECIOUS.toValue(4.0), - DefaultMatterTypes.QUANTUM.toValue(9.0), + MatterType.PRECIOUS to 4.0, + MatterType.QUANTUM to 9.0, ) // Foods register( CommonMaterialPrefixes.DUST, FoodMaterialKeys.RAW_MEAT, - DefaultMatterTypes.LIVING.toValue(4.0), - DefaultMatterTypes.ORGANIC.toValue(4.0), + MatterType.LIVING to 4.0, + MatterType.ORGANIC to 4.0, ) register( CommonMaterialPrefixes.FOOD, FoodMaterialKeys.RAGI_CHERRY, - DefaultMatterTypes.LIVING.toValue(4.0), - DefaultMatterTypes.ORGANIC.toValue(4.0), - RagiumMatterTypes.getType(RagiumEssenceType.RAGIUM).toValue(4.0), + MatterType.LIVING to 4.0, + MatterType.ORGANIC to 4.0, + RagiumMatterTypes.getType(RagiumEssenceType.RAGIUM) to 4.0, ) } @JvmStatic - private fun register(prefix: HTPrefixLike, material: HTMaterialLike, vararg instances: MatterValue) { + private fun register(prefix: HTPrefixLike, material: HTMaterialLike, vararg instances: Pair) { register(prefix.itemTagKey(material), *instances) } @JvmStatic - private fun register(tagKey: TagKey, vararg instances: MatterValue) { - register(tagKey, listOf(*instances)) + private fun register(tagKey: TagKey, vararg instances: Pair) { + register(tagKey, instances.map { (type: IMatterType, amount: Double) -> MatterValue(type, amount) }) } @JvmStatic diff --git a/src/integration/kotlin/hiiragi283/ragium/api/registry/impl/HTDeferredMatterType.kt b/src/integration/kotlin/hiiragi283/ragium/api/registry/impl/HTDeferredMatterType.kt deleted file mode 100644 index e640bb4eb..000000000 --- a/src/integration/kotlin/hiiragi283/ragium/api/registry/impl/HTDeferredMatterType.kt +++ /dev/null @@ -1,25 +0,0 @@ -package hiiragi283.ragium.api.registry.impl - -import com.buuz135.replication.ReplicationRegistry -import com.buuz135.replication.api.IMatterType -import com.buuz135.replication.calculation.MatterValue -import hiiragi283.ragium.api.registry.HTDeferredHolder -import net.minecraft.resources.ResourceKey -import net.minecraft.resources.ResourceLocation -import java.util.function.Supplier - -class HTDeferredMatterType : - HTDeferredHolder, - IMatterType { - constructor(key: ResourceKey) : super(key) - - constructor(id: ResourceLocation) : super(ReplicationRegistry.MATTER_TYPES_KEY, id) - - override fun getName(): String = get().name - - override fun getColor(): Supplier = get().color - - override fun getMax(): Int = get().max - - fun toValue(amount: Double): MatterValue = MatterValue(get(), amount) -} diff --git a/src/integration/kotlin/hiiragi283/ragium/api/registry/impl/HTDeferredMatterTypeRegister.kt b/src/integration/kotlin/hiiragi283/ragium/api/registry/impl/HTDeferredMatterTypeRegister.kt deleted file mode 100644 index 3ae994a8e..000000000 --- a/src/integration/kotlin/hiiragi283/ragium/api/registry/impl/HTDeferredMatterTypeRegister.kt +++ /dev/null @@ -1,48 +0,0 @@ -package hiiragi283.ragium.api.registry.impl - -import com.buuz135.replication.ReplicationRegistry -import com.buuz135.replication.api.IMatterType -import hiiragi283.ragium.api.function.IdToFunction -import hiiragi283.ragium.api.registry.HTDeferredRegister -import hiiragi283.ragium.api.registry.RegistryKey -import hiiragi283.ragium.api.registry.createKey -import net.minecraft.resources.ResourceLocation -import java.awt.Color -import java.util.function.Supplier - -class HTDeferredMatterTypeRegister(namespace: String) : - HTDeferredRegister(ReplicationRegistry.MATTER_TYPES_KEY, namespace) { - fun registerType(type: TYPE): HTDeferredMatterType = register(type.name) { _: ResourceLocation -> type } - - fun registerType(name: String, color: Color, max: Int): HTDeferredMatterType = register(name) { id: ResourceLocation -> - object : IMatterType { - override fun getName(): String = id.path - - override fun getColor(): Supplier = Supplier { - floatArrayOf( - color.red / 255f, - color.green / 255f, - color.blue / 255f, - 1f, - ) - } - - override fun getMax(): Int = max - } - } - - // HTDeferredRegister // - - override fun asSequence(): Sequence> = super.asSequence().filterIsInstance>() - - override fun getEntries(): Collection> = super.getEntries().filterIsInstance>() - - override fun register(name: String, func: IdToFunction): HTDeferredMatterType = - super.register(name, func) as HTDeferredMatterType - - override fun register(name: String, sup: Supplier): HTDeferredMatterType = - super.register(name, sup) as HTDeferredMatterType - - override fun createHolder(registryKey: RegistryKey, key: ResourceLocation): HTDeferredMatterType = - HTDeferredMatterType(registryKey.createKey(key)) -} diff --git a/src/integration/kotlin/hiiragi283/ragium/setup/DefaultMatterTypes.kt b/src/integration/kotlin/hiiragi283/ragium/setup/DefaultMatterTypes.kt deleted file mode 100644 index 5be175178..000000000 --- a/src/integration/kotlin/hiiragi283/ragium/setup/DefaultMatterTypes.kt +++ /dev/null @@ -1,38 +0,0 @@ -package hiiragi283.ragium.setup - -import com.buuz135.replication.api.IMatterType -import hiiragi283.ragium.api.RagiumConst -import hiiragi283.ragium.api.registry.impl.HTDeferredMatterType -import hiiragi283.ragium.api.registry.toId - -object DefaultMatterTypes { - @JvmStatic - fun create(name: String): HTDeferredMatterType = HTDeferredMatterType(RagiumConst.REPLICATION.toId(name)) - - @JvmField - val EMPTY: HTDeferredMatterType = create("empty") - - @JvmField - val METALLIC: HTDeferredMatterType = create("metallic") - - @JvmField - val EARTH: HTDeferredMatterType = create("earth") - - @JvmField - val NETHER: HTDeferredMatterType = create("nether") - - @JvmField - val ORGANIC: HTDeferredMatterType = create("organic") - - @JvmField - val ENDER: HTDeferredMatterType = create("ender") - - @JvmField - val PRECIOUS: HTDeferredMatterType = create("precious") - - @JvmField - val QUANTUM: HTDeferredMatterType = create("quantum") - - @JvmField - val LIVING: HTDeferredMatterType = create("living") -} diff --git a/src/integration/kotlin/hiiragi283/ragium/setup/RagiumMatterTypes.kt b/src/integration/kotlin/hiiragi283/ragium/setup/RagiumMatterTypes.kt index ac0b553da..15f8c6d11 100644 --- a/src/integration/kotlin/hiiragi283/ragium/setup/RagiumMatterTypes.kt +++ b/src/integration/kotlin/hiiragi283/ragium/setup/RagiumMatterTypes.kt @@ -1,21 +1,47 @@ package hiiragi283.ragium.setup +import com.buuz135.replication.ReplicationRegistry import com.buuz135.replication.api.IMatterType import hiiragi283.ragium.api.RagiumAPI -import hiiragi283.ragium.api.registry.impl.HTDeferredMatterType -import hiiragi283.ragium.api.registry.impl.HTDeferredMatterTypeRegister +import hiiragi283.ragium.api.registry.HTDeferredHolder +import hiiragi283.ragium.api.registry.HTDeferredRegister import hiiragi283.ragium.common.material.RagiumEssenceType +import net.minecraft.resources.ResourceLocation +import java.awt.Color +import java.util.function.Supplier object RagiumMatterTypes { @JvmField - val REGISTER = HTDeferredMatterTypeRegister(RagiumAPI.MOD_ID) + val REGISTER: HTDeferredRegister = HTDeferredRegister(ReplicationRegistry.MATTER_TYPES_KEY, RagiumAPI.MOD_ID) @JvmField - val MATTER_TYPES: Map> = + val MATTER_TYPES: Map> = RagiumEssenceType.entries.associateWith { type: RagiumEssenceType -> - REGISTER.registerType(type.asMaterialName(), type.color, 128) + registerType(type.asMaterialName(), type.color) } @JvmStatic - fun getType(essence: RagiumEssenceType): HTDeferredMatterType = MATTER_TYPES[essence]!! + private fun registerType(name: String, color: Color, max: Int = 128): HTDeferredHolder = + REGISTER.register(name) { id: ResourceLocation -> + object : IMatterType { + override fun getName(): String = id.path + + override fun getColor(): Supplier = Supplier { + floatArrayOf( + color.red / 255f, + color.green / 255f, + color.blue / 255f, + 1f, + ) + } + + override fun getMax(): Int = max + } + } + + @JvmStatic + fun getTypeHolder(essence: RagiumEssenceType): HTDeferredHolder = MATTER_TYPES[essence]!! + + @JvmStatic + fun getType(essence: RagiumEssenceType): IMatterType = getTypeHolder(essence).get() } diff --git a/src/main/resources/assets/replication/textures/gui/mattertypes/azure.png b/src/main/resources/assets/replication/textures/gui/mattertypes/azure.png index f0c85706a5e255d22cd332192ff212b544a4d59a..581da82cd3d8a01a09815bd6bd815f8e3681526b 100644 GIT binary patch delta 154 zcmV;L0A>H20k#2>un3-Pkenomt8dEV$#Xy38 z#NK@)kYK{n>Px#|Np_B2u}b200v1!K~w_(Qxiy7Fh%I_ssI2007*qo IM6N<$f|v6>f&c&j delta 127 zcmV-_0D%9t0h|GlBzOUHQb$4nuFf3k00011Nkl@XoIk6B-%yz zG~!dsf=z;vk&%&*MuILN#K-Cam?X>v$Sxunh`0g>n>aF`30VS{-*Jf(UegefweY;1w~JeSZ)7vdl2H9a8%fs0a~7iUP3$9)4mJ>isH5T+ uls9nz00960?>FD000006Nkl( delta 127 zcmV-_0D%9f0h|GlBzOUHQb$4nuFf3k00011Nkl@XoIk6B-%yz zG~!dsf=z;vk&%&*MuILN#K-Cam?X>v$Sxunh`0g>n>aF`30VS{-*Jf( Date: Wed, 10 Dec 2025 17:53:17 +0900 Subject: [PATCH 10/49] feat: removed unused textures --- .../common/event/RagiumRuntimeRecipeHandler.kt | 2 +- .../textures/item/artificial_artifact.png | Bin 364 -> 0 bytes .../ragium/textures/item/basic_component.png | Bin 269 -> 0 bytes .../assets/ragium/textures/item/blank_mold.png | Bin 282 -> 211 bytes .../ragium/textures/item/crystal_processor.png | Bin 455 -> 0 bytes .../ragium/textures/item/eldritch_orb.png | Bin 250 -> 0 bytes .../assets/ragium/textures/item/glass_orb.png | Bin 201 -> 0 bytes .../item/module_sonic_protection_unit.png | Bin 520 -> 0 bytes .../ragium/textures/item/module_strike_unit.png | Bin 542 -> 0 bytes .../ragium/textures/item/processor_socket.png | Bin 379 -> 0 bytes .../ragium/textures/item/shulker_nacre.png | Bin 217 -> 0 bytes .../ragium/textures/item/slime_rubber.png | Bin 258 -> 0 bytes .../assets/ragium/textures/item/sulfur_dust.png | Bin 340 -> 0 bytes 13 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 src/main/resources/assets/ragium/textures/item/artificial_artifact.png delete mode 100644 src/main/resources/assets/ragium/textures/item/basic_component.png delete mode 100644 src/main/resources/assets/ragium/textures/item/crystal_processor.png delete mode 100644 src/main/resources/assets/ragium/textures/item/eldritch_orb.png delete mode 100644 src/main/resources/assets/ragium/textures/item/glass_orb.png delete mode 100644 src/main/resources/assets/ragium/textures/item/module_sonic_protection_unit.png delete mode 100644 src/main/resources/assets/ragium/textures/item/module_strike_unit.png delete mode 100644 src/main/resources/assets/ragium/textures/item/processor_socket.png delete mode 100644 src/main/resources/assets/ragium/textures/item/shulker_nacre.png delete mode 100644 src/main/resources/assets/ragium/textures/item/slime_rubber.png delete mode 100644 src/main/resources/assets/ragium/textures/item/sulfur_dust.png diff --git a/src/main/kotlin/hiiragi283/ragium/common/event/RagiumRuntimeRecipeHandler.kt b/src/main/kotlin/hiiragi283/ragium/common/event/RagiumRuntimeRecipeHandler.kt index 99f7835b0..786d2b852 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/event/RagiumRuntimeRecipeHandler.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/event/RagiumRuntimeRecipeHandler.kt @@ -84,7 +84,7 @@ object RagiumRuntimeRecipeHandler { event.resultHelper.item(CommonMaterialPrefixes.INGOT, key, outputCount * outputMultiplier), event.itemCreator.fromTagKey(prefix, key, inputCount), event.itemCreator.fromTagKey(flux, fluxCount), - ).saveSuffixed(event.output, "_from_${prefix.asPrefixName()}_with_${flux.location.path}") + ).saveSuffixed(event.output, "/${prefix.asPrefixName()}/${flux.location.path}") } } diff --git a/src/main/resources/assets/ragium/textures/item/artificial_artifact.png b/src/main/resources/assets/ragium/textures/item/artificial_artifact.png deleted file mode 100644 index a49164d4167e6fce2e65089d92143377a5f97874..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 364 zcmV-y0h9iTP)B=a zp+JnZA9?NZjMp!sClTQm$MH!5#+Y0vQRnE~$PIqJ*G}d*u!~efV9;n@eY#gNa!073_gN000030|6#lUX8-^I21!IgR09A?hLdEsz{s5d0000< KMNUMnLSTZ8n3uNz diff --git a/src/main/resources/assets/ragium/textures/item/basic_component.png b/src/main/resources/assets/ragium/textures/item/basic_component.png deleted file mode 100644 index 4da76ddd2de1d139f5bf4509cdf462f9d4480359..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 269 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|j(fT|hFJ8T zon*+@Y{0{yzvU0Z%2!9kwIZEjfB01h|Ky8S^{!c%tZH^_)lz0vk)VX5!6MK7wk6-F zo$@5s^PcY0{%nN?)nE6X#5$%vd*9T}sj=K}A-_!iGoj6FtIRr7Rtp&)xEAO5o^gk2 zXU(Cz4nYhqLLsvs@HCv=Q1nf-y0Iu?s)D9RmzC>Q$IQc$9EOLubDrInYf1 R`~>JF22WQ%mvv4FO#o$fYfAtC diff --git a/src/main/resources/assets/ragium/textures/item/blank_mold.png b/src/main/resources/assets/ragium/textures/item/blank_mold.png index 1d036945bb08106dbed7db1dfa1801f1f79c9ccc..b72b25f79af2e1149a76b777a2cb0f2fabb45acb 100644 GIT binary patch delta 194 zcmbQmbeVC2WIYoD1H*)g8D>DL!_&nvq+-sNAV;nS1p$%B7XpGmXD_J!U+=_P7VIRn zYpbG8l9rUo^3w7&_R<8YbVaK$wxv7@)zM)#TkZ;|&UFjUUCR=_^oB{%rq>BJ=lN26 z&o_iNO%I;yxz)M#z}?^e?fp&9r~cXR(`ez!_s{KLUg`}AYhDhvx}rr4K00X=#9qWE uB`_t-FJNY1`2YXbk;^SWN3nq%#mta#$2`O!$(J7}!r)mK_qc1_ZL2m|2_C zPJ?KGPgI2{fa&z=6xFq$AJslU-9a>4(9rEmlVLgtWf;x>JOO9jGzFiI{+{FMQDz9@ zYKx>6;*A2;$6tY$h+MNkg^=?{p^x`jHvj+t|Nr4G-8KLK00v1!K~w_(TupMCLMWuk Q00000NkvXXt^-0~f^_P1;s5{u diff --git a/src/main/resources/assets/ragium/textures/item/crystal_processor.png b/src/main/resources/assets/ragium/textures/item/crystal_processor.png deleted file mode 100644 index d04f34491007760687ec91cb26e1d23de45d7378..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 455 zcmV;&0XY7NP))4Si%Px#v`IukR5*>rl06QBKoEsLjP+945R6(a9Y@)-avP|O3867DaW8<4vl(CzJ6^Sa z-hwjAYuJ)611|UD&jea>g*7Du>9z*8V1T2Z46&tfl?h4{=bF5N%l+uf zuxOZu=dUnHuvKj{fu!KuZLPmPl4T@X`^x+40}_=^B%7@=RR91007*qoM6N<$f?ld< A&;S4c diff --git a/src/main/resources/assets/ragium/textures/item/glass_orb.png b/src/main/resources/assets/ragium/textures/item/glass_orb.png deleted file mode 100644 index 1e1ab549949b3f70dc1506d310062bea452938c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 201 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|nmt_{Lo9le z6C^SYba*G-T*v%hQbIyP&bI#S0U!tvlY`oRQzd-s> zi|@t5)7NuIwOlSsGEv^mbeOe2exKUOq#cYKE^NDa`IzLb8!_#sJSW(GEP8oj>FWO* yS1R6O{jsO*Ay$(kO+b#OavX#ukJ^FIlZX^Gk1oWbM86!&dB&D;B0;18V#2p;2EU|;_EX-yzTrL+PkqBg224f6*y`EP>yWK{!*+eRp5<)sU z^-U=lpH*m5K;ytY*^iltUR>u>s8*|7Kn`xgYPIsrCXh*&Hpi4Q3h3Q5Uil2HVk&4yB`BuFG&tJTC7h}?k?NT<`x z@Ao5@%i$;Zd_K6{Zb{6b8)Thb?tWVdi9~{ZDsZ3Qz}VvQm(}a_@-=>l5DteWig9v& z2lM_ux+}})ar#<2h{xmFpXsl71^@v6|C_(sfB*mh21!IgR09Ck^VXa!1pQP10000< KMNUMnLSTZj`s`i+ diff --git a/src/main/resources/assets/ragium/textures/item/module_strike_unit.png b/src/main/resources/assets/ragium/textures/item/module_strike_unit.png deleted file mode 100644 index 9d9f74e9110e77d2d3c6d59652b12d5f8998d276..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 542 zcmV+(0^$9MP)oYrd;9PJE-MnD3jJd(J)QyE77A3CVs_EEc)n?|+hH z7zSdo7^9xq$)QjP&qcLbg|6#NI9Q+j$Jfe5csw3xnucUD2}zQ`Ifv8f6qPU-4AAX% zk;~;QAqQRFjVt*2UBTh^ORV?=6;FFf6l-dR*EFc zvT$ZO*k0Vj!pbS$kLyrX)yiy=?LCQ`4lM`4Zy)eR>tdyngEDkL0JRgqGikTmSHh-Jp-|w8qKH%IbUFwG0%GE~(QG#1cDqrl)sRZ1nDrsW<8hYFW;sRh z`FyC?>lTTGTdkJp=@f`O5`mD<=Xo?5MX6N6Q;0+&2nK`98loL!ogXYcS_zpKXa5+U)m7LluT-#mT}`CZ>CvC*rMLtD0RR7iaWe=2 g000I_L_t&o0JC_0fhdEP)C0YV8N*rlF{_ZJR@%`?q>m!$>yG$U-(lS3@=+Xbb-yZ)j8fXVSwD zy_0#Q{nol)JnZCQ%*@O@C--#1xdR6de2~8>u!E5?tuew>*rmdKI;Vst0KHU9(*OVf diff --git a/src/main/resources/assets/ragium/textures/item/slime_rubber.png b/src/main/resources/assets/ragium/textures/item/slime_rubber.png deleted file mode 100644 index 6d7f2b8968e5791b10ea31ca2ef3c9ea734bf3ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 258 zcmV+d0sa1oP)Px#yh%hsR5*>zlEDqbFbG9|s_Xz;;4Qqq+2S)rdMQ>+Dm6W|oUr5v4;$duv3(1) z){e}_7~6gqAPH54nSmtS{j))9?J%=>PKYE(ZUFGO3%?+k8G7$f)dK)7Bc!s3EU>$y z_kL-#S2(+-ZbX3O0+YNJsIZ7YRiUcWCP8@AGCNOeu?xx)VuPxOC_YG@Vp4FCWD07*qo IM6N<$g6Obk?f?J) diff --git a/src/main/resources/assets/ragium/textures/item/sulfur_dust.png b/src/main/resources/assets/ragium/textures/item/sulfur_dust.png deleted file mode 100644 index e24c246a86a43a337ddad85707a0301d37240d5b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 340 zcmV-a0jvIrP)Px$4oO5oR5*>@kg;lmKmdln>OryvHwOm|K0wF=WU_gR3?bwt@&uiIfzrWO$YL@% zOL23NxHz~337HC~*D1D2ETL2BKOM(?AOHREzZ3gH#lBF#hR^%4lBxZpL>qz~S70nw z064DTup2$rB=&`psjZspR>{;>=lxhU*R6_uq3%hZ`tWRNebuu(n&L Date: Wed, 10 Dec 2025 21:51:30 +0900 Subject: [PATCH 11/49] feat: renewal material textures! --- .../recipe/material/RagiumMaterialRecipeData.kt | 4 ++-- .../ragium/common/material/RagiumEssenceType.kt | 4 ++-- .../impl/data/recipe/HTShapedRecipeBuilder.kt | 2 ++ .../textures/block/advanced_machine_casing.png | Bin 179 -> 193 bytes .../textures/block/advanced_machine_frame.png | Bin 201 -> 205 bytes .../block/advanced_ragi_alloy_block.png | Bin 251 -> 254 bytes .../advanced_ragi_alloy_coil_block_side.png | Bin 161 -> 175 bytes .../advanced_ragi_alloy_coil_block_top.png | Bin 203 -> 218 bytes .../ragium/textures/block/azure_steel_bars.png | Bin 337 -> 346 bytes .../ragium/textures/block/azure_steel_block.png | Bin 273 -> 276 bytes .../textures/block/basic_machine_casing.png | Bin 173 -> 192 bytes .../ragium/textures/block/deep_steel_bars.png | Bin 336 -> 331 bytes .../ragium/textures/block/deep_steel_block.png | Bin 271 -> 269 bytes .../textures/block/elite_machine_casing.png | Bin 188 -> 200 bytes .../textures/block/elite_machine_frame.png | Bin 213 -> 216 bytes .../ragium/textures/block/imitation_spawner.png | Bin 200 -> 212 bytes .../ragium/textures/block/night_metal_block.png | Bin 260 -> 258 bytes .../ragium/textures/block/ragi_alloy_block.png | Bin 250 -> 263 bytes .../block/ragi_alloy_coil_block_side.png | Bin 160 -> 185 bytes .../block/ragi_alloy_coil_block_top.png | Bin 205 -> 209 bytes .../textures/block/ragi_crystal_block.png | Bin 348 -> 362 bytes .../ragium/textures/item/advanced_component.png | Bin 276 -> 320 bytes .../textures/item/advanced_ragi_alloy_ingot.png | Bin 267 -> 289 bytes .../item/advanced_ragi_alloy_nugget.png | Bin 195 -> 212 bytes .../textures/item/advanced_upgrade_base.png | Bin 244 -> 256 bytes .../assets/ragium/textures/item/azure_dust.png | Bin 318 -> 313 bytes .../assets/ragium/textures/item/azure_shard.png | Bin 331 -> 325 bytes .../ragium/textures/item/azure_steel_axe.png | Bin 304 -> 307 bytes .../ragium/textures/item/azure_steel_gear.png | Bin 332 -> 330 bytes .../ragium/textures/item/azure_steel_hoe.png | Bin 273 -> 290 bytes .../ragium/textures/item/azure_steel_ingot.png | Bin 303 -> 304 bytes .../ragium/textures/item/azure_steel_nugget.png | Bin 207 -> 222 bytes .../textures/item/azure_steel_pickaxe.png | Bin 310 -> 315 bytes .../ragium/textures/item/azure_steel_shears.png | Bin 332 -> 342 bytes .../ragium/textures/item/azure_steel_shovel.png | Bin 289 -> 288 bytes .../ragium/textures/item/azure_steel_sword.png | Bin 325 -> 330 bytes .../azure_steel_upgrade_smithing_template.png | Bin 298 -> 306 bytes .../ragium/textures/item/basic_upgrade_base.png | Bin 251 -> 270 bytes .../assets/ragium/textures/item/deep_scrap.png | Bin 340 -> 310 bytes .../ragium/textures/item/deep_steel_ingot.png | Bin 283 -> 292 bytes .../ragium/textures/item/deep_steel_nugget.png | Bin 212 -> 225 bytes .../deep_steel_upgrade_smithing_template.png | Bin 286 -> 304 bytes .../ragium/textures/item/elite_component.png | Bin 350 -> 336 bytes .../ragium/textures/item/night_metal_shears.png | Bin 318 -> 340 bytes .../ragium/textures/item/ragi_alloy_ingot.png | Bin 250 -> 297 bytes .../ragium/textures/item/ragi_alloy_nugget.png | Bin 191 -> 214 bytes .../ragium/textures/item/ragi_crystal.png | Bin 323 -> 333 bytes .../ragium/textures/item/raginite_dust.png | Bin 253 -> 298 bytes .../assets/ragium/textures/item/sulfur_dust.png | Bin 0 -> 340 bytes .../ragium/models/block/ragi_alloy_block.json | 11 ----------- .../assets/ragium/models/block/soul_glass.json | 12 ------------ .../ragium/textures/block/ragi_alloy_block.png | Bin 362 -> 0 bytes .../textures/block/ragi_alloy_block.png.mcmeta | 6 ------ .../assets/ragium/textures/block/soul_glass.png | Bin 316 -> 0 bytes .../ragium/textures/block/soul_glass.png.mcmeta | 6 ------ 55 files changed, 6 insertions(+), 39 deletions(-) create mode 100644 src/main/resources/assets/ragium/textures/item/sulfur_dust.png delete mode 100644 src/main/resources/fusion/assets/ragium/models/block/ragi_alloy_block.json delete mode 100644 src/main/resources/fusion/assets/ragium/models/block/soul_glass.json delete mode 100644 src/main/resources/fusion/assets/ragium/textures/block/ragi_alloy_block.png delete mode 100644 src/main/resources/fusion/assets/ragium/textures/block/ragi_alloy_block.png.mcmeta delete mode 100644 src/main/resources/fusion/assets/ragium/textures/block/soul_glass.png delete mode 100644 src/main/resources/fusion/assets/ragium/textures/block/soul_glass.png.mcmeta diff --git a/src/data/kotlin/hiiragi283/ragium/impl/data/recipe/material/RagiumMaterialRecipeData.kt b/src/data/kotlin/hiiragi283/ragium/impl/data/recipe/material/RagiumMaterialRecipeData.kt index 528b6e1f9..bbc6927ae 100644 --- a/src/data/kotlin/hiiragi283/ragium/impl/data/recipe/material/RagiumMaterialRecipeData.kt +++ b/src/data/kotlin/hiiragi283/ragium/impl/data/recipe/material/RagiumMaterialRecipeData.kt @@ -41,8 +41,8 @@ data object RagiumMaterialRecipeData { @JvmField val ADVANCED_RAGI_ALLOY: HTRecipeData = HTRecipeData.create { - ingotOrDust(VanillaMaterialKeys.GOLD) - addInput(CommonMaterialPrefixes.DUST, RagiumMaterialKeys.RAGINITE, 4) + ingotOrDust(RagiumMaterialKeys.RAGI_ALLOY) + addInput(CommonMaterialPrefixes.DUST, VanillaMaterialKeys.GLOWSTONE, 2) addOutput( RagiumItems.getIngot(RagiumMaterialKeys.ADVANCED_RAGI_ALLOY), diff --git a/src/main/kotlin/hiiragi283/ragium/common/material/RagiumEssenceType.kt b/src/main/kotlin/hiiragi283/ragium/common/material/RagiumEssenceType.kt index 59cb76fb8..b34ddd9dd 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/material/RagiumEssenceType.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/material/RagiumEssenceType.kt @@ -8,8 +8,8 @@ import java.awt.Color enum class RagiumEssenceType(val color: Color, private val enName: String, private val jpName: String) : HTMaterialLike.Translatable { RAGIUM(Color(0xff0033), "Ragium", "ラギウム"), - AZURE(Color(0x656da1), "Azure Essence", "紺碧エッセンス"), - DEEP(Color(0x404d5a), "Deep Essence", "深層エッセンス"), + AZURE(Color(0x6666cc), "Azure Essence", "紺碧エッセンス"), + DEEP(Color(0x699699), "Deep Essence", "深層エッセンス"), ; fun getBaseEntry(): Pair = when (this) { diff --git a/src/main/kotlin/hiiragi283/ragium/impl/data/recipe/HTShapedRecipeBuilder.kt b/src/main/kotlin/hiiragi283/ragium/impl/data/recipe/HTShapedRecipeBuilder.kt index a301feb8c..55cd9d3c5 100644 --- a/src/main/kotlin/hiiragi283/ragium/impl/data/recipe/HTShapedRecipeBuilder.kt +++ b/src/main/kotlin/hiiragi283/ragium/impl/data/recipe/HTShapedRecipeBuilder.kt @@ -105,6 +105,8 @@ class HTShapedRecipeBuilder(stack: ImmutableItemStack) : HTStackRecipeBuilder%Zw z5*!d9Atiy1f-5Y`^7{+F3GDD3VWV~Ixvk5~)L`<60^O#e z_1o(=e#18mThqzTcRJ5#H>icEwfQUdSF1|L{q9rF0x-B6Q4o+U#H9cL002ovPDHLk FV1g~*LfZfU diff --git a/src/main/resources/assets/ragium/textures/block/advanced_machine_frame.png b/src/main/resources/assets/ragium/textures/block/advanced_machine_frame.png index c45a32a5fc74c59d3fa417e5eccb6514239206f2..9412abc1d11ed0396c30db58fbde8ae66828373e 100644 GIT binary patch delta 177 zcmV;i08anO0nGuBB!7ZQL_t(|oa~da5r7~JML%~8;sn-q(l`Pu*jYJ&^Du&ix&jlp zNlXs8!%D=K*Ca*$Pl_K+&Js#l9kkSCa_Ad;!nDBd5e!6ZW}C0(%@}yz-xoxbbt*@{ zbs#f@UgIa#pc*_4IG&QQ9MN%d^iuNr f00v1!K~w_(N7o&kKC+uE00000NkvXXu0mjfhwMmO delta 173 zcmV;e08;ezd2MD?N zxA>_R&;p(T0Z%2Y#KdPnKM&AiDBB6oH|4D{GD5UfHPTBi044wc|NrR?E;;}J00v1! bK~w_(?%5r(*qQBS00000NkvXXu0mjfl~PEc diff --git a/src/main/resources/assets/ragium/textures/block/advanced_ragi_alloy_block.png b/src/main/resources/assets/ragium/textures/block/advanced_ragi_alloy_block.png index a67338fe8c06c226355528c6c7c078dcdc1d25fe..79f61c2af48a5c73abc64f759002e199ccf3f678 100644 GIT binary patch delta 226 zcmV<803HAP0saAyB!9C>L_t(|oScy@5`!=hMwglN4wXGYO-)^6uyyH0dH{;6sp>7j zVG)4AVK@OtVPQ#t%!a==Ad-B^?n}hy47(8c2W7-BRx#YvIQ+iCq~AaTJMAk-Aritc5Ji8O90CSeiDFi8 z3vPhzIS^c;i{u8C$T()Yb(Ikn+yjwzOGDC`^4w;Bl6{$&=7?2T0Q79q&9`7rQ|VZ4 zY_*8f1;GovOe>uL*rd-6>D)+g9Ci-MNR%)hRtQNE0fzU}jXPc7_=?r!_z8w>n5|8{717_{_ Z{s1jMM3!FlfKLDb002ovPDHLkV1j3RVnYA` diff --git a/src/main/resources/assets/ragium/textures/block/advanced_ragi_alloy_coil_block_side.png b/src/main/resources/assets/ragium/textures/block/advanced_ragi_alloy_coil_block_side.png index 8bd0fef60a4e37734817a9bca744fdcd68a755d1..25417d8a6be2a4aed43f56f4fdd833a999cbc719 100644 GIT binary patch delta 147 zcmZ3;xSnx>N_~o_i(^Q|oHvs;ayA%LoA%8Ehc?m>JHSSgTe~DWM4f<`O#Z delta 132 zcmV-~0DJ$h0igkqBz*yMQb$4nuFf3k00016Nkl*E+c$$J6t mO0?}0;hkHAMHmpm-+SMXxJX-bn97I%0000Mf_+E;;heevjm;gYOfG(8z%M}CQRl5{Ua1wY52~Cm%QspL`1%*B7c0#J)L3v9 s!4Cic0RR7^*;M1&07*qoM6N<$f|>YB_5c6? delta 175 zcmV;g08szh0m}i9B!2;OQb$4nuFf3k0001mNklFqqMX%F-ZfS{wSD`IRsTRFfcIv`0;}{ d$1^~ZHvs<9Bo=FRr3wH5002ovPDHLkV1kz^NWK67 diff --git a/src/main/resources/assets/ragium/textures/block/azure_steel_bars.png b/src/main/resources/assets/ragium/textures/block/azure_steel_bars.png index f86fa3ac45f9bdf4fb288cd751eae4581c23130c..62d1aa057bc21d0c9cc8adce7d2afc04ac55d49f 100644 GIT binary patch delta 319 zcmV-F0l@yz0@?zQB!3S{L_t(|oQ#sK4#F@H$B(6+kQp2(93ccjHid!*Kw%M(VCQ&% zxhWKe;4nPI)D{vD3yLKq!(kS}6AW&wOLr^V{z=nb+xzIRr$C~`;v5Y-Mg)S;ZmC+~ zp28Ocy#ZA7^$NQTgRypuE7|Vvah9g4XB_IPma!RMTz{Mwc=iFFp%dFX^B1sk z1;I6l=SS$)aGZRr_RmSIDh==s-88!>y4UWu`d(g@C<>b)wCS=BGGSFRA)D`r zFaf*y7MKRWWV(SWqOchPOU@#C8NW=%1;zbxzd%K~P-Pm4W|OhWLF9`vV4|~_h(UoU zFwfR=-I)fE0XP%8Gnw&T26oDTb{H28N}u`x00960Ob=B$00006Nkl zU%`aM(TUN;0XM_yhPdbe&rm&LOSv|}pAfjh9shmp8Sv9~AF}yk$3POsp11nDX7C56 z*9IzoIfXizaxfeXz_J6Dy`Cc3>bR8z%kDz5^nuf&to=t%-HA=D1Z>q5$?x`{k}G1qf_&y$RTO(g&T;l}^Y8+e2pNJ-z^5 zGv9|MqOeU4?OQ+rMz>5B&r^0mDMGkV8FE1XremW(6v;KfE&kWB>pF07*qo IM6N<$f*oCtEdT%j diff --git a/src/main/resources/assets/ragium/textures/block/azure_steel_block.png b/src/main/resources/assets/ragium/textures/block/azure_steel_block.png index 6be0b651d8014bb138b30adf2c09a269147d1528..fcb63c88424781c7f31697ee4cafceb974d5586f 100644 GIT binary patch delta 248 zcmVo~8FfcGMVKp0~8mE)?AG`t44FQhM z8vFO6TL=e?S{jb3+D^En(ZKDi`&fj86)S3@@T-IPe*eK6Z*E`Q$LVP}fcqYwr_od+ zi(v6I9ANc5S)LA$b;Fc<@ZgPtf(Ww6{=GNezEEU=bCBf}l|}B~eS_xCSI-_{_cTN` vE?2QYjECrEU|=w}H9C3t93F2llA62$!WU&d0m53O00000NkvXXu0mjfF*$I* diff --git a/src/main/resources/assets/ragium/textures/block/basic_machine_casing.png b/src/main/resources/assets/ragium/textures/block/basic_machine_casing.png index bca037b7ef266ed9cc9cf09c5519654cd07222dd..26313e7f1385bdd9ed2312554846bc1f26f4316c 100644 GIT binary patch delta 164 zcmV;V09*g90l)!}B!6{DL_t(|oa|Du4S+BVGa?^!KMgiCow>I&lM)7&rkz zR2UFL3L8VcB#LZjuxWQAUL(bYWDIfgFh#aU8?aH{3_Dx&wyr}=bU!Hq@#ee`KB5YK zC6JgUONAG(GVCRgR!L778cw#LnbGUsk3R5JaE(lp%-N19%%f z?H)!_hM0?PuBB!2)&L_t(|oQzX34uU`sTnV3m!h%FJwtm6H1{xnhV_|`bpRl#S zN7!KFBd#@y355kb<7AO+mc3J)peh^Cn`UV&;Ho?aT+u#-e<00v z(XcM20000|0?J#de}5LmsUqyGfWJibJ|7Rg zT2U@tNv1080m?R|>2Od;9NL|lz-5@L zJ8@RbJ@qt(_AWG1xm8R`{Qv*}|NkGmmu~<700v1!K~w_(>P3F^a-HX700000NkvXX Hu0mjfM|_T2 diff --git a/src/main/resources/assets/ragium/textures/block/deep_steel_block.png b/src/main/resources/assets/ragium/textures/block/deep_steel_block.png index e6ebb31d612ba73bceb92eba307f940444f7a4d3..20e485cfec4050bd31be8f270adf870c432f8045 100644 GIT binary patch delta 241 zcmV?6}B$jmH5G)J~a1B-@ zI0Q>GcHjb85in$6fNNmMV3jlm%2PYUapM1?%)~+$6#m=II=SaVFk16+S0DVoQoM+| zjqdw!#g8lZLneG?u`lz>E3fvkc2dKgMgyzS;I_Ad~A@(a$P_d r9smFU|Nm5jv@HMt00v1!K~w_(2~ub=!O7e z3*)mV&f@X|qnM<;mWeekX*6){%uyCmNx8J#H2mryzCUv2+HC8mk8ye$4&c7W=V>(6 z$Rb!g4F_0#PnM@WLIN@69zA_6CoPIBa`wboQMjkktQM7(d;Rzknmb=V!Qp9$YFw^j tffx_b&A`B*WodKm_z^tbU?eqp0|3~8WT)FMK)3(^002ovPDHLkV1oYkaUB2v diff --git a/src/main/resources/assets/ragium/textures/block/elite_machine_casing.png b/src/main/resources/assets/ragium/textures/block/elite_machine_casing.png index ed748d134fac0de824f969f15ac340df6c98cc53..ed1dd939767d68ea454888c9cf2eb43655a9d3e1 100644 GIT binary patch delta 172 zcmV;d08{_G0muQ6B!7KLL_t(|oa~aZ34kyVMX$JC#09c|MX=H}9KuZ;L9h|0(aOqN z$O0m6;Fkok@uHnYev@$g_pkWJZNJcKO~b}`y1I#y-0N1UGP5}WxXVg=v$G<0z%>#8 zSOMU}^icu$6@Z%2rQqAwkw`lLSB2Vb^Urd}#x`4yzwbE!03`tb|H+2N0RR9121!Ig aR09BO6e=tn*{}-$0000vRjeJx zVqa(=EK|lZ){lp5a;2}Ug(J-CRu}#+<~9|D*HUmH+?%21!IgR09CipD4n?EVo+#0000ef(^%T*9M;Yu zScnL5h3H2@urkp$4-(S+cPaj{x)}t0WM3CzcuZqYt`{4Hy&xvO&9?yIBrUYVnCyp< z5=gqXbaVuHRtX3Iqn}uT6+8r}CmN;`I{19ug%V&fP)%9ScQVx8Figf$;FyA+oB#j- n|No}o3n>5q00v1!K~w_(kC`ZuE6+m&00000NkvXXu0mjfp_EF8 diff --git a/src/main/resources/assets/ragium/textures/block/imitation_spawner.png b/src/main/resources/assets/ragium/textures/block/imitation_spawner.png index 1fdc1b1296395bac62c03d5af5c0becff11f424c..ed904d12943e576996e107e6a88f9d40f4ae4f33 100644 GIT binary patch delta 184 zcmV;p07w7G0n`DIB!7uXL_t(|oZM483V<*SO`(^tqhNLS5H23q#Y4FJ+4UIJSBwOy zh*S`K%X=hE`w|*$QtOh;k|}bU`+)$d8Ot;h&Pff{5MA4-E$()vllCa9`iQXxYrKX6 zW_G|@IzWNc-T|yeIiN`Vp#_RW`~^IayCH`1kA7k(|IQFUZ!tmfI)~O(;%c2&00030 m|6UqQy8r+H21!IgR09B%g1GGCQCN@w0000K22up_n)l$2yYJw1({|1j6`8UodmRMv>}Bth(8n`eBkbF%`eAZ#H1O;t z)!}NK7l&hpx2OkzOV_DKtD-ytoC{a-(6YuoHNqy?w_C~39J z+cQc+dCU&orXMeq!kmR+Mj@@79K<2b+u#BDc+p7K8U1YV6D;Ey4B-m^0RR7X7F^W; g000I_L_t&o09y)X#^zbgzW@LL07*qoM6N<$f(X%V-v9sr delta 232 zcmV5>qOY%Ml4&oj(5z=0*H{MxMlxZ4CnePwBe1}pv?rxMkOG8UK zRdxEjP#3$^NOV1)X7z`Q>tzdyg4tyJy2GF9#DM1Z(4a+3|6v1KB=p~)9k<=_K#RQe zt)Qp#Wqn3TD39Ht*T{@g*t0OqD5R5&A8vp?R|2tNS iGXMYp21!IgR09CJYG{&*bpONv00002=*4afQ=Ur z^c;eXh#nxNM{q&!AUI)?F$uG3@<@td|L*>`w8H>RApYaa+Fm?fF&llx)pnmc(xIN7 z^l`dnUx7;>`3(k=_EqBJWw#I}W4AfOLvY9NfEWH_jt+6!D`c&R{SRrSu>UGuOP4UD z71O?*bTTy-xe50v!M82(BpoVcqHb2Q+Ea=c(s|kg$?>WYMK?=e^3`Jk<9HCGILA-&G zjTi7LKSX@l$v^AsDzf1CeCJ(0Y99bg=T>aS|>K)mqGBg(+ZY-8= zsnHf~Q=Agm*t?@UcM_qA>A@_OYR9BARUzy=2m7551#V8LyjMT{Fh=^&C{-RhojA~c zg8s#KX%0U%QlW(ybBeW4+A1}TT8t%broIi|%y79P+X%;z5$3(JBz&vTz3Ef002ovPDHLkV1h~6G#&r| diff --git a/src/main/resources/assets/ragium/textures/block/ragi_alloy_coil_block_top.png b/src/main/resources/assets/ragium/textures/block/ragi_alloy_coil_block_top.png index e6f6bb9c0fde826a27cee751c0535bff6315c5df..975a0c60392bc7c2665a49e5e0b544f651e200d0 100644 GIT binary patch delta 181 zcmV;m080PO0nq`FB!7lUL_t(|oa~Y@3V<*W1Xn#!L{JFWXdxCp#M-y{8sB3fSXu}o z2o^?y;R=aK?-pSbW>efP|B0_Fg4QSX2W~|9pP=q%QA(Y%HuL;R^r&|Nll- j0;T`}00v1!K~w_(9$Ol|`nm4I00000NkvXXu0mjf`y@yG delta 177 zcmV;i08anW0nGuBB!2;OQb$4nuFf3k0001oNkl~C_y*-XTHU{nL~0689hBZoIKILq*cfq@&sW|WqeCMIdX(<&bmGKZjQ1_lPEA3uH& f?S6(IKYjoJwDlwWZLAdC00000NkvXXu0mjfQZh-- diff --git a/src/main/resources/assets/ragium/textures/block/ragi_crystal_block.png b/src/main/resources/assets/ragium/textures/block/ragi_crystal_block.png index 2cf5f2818d951901e9c3ee63001a0e4d51d2a36b..53c97eabc3deba54a06fb85ea43fedfb2b304826 100644 GIT binary patch delta 336 zcmV-W0k8ht0_p;gBYy!ONkl4)&nWlwB4BUV0D}65UHk# zpHt?cNGsiDQBa5i((#KH&R91E@@s^EZY)6cW*UFiYGV(`iY}!$e*&#SnJ(;P02)fH zb=DStxB#CgYDp*AbpVlSGm8Qf-@OC1(tRaz3v#qYIZv;`s5|q9RHc973jhHB{{vQv iV*mgE21!IgR09Bp7NcmOxLXSV0000Px$7D+@wR5*>5l1pmCFc3hWW8cBos8R4P z7z(*ULcvSp+#rVtlxz45rBxS_E!m-q&Pt!BnKy$HOT`#M3Mjtg ztqXV9@q?wZrnfFkAJ)@W?X23l1I;D_cu}nP0PU8x;UNIc34a+v&GnxC6Ue5bGx}~~ z6Lbx@tCf)Q5ZWze5$NuU3;-(kba!HsAhUYGQZW%D=_-&*# zpNWtn1G)~at2-P>dR_sg-@H})9h|*W0Ce3QE}6TN!-t#NlAhe$SKyLpHvA`k0lkW| UH-){G^8f$<07*qoM6N<$g3^|g00000 diff --git a/src/main/resources/assets/ragium/textures/item/advanced_component.png b/src/main/resources/assets/ragium/textures/item/advanced_component.png index d40a24bc6d1f2b12d4391421fdafdf1d4b95c1b6..734694851b327ce888b629591238ba1decfbecbc 100644 GIT binary patch delta 293 zcmV+=0owkQ0>A>0B!BfuL_t(|oTQVj4#F@Lh0kET1Cj)}gplAc)L?N;@ERE0HizLw zHaCkY28ThQF(eoqZesLjcgvtFke#Gicf0f5-rm(kOSx#NuYj*aLG92{e?v3MDJ%6~YRdTP*INvyHn1Et(@Qvrw`dm!4(oe_uMq>J-~IkB2}2 zS&G|ZY*rJE3f{m(+H>iV#Dn0zf|YW8B0)*iz_KghVm`sw9&zAoFb6{;nY4pr1@q_4 zE9F4H2gnt&R&C-g!34*bc|8Cc?`TsYaL#}L0000Gx|u`s6~m+G~r&+ z{%C#AAS@FWA{ucQC`!2s*(7DE(-#{V-35hZ#EZwd^&wH<#lY4p3;EVQ8XlONXIBiSvsH0W`PX;Oi zkMRsr$r`j0Im95@gDN>6C-5yzIX9ai-x)l*QZqnhbq8etOW=ha0QlwC$J|XbB>zB2 ppeHcgltOVtG5m+P#Wm=+@&=EMR|E$<>_h+n002ovPDHLkV1l_uVut_# diff --git a/src/main/resources/assets/ragium/textures/item/advanced_ragi_alloy_nugget.png b/src/main/resources/assets/ragium/textures/item/advanced_ragi_alloy_nugget.png index 5a8d1ee64acc3e06a9b0f3cdb172fa6e746f41f3..49faa892597fffc632c104adeab0d960c8bf4243 100644 GIT binary patch delta 184 zcmV;p07w7B0n`DIB!7uXL_t(|oZOSK4S*mJMZX4juyg`f(8kuzF`Pjca19%W5I3>3 zaRLkUEF>`=U}%g#Ax8r56?ZuS&j@(t!-6)3y6y`C?qA5kSpqaAKsArF%t=7WQ(ect zVkPz-6cuDQu+PE-QV5=Ayc3*Fs|Q6rFu|DB+eKz{D-kk&f`{x zQ}h1-hX4PYjQ{@+VE8{%5@8rRV8UsNkujW3o07(W%MjcKz<{!bhx002ovPDHLkV1kh5O5Xqg diff --git a/src/main/resources/assets/ragium/textures/item/advanced_upgrade_base.png b/src/main/resources/assets/ragium/textures/item/advanced_upgrade_base.png index 4c217fe96ffd062f552d3cea8cf823303bbd071d..b94af767f72893bf20fd9aa74a73949c38f06241 100644 GIT binary patch delta 228 zcmViBwf19B&Sbi(%I<&P%93h zq60ob1!N0Zb-s1w2O&|YE|2GDfD5XtZ-)AY6(z(-_U+n0>;8Hh&kF{kmu94D{y*b! zFZ~R*g(D{sul+cEYSeZa473tmMZHLQ!Dl=^W(Iuo}rPU@UBF z6F_&Et~r0LTWZtyPJpiDv>?x^pU=)T2N@)41ONd4|4Ishh5!Hn21!IgR09C*r)Z|! S(Ow(?00000=WW^B!BKnL_t(|oV1fM4uU`wL_dVy5HCP1>@3U{21^Sspl86!%FYAW zSy{;$@B$W=5({EsXJNR2A)Wx4HEUqmjhGG7?0%AYe+Gg>hH}VI?Ev!xj)R< z3?YTA%BMjzL_`$`X52*rvFLK&T1tR`-~^~F7@@LR36McTvhgRNsf>T7Hvj+t|NjlP k{PF+*00v1!K^Ig5054>15xWk8;s5{u07*qoM6N<$g1k|Cf&c&j delta 291 zcmV+;0o?w%0=@!}B!2;OQb$4nuFf3k0002^Nkl1!J?oDwrCh4 z60#T|MK(a9WQ41-2NDBZaRWpMDMQd82n7Z54qOqzLE@u6-B;O`-}C<&{&&)>n9{76 z_U<@)unGh^4%w4f1!-1HIu6lM2!IL%=gZY9c@xaA@&)a~(0_FX9fi2w(JFClFhKh- zC|@9@AkXjU*e-F_unGjq7XWmfp{#0@|NMvYR+A*BH_2uK9fg!ty{x4alvPc6tCy*M ztuPKfd45MqvFYD7h9o%wETVM|>&^Lcom}sT3Z6CE#-IX0+x)yd4n1F=9|x;omH@ck padSQnJ-`OG3LIWVb6&x}lW$h4YkvQoJI4S3002ovPDHLkV1ib(e}@17 diff --git a/src/main/resources/assets/ragium/textures/item/azure_shard.png b/src/main/resources/assets/ragium/textures/item/azure_shard.png index 509b88332056824f6c83d624ee9faa693d03d04d..8a42c5637eff6700ab300068e9c9fd07085b6b8f 100644 GIT binary patch delta 298 zcmV+_0oDG?0>uK5B!BuzL_t(|oTQR14#GeXg||&TX}CaxKtTwpAgv+@I6yHdTq}?` zJas4%L70|x*>s@fnb8XThO1qk5;z%1D&+wISiKD9sdy?wJ8300JYDvHZss2$$v zv$H=IxC{WcodI<=GnUC(EQ1ZJo9xw=jDp}v)rdv#$usa8Ab)_JU4#OUHjsE?tE!Af z`VlE@g{hTFV}D_19VPqF-J|P$C1kdchCvJSk_%G_0EUR9M|0Z1JrlhiJ_Az;pdh}* zzu3BrEGsB{nMpuQLKlp*KcYXTYFOogQ&}1bB;&0)1TmW$hdMFfXLkQ wz?laB>H`1(|0DmS%d7eT000I_L_t&o0DI$V6;n4w%m4rY07*qoM6N<$f(!G1lK=n! delta 304 zcmV-00nh%$0?PuBB!2;OQb$4nuFf3k00036Nkl6^1|ZwK|KJS<8A(Bg!zXSt z?B9C>MIBZz_y;%t507<&^A!|C7;>_wGKfjZVW`D$0lKpl6n{ieY`uQ&Aj6TP^BA!j zfX&Y<7w^KU8O00!!Oj20q~sXx--QH{qrC>h;uXi?3g5oCkD(dG1#e&6XL$AO5d#AQ z1B0Tn2*bR2NATK=;R2W;5Q7xq0fx(FtYN^wz`!6Zp~&#|#eD__1_p+0tJmVy%z&Ph zZLE|2GcYhPXek=mGrW5C2%cO?0{+3x|FNZgngIZOHflCX{ diff --git a/src/main/resources/assets/ragium/textures/item/azure_steel_axe.png b/src/main/resources/assets/ragium/textures/item/azure_steel_axe.png index 7f63a2a1b149a8780ee9b7b33f520b506961a227..db64696a81f1a7deb731cb0667883e87cb88a880 100644 GIT binary patch delta 280 zcmV+z0q6d(0_vh%jqtk)~$jTyRKJulg^?;e7x3ygbAV&$84ijVzqU%Y=k3 zKzJsP>Gz-yma~Loffv&osOtOg4q<`qJTwV}Tmt4Rg9IA9%zr(djZTVA{iH*_rodJ+ z*$gm3rcEEOQoK?aOT?-O8+izK^FVwJFt~&;YVX!v3OnO#AT_gAubzgb@`SVTA-0iy z-M0W?yo~>hu-6_R2gYz-+AJ`JM7``X2z%LOP%b3t3x|P!3Zmu<00960AB(lx00006 eNklw1_niC5e5bZ28LJ99x-q@Rx+%={u)IcBUar|przsXpMQaYfx(#NIRl4dCBv&{ zj~K+Hj496ed$Egmh1hJZlayB7=Vme)I#sHS`isWmi b1ONb5*JL~_s}Aj%00000NkvXXu0mjfLgRW; diff --git a/src/main/resources/assets/ragium/textures/item/azure_steel_gear.png b/src/main/resources/assets/ragium/textures/item/azure_steel_gear.png index cf57f37d33abc1856f4aefac643175c459dca88c..e5ecbcc4790655c3d0fa6f52581ba79f27b615f1 100644 GIT binary patch delta 304 zcmV-00nh%-0?GoABYyz@NklAXIS;u7E}2aVUb} z0x0gVstuxo;1HxZOw(|Jg}-#SyUUg~;U`U}+xai^C#_F^%5Q3z43-@C({;j&cR_sH48wkV!y_Nf=E9uD1=Y#30WgiDt~!(EGk-g%Gkp?cf=3<`F?s_Q z!YECE;?ktz7=T_7sYaLu5Mm!lcFBn9cAzgzj(yJ)uLN`1_so+DY)_z@%SnV$E>@Z) z7*a()m~upbI>D5}VMw+R0TAaBODeD0LzNjOKwUB-w8^a3UjUC|+bTq7=mu?q_Fbo& zgaoy1S#CmU5fR!ICjYS+p5vH8KMX#``9J^nRGa-NyXipSuQ;y9)6QxIpa#^N?V2S? ziY;z}*t!{pa32Z7bT${}_?EIdSvmkFXVO=D(tJH1)E-SzN`LUq;`|`X0ZU<&CP1-> zR68X=x96yXFaucB1?2U(GhH2~^^f>6_9Y4}ENaM}u>w~T(1CrEh&Lh!E6o(D3eR0| zv;g&n4jYWdOcz=J#5hDyJ-2uw1c2-rCO}OpwIHJfzQgN!rga5C4`K4Mrs?#d8ozG{ zGcg%-{k+*mjVpg+lRf|d0RR6naJ7m6000I_L_t&o00*y>&}whgKmY&$07*qoM6N<$ Ef-L`n0{{R3 diff --git a/src/main/resources/assets/ragium/textures/item/azure_steel_hoe.png b/src/main/resources/assets/ragium/textures/item/azure_steel_hoe.png index 1c7ecd51cc1529dff1d6bcc19cba290f35684875..505ac4fab3a9cbff0f0e79bd6ea34417c1331ed2 100644 GIT binary patch delta 262 zcmV+h0r~!s0-^$tB!AaQL_t(|oTQQ=3&KDchQFIDVv&hpa!b?Vz@pd$lYhgebxpI; zZWAnai%D2g41$`(=CBUaFv;XQ7;NlzyK`?EJKpDg4o-!fQF(`5(+QT?{x*k?Z;4$Y%&=1pP}{k9w2VMu0G9i0Ev6j}5nX1LF-q1lubgTivYcul zy390?Sxy+pE+-6{^%8xyGUXWH-~0do0RR8O_t<8 delta 245 zcmV9O37-MT25$Y>-_D?@EW)ttUpND^ zj3aSgfPq*YjsLnbd<^Tazh+>Tab!4hbRJwEK?9IAAAfkCC<{?E@6Y%8Zz-?%AD0@O vCK78iRtcIr8>b8CYBL6~lvgBQGbI23!IxVaRS`k(00000NkvXXu0mjf zKwwcl0EVDw5EY~jL5jmPgcFp!Hq-yIoAfig+0OfRGU*CxiJ+D!3&w**g!T5YHDv*Z zz-VUjHp)wcEM!c(r3$kk5o)1~J!U^?!%;F6m&ud6G5nH%d6f zwSgayKGf+QUb7jLC3T@X3PWVczYuP&2)HF?X`LH`_scPE9lSzU6PP3h8TeH@_=ax0 zo*X+pLy-6B29i#15=+n#f_zgsl&5gW|3kh-k{~UR(fT$100030{}c6p;Q#;t21!Ig bR09Br6>yfaF%H|N00000NkvXXu0mjfcp`Vd delta 276 zcmV+v0qg#-0#6gnU*s7!c({Z`)zsn`S-^gRW@R%?3 zJoyC4cr>2KPz1-7(P^MV?!eS4CJhtv9aQUaR+|uy`C_r0BY#P5?{1?+sR>F=*+dWk z;JXOZ*|5`u(t0Aki%?`KEZad<#`O+#lQyVLjU`HxcaUW}uLg1?sm*%Z30_VIRAmeR z2qSKg;J7m6E9mY3Q09-~>v^woVZ_xxP=UvM(d)agYzIY_qReB}Nr#@*NXki`M{I+B aOLysAY#Gtf%nfS*0000_hJj)}EC}69?B{+gHR_#C!G;xqpQM1(wj%LL zfN?zMn0Z-~lG_e~*o3AU$a^LOF$gcbgI9vBv;qWnAcIN4IXg3NVdCB8CNvp{+mOMx wf+zXGUswSE0RR7r@`S1Y000I_L_t&o0Dy!i{L{%|TL1t607*qoM6N<$fGZx^prw85kHkJzX3_EP9g@Bv^ZPsN}4f{O|A$_r7z7SN5?^ zPxDo-W^+vyZ2Mh)-(XL5_5c4{rGIafI@EGH1t@9}d->wQ1xp|Pke_WehwVT^QxnJG zQ%83foJ#)6G#lv^2LaOMfyx2emn@)CXM6ceFqd zqgLK7)>WM7rYmr_4w%c*l2PpawukHCcmYDLV^awra=*dD?rh=M$laL>0!QQQ{c{j3 zt+V&-yAiU$FXv`A>)siXb5v|JKxYd~m~&Wc64;<~9I`J#rIf~djYIYc{EH6&00960 m`&~ZG00006Nf|^zR09Cz&T9}?Ov5Gs00000=5E>B!2;OQb$4nuFf3k0002+NklRE7U4v%$Xc<|s2!~MH&7#J8B7!;L77#J9u|MT5k%AhO5$56K86eCUppf>%#eRUs_ zXaa+nlpI5pj1oiDhUGa7sTpl{7-ULf@{X6 z2B!fqo2xcl$IuLk5j+NvqQK1IS zLe?^KLn!5#eO8nh^76mH>R(~-M(l9#QoCBA2?$R8{lZL39Dl5;Hv}dixR{J%m+sr$ z{a{Z622b`nbWQh!)!Ex5@DZo;nlP0C1`|l838UrQ5&XK3w1ZQtmd2JOOZZ;Zad{Z7 z8kgW`nA}Kswt*Emm`l)TEbaABCnnkiX?;F%uqy$@*P;+g>2#Yw(F8|Hc;p00960>J4l#00006Nkl3W3C(^<3}p^&eV z5tgf=qhuTK4=SEt;}-w`|NnfLBEN^O6qu|ud z2k;fd$tUP6ZccR)1sBI!6kLLnqeL!HNzk@Q`!9Ep`~JHNM&*==!OO79Jto4j1_)c#JnT-C!%=l+T<0YC?*yuyLlF_g zDDDgjlI}nkMoEQ@T7gfI+8~WS00030|AQ>*g8%>k21!IgR09An6k|Lzqnk+p0000< KMNUMnLSTZ@LUfe? delta 261 zcmV+g0s8)+0-*wsB!2;OQb$4nuFf3k0002nNkl&oyktiS%6;rPS*IMrd5AXYO` z&L#xlrpM}N{AXZbU?A0Ilys2ftVFW2;YoS%l^cwAKK~>>il_wupF3dtY>&Xv00000 LNkvXXu0mjfUio)E diff --git a/src/main/resources/assets/ragium/textures/item/azure_steel_sword.png b/src/main/resources/assets/ragium/textures/item/azure_steel_sword.png index c7416742bb1b55f76f54359796a79a407a4f419b..46cec995d5513751f85664cd159d3cc2258573c8 100644 GIT binary patch delta 303 zcmV+~0nq-%0?GoAB!B-&L_t(|oScv^3j#q9#Yfp<5*6XVAQ-G7f}-h~h|wgN3>?teKjD#m}rdw-q_wfcn_3{)HG!>WX92s_(H9mn;P*~u>hLsmoWv7$8MLZd znwJuws5y`_4Oa6rAv`RX)38x)AHZOFVBIpJ|4fLTdS2Qx_+-4;M-HIiAvOW-tf-pZ zS&&}_1b4&}RVZ%&00960e==bo00006Nkl0>uK5B!2;OQb$4nuFf3k00030Nkl!~mWJbhCQ>zLm8LW7-+P06n^SWa!fhu@bK8Wi)YZ(0tdN0$f#Jx}c_?CDp}`FI z@4jJBR2E@aGNXs#+Kv5;$OfPUqNb5O+#q5!GcYhPu)r8ln}7dn8rd_vdwZWK%@{6# z0c+O;hLeZS5!8$l2FU&vmQZAP`{F*sySMl8YQ}Iutd7QiKi(@0x3BJFU|?Wi5E52o zAQWXx$eNR!l^E7vf6Z|1#(u_kZy_!qWC$ZH)cts`Fs#4+n&J4v`zTI^X~yLh76t|e w24M+Bh6PveGb3DkcnU)ip)g>9Ih9-h0JMFdQjj0b7XSbN07*qoM6N<$f&*!Ws{jB1 diff --git a/src/main/resources/assets/ragium/textures/item/azure_steel_upgrade_smithing_template.png b/src/main/resources/assets/ragium/textures/item/azure_steel_upgrade_smithing_template.png index 498024662c33952328a317740f9d1263cd412de2..67cef41589752414845b59958159cdba0b8437a4 100644 GIT binary patch delta 279 zcmV+y0qFj!0-B!A~gL_t(|oTQT>4#F@LhP!1KAUF(DI6xo>n87iyNNgQ=6r6(# z>;R}O2n0c`Gs9sP0v8x`qs?3UTC(t)zP!Hwd;gNoBY(D%PDHLkV1k>2ZifH> diff --git a/src/main/resources/assets/ragium/textures/item/basic_upgrade_base.png b/src/main/resources/assets/ragium/textures/item/basic_upgrade_base.png index c8c8db662388369252cfc57c60efc83f37147a81..9244b5cbe2ea8edff2e704d71ab3007946289290 100644 GIT binary patch delta 242 zcmVUh|&s?gC`5fcEP(3y+Pj}t#B@m->Kxw9Naktp28`QlCkxR`ySIGIk?)Q8h~^X`CI zuI4r_%Z#*c?JC)A4>nexs{fK*RE!MLA#yP*Xp~oe2O+Yq+iUM5gv!map{uF=5klm$ z$~wH0w3)PgFE4)xkwSVM_m>K0=>Aj*a%Yj{5TdfsZ35QebT)OqTY`T5 zO)K@dT}_Qc?o+TWjDdRwzHqkY^-^5}ANcoqyA!zJ;;YRrq*!(W7rfeR#}oL#RLeC; zLt$#=6fhLF)iIDKjAPPh^iW^^?-_6;Tk^ZCo4cbRfk@Q=00960LXHq900006NklB!BBkL_t(|oTQPx4Z<)Gg>A$FZV)k|@c>BZ8U~=_XABzVpz>j)Gj{O0|Cr{o{{Gb1fQs7sCU+N720RR6lz&RHH h000I_L_t&o02Cf}ox~14t=<3t002ovPDHLkV1m}^b}9e> delta 313 zcmV-90mlBe0@MPKB!2;OQb$4nuFf3k0003FNkl<6ME1mq#HqsZRf6n^5^PKMx+P0rI39M63*h;oQRArGRNq<$0gi{A1K`?Wvs@VA zOH>VN0~uE5R?>?P-#Zxz@g<7tB4=bd0@JU=w{BY&Pxzu}yhnxTi900000 LNkvXXu0mjft<#a= diff --git a/src/main/resources/assets/ragium/textures/item/deep_steel_ingot.png b/src/main/resources/assets/ragium/textures/item/deep_steel_ingot.png index e15f53ea3dcd32456ab0117066504565170f17d2..731fabc1039527ae1878298324bd5e1d28175d8b 100644 GIT binary patch delta 265 zcmV+k0rviz0;B?vB!AgSL_t(|oTQU64uUWgh95~U;o`vH;K~IYOk8yF5Z=QBxHy>D zL%85#;@}0k8pVWBj)8r}C$Cs&ll}>zDewEkT&ZS+4{E3f5Nl z0!GsbRIj2vgRaB{xndn6NroWo{3oE1DBHd41=T4xqhsD>k%;f>s9knb^msO4p0|4% zv?kyZ$w2DVg?Ow@`X2a*;EA`um*~Io0{{U3|HlFJRsaA121!IgR09B@plpeMT`(j7 P0000KeIe_=V_Ila4|6nQ+=6;fvNHG&DA34NBHAjl>qT z!bp@XV|Wq;F@tEtZDx|mIeEF0$8a+YH}hbD=Ld4RmpL~s2?#cwKfbPwp%NHcA^T43 zNM#CNM2qo}OSejr9ZPh4P*0KnlTq-QbddO3MK0MLwYxRtmP6N`$IJLkH4t z=-@-anY>^ZMgRZ+|Nm{iHk<$e00v1!K~w_(Hf%1s0$i=>00000NkvXXu0mjf*1b`p delta 184 zcmV;p07w7f0n`DIB!2;OQb$4nuFf3k0001vNklDB(#le|HIf<&mG38 zjs=%yEpuxIQCT^L*N-1Dyng=Z|EuQ@u^PgJ%VbemIXGR^(Ze7nDgPgvI-CZ;fSj}_ z!;UrUamr)$0!$+V0|Ud3HR~B(KYfhT0IV*!dhRge;)#g4+aY0W_Lb& z7ex=v$m~uL*8rJ-m}m#YOyw(pELcX5lU*O&O5`F3l8CYT4c4&xXCIL`*Q^HTvL)CcyPwH~C*85^i@rF+~qhFAk+O$krtQwGCj z5|UlR*g%D))DTrg%>g?7Apoc2E%ENpL*jp4;qtB+UA@#ddv0Apl?t1rtsnv)fNH~~ zRC{Rc2g=Yt_z6BBZh|rUBV0ugdwR+1MqQZaC3&fRQqvrK-mmkImdCB!5We$)XSOYypy~5I5$_ z3BD*sVeJvj0=tI?XI&X$EO{Tm=TT}bmTs(LkNe*wvey6FlBoODH!oHt;Hco|V>emj8^VjscHNOJwV5Q5ja zTg^RPx$7)eAyR5*>zlD$sCP!xc_YE4Wx3KCEv zw{Zc-E(|Rp4R3N66L)ug5f&$3!NfGCFtF4O*@~DLVkoar2fa;Ae^@!w$vyeLd(OQF z4nAB*CaxosvbtUc0`%>XI!dOqiMCge1+A+_rZOs&=vCl62!9z2ZGgYCyyRHHw|6(3 zT?lHX!8{1*blY^g?KB6dnFji46XV3ZUw^(m030ck|FT4g-qn$T^zAk`r5x2 z%}S(ni9WW4AU(ih>1(-foX#eink@?#fhux~p*rc?Bi_T;QgCm$j!dq5Ug-)SPW%7@ WaDGHmU~}jI0000E diff --git a/src/main/resources/assets/ragium/textures/item/night_metal_shears.png b/src/main/resources/assets/ragium/textures/item/night_metal_shears.png index 06b748d106b52e29011026384d6173cb37ad25b4..68686a4a78924272366f186a404abc5af9961872 100644 GIT binary patch delta 314 zcmV-A0mc5l0@MPKBYy!2Nkl}qKg=-hxr delta 292 zcmV+<0o(r60=@!}BYyz%NklY%^SkYlwKxGsOxq>E(pce(Ct1l1d z;(OHL@L3j zjMpkhpw@wAqJZ)w6H=um<$F+Dghkc@n>zo-F8}}l|Nq!xy^R0>00v1!K~w_(F4bFd Unu*Xi00000Ne4wvM6N<$f(27|asU7T delta 222 zcmV<403rXW0{Q`vB!9t4L_t(Ijn$Gl3d1lEMW2XWrb*))q!#E-&Y7Y+4fqg-U@(T@ z(io-C;@xSJUyTO6rxpGtCEAr}x9(@(psBuvN;^xX4h3t-Fow}M6HO9z4(&&{VCk?_ zN|k8$GG*;j$~vbe+~Ie`rMRuH!o zW94-SS~`T*FG8&{OQrlPTsL+(%KWq@qMS6C}cb(5IEw&^(J~{15Xj?m@qm Y50emCrCKdT)Bpeg07*qoM6N<$f+qrFQUCw| diff --git a/src/main/resources/assets/ragium/textures/item/ragi_alloy_nugget.png b/src/main/resources/assets/ragium/textures/item/ragi_alloy_nugget.png index 9e8b3426c4bec3d2aeba2996e29a44b8357377bb..c6ca70e63dbc8d4616b421f0877d54dbc18f1ebb 100644 GIT binary patch delta 186 zcmV;r07d`50oDPKB!7!ZL_t(|oZOQ!4nQyzhJW-960^-{Z~-H`6L17)a0J)DY1q8mv%tqu)cEmBa=l z9=NBFuuPyabwwtsR9xx%M5_d}>*yehE{g6BcSUNziAhNC#D6$g(DVWfn=zb81~M$> zzPR4c83BYyw^b5ch_0Itp)=>Px#{YgYYR5*>rk}+-qF%U)HlH>+RlynrS zK!fPEL5gw_EJQ;uJOl@7fXt5?``L9?$=tZx1{g zS?XZV)L!q$tdq4-a)5eon}TON$H-z=P|RII1~3^R(nXux7JqEAq(DHHflE$Cu&Y7( zD1e4YC+S1Y9C;`%0!Tk?A-G+aR~Bj)s~t!WMF+Ta5%1t&F8)0XPtnr0fG%NH24u{a zkH@qHfKPsSEf&se@eve?^qht{0e|fd#;mh#_8#~RmcQNb%Wc09gL-SFTH~q7t?+^< v@xA-EsFqabn z02*j?!;NZ!_E;8!0LF~%3b@>nrB8u;%sU}Yrk4Y-vN>UqvQDyqD%PDHLkV1k^we0~4` delta 225 zcmV<703QFU0{sDyB!99=L_t(|oV1fo3c@fHgeNgBdlw;VucK$u>$nzr7nc&NlgFcJ zOxi%`KW_7&W4o_N0EVQOpa8tiez<+nsd%>n`hJwm(}(P?TDD6Dzn z5JetCQDWC%nI3S*2h!+YVpEt^)5$y-!ZnG@r_Gf^B6_11J6cbC#VHD=ux^X*^DMqE ztFfYPg)pzv1~OPx$4oO5oR5*>@kg;lmKmdln>OryvHwOm|K0wF=WU_gR3?bwt@&uiIfzrWO$YL@% zOL23NxHz~337HC~*D1D2ETL2BKOM(?AOHREzZ3gH#lBF#hR^%4lBxZpL>qz~S70nw z064DTup2$rB=&`psjZspR>{;>=lxhU*R6_uq3%hZ`tWRNebuu(n&LPx$BuPX;R9J=O*FkE-Fc5{|--(V82!%rF4GP-y0=gUK*5n&s(@U$%`Rl*3R7O4+mhM;k#L~LZ`uuwz zSz0}gef?3H@pJS~@ylFV_95~_8tgV0$Ucc<{(S0Cv_F}IH{HvIQ_HWgCL9VsW0~>6 z*~0yLA6Z%_tPx#_DMuRR9J=Wn86K#KoCVg#u^q9D8Y?K3LsR#&BPk4%nFPJc%}tNfF|%F2?7Up zzB-ufJ8tlv^LQv#c4R1W|}p7qz;UG$99+CGVl*t=>vB#{B*4<^9W zTCsLO+n;4OUAUZ2tBb1JZnoy4U*ezqfyo!(Do#xJwqH`bwm+>O8ju{NaRbt$sO?Yd zweKKpf0o%D=)%$+^h>n;!3G$I@)6<_X#0Z=(BlK7@d1+f07*mvstl}K)w|AN Date: Thu, 11 Dec 2025 01:49:57 +0900 Subject: [PATCH 12/49] feat: renewal material textures! --- .../ragium/api/data/lang/HTLanguageProvider.kt | 2 +- .../server/recipe/RagiumToolRecipeProvider.kt | 2 +- .../hiiragi283/ragium/common/HTChargeType.kt | 12 ++++++------ ...TConfusingCharge.kt => HTConfusionCharge.kt} | 8 ++++---- .../common/material/RagiumMoltenCrystalData.kt | 6 +++--- .../ragium/setup/RagiumEntityTypes.kt | 4 ++-- .../hiiragi283/ragium/setup/RagiumItems.kt | 4 +++- .../textures/item/advanced_ragi_alloy_coil.png | Bin 408 -> 406 bytes .../ragium/textures/item/azure_steel_boots.png | Bin 258 -> 265 bytes .../textures/item/azure_steel_chestplate.png | Bin 295 -> 304 bytes .../ragium/textures/item/azure_steel_helmet.png | Bin 254 -> 257 bytes .../textures/item/azure_steel_leggings.png | Bin 270 -> 268 bytes .../ragium/textures/item/blast_charge.png | Bin 375 -> 355 bytes .../ragium/textures/item/confusing_charge.png | Bin 373 -> 0 bytes .../ragium/textures/item/confusion_charge.png | Bin 0 -> 356 bytes .../ragium/textures/item/crimson_crystal.png | Bin 312 -> 287 bytes .../ragium/textures/item/deep_steel_axe.png | Bin 299 -> 298 bytes .../ragium/textures/item/deep_steel_gear.png | Bin 328 -> 328 bytes .../ragium/textures/item/deep_steel_hoe.png | Bin 266 -> 277 bytes .../ragium/textures/item/deep_steel_pickaxe.png | Bin 304 -> 314 bytes .../ragium/textures/item/deep_steel_shears.png | Bin 331 -> 327 bytes .../ragium/textures/item/deep_steel_shovel.png | Bin 277 -> 273 bytes .../ragium/textures/item/deep_steel_sword.png | Bin 326 -> 318 bytes .../ragium/textures/item/eldritch_egg.png | Bin 249 -> 254 bytes .../ragium/textures/item/eldritch_pearl.png | Bin 377 -> 331 bytes .../ragium/textures/item/fishing_charge.png | Bin 374 -> 370 bytes .../ragium/textures/item/fishing_upgrade.png | Bin 389 -> 389 bytes .../ragium/textures/item/gravitational_unit.png | Bin 347 -> 317 bytes .../textures/item/mob_capture_upgrade.png | Bin 345 -> 346 bytes .../ragium/textures/item/neutral_charge.png | Bin 379 -> 355 bytes .../ragium/textures/item/ragi_alloy_coil.png | Bin 371 -> 385 bytes .../ragium/textures/item/strike_charge.png | Bin 365 -> 334 bytes .../ragium/textures/item/teleport_charge.png | Bin 386 -> 362 bytes .../ragium/textures/item/teleport_key.png | Bin 391 -> 367 bytes .../ragium/textures/item/ultimate_component.png | Bin 340 -> 314 bytes .../ragium/textures/item/warped_crystal.png | Bin 308 -> 302 bytes .../assets/ragium/textures/item/warped_wart.png | Bin 260 -> 265 bytes 37 files changed, 20 insertions(+), 18 deletions(-) rename src/main/kotlin/hiiragi283/ragium/common/entity/charge/{HTConfusingCharge.kt => HTConfusionCharge.kt} (91%) delete mode 100644 src/main/resources/assets/ragium/textures/item/confusing_charge.png create mode 100644 src/main/resources/assets/ragium/textures/item/confusion_charge.png diff --git a/src/data/kotlin/hiiragi283/ragium/api/data/lang/HTLanguageProvider.kt b/src/data/kotlin/hiiragi283/ragium/api/data/lang/HTLanguageProvider.kt index 5e08f0f93..65d1f1a88 100644 --- a/src/data/kotlin/hiiragi283/ragium/api/data/lang/HTLanguageProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/api/data/lang/HTLanguageProvider.kt @@ -68,7 +68,7 @@ abstract class HTLanguageProvider(output: PackOutput, val type: HTLanguageType) fromVariantTable(RagiumItems.ARMORS, HTMaterialTranslations::getLangName) fromVariantTable(RagiumItems.TOOLS, HTMaterialTranslations::getLangName) - val charge = LangPattern("%s Charge", "%s チャージ") + val charge = LangPattern("%s Charge", "%sチャージ") fromLangMap(charge, RagiumItems.CHARGES) fromLangMap(charge, RagiumEntityTypes.CHARGES) diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumToolRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumToolRecipeProvider.kt index 4920a59ce..1df80b13f 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumToolRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumToolRecipeProvider.kt @@ -293,7 +293,7 @@ object RagiumToolRecipeProvider : HTRecipeProvider.Direct() { HTChargeType.NEUTRAL -> VanillaMaterialKeys.EMERALD HTChargeType.FISHING -> RagiumMaterialKeys.AZURE HTChargeType.TELEPORT -> RagiumMaterialKeys.WARPED_CRYSTAL - HTChargeType.CONFUSING -> RagiumMaterialKeys.ELDRITCH_PEARL + HTChargeType.CONFUSION -> RagiumMaterialKeys.ELDRITCH_PEARL } val prefix: HTMaterialPrefix = getDefaultPrefix(key) ?: continue HTShapedRecipeBuilder diff --git a/src/main/kotlin/hiiragi283/ragium/common/HTChargeType.kt b/src/main/kotlin/hiiragi283/ragium/common/HTChargeType.kt index 08246b088..9b67ca878 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/HTChargeType.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/HTChargeType.kt @@ -9,7 +9,7 @@ import hiiragi283.ragium.api.registry.impl.HTSimpleDeferredItem import hiiragi283.ragium.api.text.HTTranslation import hiiragi283.ragium.common.entity.charge.HTAbstractCharge import hiiragi283.ragium.common.entity.charge.HTBlastCharge -import hiiragi283.ragium.common.entity.charge.HTConfusingCharge +import hiiragi283.ragium.common.entity.charge.HTConfusionCharge import hiiragi283.ragium.common.entity.charge.HTFishingCharge import hiiragi283.ragium.common.entity.charge.HTNeutralCharge import hiiragi283.ragium.common.entity.charge.HTStrikeCharge @@ -38,7 +38,7 @@ enum class HTChargeType(private val enPattern: String, private val jaPattern: St NEUTRAL("Neutralize", "ニュートラライズ"), FISHING("Fishing", "フィッシング"), TELEPORT("Teleport", "テレポート"), - CONFUSING("Confusion", "コンフュージョン"), + CONFUSION("Confusion", "コンフュージョン"), ; companion object { @@ -58,7 +58,7 @@ enum class HTChargeType(private val enPattern: String, private val jaPattern: St NEUTRAL -> SoundEvents.BUNDLE_DROP_CONTENTS FISHING -> SoundEvents.FISHING_BOBBER_THROW TELEPORT -> SoundEvents.ENDER_PEARL_THROW - CONFUSING -> SoundEvents.ELDER_GUARDIAN_CURSE + CONFUSION -> SoundEvents.ELDER_GUARDIAN_CURSE } fun getTranslation(): HTTranslation = when (this) { @@ -67,7 +67,7 @@ enum class HTChargeType(private val enPattern: String, private val jaPattern: St NEUTRAL -> RagiumCommonTranslation.NEUTRAL_CHARGE FISHING -> RagiumCommonTranslation.FISHING_CHARGE TELEPORT -> RagiumCommonTranslation.TELEPORT_CHARGE - CONFUSING -> RagiumCommonTranslation.CONFUSING_CHARGE + CONFUSION -> RagiumCommonTranslation.CONFUSING_CHARGE } override fun asItem(): Item = getItem().get() @@ -83,7 +83,7 @@ enum class HTChargeType(private val enPattern: String, private val jaPattern: St NEUTRAL -> HTNeutralCharge(level, shooter) FISHING -> HTFishingCharge(level, shooter) TELEPORT -> HTTeleportCharge(level, shooter) - CONFUSING -> HTConfusingCharge(level, shooter) + CONFUSION -> HTConfusionCharge(level, shooter) } fun createCharge( @@ -97,7 +97,7 @@ enum class HTChargeType(private val enPattern: String, private val jaPattern: St NEUTRAL -> HTNeutralCharge(level, x, y, z) BLAST -> HTBlastCharge(level, x, y, z) TELEPORT -> HTTeleportCharge(level, x, y, z) - CONFUSING -> HTConfusingCharge(level, x, y, z) + CONFUSION -> HTConfusionCharge(level, x, y, z) } override fun getTranslatedName(type: HTLanguageType): String = when (type) { diff --git a/src/main/kotlin/hiiragi283/ragium/common/entity/charge/HTConfusingCharge.kt b/src/main/kotlin/hiiragi283/ragium/common/entity/charge/HTConfusionCharge.kt similarity index 91% rename from src/main/kotlin/hiiragi283/ragium/common/entity/charge/HTConfusingCharge.kt rename to src/main/kotlin/hiiragi283/ragium/common/entity/charge/HTConfusionCharge.kt index 55ef1e633..75b03650e 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/entity/charge/HTConfusingCharge.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/entity/charge/HTConfusionCharge.kt @@ -14,13 +14,13 @@ import net.minecraft.world.level.Level import net.minecraft.world.phys.BlockHitResult import net.minecraft.world.phys.EntityHitResult -class HTConfusingCharge : HTAbstractCharge { +class HTConfusionCharge : HTAbstractCharge { constructor(entityType: EntityType, level: Level) : super(entityType, level) - constructor(level: Level, shooter: LivingEntity) : super(HTChargeType.CONFUSING, level, shooter) + constructor(level: Level, shooter: LivingEntity) : super(HTChargeType.CONFUSION, level, shooter) constructor(level: Level, x: Double, y: Double, z: Double) : super( - HTChargeType.CONFUSING, + HTChargeType.CONFUSION, level, x, y, @@ -48,5 +48,5 @@ class HTConfusingCharge : HTAbstractCharge { } } - override fun getDefaultItem(): Item = HTChargeType.CONFUSING.asItem() + override fun getDefaultItem(): Item = HTChargeType.CONFUSION.asItem() } diff --git a/src/main/kotlin/hiiragi283/ragium/common/material/RagiumMoltenCrystalData.kt b/src/main/kotlin/hiiragi283/ragium/common/material/RagiumMoltenCrystalData.kt index d380c9532..9102c4f82 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/material/RagiumMoltenCrystalData.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/material/RagiumMoltenCrystalData.kt @@ -12,9 +12,9 @@ import java.awt.Color enum class RagiumMoltenCrystalData(val color: Color, private val enName: String, private val jaName: String) : HTMaterialLike.Translatable { - CRIMSON(Color(0x660000), "Crimson Blood", "深紅の血液"), - WARPED(Color(0x006666), "Dew of the Warp", "歪みの雫"), - ELDRITCH(Color(0x660066), "Eldritch Flux", "異質な流動体"), + CRIMSON(Color(0x990000), "Crimson Blood", "深紅の血液"), + WARPED(Color(0x009999), "Dew of the Warp", "歪みの雫"), + ELDRITCH(Color(0x990099), "Eldritch Flux", "異質な流動体"), ; val base: TagKey? diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumEntityTypes.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumEntityTypes.kt index 3804660a1..a24394e04 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumEntityTypes.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumEntityTypes.kt @@ -11,7 +11,7 @@ import hiiragi283.ragium.common.HTChargeType import hiiragi283.ragium.common.entity.HTThrownCaptureEgg import hiiragi283.ragium.common.entity.charge.HTAbstractCharge import hiiragi283.ragium.common.entity.charge.HTBlastCharge -import hiiragi283.ragium.common.entity.charge.HTConfusingCharge +import hiiragi283.ragium.common.entity.charge.HTConfusionCharge import hiiragi283.ragium.common.entity.charge.HTFishingCharge import hiiragi283.ragium.common.entity.charge.HTNeutralCharge import hiiragi283.ragium.common.entity.charge.HTStrikeCharge @@ -49,7 +49,7 @@ object RagiumEntityTypes { HTChargeType.NEUTRAL -> ::HTNeutralCharge HTChargeType.FISHING -> ::HTFishingCharge HTChargeType.TELEPORT -> ::HTTeleportCharge - HTChargeType.CONFUSING -> ::HTConfusingCharge + HTChargeType.CONFUSION -> ::HTConfusionCharge } registerThrowable("${chargeType.serializedName}_charge", factory) } diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumItems.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumItems.kt index 829455b0e..1f0ed8007 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumItems.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumItems.kt @@ -135,7 +135,9 @@ object RagiumItems { REGISTER.addAlias("cinnabar_dust", "magma_shard") REGISTER.addAlias(RagiumAPI.id("saltpeter_dust"), vanillaId("bone_meal")) - REGISTER.addAlias("resion", "rosin") + REGISTER.addAlias("resin", "rosin") + + REGISTER.addAlias("confusing_charge", "confusion_charge") REGISTER.register(eventBus) diff --git a/src/main/resources/assets/ragium/textures/item/advanced_ragi_alloy_coil.png b/src/main/resources/assets/ragium/textures/item/advanced_ragi_alloy_coil.png index d2e9b94b7fc54bcc022c336bf57944f189404b0f..9246cb89907ddd75eeb96e63ed133d9b019347d5 100644 GIT binary patch delta 380 zcmV-?0fYXS1C|4jBYy!)Nkl*$EJOkZ1rhv>qPT8tx_I;n__sj+MEdV$uRV}k5Ru02D6p77Xb;*j) zoTD_pXunD;8~Ubv2B?P`#D`xN;Iy6IEd!ttb+zb1-5dJYGd>Ogy!Lw%RiI{^q#)AZ zyppa>6XY%6^>t6@Y?08dZFaC{cSO7!YNCyi8ys)_f82K%Kwth_n>TEm1J(Qr<}V1pom5|9W!r`v3p{21!Ig aR09AT)`zSU+!H+j0000Px$Qb|NXR5*>LldnrdQ5c4wiA94Jg*7J@ z!Q`&6uq}*%Rm5g6EGU{R;thhqg@Fc}I%J3ptABvV!dwu%ib1(W4#F-hcyBPccnx~a zcCP2H_?GkIJMZ(I?>ij$rxJ02rImwF&i#(yu2nOh9gZ_*@_*^R-84WL_<~orp@9-n zbH7o%eQ5CMnF;ErM;atyGE3wBZV}J(IIp`JsC9FpAVbj-`m=hTN4wqD;)UX@xd(nn zkV-9TfM{luv>xQLrEqI!1AxY@ZkCzLwr%bKz{5P@_GpQ~7wlCk8lY_309=kVSa|CB zv}bfW(A<0mAa{RwM&Jt-ds+Pipn4KhLM~ehkH2avU@cqPLFd|0^R;e4mGS2W>zUuh zqoV<=sh_cW4~+NrHGq`_=Y8-EtR&DilpxD!PSzNtIkyo13KA0dLN!epuf_ld{{<6B cDr%Ja2DB=P_qGQ>+yDRo07*qoM6N<$f&hQB^#A|> diff --git a/src/main/resources/assets/ragium/textures/item/azure_steel_boots.png b/src/main/resources/assets/ragium/textures/item/azure_steel_boots.png index 062921c7d4b79d2de57621a2c78944a82b8db5dd..6698ad658b9d43aab1330a9560d5f16f3fc1a0a4 100644 GIT binary patch delta 237 zcmVlqHG zBfLyaj4i*+%Km2sN_D^ic~y7+ukaN!LXP7r2na)9D`@X6jAn&vA~tZd+Xsc#bX8QO zk*Oby!nbJ#2FT%AzRrn>@H3#$e?q%oWaS`%Gk9p}$fs$@u(-XJWCjokL}LEW^Z@_> n|NlYaG!Os)00v1!K~w_(R})r*`0V_*00000NkvXXu0mjfd!T5! delta 230 zcmVW-MGOnz2Hd{74=#ut g&uIMr48soq0KWrU7b4cD$p8QV07*qoM6N<$f_yY-!vFvP diff --git a/src/main/resources/assets/ragium/textures/item/azure_steel_chestplate.png b/src/main/resources/assets/ragium/textures/item/azure_steel_chestplate.png index 6de97334512ee53b79661331578484f366a22b68..99fcd8ee3e377d6088ed9bd3b9128f6f3ec63f1d 100644 GIT binary patch delta 277 zcmV+w0qXvz00`G;1nMq z%PPo{3hvhnNRT)VEop(6dXaG=KI2U17@wdFw8dr{Kz#0Eqkq_6`aQ8>fRTt8hBJW1 z1R&^{7kL5iGBpieWzr79b)cehApylYUl}~hlp1d$@2p}vOyhSY5^O?>&mmr~(+(qF00000NkvXXu0mjfeKvVN delta 268 zcmV+n0rUQ_0;d9yB!2;OQb$4nuFf3k0002tNklS0pPwqx%_^+qAD`E;8C@N7rMyvvKJ&&MJD-8063ku1^_rVn*Y{?X&CvX zBMt>=eHFcep_0J@-IPzfsS@1_f1?>H;n<6M%mf%0y|8*fZ2^_&cs2YJJOKtpc}*(P StC|1+002ovP6b4+LSTXv&UVfK diff --git a/src/main/resources/assets/ragium/textures/item/azure_steel_helmet.png b/src/main/resources/assets/ragium/textures/item/azure_steel_helmet.png index 52065cfe1cede5d646f5f32afd8332d450317bf1..ae4b028c2c8bb5de9a84e8d9a704813550eb30fa 100644 GIT binary patch delta 229 zcmVr$9A3kz z#UX>ZIn~W26i-ljLL_~>{v#CngAnq<``(wlBtjq&0vShOw?0);{PsL69#c~CT&IXP zaV>toUhuXVUN%>a4qWo#xJ8mIU`z>KfD*~F zgRE2a-U9BtKD6#F(8R~)-2!x8UcC*mjZ(W-I{m#39#;rtqJLosUjP6A|NqcW3O4`% f00v1!K~w_(OR+{d$IU?g00000NkvXXu0mjfoJ?k4 delta 226 zcmV<803H8<0{#JzB!2;OQb$4nuFf3k0002ENkl00008i(L}RBcEHP%F!drl~Ds=~8Od@oPkYN(&zMTeCMUd+b&+ zpjHwE0O;IhwcdRPsG}!Q&KyvP#+=aB|!guMr*Z29}dv}+EAC*%r9Mv7_#}^)tcS}v= zbye6Y0`z-r@G5!m>;_dfz+!|;ofaHsi%0IsME?xuQ~!y){(lL^-TfHk?%2t*G7VNW z0-|+cf1G2wn!l=YMh@uG4 zAPhqu5C2(??xA|t5^!P!r)X2BP=YxFOw*KxK@g;l`qBZyo?Uq?;xfz`hg00000NkvXXu0mjf*hib4 delta 349 zcmV-j0iyon0`~%tBYyw^b5ch_0Itp)=>Px$F-b&0R5*>LlCeqyK@f(&#GG7&RUt?g z%t1&aYzmuzkiteVHa3FzHWt2(jSpdAWt&3_58+bmB0}Opa(IEYkUf;#B})Ew=KE)c ze_%~j{@Qq>dUp7c0B}2c&biuOVI_P{58I3)4Pc!~brsxi1bwy$d?lVuiKhv=VBI2B v0kRz*fN{4?KP) zy-EW?6opSTjTXBQ5SAD*VlkpcD!~QoEUESt#E0-9EPVjqA)Rj^!OB8#DiMOr5=__u zHDEFBy*PuiJNZ4ZFtan?nRD;0V@=f;y_m+g=1o8I`r+xiwv++E`#T5do_8RnreDUI zY|Mk(dnv<01Qteo*u&|`m6@A>;7%*8JZlC=n3=%B^!n@Q#l22R{>p10j;9QFdrfCT zA|qP&?=QIrwJJDC5)(xc!pQ~i39u88!#;E_9k=O&8O-nSG1>LPq*4>JECU%RrFae8 zK)ow`euX8tR6-C6(egFUf|Nju^3KjqW00v1!K~w_(B(H_& Tqccw)00000NkvXXu0mjfM-ii= diff --git a/src/main/resources/assets/ragium/textures/item/confusion_charge.png b/src/main/resources/assets/ragium/textures/item/confusion_charge.png new file mode 100644 index 0000000000000000000000000000000000000000..2da7919b490b4145a566218714a30045fa1a7c0f GIT binary patch literal 356 zcmV-q0h|7bP)R;m_h~=3#Bk3Wv{YlflF|Ka0iaTMt8)B)EO4`Tp$tyRDgw&A`!eH49^fN zqII$8lM*?xzvusdc7QcC^j)|=Ds&WO=IQ?*_`(Of1@gmf++4ljqB=&~mIJQ}xMLrt zj?y!9l??xavr(~hZf7gQN`nqgqYPDB+TB@6UrvMZI5aSU&V-`T_2UG$PZN{D(h&1J z*Fp%0yA$(Gc=luP{8riksSOuQ-M?RAJ{L}y3Vs_jO#>R#b#2DjJcZH?l-gT>7g}I& zOjqeC;yAX3QcCB23Hoq%WV4pw)Qnfb)_^cmhlJ_(yI1LTON~JoK774Xd?e>kua!4U z*@a1xXrGdu2LIJ300030|Fa-R`Tzg`21!IgR09BV^n(ek>#JD+0000>E&MPbs7ers$xc>`WU{ntAR~Qky7Y=Rea$`ZHMbdxRE8qu1Z?s`j?Z=bOo9R0T=55L z4*TIOZd9#>gdnNQEbjDIW1XrKjFz)pdI6Am45=2xf>=+`=6q&nMxURLrg){wXdvDR zAPH)wsd*3HN5`0kbpJ{}WAX$#Le}-ljKO;=SDgfV3$>HMXgXt5u1mB!T~w`2yZ{KI z|G@UeEwd9~y8h=4nZ1BeMaTF700960@>K6~00006NklGZx^prw85kHodAc};So9_*NMs!7@IK@f@y*`o|Bc(nBd%_G zaB0uqCuMD~xAO9Ufd9L_2|)0p|Ez#o%q;u+d)UOI|9&xbp4es6th4+;{T{Z2%RMx@%#G{DV94ooJu~jdg_KZ_56i}ZL8Dfl*2NgwN{%p679;fb7nGLI39L#(!Yx`@k40`3OifGcD0J z8IJ^vA=8Bg(Jq8{%7}CU3QY*>x(=rx5O7t}1&-rz+qNN&W61NI6pM;>X#m35jBiG` z%}0m8D6MU_3XCFsn`;ZYHrEyyh9Q2q3tS55t1kcm0RR6rC2|k|000I_L_t&o0GE+z VCJYuervLx|00>D%PDHLkV1mpLbASK< delta 272 zcmV+r0q_2*0;>X$B!2;OQb$4nuFf3k0002xNklBL>BQMur0y-lC{u#Ht$#w2f^4GcYhP$bYfiU{DNbWO)7f5re3# z9K*pi%NeeoJIsjJ1q=)f3|G$`W|U*O!5}Ze$*^xmDTAo296sfkz|&0he`mV-e+@bA z|1cN9Tt(0eo@S!|74qSN4aO2Teoa(Sj5UZIeXA=S_rqk7C44@&$O}=JI000V6 WVV>G--fRE>00{s|MNUMnLSTY~N_GMO diff --git a/src/main/resources/assets/ragium/textures/item/deep_steel_gear.png b/src/main/resources/assets/ragium/textures/item/deep_steel_gear.png index 756b7bedfddb3d8ed5f72277ee4f76863d81c2db..331cc1916e488f5bc4b98e34b9bd4f8e55455e81 100644 GIT binary patch delta 293 zcmV+=0owk^0>}c8EPs?z4IiiuPc#IwyX z#J4+cRkU7dbCP|iO^ywKDGJ7Qjm^pF{Huvh48SM|l|Kn-vwz!aBbxw~LY*P5d;l{a z#-ZY!>cybqk?JMo+WFBwx1DFHgC!05^QECIV~BEKRVVt3@L<_2p^lwj?`Ko;=ONib z`+&$H)*Vz-RnMaYa9)@IZITgzTPr(JZJFiXh#)27aAwrxOF97zX)@UAd^kkCe`BA% r00030|Ewgo}c8EPqqM4T3-rJPa-HLMcFh{!ApH0Usv5D1e`B*?HDr z!g8}Ea#=TO2%aqfQWOTJ$K>Lco1S#ibI{Zk4MvAO5t#&09De~5XC}KrxG;ktLy$%3 z0aZyyVrJ)ueYX94Ts@qg%U4OF&Iod0ofCQ^yjUhnQB$neu|@=nGLKZSh?EVA(26*h z2-TH}wb@52zJ(OA2UjlN-Y`)9P?(C&Hzi$9LaS?3%yg3DOP#99+6o!9j->?AV8Jv9ICc>T|j1 zpy1S@TV5bT3M!IE5F8>21R~Y^^_xP%`R)na1O}4W9;@|6=rg&TP>?`|xBDFscGFkl zmjr=@*)mrRs=9{hDhF~n!t2pNnx@b+4RQ)hk(5YA_YT^&1#-^0%3>eElTpO3XVv08 zUjQCY{Jx+m%TmbNlu{LzLT`Z?*0oKrD_j)C->|iTYqBO85|-eY+9oJ=a<4(?CxxeTJRatvpf0vVV^ zjEM6B40xJ}{+E~FWH@l)Ed#TN5wgpO)7+V^{$E3m`#&~$ye1*reB;qq;%z0yX1p$- oi_KVFKv$bFfQB45`I;#K0E6~bDcZO@=Kufz07*qoM6N<$f)rwDivR!s diff --git a/src/main/resources/assets/ragium/textures/item/deep_steel_pickaxe.png b/src/main/resources/assets/ragium/textures/item/deep_steel_pickaxe.png index 6043e31ea683927381370c60e20513cbc644db01..ea646a373e6d60d695cfe675a8b3871de574d8ef 100644 GIT binary patch delta 287 zcmV+)0pR|y0=fc_B!BNoL_t(|oTO5*4uUWcJqRvth6NoQ7$A|6(GPHe-*7Qu(ZrE| z5(iD37}(g1Lrox2BYc8erH!CqD<$h)JarsM zva{GfW@}3GA~b+u7?{}JxGs&Y^%6#^h8qdwWP}j49eQ5Tms$Zr)^)ugv)+hxl|LJn z<24b!K-G5j-c-lMS>V}bRn9>gc#qKcKd7tBf>^EGhFo%>C<>ix8*)kDUpxT-0RR8< l#NROh000I_L>NI-0|4|-Y+ivocsl?9002ovPDHLkV1j$9d&>X- delta 277 zcmV+w0qXv`0OZ>Jfz8V> z)U)8y>=6>k@aXAlhS!fDF)%PNFo?>^F)%PN{O5eRn?YWJlVQfDM~pZPfZFu`_0z|2 zF)aoL22mL~1`{bEhWXo{5cUE(@H7+suNctC@cQv1hHEE}GJjk>cbJiZfq{XESk3Yh zoDBPBlrk_dFfiDML^5a_+5X4r1$500h7f1pc=VN#`Q*|6T1fJET>!HgrWu=W7BYyz=NklI$p`M^UHye6^ zp25xbhW3Vn)`l=?iV!`#bmC`*C?FC>{!m86Zhg&{b8C z#TxmSMG-pnCP)1e3l@8W1bn<%0kZ+Zf*?S(-AKTu%l@%$b!*y7Q9YI1ftU5SO8uQ)$?M(g8@>-Ou0WKwax81 z7s?FyM}=SG2POaj|Nj(=N6r8M00v1!K~w_(ZS>o delta 305 zcmV-10nYx%0?PuBBYyz^NklmA5vQe-YGDhPc(MEApf@U6%(Fh39s-vkI}6LHXUc?PD2o_`4tuB4N2thGpWFW5B! zg_nmDe9|&mbHZroX<*fSJS2xjVFcBS46)73-N0IXvOAk6jSwoj7(wi<+4h(OiuPh! z0!ajr0GCD}u0R5UbAUi#xBwEt zF%bAkbPd5GN-}|9y+z4u0x22W+VwYmN&Ef(|C&OiQixQLK`~z%JnM&oSEUHfBm`dV zHg>*MPbd#ZYm$V(7A!ANunBmt;KKD?!DyQQ+D>@7LS!AM~z(aF%6o zJ)atIZv%um=OCp7tu-05+_-S3!6#WMW#P7WX$*`?+G_j2DB^;6`X>Kv5R%+zfTEPz v7K06j=nVh>|NoJFR_Fi#00v1!K~w_(3!q{g`_bfO00000NkvXXu0mjfPAhEC delta 249 zcmV8w{_8ov^YT9j{w>EQx!LXs zKp31j?A8uI(gtpII{^4W2q1^u+DX{Jeh{+VY|(iY#l9A}hjPP{k1FVgxRD2*t0YtJ zqY4_GSIozg$O9vIG$=_~r)4->NTt>gBk&mpcm=;5!*i7sb17E)3rGKIb?#W_Pl{Ex z?Hna|t`dM|HOq8)HXi%o4{YI>$~tYd_fK^L^Qc*}&*u|!00000NkvXXu0mjfc~@}S diff --git a/src/main/resources/assets/ragium/textures/item/deep_steel_sword.png b/src/main/resources/assets/ragium/textures/item/deep_steel_sword.png index afed8e2740776d4b43f615b2312bdbeedcd83be0..13f914ae9e1d82b459c28cf902243fc2149d6a4c 100644 GIT binary patch delta 291 zcmV+;0o?w^0=@!}B!BZsL_t(|oScxY4uWtL#V?NL6G$+y32sDQz@W2$!H2+LFz9CX z0jzHN8c^H_CK_GQ5u8J^#rSuZ3A+gLbqW{8@7!|_4-KS_H5Si2)D*(|-8PyhBOO{z z;DddF+6gFZ35XND<>>%Q6B!2;OQb$4nuFf3k00031NklTN69}2qx)z;u z5Cp}JIyeX}dH@H(Yq;y+1%zI}%_-0d3MwuZ=hRNY(K!y9La5r>e+>EFd;j|hQjFCb z$uwLD+Z!hB4U?5xOJ@Fs$I~&~gO}cUGFyi306_kAHu4m!`F{eJlS2{-{DL(B)ht`v z+FNJP2M@$Y7yz^qX~77ElE9h(TiZn3ILeJCDz#Q3IFdk3doaXtcZ`McsYI(clC)qz z+&Dzw|AZq6x^*f|;=#UsyVRp9hZ|sMBqaNeyj*lt((LJJKu5T x4=u8SzpawR`y_nMzJx31kxy|QWL4C(^8}(nniPv}+q3`x002ovPDHLkV1j6DhnoNZ diff --git a/src/main/resources/assets/ragium/textures/item/eldritch_egg.png b/src/main/resources/assets/ragium/textures/item/eldritch_egg.png index ce6357c62e29dee76358388e25dcf07f730b4c5f..e7d2aa77b8d71fdbea64ca7c2e89799969d82bf7 100644 GIT binary patch delta 226 zcmV<803HAN0saAyB!9C>L_t(|oV=1d4#F@HL^n}d7nDJw0f`H^r-8G$=N6nHXQ4{( z3m{QPqMb&qD)nksp$ZlT3NTgc1-K!d zVq=gpWj>zP-#vgs`q8GrB*uHO00>&tN3Qqt40RR6w@k7i2000I_ cL_t&o02I7ASk7tqt^fc407*qoM6N<$g6aQdUH||9 delta 221 zcmV<303!eX0r>%tB!2;OQb$4nuFf3k00029Nkl8o8> z)w1ByY^m(Ypsvoxz`(%3aP#IT1_lO(|JV#+!ll{GQwlDouFl6G#ixPcDy#-DFfgEK zh5>m|MTXa(Zeoa|7yz@Kfq{YH;k_>yiuGmu85CswQCxxH0#Ei$mROFL)uPM=A6{xF&b+<=r(+sEH=jM5#c(yGZH#`8pYu z1&FwJHtKA5hLjUBII>O*gO7|uyDg)8oI;XB1}i{hB>8s%kAEz>>zmA3rcgq<2-^aY zN6xmG3hiE=&TnSMJfKq44tmaoo` zNUfGS;Dk70B`Sd`_yGU_|Nrxp0H*)|00v1!K~w_(1EFoQiBUA200000NkvXXu0mjf Dp&*2S delta 351 zcmV-l0igcN0{H@vBYyw^b5ch_0Itp)=>Px$Gf6~2R5*>rlCf&SP!xtgrE9NHaHtS! z$q?}kgn~G<)XBA@;Np}A#IWcl;w`ptUx=B!vJrCIlc(BStT;2Rk<0wmm_4#o$u$L*@XCKgk2kt zl3VjZnav-kmqA@$>k1Ec2e`gF$KK%y4&sri&w@6Xn;F_4Zhzu=^6u&{4>#6H*amNi zr17k-hix!hpS{jp{ihS}4tnaz!VD~nFwFUVc5KIQ+(DYAMoI}O&+In?^$lp6Ag9c6 zfe+>=iURB9sTXeC0TF=(80H+f0L=-#a%%-%anKiuQDTUEK86s&32Lpq*Bvgy+wo|T zS5Hpkh3#KpCs4p}exsB!4SOL_t(|oTQP>N&-<7$B#A$QPiSAhMQs6BGmcae`zBSYTW zZfXm|Dx%9r?CoD!_mwL%v06VY3y^H&6Fu{iD90#Y_1L_yL`wExc1 z@hyeUxCBAx!%>~vu7c{XJ>{? zq5l~;Ug6{-wp#igCexQ&u!hJf15Fc`%NFu5ECF7+>m2BqWy-*$Y!^H(uAfPIlv25u zSoX=sv*%$>`~d&}|Nq;I2~+?800v1!K~w_(kjR$3234=000000NkvXXu0mjfy?vxc delta 353 zcmV-n0iOPa1BC;SEq}dA13?g;J+_e3phmGcNkjy}%ErPXt&P11c7m4r2I8~$02bmS zXk%lQCV`NUpCg1^en@gvNOIr8Y;KcHAjt>2Gqbnf%r~=~qzxgl9qsOoX$>^G9U(b5 zPMy;#s8#aHI`PBp#J*msleA&)p5FDhI2>E{WHLdmR!>`?Sbu2J?fvWAUB^bgzIoK- z123c2>DeLu{ruC#)q`oOun1NPD?208G5qeT>kKDlxyI_;PVST?{!Mo=#* zJLt6+w*WFKqhA2Bfreiu8r3w}bv+7){rLne9|Vw*2tKMadFd-)SYMxSNU00000NkvXXu0mjfdSRfm diff --git a/src/main/resources/assets/ragium/textures/item/gravitational_unit.png b/src/main/resources/assets/ragium/textures/item/gravitational_unit.png index c523033f64c5f8bdbffd9f620d7c88d2985ad258..a87234eedbc46839e0453cca8d1625fdc097375d 100644 GIT binary patch delta 290 zcmV+-0p0%F0=)u|B!BWrL_t(|oTQSm4uUWcKo98R;NYl zgz3QfviE%vxJn7rfu|rW*I8CbEP@Yv52jrQMs_CyF^g*q%zxHv25*2(81pUenPl3n zuiyyX5R}&#E6;{u+K9f`6z9=NoZ`WnNh)~8ym|(r1iSEJeiGuoDoVjQ;+a{L)PY!A z5#*BLL_t&o04ULrc?UP}IsgCw07*qoM6N<$g06agng9R* delta 320 zcmV-G0l)se0^0(RB!2;OQb$4nuFf3k0003MNkluy`2^Az=o^Srg4m(Lfnq@+3B=Vd@u(VgY5&vlefRrue0K-`9oO+1 z*YTRM{@oM^U>oae#cP7lSNi(~h2Nn1_#o@m_nAn<^d-s^cz;OuY|QPXL}}r--795Q z4Zu0cqHQEmil(aoY|Jf(bU#=FShmTNb}vsX1#=QjSJ8BpBuZH=4Nm7H+`5G%O0jH{ zGOHxm)^9}$idwK*8Xd_PSkywU7XU%%D|vb8G;YB~EhuV1US7I_DM=rUzcNneBOjmd z%3uaT=qs+{H92Sk3scJS@*;=Uf^7ybk?Xs#jWv;oN5R>+j@P_A??yk-pXCP%Pp3+V S(o5q20000}~j#TKfy%;0OE! z8~aKmY{a7Cl?W+8R|L~$u3K#r)w8%g)6ATnna&j;AOt+p@x&AU!2Wy+2^8e=74U=2 zYW{IRh)PMucUr+#kSQ)1zg=|3Z3298Gpj(OWeJW3It;a*O@D+C_A2glOY9vA<)ymA zl|w+5CG*J_6Dn_k{Z%!&VQfJZVorhCST?_oPzSn0q@Gb=GCg=ZAiHkGxihP#E#QXCH#7V^CG#!FvKI#Ue?kE2`(rYg@lfbV6WB2(TP`g=T>H@JW57OR$S-hxc-8Dtg9c`xqpId=G9@1%DF~Aq*I=~A< z1{$t2QpAXXLpRpXM0=!GF{haF?t~cz+{hjP0RR62z#%^X000I_L_t&o0GF>~Spls` QTL1t607*qoM6N<$f??j14FCWD diff --git a/src/main/resources/assets/ragium/textures/item/neutral_charge.png b/src/main/resources/assets/ragium/textures/item/neutral_charge.png index 6cfd793ea349d1b3137445ea6da353c633226e5f..b69cfb0fd9085ff0027e6feb1b5cb7c61b22c9de 100644 GIT binary patch delta 328 zcmV-O0k{790^71&eVhjmj00r z{T&Ye7G3-aMvZYXiiv}X$^e57E+(G5mmFdQL45}}j(eW_?mmU?j8b-?_xI12CfdI=Su-^=ETTaVe=5!LK!4z*g;D!esq=WH~M`6n_A=JTLp-mq8Z=62|VU zk$>Dht|XmY!N(gTS-O-U5MkVG)WscCvS8b`xu$8PIga=SAUm*{#^afva1VJfGVgR~ zr#$AunH89($qmDxFbpY*A~A<|_38NxJ`;$Red@Fr_DEIL1P+2A^QefDhSM#B1i1t! z0>HR+1n0$Bi$TB>!G61mpN!UnE-n1>Fp?}}jPWuh=L&Ak0RRC1|H}WFMF0Q*21!Ig aR09BxmVVxnt;LT30000Abkb&bk9HR*IgV@{Hjlhu>jQtC-oL@nY-Ugy!@X)3jRa7NpV6p&@lWBq!80P yS)?ghX)v#b00030|BVhQ)Bpeg21!IgR09A($AyD4Z)#@%0000t0)YdNBYy!lNklRU0|QcrNL8Q%5<@a%>_mo)OvxQG z0TXv%$pM&9r`*AvdI1KM4G+n{Mlnd)x}p$Ua`B&-P^nLf?AU(a|7^<+4wUoPL>$Mh z?l(;X&iQ07fHnp}(4T50NC-hdlfKzBN`ooab-@@TkRzK}8h_=N=Q*-0Bfuz%;CWs< z0NAS5b&aa3$h`0SbA-fYMuePg?oOAM=+Jb+`BeP zJ%|h3Lcj`Gp~0HZy51DmjFIh>;!?GD_#$A(jGuG~R`^!`uP0sP`R~G|*r+yvix+R( z>TL`XJYlB#n_%*jR7!9>oCHi00960Kj%LB00006NkloqBYyw^b5ch_0Itp)=>Px$ElET{R5*>Lld(#~KoEw%sO@o(Y9+M@ zRtu@E)A$rY&UZ*>kvu}ga2(_n#3r?MFqL4R;H0s+QZN>G8*g(P8~pJp0 zw}h&y8bwZ~eI8crx{kJOt#}xQZV&ptCkO&dU|QJ)%LA?T5XUh9bzM6vXIbX<0N|19 z;X!W^5t1aa1hOmx;9f4c<7MPoYpmI_ZhXM!cC)d@d6p{x3O?N)Xsw5^Sy1x@z-zMv zmSbYEzYkfUlu{bZ7)Kqf@b_mMA*X+LVAM?qtI387zQ>#=en&gn!p?(v+^DztEf^6I r;X^L1`*ZaUyN5Ra7hFOHQ=-8S#*K-+*M_gY00000NkvXXu0mjfNq3)I diff --git a/src/main/resources/assets/ragium/textures/item/strike_charge.png b/src/main/resources/assets/ragium/textures/item/strike_charge.png index 7dd132e705056c1d918cd1c444f9733bef012ef8..a4deb167054ab1c6a5e64f39be2bfb74a401550b 100644 GIT binary patch delta 307 zcmV-30nGmG0?q=EB!2@*L_t(|oTQOGvVt%ag-;kZAf({cZzjx$m6a9NcIpCLhKq0+ zuE1qjSy^SqT8adh5V>R$e-J@E4Veqymy;0U$Ao=9G+S=Uqg}@v#Xb@c3^7178v~~U zbTx94pbOS(3*+CylxR7y^R5Q;Q8aq}&dq~Pn0A*JzkA)}E`P0p#eN81-AO1Us@7~} z@8IPT@;o=3^J;bWK>Y`f7erEl?Z8?a++bk3{=30+?kAYSo&{N!nKVtIl!DgU-beL3 zPl^WI5STekDLArih&YZtTogqEYzPR((pIO+B%!>6DS?BhW$s}*D}i0GZ;&L35kk}h zDJA-V4+1CYQ!Kev@NKRD00960Plr4b00006NklVd0__5jB!41FL_t(|oTQPlPQpMO#=kaoaB!e@r~`{e1~qBp;v-ZyWi{$E z=)glb$TR2z=&ElZ10+pgDPdxuO`wdh9rwS>m6B3g;7gibul@b*yPknPW0d`neOWB- z%JK30SldcKFlrT;ch|t6g9)Ef61@<sCIC8t_#GG+9o&*L;OCr zp^oqK=MZoG;R=%xxUS0_#}RN8MTw|!bdZ5Ff{*hmd%Yau64g-W_Zc>&E!1=9*lDBheo@@ zqlqW>i(WT(lK|mD*@jxR1jE%9OPnNm8C)eZ{@RS8(cKtpq zUo@ccox+&hslc)%SGiW;t)_wN*(5)@3Ezx~?4#{*DRHHH~uDUhNh;iBt` zeT3jag1H380!W1aK3{<$OpTI&N57!!IyVeM6nx*8o|+Pnk0)hjOB!4$aL_t(|oTQP@N&-O~$A7lVA|WA?uttZFI#ups-8xhd?6sC| z(xDgV&bu$6=;v!oT}M zV+8mM^#8tL+^GvrQ^6SH_Xk>9QVB~tux*=JmIa>Yf$#e?hjnkVI|t7RjAWV_sWime zW#C;P9DdTHVqo-Hc<=h2>LGz;E>OZkfbebh1oB}WREscf)xqm526^Zi6WWLd7lR75 zFFUI$Vqth@wo1!N!KRr400960r~tru00006NklL1 zv_31V6uyC7Dl50Q5y2O*&S9}ASlt#9ZDMmAlFnw$44mj@l1s=3$IQ;n{5!L|J_HWq zd+WwB)5m+B*4(%+6}NU;NG`T`t#tuCC?;MHFn#NaObHNCH-Ch>e)|_A(acQedXfO` z7+%&fd>!&v`Vyi5@qA`*rS^Ge^2tinq+qArv+Io*UwO)F@)tft;xiwx{n#C|-F!(g z3vq;vMwdl`PV_5Cv4uwBA5O)1EWWuLb9%m92Lu(Dh0;NKRmDX6_J+rxn{jhyUSqHwSt;&z@dE$= n|No_`HhBO500v1!K~w_(gM(+dMf(xF00000NkvXXu0mjf;S!l> delta 365 zcmV-z0h0dj0*3>TBYyw^b5ch_0Itp)=>Px$K}keGR5*>5lf6pAP#A`vibDp6l7vt* zga$;>0pjmC8>4wmk2nC?H zc^)b`li-n6n=NKrPq8G2rvz zjxYOB=$#lMfM&FAP1{ZfEa&A^h%m&lELGyogY5Ac(ux%V`1jZ8FY&iZ8#;DghSD}K zm5cvP0ATy0s8JN;)C_EY1VHijhFtv$wOmX5(uvo&VC^T&qA9)sauZ|6x|P2800000 LNkvXXu0mjfaa|U_oMojfe0YasV3( z6FCQs356G+HM&MhID`ctP+=H>0f-xQypnqkV#Y1Zh?t!iYykM6; zxrem@nf&mQcM%7%D}v26X6r1$n9r&kSAz7)l@hGu;~ji){=w@Rl;2bs{jy6G#}$Yn z5R=^Q?IFq}GLSkaG1oo>O$p=zf@NUq22BahLj_W#MGQ_E;csB4;Mes28{Yr`0RR8< l^3GfU000I_L>NI-0|5EDfKON@jn4o8002ovPDHLkV1f!6dYJ$K delta 313 zcmV-90mlBi0@MPKB!2;OQb$4nuFf3k0003FNklkx zJec0ff*#Cf}k){WDBZdD9qS3*|M-(Gt!qd*X!lIyUVK$hOog9jRNk9Wz{@6@lI<2 zB*(`9{OGRoP<}9El!(o-N#3bci>jb8u&0RR8!wLW41000I_L_t&o Z008({hYSmd*$e;x002ovPDHLkV1nDXd-(tW delta 281 zcmZ3-w1sJcNGZx^prw85kJedAc};So9_*NMs!7@NRNH|J2^-|LLW+7FUz5 z)_nZE{J)&|`~Tl}RQ%t6>e%N07kOJ4)pBO_&x<);@bkF;jvMVqy(LvqtGN>xZ1-)< dl#^j#5RwpzU0@dJ5)Je_gQu&X%Q~loCII@sb#VXy diff --git a/src/main/resources/assets/ragium/textures/item/warped_wart.png b/src/main/resources/assets/ragium/textures/item/warped_wart.png index 42626c36709ca380cbc4119ffaca9fb0bbb9fddb..47b088329d9dfda341f65549d3c49d8e5b4222d7 100644 GIT binary patch delta 237 zcmVozP4Yn#uA8E8n8ZbGv&yE!UfKYH3P> z>TUY^f7euh4NWunm{x=osH>k5oT#{Ff?_QovOFqUA5?Dy0)zsPB!2;OQb$4nuFf3k0002KNklF8es%wtwj_g!sP3_IKKBK zyyan+oU{lN0QT1ls*$r$^^#Fmp3{J-xS_}~MgY&p-O63 Date: Thu, 11 Dec 2025 01:54:52 +0900 Subject: [PATCH 13/49] refactor!: moved `hiiragi283.ragium.common.util` into `hiiragi283.ragium.util` --- .../ragium/data/server/recipe/RagiumToolRecipeProvider.kt | 2 +- .../hiiragi283/ragium/setup/RagiumIntegrationCreativeTabs.kt | 2 +- src/main/kotlin/hiiragi283/ragium/RagiumCommon.kt | 2 +- src/main/kotlin/hiiragi283/ragium/common/block/HTCropBlock.kt | 2 +- .../hiiragi283/ragium/common/block/HTTypedEntityBlock.kt | 2 +- .../hiiragi283/ragium/common/block/entity/HTBlockEntity.kt | 4 ++-- .../block/entity/device/HTDimensionalAnchorBlockEntity.kt | 2 +- .../block/entity/device/HTEnergyNetworkAccessBlockEntity.kt | 2 +- .../common/block/entity/device/HTFluidCollectorBlockEntity.kt | 2 +- .../common/block/entity/device/HTItemCollectorBlockEntity.kt | 4 ++-- .../entity/generator/HTCombustionGeneratorBlockEntity.kt | 2 +- .../block/entity/generator/HTMagmaticGeneratorBlockEntity.kt | 2 +- .../block/entity/generator/base/HTFuelGeneratorBlockEntity.kt | 2 +- .../block/entity/generator/base/HTItemGeneratorBlockEntity.kt | 4 ++-- .../block/entity/processor/HTAlloySmelterBlockEntity.kt | 2 +- .../common/block/entity/processor/HTCrusherBlockEntity.kt | 2 +- .../block/entity/processor/HTCuttingMachineBlockEntity.kt | 2 +- .../common/block/entity/processor/HTMelterBlockEntity.kt | 4 ++-- .../common/block/entity/processor/HTMobCrusherBlockEntity.kt | 4 ++-- .../common/block/entity/processor/HTPulverizerBlockEntity.kt | 2 +- .../common/block/entity/processor/HTRefineryBlockEntity.kt | 2 +- .../entity/processor/base/HTAbstractCombinerBlockEntity.kt | 2 +- .../entity/processor/base/HTAbstractCrusherBlockEntity.kt | 2 +- .../entity/processor/base/HTAbstractSmelterBlockEntity.kt | 2 +- .../block/entity/processor/base/HTComplexBlockEntity.kt | 2 +- .../ragium/common/block/entity/storage/HTCrateBlockEntity.kt | 4 ++-- .../ragium/common/block/entity/storage/HTDrumBlockEntity.kt | 2 +- .../common/block/entity/storage/HTOpenCrateBlockEntity.kt | 2 +- .../common/block/entity/storage/HTTieredDrumBlockEntity.kt | 2 +- .../hiiragi283/ragium/common/block/storage/HTCrateBlock.kt | 2 +- .../hiiragi283/ragium/common/entity/HTThrownCaptureEgg.kt | 2 +- .../hiiragi283/ragium/common/entity/charge/HTFishingCharge.kt | 2 +- .../hiiragi283/ragium/common/entity/charge/HTNeutralCharge.kt | 2 +- .../hiiragi283/ragium/common/entity/vehicle/HTDrumMinecart.kt | 2 +- .../ragium/common/event/RagiumEnchantmentHandler.kt | 2 +- .../hiiragi283/ragium/common/event/RagiumRuntimeHandler.kt | 2 +- .../kotlin/hiiragi283/ragium/common/item/HTLootTicketItem.kt | 4 ++-- .../hiiragi283/ragium/common/item/food/HTPotionBundleItem.kt | 2 +- .../hiiragi283/ragium/common/item/tool/HTBottledBeeItem.kt | 2 +- .../kotlin/hiiragi283/ragium/common/item/tool/HTDrillItem.kt | 2 +- .../kotlin/hiiragi283/ragium/common/item/tool/HTMagnetItem.kt | 2 +- .../hiiragi283/ragium/common/item/tool/HTTeleportKeyItem.kt | 4 ++-- .../ragium/common/recipe/machine/HTCopyEnchantingRecipe.kt | 2 +- .../ragium/common/recipe/machine/HTExpExtractingRecipe.kt | 2 +- .../ragium/common/storage/fluid/tank/HTExpOrbTank.kt | 2 +- .../ragium/common/storage/item/slot/HTEnergyItemSlot.kt | 2 +- .../hiiragi283/ragium/impl/recipe/HTEnchantingRecipe.kt | 2 +- src/main/kotlin/hiiragi283/ragium/setup/RagiumCreativeTabs.kt | 2 +- src/main/kotlin/hiiragi283/ragium/setup/RagiumItems.kt | 2 +- .../hiiragi283/ragium/{common => }/util/HTAddonHelper.kt | 2 +- .../ragium/{common => }/util/HTCreativeTabHelper.kt | 2 +- .../ragium/{common => }/util/HTDefaultLootTickets.kt | 2 +- .../ragium/{common => }/util/HTEnchantmentHelper.kt | 2 +- .../hiiragi283/ragium/{common => }/util/HTEnergyHelper.kt | 2 +- .../hiiragi283/ragium/{common => }/util/HTExperienceHelper.kt | 2 +- .../hiiragi283/ragium/{common => }/util/HTItemDropHelper.kt | 2 +- .../hiiragi283/ragium/{common => }/util/HTStackMoveResult.kt | 2 +- .../hiiragi283/ragium/{common => }/util/HTStackSlotHelper.kt | 2 +- .../hiiragi283/ragium/{common => }/util/RagiumChunkLoader.kt | 2 +- 59 files changed, 67 insertions(+), 67 deletions(-) rename src/main/kotlin/hiiragi283/ragium/{common => }/util/HTAddonHelper.kt (97%) rename src/main/kotlin/hiiragi283/ragium/{common => }/util/HTCreativeTabHelper.kt (97%) rename src/main/kotlin/hiiragi283/ragium/{common => }/util/HTDefaultLootTickets.kt (98%) rename src/main/kotlin/hiiragi283/ragium/{common => }/util/HTEnchantmentHelper.kt (99%) rename src/main/kotlin/hiiragi283/ragium/{common => }/util/HTEnergyHelper.kt (96%) rename src/main/kotlin/hiiragi283/ragium/{common => }/util/HTExperienceHelper.kt (99%) rename src/main/kotlin/hiiragi283/ragium/{common => }/util/HTItemDropHelper.kt (98%) rename src/main/kotlin/hiiragi283/ragium/{common => }/util/HTStackMoveResult.kt (94%) rename src/main/kotlin/hiiragi283/ragium/{common => }/util/HTStackSlotHelper.kt (99%) rename src/main/kotlin/hiiragi283/ragium/{common => }/util/RagiumChunkLoader.kt (98%) diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumToolRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumToolRecipeProvider.kt index 1df80b13f..75cb51137 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumToolRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumToolRecipeProvider.kt @@ -16,7 +16,6 @@ import hiiragi283.ragium.common.material.HTColorMaterial import hiiragi283.ragium.common.material.RagiumMaterialKeys import hiiragi283.ragium.common.material.VanillaMaterialKeys import hiiragi283.ragium.common.recipe.crafting.HTUpgradeChargeRecipe -import hiiragi283.ragium.common.util.HTDefaultLootTickets import hiiragi283.ragium.common.variant.HTArmorVariant import hiiragi283.ragium.common.variant.VanillaToolVariant import hiiragi283.ragium.impl.data.recipe.HTComplexRecipeBuilder @@ -27,6 +26,7 @@ import hiiragi283.ragium.impl.data.recipe.HTStonecuttingRecipeBuilder import hiiragi283.ragium.setup.RagiumDataComponents import hiiragi283.ragium.setup.RagiumFluidContents import hiiragi283.ragium.setup.RagiumItems +import hiiragi283.ragium.util.HTDefaultLootTickets import net.minecraft.tags.ItemTags import net.minecraft.world.item.Items import net.minecraft.world.item.crafting.CraftingBookCategory diff --git a/src/integration/kotlin/hiiragi283/ragium/setup/RagiumIntegrationCreativeTabs.kt b/src/integration/kotlin/hiiragi283/ragium/setup/RagiumIntegrationCreativeTabs.kt index 429beaa37..45e861cdc 100644 --- a/src/integration/kotlin/hiiragi283/ragium/setup/RagiumIntegrationCreativeTabs.kt +++ b/src/integration/kotlin/hiiragi283/ragium/setup/RagiumIntegrationCreativeTabs.kt @@ -5,7 +5,7 @@ import hiiragi283.ragium.api.registry.HTSimpleDeferredHolder import hiiragi283.ragium.api.registry.impl.HTDeferredCreativeTabRegister import hiiragi283.ragium.api.text.RagiumTranslation import hiiragi283.ragium.common.material.RagiumMaterialKeys -import hiiragi283.ragium.common.util.HTCreativeTabHelper +import hiiragi283.ragium.util.HTCreativeTabHelper import net.minecraft.world.item.CreativeModeTab object RagiumIntegrationCreativeTabs { diff --git a/src/main/kotlin/hiiragi283/ragium/RagiumCommon.kt b/src/main/kotlin/hiiragi283/ragium/RagiumCommon.kt index 8d30e2feb..f54917816 100644 --- a/src/main/kotlin/hiiragi283/ragium/RagiumCommon.kt +++ b/src/main/kotlin/hiiragi283/ragium/RagiumCommon.kt @@ -6,7 +6,6 @@ import hiiragi283.ragium.api.network.HTPayloadHandlers import hiiragi283.ragium.client.network.HTUpdateAccessConfigPayload import hiiragi283.ragium.common.network.HTUpdateBlockEntityPacket import hiiragi283.ragium.common.network.HTUpdateMenuPacket -import hiiragi283.ragium.common.util.RagiumChunkLoader import hiiragi283.ragium.config.RagiumConfig import hiiragi283.ragium.impl.material.RagiumMaterialManager import hiiragi283.ragium.setup.RagiumAttachmentTypes @@ -23,6 +22,7 @@ import hiiragi283.ragium.setup.RagiumItems import hiiragi283.ragium.setup.RagiumMenuTypes import hiiragi283.ragium.setup.RagiumMiscRegister import hiiragi283.ragium.setup.RagiumRecipeSerializers +import hiiragi283.ragium.util.RagiumChunkLoader import net.minecraft.core.dispenser.ProjectileDispenseBehavior import net.minecraft.world.item.Item import net.minecraft.world.item.ProjectileItem diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/HTCropBlock.kt b/src/main/kotlin/hiiragi283/ragium/common/block/HTCropBlock.kt index d3e76db4b..e50d9317a 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/HTCropBlock.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/HTCropBlock.kt @@ -1,6 +1,6 @@ package hiiragi283.ragium.common.block -import hiiragi283.ragium.common.util.HTItemDropHelper +import hiiragi283.ragium.util.HTItemDropHelper import net.minecraft.core.BlockPos import net.minecraft.server.level.ServerLevel import net.minecraft.world.InteractionHand diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/HTTypedEntityBlock.kt b/src/main/kotlin/hiiragi283/ragium/common/block/HTTypedEntityBlock.kt index 57b7e6f07..9e12f1051 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/HTTypedEntityBlock.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/HTTypedEntityBlock.kt @@ -11,8 +11,8 @@ import hiiragi283.ragium.api.registry.impl.HTDeferredBlockEntityType import hiiragi283.ragium.api.storage.fluid.HTFluidTank import hiiragi283.ragium.api.world.getTypedBlockEntity import hiiragi283.ragium.common.block.entity.HTBlockEntity -import hiiragi283.ragium.common.util.HTStackSlotHelper import hiiragi283.ragium.setup.RagiumMenuTypes +import hiiragi283.ragium.util.HTStackSlotHelper import net.minecraft.core.BlockPos import net.minecraft.world.InteractionHand import net.minecraft.world.InteractionResult diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTBlockEntity.kt index 3050343b1..8f8b37a73 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTBlockEntity.kt @@ -30,9 +30,9 @@ import hiiragi283.ragium.common.storage.fluid.tank.HTBasicFluidTank import hiiragi283.ragium.common.storage.resolver.HTEnergyStorageManager import hiiragi283.ragium.common.storage.resolver.HTFluidHandlerManager import hiiragi283.ragium.common.storage.resolver.HTItemHandlerManager -import hiiragi283.ragium.common.util.HTExperienceHelper -import hiiragi283.ragium.common.util.HTItemDropHelper import hiiragi283.ragium.setup.RagiumFluidContents +import hiiragi283.ragium.util.HTExperienceHelper +import hiiragi283.ragium.util.HTItemDropHelper import net.minecraft.core.BlockPos import net.minecraft.core.Direction import net.minecraft.core.Holder diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTDimensionalAnchorBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTDimensionalAnchorBlockEntity.kt index 421ad177b..51a0677e4 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTDimensionalAnchorBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTDimensionalAnchorBlockEntity.kt @@ -1,8 +1,8 @@ package hiiragi283.ragium.common.block.entity.device import hiiragi283.ragium.common.block.entity.ExtendedBlockEntity -import hiiragi283.ragium.common.util.RagiumChunkLoader import hiiragi283.ragium.setup.RagiumBlockEntityTypes +import hiiragi283.ragium.util.RagiumChunkLoader import net.minecraft.core.BlockPos import net.minecraft.server.level.ServerLevel import net.minecraft.world.level.ChunkPos diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTEnergyNetworkAccessBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTEnergyNetworkAccessBlockEntity.kt index dba0c9522..4a4d7a3d0 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTEnergyNetworkAccessBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTEnergyNetworkAccessBlockEntity.kt @@ -13,8 +13,8 @@ import hiiragi283.ragium.common.storage.energy.battery.HTEnergyBatteryWrapper import hiiragi283.ragium.common.storage.holder.HTBasicEnergyBatteryHolder import hiiragi283.ragium.common.storage.holder.HTBasicItemSlotHolder import hiiragi283.ragium.common.storage.item.slot.HTEnergyItemSlot -import hiiragi283.ragium.common.util.HTStackSlotHelper import hiiragi283.ragium.setup.RagiumBlocks +import hiiragi283.ragium.util.HTStackSlotHelper import net.minecraft.core.BlockPos import net.minecraft.core.Direction import net.minecraft.core.Holder diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTFluidCollectorBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTFluidCollectorBlockEntity.kt index 82408a25a..4ace753e4 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTFluidCollectorBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTFluidCollectorBlockEntity.kt @@ -11,10 +11,10 @@ import hiiragi283.ragium.common.storage.fluid.tank.HTBasicFluidTank import hiiragi283.ragium.common.storage.fluid.tank.HTExpOrbTank import hiiragi283.ragium.common.storage.fluid.tank.HTVariableFluidTank import hiiragi283.ragium.common.storage.holder.HTBasicFluidTankHolder -import hiiragi283.ragium.common.util.HTStackSlotHelper import hiiragi283.ragium.config.RagiumConfig import hiiragi283.ragium.setup.RagiumBlocks import hiiragi283.ragium.setup.RagiumItems +import hiiragi283.ragium.util.HTStackSlotHelper import net.minecraft.core.BlockPos import net.minecraft.core.Direction import net.minecraft.core.Holder diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTItemCollectorBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTItemCollectorBlockEntity.kt index 070fcdeb6..849123bf2 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTItemCollectorBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTItemCollectorBlockEntity.kt @@ -15,11 +15,11 @@ import hiiragi283.ragium.common.storage.holder.HTBasicItemSlotHolder import hiiragi283.ragium.common.storage.item.slot.HTBasicItemSlot import hiiragi283.ragium.common.storage.item.slot.HTItemEntitySlot import hiiragi283.ragium.common.storage.item.slot.HTOutputItemSlot -import hiiragi283.ragium.common.util.HTItemDropHelper -import hiiragi283.ragium.common.util.HTStackSlotHelper import hiiragi283.ragium.config.RagiumConfig import hiiragi283.ragium.setup.RagiumBlocks import hiiragi283.ragium.setup.RagiumItems +import hiiragi283.ragium.util.HTItemDropHelper +import hiiragi283.ragium.util.HTStackSlotHelper import net.minecraft.core.BlockPos import net.minecraft.server.level.ServerLevel import net.minecraft.server.level.ServerPlayer diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/generator/HTCombustionGeneratorBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/generator/HTCombustionGeneratorBlockEntity.kt index 5aef1f43a..fb2300ff5 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/generator/HTCombustionGeneratorBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/generator/HTCombustionGeneratorBlockEntity.kt @@ -11,8 +11,8 @@ import hiiragi283.ragium.common.block.entity.generator.base.HTFuelGeneratorBlock import hiiragi283.ragium.common.storage.fluid.tank.HTBasicFluidTank import hiiragi283.ragium.common.storage.fluid.tank.HTVariableFluidTank import hiiragi283.ragium.common.storage.holder.HTBasicFluidTankHolder -import hiiragi283.ragium.common.util.HTStackSlotHelper import hiiragi283.ragium.setup.RagiumBlocks +import hiiragi283.ragium.util.HTStackSlotHelper import net.minecraft.core.BlockPos import net.minecraft.server.level.ServerLevel import net.minecraft.sounds.SoundEvents diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/generator/HTMagmaticGeneratorBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/generator/HTMagmaticGeneratorBlockEntity.kt index 3aaa54c25..6835d5f67 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/generator/HTMagmaticGeneratorBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/generator/HTMagmaticGeneratorBlockEntity.kt @@ -11,8 +11,8 @@ import hiiragi283.ragium.common.block.entity.generator.base.HTFuelGeneratorBlock import hiiragi283.ragium.common.storage.fluid.tank.HTBasicFluidTank import hiiragi283.ragium.common.storage.fluid.tank.HTVariableFluidTank import hiiragi283.ragium.common.storage.holder.HTBasicFluidTankHolder -import hiiragi283.ragium.common.util.HTStackSlotHelper import hiiragi283.ragium.setup.RagiumBlocks +import hiiragi283.ragium.util.HTStackSlotHelper import net.minecraft.core.BlockPos import net.minecraft.server.level.ServerLevel import net.minecraft.sounds.SoundEvents diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/generator/base/HTFuelGeneratorBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/generator/base/HTFuelGeneratorBlockEntity.kt index f65b08d4b..5e6db066a 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/generator/base/HTFuelGeneratorBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/generator/base/HTFuelGeneratorBlockEntity.kt @@ -5,7 +5,7 @@ import hiiragi283.ragium.api.item.component.HTMachineUpgrade import hiiragi283.ragium.api.math.times import hiiragi283.ragium.api.storage.energy.HTEnergyBattery import hiiragi283.ragium.common.block.entity.generator.HTGeneratorBlockEntity -import hiiragi283.ragium.common.util.HTEnergyHelper +import hiiragi283.ragium.util.HTEnergyHelper import net.minecraft.core.BlockPos import net.minecraft.core.Holder import net.minecraft.server.level.ServerLevel diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/generator/base/HTItemGeneratorBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/generator/base/HTItemGeneratorBlockEntity.kt index 8649f53fe..dd8ca0dec 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/generator/base/HTItemGeneratorBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/generator/base/HTItemGeneratorBlockEntity.kt @@ -9,8 +9,8 @@ import hiiragi283.ragium.common.inventory.HTSlotHelper import hiiragi283.ragium.common.storage.holder.HTBasicItemSlotHolder import hiiragi283.ragium.common.storage.item.slot.HTBasicItemSlot import hiiragi283.ragium.common.storage.item.slot.HTOutputItemSlot -import hiiragi283.ragium.common.util.HTItemDropHelper -import hiiragi283.ragium.common.util.HTStackSlotHelper +import hiiragi283.ragium.util.HTItemDropHelper +import hiiragi283.ragium.util.HTStackSlotHelper import net.minecraft.core.BlockPos import net.minecraft.core.Holder import net.minecraft.server.level.ServerLevel 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 706c475b7..cf3ae4419 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 @@ -11,8 +11,8 @@ import hiiragi283.ragium.api.util.HTContentListener import hiiragi283.ragium.common.inventory.HTSlotHelper import hiiragi283.ragium.common.storage.holder.HTBasicItemSlotHolder import hiiragi283.ragium.common.storage.item.slot.HTBasicItemSlot -import hiiragi283.ragium.common.util.HTStackSlotHelper import hiiragi283.ragium.setup.RagiumBlocks +import hiiragi283.ragium.util.HTStackSlotHelper import net.minecraft.core.BlockPos import net.minecraft.server.level.ServerLevel import net.minecraft.sounds.SoundEvents 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 0dc7c631c..51745fe6c 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 @@ -8,9 +8,9 @@ import hiiragi283.ragium.api.util.HTContentListener import hiiragi283.ragium.common.block.entity.processor.base.HTAbstractCrusherBlockEntity import hiiragi283.ragium.common.storage.holder.HTBasicItemSlotHolder import hiiragi283.ragium.common.storage.item.slot.HTBasicItemSlot -import hiiragi283.ragium.common.util.HTStackSlotHelper import hiiragi283.ragium.setup.RagiumBlocks import hiiragi283.ragium.setup.RagiumItems +import hiiragi283.ragium.util.HTStackSlotHelper import net.minecraft.core.BlockPos import net.minecraft.core.RegistryAccess import net.minecraft.server.level.ServerLevel 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 1796d8d38..7fafbdd9b 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 @@ -8,9 +8,9 @@ import hiiragi283.ragium.api.storage.HTStorageAction import hiiragi283.ragium.api.util.HTContentListener import hiiragi283.ragium.common.storage.holder.HTBasicItemSlotHolder import hiiragi283.ragium.common.storage.item.slot.HTBasicItemSlot -import hiiragi283.ragium.common.util.HTStackSlotHelper import hiiragi283.ragium.setup.RagiumBlocks import hiiragi283.ragium.setup.RagiumItems +import hiiragi283.ragium.util.HTStackSlotHelper import net.minecraft.core.BlockPos import net.minecraft.core.RegistryAccess import net.minecraft.server.level.ServerLevel 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 30d7d9200..8c791f56d 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 @@ -18,9 +18,9 @@ import hiiragi283.ragium.common.storage.holder.HTBasicFluidTankHolder import hiiragi283.ragium.common.storage.holder.HTBasicItemSlotHolder import hiiragi283.ragium.common.storage.item.slot.HTBasicItemSlot import hiiragi283.ragium.common.storage.item.slot.HTOutputItemSlot -import hiiragi283.ragium.common.util.HTItemDropHelper -import hiiragi283.ragium.common.util.HTStackSlotHelper import hiiragi283.ragium.setup.RagiumBlocks +import hiiragi283.ragium.util.HTItemDropHelper +import hiiragi283.ragium.util.HTStackSlotHelper import net.minecraft.core.BlockPos import net.minecraft.server.level.ServerLevel import net.minecraft.sounds.SoundEvents 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 3d1a6334f..cff2a1d5f 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 @@ -19,10 +19,10 @@ import hiiragi283.ragium.common.storage.holder.HTBasicFluidTankHolder import hiiragi283.ragium.common.storage.holder.HTBasicItemSlotHolder import hiiragi283.ragium.common.storage.item.slot.HTBasicItemSlot import hiiragi283.ragium.common.storage.item.slot.HTOutputItemSlot -import hiiragi283.ragium.common.util.HTExperienceHelper -import hiiragi283.ragium.common.util.HTStackSlotHelper import hiiragi283.ragium.setup.RagiumBlocks import hiiragi283.ragium.setup.RagiumFluidContents +import hiiragi283.ragium.util.HTExperienceHelper +import hiiragi283.ragium.util.HTStackSlotHelper import net.minecraft.core.BlockPos import net.minecraft.server.level.ServerLevel import net.minecraft.server.level.ServerPlayer 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 9fa2fe01f..fd423204a 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 @@ -8,8 +8,8 @@ import hiiragi283.ragium.api.util.HTContentListener import hiiragi283.ragium.common.block.entity.processor.base.HTAbstractCrusherBlockEntity import hiiragi283.ragium.common.storage.holder.HTBasicItemSlotHolder import hiiragi283.ragium.common.storage.item.slot.HTBasicItemSlot -import hiiragi283.ragium.common.util.HTStackSlotHelper import hiiragi283.ragium.setup.RagiumBlocks +import hiiragi283.ragium.util.HTStackSlotHelper import net.minecraft.core.BlockPos import net.minecraft.server.level.ServerLevel import net.minecraft.world.level.block.state.BlockState 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 fddf3fe23..e1692d55b 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 @@ -15,8 +15,8 @@ import hiiragi283.ragium.common.storage.holder.HTBasicFluidTankHolder import hiiragi283.ragium.common.storage.holder.HTBasicItemSlotHolder import hiiragi283.ragium.common.storage.item.slot.HTBasicItemSlot import hiiragi283.ragium.common.storage.item.slot.HTOutputItemSlot -import hiiragi283.ragium.common.util.HTStackSlotHelper import hiiragi283.ragium.setup.RagiumBlocks +import hiiragi283.ragium.util.HTStackSlotHelper import net.minecraft.core.BlockPos import net.minecraft.core.RegistryAccess import net.minecraft.server.level.ServerLevel 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 ba6a91d2a..edf016157 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 @@ -18,7 +18,7 @@ import hiiragi283.ragium.common.storage.holder.HTBasicFluidTankHolder import hiiragi283.ragium.common.storage.holder.HTBasicItemSlotHolder import hiiragi283.ragium.common.storage.item.slot.HTBasicItemSlot import hiiragi283.ragium.common.storage.item.slot.HTOutputItemSlot -import hiiragi283.ragium.common.util.HTStackSlotHelper +import hiiragi283.ragium.util.HTStackSlotHelper import net.minecraft.core.BlockPos import net.minecraft.core.Holder import net.minecraft.server.level.ServerLevel 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 900dfe3b3..7fe5fad2c 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 @@ -11,9 +11,9 @@ import hiiragi283.ragium.api.storage.HTStorageAction import hiiragi283.ragium.api.util.HTContentListener import hiiragi283.ragium.common.storage.fluid.tank.HTBasicFluidTank import hiiragi283.ragium.common.storage.fluid.tank.HTVariableFluidTank -import hiiragi283.ragium.common.util.HTStackSlotHelper import hiiragi283.ragium.setup.RagiumFluidContents import hiiragi283.ragium.setup.RagiumItems +import hiiragi283.ragium.util.HTStackSlotHelper import net.minecraft.core.BlockPos import net.minecraft.core.Holder import net.minecraft.server.level.ServerLevel 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 4311efd6a..1b2eef1bb 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 @@ -11,7 +11,7 @@ import hiiragi283.ragium.common.recipe.HTFinderRecipeCache import hiiragi283.ragium.common.recipe.HTVanillaCookingRecipe import hiiragi283.ragium.common.storage.holder.HTBasicItemSlotHolder import hiiragi283.ragium.common.storage.item.slot.HTBasicItemSlot -import hiiragi283.ragium.common.util.HTStackSlotHelper +import hiiragi283.ragium.util.HTStackSlotHelper import net.minecraft.core.BlockPos import net.minecraft.core.Holder import net.minecraft.server.level.ServerLevel 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 b3211b1a8..35dd0d2bb 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 @@ -14,7 +14,7 @@ import hiiragi283.ragium.common.storage.fluid.tank.HTBasicFluidTank import hiiragi283.ragium.common.storage.fluid.tank.HTVariableFluidTank import hiiragi283.ragium.common.storage.holder.HTBasicFluidTankHolder import hiiragi283.ragium.common.storage.item.slot.HTBasicItemSlot -import hiiragi283.ragium.common.util.HTStackSlotHelper +import hiiragi283.ragium.util.HTStackSlotHelper import net.minecraft.core.BlockPos import net.minecraft.core.Holder import net.minecraft.core.RegistryAccess diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTCrateBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTCrateBlockEntity.kt index d79f17588..b63d1a156 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTCrateBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTCrateBlockEntity.kt @@ -11,9 +11,9 @@ import hiiragi283.ragium.common.storage.holder.HTBasicItemSlotHolder import hiiragi283.ragium.common.storage.item.slot.HTBasicItemSlot import hiiragi283.ragium.common.storage.item.slot.HTVariableItemSlot import hiiragi283.ragium.common.tier.HTCrateTier -import hiiragi283.ragium.common.util.HTEnchantmentHelper -import hiiragi283.ragium.common.util.HTStackSlotHelper import hiiragi283.ragium.setup.RagiumDataComponents +import hiiragi283.ragium.util.HTEnchantmentHelper +import hiiragi283.ragium.util.HTStackSlotHelper import net.minecraft.core.BlockPos import net.minecraft.core.Holder import net.minecraft.core.component.DataComponentMap diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTDrumBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTDrumBlockEntity.kt index cc7524918..6343ca2d4 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTDrumBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTDrumBlockEntity.kt @@ -9,8 +9,8 @@ import hiiragi283.ragium.common.storage.fluid.tank.HTBasicFluidTank import hiiragi283.ragium.common.storage.holder.HTBasicFluidTankHolder import hiiragi283.ragium.common.storage.holder.HTBasicItemSlotHolder import hiiragi283.ragium.common.storage.item.slot.HTBasicItemSlot -import hiiragi283.ragium.common.util.HTStackSlotHelper import hiiragi283.ragium.setup.RagiumDataComponents +import hiiragi283.ragium.util.HTStackSlotHelper import net.minecraft.core.BlockPos import net.minecraft.core.Holder import net.minecraft.core.component.DataComponentMap diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTOpenCrateBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTOpenCrateBlockEntity.kt index 607dfc19a..45fed7812 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTOpenCrateBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTOpenCrateBlockEntity.kt @@ -9,8 +9,8 @@ import hiiragi283.ragium.api.storage.item.HTItemSlot import hiiragi283.ragium.api.util.HTContentListener import hiiragi283.ragium.common.block.entity.HTConfigurableBlockEntity import hiiragi283.ragium.common.storage.holder.HTBasicItemSlotHolder -import hiiragi283.ragium.common.util.HTItemDropHelper import hiiragi283.ragium.setup.RagiumBlocks +import hiiragi283.ragium.util.HTItemDropHelper import net.minecraft.core.BlockPos import net.minecraft.server.level.ServerLevel import net.minecraft.world.level.Level diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTTieredDrumBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTTieredDrumBlockEntity.kt index f88a9f7f5..1f8541c0d 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTTieredDrumBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTTieredDrumBlockEntity.kt @@ -8,7 +8,7 @@ import hiiragi283.ragium.api.storage.HTStorageAction import hiiragi283.ragium.api.util.HTContentListener import hiiragi283.ragium.common.storage.fluid.tank.HTBasicFluidTank import hiiragi283.ragium.common.tier.HTDrumTier -import hiiragi283.ragium.common.util.HTEnchantmentHelper +import hiiragi283.ragium.util.HTEnchantmentHelper import net.minecraft.core.BlockPos import net.minecraft.core.Holder import net.minecraft.world.level.block.Block diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/storage/HTCrateBlock.kt b/src/main/kotlin/hiiragi283/ragium/common/block/storage/HTCrateBlock.kt index 3669cd2e5..d19c561d8 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/storage/HTCrateBlock.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/storage/HTCrateBlock.kt @@ -11,7 +11,7 @@ import hiiragi283.ragium.common.block.entity.storage.HTCrateBlockEntity import hiiragi283.ragium.common.storage.item.slot.HTBasicItemSlot import hiiragi283.ragium.common.storage.item.slot.HTPlayerHandSlot import hiiragi283.ragium.common.tier.HTCrateTier -import hiiragi283.ragium.common.util.HTItemDropHelper +import hiiragi283.ragium.util.HTItemDropHelper import net.minecraft.core.BlockPos import net.minecraft.world.InteractionHand import net.minecraft.world.ItemInteractionResult diff --git a/src/main/kotlin/hiiragi283/ragium/common/entity/HTThrownCaptureEgg.kt b/src/main/kotlin/hiiragi283/ragium/common/entity/HTThrownCaptureEgg.kt index 384a087f0..0010847a9 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/entity/HTThrownCaptureEgg.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/entity/HTThrownCaptureEgg.kt @@ -2,9 +2,9 @@ package hiiragi283.ragium.common.entity import hiiragi283.ragium.api.stack.ImmutableItemStack import hiiragi283.ragium.api.tag.RagiumModTags -import hiiragi283.ragium.common.util.HTItemDropHelper import hiiragi283.ragium.setup.RagiumEntityTypes import hiiragi283.ragium.setup.RagiumItems +import hiiragi283.ragium.util.HTItemDropHelper import net.minecraft.advancements.CriteriaTriggers import net.minecraft.client.Minecraft import net.minecraft.core.particles.ParticleTypes diff --git a/src/main/kotlin/hiiragi283/ragium/common/entity/charge/HTFishingCharge.kt b/src/main/kotlin/hiiragi283/ragium/common/entity/charge/HTFishingCharge.kt index cecd912c3..fb1258521 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/entity/charge/HTFishingCharge.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/entity/charge/HTFishingCharge.kt @@ -2,7 +2,7 @@ package hiiragi283.ragium.common.entity.charge import com.mojang.datafixers.util.Either import hiiragi283.ragium.common.HTChargeType -import hiiragi283.ragium.common.util.HTItemDropHelper +import hiiragi283.ragium.util.HTItemDropHelper import net.minecraft.server.level.ServerLevel import net.minecraft.world.entity.EntityType import net.minecraft.world.entity.LivingEntity diff --git a/src/main/kotlin/hiiragi283/ragium/common/entity/charge/HTNeutralCharge.kt b/src/main/kotlin/hiiragi283/ragium/common/entity/charge/HTNeutralCharge.kt index a84526068..0a230622f 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/entity/charge/HTNeutralCharge.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/entity/charge/HTNeutralCharge.kt @@ -7,7 +7,7 @@ import hiiragi283.ragium.api.storage.HTStorageAction import hiiragi283.ragium.api.storage.capability.HTItemCapabilities import hiiragi283.ragium.api.storage.item.HTItemSlot import hiiragi283.ragium.common.HTChargeType -import hiiragi283.ragium.common.util.HTItemDropHelper +import hiiragi283.ragium.util.HTItemDropHelper import net.minecraft.server.level.ServerLevel import net.minecraft.world.entity.EntityType import net.minecraft.world.entity.LivingEntity diff --git a/src/main/kotlin/hiiragi283/ragium/common/entity/vehicle/HTDrumMinecart.kt b/src/main/kotlin/hiiragi283/ragium/common/entity/vehicle/HTDrumMinecart.kt index 56be95fbc..b069565ae 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/entity/vehicle/HTDrumMinecart.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/entity/vehicle/HTDrumMinecart.kt @@ -2,7 +2,7 @@ package hiiragi283.ragium.common.entity.vehicle import hiiragi283.ragium.common.block.entity.storage.HTDrumBlockEntity import hiiragi283.ragium.common.tier.HTDrumTier -import hiiragi283.ragium.common.util.HTStackSlotHelper +import hiiragi283.ragium.util.HTStackSlotHelper import net.minecraft.core.BlockPos import net.minecraft.world.InteractionHand import net.minecraft.world.InteractionResult diff --git a/src/main/kotlin/hiiragi283/ragium/common/event/RagiumEnchantmentHandler.kt b/src/main/kotlin/hiiragi283/ragium/common/event/RagiumEnchantmentHandler.kt index 7db1df310..029c3de09 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/event/RagiumEnchantmentHandler.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/event/RagiumEnchantmentHandler.kt @@ -3,10 +3,10 @@ package hiiragi283.ragium.common.event import hiiragi283.ragium.api.RagiumAPI import hiiragi283.ragium.api.data.map.RagiumDataMapTypes import hiiragi283.ragium.api.tag.RagiumModTags -import hiiragi283.ragium.common.util.HTEnchantmentHelper import hiiragi283.ragium.setup.RagiumBlocks import hiiragi283.ragium.setup.RagiumCriteriaTriggers import hiiragi283.ragium.setup.RagiumDataComponents +import hiiragi283.ragium.util.HTEnchantmentHelper import net.minecraft.core.BlockPos import net.minecraft.server.level.ServerPlayer import net.minecraft.world.damagesource.DamageSource diff --git a/src/main/kotlin/hiiragi283/ragium/common/event/RagiumRuntimeHandler.kt b/src/main/kotlin/hiiragi283/ragium/common/event/RagiumRuntimeHandler.kt index c4927f0c5..05adb6eab 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/event/RagiumRuntimeHandler.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/event/RagiumRuntimeHandler.kt @@ -4,11 +4,11 @@ import hiiragi283.ragium.api.RagiumAPI import hiiragi283.ragium.api.data.map.RagiumDataMapTypes import hiiragi283.ragium.api.entity.isOf import hiiragi283.ragium.api.stack.ImmutableItemStack -import hiiragi283.ragium.common.util.HTItemDropHelper import hiiragi283.ragium.config.RagiumConfig import hiiragi283.ragium.setup.RagiumDataComponents import hiiragi283.ragium.setup.RagiumFluidContents import hiiragi283.ragium.setup.RagiumItems +import hiiragi283.ragium.util.HTItemDropHelper import net.minecraft.sounds.SoundEvents import net.minecraft.sounds.SoundSource import net.minecraft.world.InteractionResult diff --git a/src/main/kotlin/hiiragi283/ragium/common/item/HTLootTicketItem.kt b/src/main/kotlin/hiiragi283/ragium/common/item/HTLootTicketItem.kt index d77d80bc6..356c9df59 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/item/HTLootTicketItem.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/item/HTLootTicketItem.kt @@ -2,9 +2,9 @@ package hiiragi283.ragium.common.item import hiiragi283.ragium.api.item.HTSubCreativeTabContents import hiiragi283.ragium.api.registry.HTItemHolderLike -import hiiragi283.ragium.common.util.HTDefaultLootTickets -import hiiragi283.ragium.common.util.HTItemDropHelper import hiiragi283.ragium.setup.RagiumDataComponents +import hiiragi283.ragium.util.HTDefaultLootTickets +import hiiragi283.ragium.util.HTItemDropHelper import net.minecraft.advancements.CriteriaTriggers import net.minecraft.resources.ResourceKey import net.minecraft.server.level.ServerLevel diff --git a/src/main/kotlin/hiiragi283/ragium/common/item/food/HTPotionBundleItem.kt b/src/main/kotlin/hiiragi283/ragium/common/item/food/HTPotionBundleItem.kt index e7ad1f72f..237730879 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/item/food/HTPotionBundleItem.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/item/food/HTPotionBundleItem.kt @@ -5,8 +5,8 @@ import hiiragi283.ragium.api.storage.HTStorageAction import hiiragi283.ragium.api.storage.capability.HTItemCapabilities import hiiragi283.ragium.api.storage.item.HTItemSlot import hiiragi283.ragium.api.storage.item.getItemStack -import hiiragi283.ragium.common.util.HTItemDropHelper import hiiragi283.ragium.setup.RagiumMenuTypes +import hiiragi283.ragium.util.HTItemDropHelper import net.minecraft.advancements.CriteriaTriggers import net.minecraft.server.level.ServerPlayer import net.minecraft.world.InteractionHand diff --git a/src/main/kotlin/hiiragi283/ragium/common/item/tool/HTBottledBeeItem.kt b/src/main/kotlin/hiiragi283/ragium/common/item/tool/HTBottledBeeItem.kt index 794a9c644..b07be3314 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/item/tool/HTBottledBeeItem.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/item/tool/HTBottledBeeItem.kt @@ -1,6 +1,6 @@ package hiiragi283.ragium.common.item.tool -import hiiragi283.ragium.common.util.HTItemDropHelper +import hiiragi283.ragium.util.HTItemDropHelper import net.minecraft.world.InteractionResult import net.minecraft.world.entity.player.Player import net.minecraft.world.item.Item diff --git a/src/main/kotlin/hiiragi283/ragium/common/item/tool/HTDrillItem.kt b/src/main/kotlin/hiiragi283/ragium/common/item/tool/HTDrillItem.kt index 3ab27895a..4f7099182 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/item/tool/HTDrillItem.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/item/tool/HTDrillItem.kt @@ -5,7 +5,7 @@ import hiiragi283.ragium.api.storage.HTStorageAction import hiiragi283.ragium.api.storage.energy.HTEnergyBattery import hiiragi283.ragium.api.tag.RagiumModTags import hiiragi283.ragium.common.item.base.HTEnergyItem -import hiiragi283.ragium.common.util.HTEnchantmentHelper +import hiiragi283.ragium.util.HTEnchantmentHelper import net.minecraft.core.BlockPos import net.minecraft.core.component.DataComponents import net.minecraft.world.entity.LivingEntity diff --git a/src/main/kotlin/hiiragi283/ragium/common/item/tool/HTMagnetItem.kt b/src/main/kotlin/hiiragi283/ragium/common/item/tool/HTMagnetItem.kt index 3c1a795a1..d50691e4c 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/item/tool/HTMagnetItem.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/item/tool/HTMagnetItem.kt @@ -3,7 +3,7 @@ package hiiragi283.ragium.common.item.tool import hiiragi283.ragium.api.RagiumConst import hiiragi283.ragium.api.world.getRangedAABB import hiiragi283.ragium.common.item.base.HTActivatableItem -import hiiragi283.ragium.common.util.HTEnchantmentHelper +import hiiragi283.ragium.util.HTEnchantmentHelper import net.minecraft.server.level.ServerLevel import net.minecraft.world.entity.Entity import net.minecraft.world.entity.ExperienceOrb diff --git a/src/main/kotlin/hiiragi283/ragium/common/item/tool/HTTeleportKeyItem.kt b/src/main/kotlin/hiiragi283/ragium/common/item/tool/HTTeleportKeyItem.kt index fedab9aff..5677d5dcc 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/item/tool/HTTeleportKeyItem.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/item/tool/HTTeleportKeyItem.kt @@ -11,10 +11,10 @@ import hiiragi283.ragium.api.text.HTTextResult import hiiragi283.ragium.api.text.RagiumTranslation import hiiragi283.ragium.api.text.levelText import hiiragi283.ragium.common.text.RagiumCommonTranslation -import hiiragi283.ragium.common.util.HTEnchantmentHelper -import hiiragi283.ragium.common.util.HTStackSlotHelper import hiiragi283.ragium.config.RagiumConfig import hiiragi283.ragium.setup.RagiumDataComponents +import hiiragi283.ragium.util.HTEnchantmentHelper +import hiiragi283.ragium.util.HTStackSlotHelper import net.minecraft.ChatFormatting import net.minecraft.advancements.CriteriaTriggers import net.minecraft.core.BlockPos 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 a6877126f..b5db3af08 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/recipe/machine/HTCopyEnchantingRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/machine/HTCopyEnchantingRecipe.kt @@ -8,8 +8,8 @@ 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 -import hiiragi283.ragium.common.util.HTExperienceHelper import hiiragi283.ragium.setup.RagiumRecipeSerializers +import hiiragi283.ragium.util.HTExperienceHelper import net.minecraft.core.HolderLookup import net.minecraft.core.component.DataComponents import net.minecraft.resources.ResourceLocation 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 0c5e7a53c..cd99b5b1f 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/recipe/machine/HTExpExtractingRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/machine/HTExpExtractingRecipe.kt @@ -7,9 +7,9 @@ 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.common.util.HTExperienceHelper import hiiragi283.ragium.setup.RagiumFluidContents import hiiragi283.ragium.setup.RagiumRecipeSerializers +import hiiragi283.ragium.util.HTExperienceHelper import net.minecraft.core.HolderLookup import net.minecraft.resources.ResourceLocation import net.minecraft.world.item.Items diff --git a/src/main/kotlin/hiiragi283/ragium/common/storage/fluid/tank/HTExpOrbTank.kt b/src/main/kotlin/hiiragi283/ragium/common/storage/fluid/tank/HTExpOrbTank.kt index ed79d1f1c..cf54b5cfa 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/storage/fluid/tank/HTExpOrbTank.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/storage/fluid/tank/HTExpOrbTank.kt @@ -3,8 +3,8 @@ package hiiragi283.ragium.common.storage.fluid.tank import hiiragi283.ragium.api.serialization.value.HTValueSerializable import hiiragi283.ragium.api.stack.ImmutableFluidStack import hiiragi283.ragium.api.storage.fluid.HTFluidTank -import hiiragi283.ragium.common.util.HTExperienceHelper import hiiragi283.ragium.setup.RagiumFluidContents +import hiiragi283.ragium.util.HTExperienceHelper import net.minecraft.world.entity.ExperienceOrb class HTExpOrbTank(private val orb: ExperienceOrb) : diff --git a/src/main/kotlin/hiiragi283/ragium/common/storage/item/slot/HTEnergyItemSlot.kt b/src/main/kotlin/hiiragi283/ragium/common/storage/item/slot/HTEnergyItemSlot.kt index 991bfa2e6..dd465e619 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/storage/item/slot/HTEnergyItemSlot.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/storage/item/slot/HTEnergyItemSlot.kt @@ -9,7 +9,7 @@ import hiiragi283.ragium.api.storage.capability.HTEnergyCapabilities import hiiragi283.ragium.api.storage.energy.HTEnergyBattery import hiiragi283.ragium.api.util.HTContentListener import hiiragi283.ragium.common.inventory.HTContainerItemSlot -import hiiragi283.ragium.common.util.HTEnergyHelper +import hiiragi283.ragium.util.HTEnergyHelper import java.util.function.Predicate /** diff --git a/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTEnchantingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTEnchantingRecipe.kt index eb5dc03a0..f3e3cb3d3 100644 --- a/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTEnchantingRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTEnchantingRecipe.kt @@ -7,10 +7,10 @@ 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 -import hiiragi283.ragium.common.util.HTExperienceHelper import hiiragi283.ragium.impl.recipe.base.HTBasicCombineRecipe import hiiragi283.ragium.setup.RagiumFluidContents import hiiragi283.ragium.setup.RagiumRecipeSerializers +import hiiragi283.ragium.util.HTExperienceHelper import net.minecraft.core.Holder import net.minecraft.core.HolderLookup import net.minecraft.world.item.crafting.RecipeSerializer diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumCreativeTabs.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumCreativeTabs.kt index 13b530524..e581c82c1 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumCreativeTabs.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumCreativeTabs.kt @@ -5,7 +5,7 @@ import hiiragi283.ragium.api.registry.HTSimpleDeferredHolder import hiiragi283.ragium.api.registry.impl.HTDeferredCreativeTabRegister import hiiragi283.ragium.api.text.RagiumTranslation import hiiragi283.ragium.common.material.RagiumMaterialKeys -import hiiragi283.ragium.common.util.HTCreativeTabHelper +import hiiragi283.ragium.util.HTCreativeTabHelper import net.minecraft.world.item.CreativeModeTab /** diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumItems.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumItems.kt index 1f0ed8007..0a3694c58 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumItems.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumItems.kt @@ -67,12 +67,12 @@ import hiiragi283.ragium.common.text.HTSmithingTranslation import hiiragi283.ragium.common.text.RagiumCommonTranslation import hiiragi283.ragium.common.tier.HTComponentTier import hiiragi283.ragium.common.tier.HTDrumTier -import hiiragi283.ragium.common.util.HTEnchantmentHelper import hiiragi283.ragium.common.variant.HTArmorVariant import hiiragi283.ragium.common.variant.HTHammerToolVariant import hiiragi283.ragium.common.variant.HTUpgradeVariant import hiiragi283.ragium.common.variant.VanillaToolVariant import hiiragi283.ragium.config.RagiumConfig +import hiiragi283.ragium.util.HTEnchantmentHelper import net.minecraft.core.component.DataComponentPatch import net.minecraft.core.component.DataComponentType import net.minecraft.resources.ResourceKey diff --git a/src/main/kotlin/hiiragi283/ragium/common/util/HTAddonHelper.kt b/src/main/kotlin/hiiragi283/ragium/util/HTAddonHelper.kt similarity index 97% rename from src/main/kotlin/hiiragi283/ragium/common/util/HTAddonHelper.kt rename to src/main/kotlin/hiiragi283/ragium/util/HTAddonHelper.kt index f56569cad..8f304acca 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/util/HTAddonHelper.kt +++ b/src/main/kotlin/hiiragi283/ragium/util/HTAddonHelper.kt @@ -1,4 +1,4 @@ -package hiiragi283.ragium.common.util +package hiiragi283.ragium.util import hiiragi283.ragium.api.RagiumAPI import net.neoforged.fml.ModList diff --git a/src/main/kotlin/hiiragi283/ragium/common/util/HTCreativeTabHelper.kt b/src/main/kotlin/hiiragi283/ragium/util/HTCreativeTabHelper.kt similarity index 97% rename from src/main/kotlin/hiiragi283/ragium/common/util/HTCreativeTabHelper.kt rename to src/main/kotlin/hiiragi283/ragium/util/HTCreativeTabHelper.kt index 8f728e27c..99728a507 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/util/HTCreativeTabHelper.kt +++ b/src/main/kotlin/hiiragi283/ragium/util/HTCreativeTabHelper.kt @@ -1,4 +1,4 @@ -package hiiragi283.ragium.common.util +package hiiragi283.ragium.util import hiiragi283.ragium.api.item.HTSubCreativeTabContents import hiiragi283.ragium.api.registry.HTItemHolderLike diff --git a/src/main/kotlin/hiiragi283/ragium/common/util/HTDefaultLootTickets.kt b/src/main/kotlin/hiiragi283/ragium/util/HTDefaultLootTickets.kt similarity index 98% rename from src/main/kotlin/hiiragi283/ragium/common/util/HTDefaultLootTickets.kt rename to src/main/kotlin/hiiragi283/ragium/util/HTDefaultLootTickets.kt index 83d57aa81..9a8f49883 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/util/HTDefaultLootTickets.kt +++ b/src/main/kotlin/hiiragi283/ragium/util/HTDefaultLootTickets.kt @@ -1,4 +1,4 @@ -package hiiragi283.ragium.common.util +package hiiragi283.ragium.util import hiiragi283.ragium.api.item.component.HTLootTicketTargets import hiiragi283.ragium.api.stack.ImmutableItemStack diff --git a/src/main/kotlin/hiiragi283/ragium/common/util/HTEnchantmentHelper.kt b/src/main/kotlin/hiiragi283/ragium/util/HTEnchantmentHelper.kt similarity index 99% rename from src/main/kotlin/hiiragi283/ragium/common/util/HTEnchantmentHelper.kt rename to src/main/kotlin/hiiragi283/ragium/util/HTEnchantmentHelper.kt index d1b12a073..c5e4e41d4 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/util/HTEnchantmentHelper.kt +++ b/src/main/kotlin/hiiragi283/ragium/util/HTEnchantmentHelper.kt @@ -1,4 +1,4 @@ -package hiiragi283.ragium.common.util +package hiiragi283.ragium.util import hiiragi283.ragium.api.RagiumPlatform import hiiragi283.ragium.setup.RagiumEnchantmentComponents diff --git a/src/main/kotlin/hiiragi283/ragium/common/util/HTEnergyHelper.kt b/src/main/kotlin/hiiragi283/ragium/util/HTEnergyHelper.kt similarity index 96% rename from src/main/kotlin/hiiragi283/ragium/common/util/HTEnergyHelper.kt rename to src/main/kotlin/hiiragi283/ragium/util/HTEnergyHelper.kt index 635a7c024..a53344791 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/util/HTEnergyHelper.kt +++ b/src/main/kotlin/hiiragi283/ragium/util/HTEnergyHelper.kt @@ -1,4 +1,4 @@ -package hiiragi283.ragium.common.util +package hiiragi283.ragium.util import hiiragi283.ragium.api.storage.HTStorageAccess import hiiragi283.ragium.api.storage.HTStorageAction diff --git a/src/main/kotlin/hiiragi283/ragium/common/util/HTExperienceHelper.kt b/src/main/kotlin/hiiragi283/ragium/util/HTExperienceHelper.kt similarity index 99% rename from src/main/kotlin/hiiragi283/ragium/common/util/HTExperienceHelper.kt rename to src/main/kotlin/hiiragi283/ragium/util/HTExperienceHelper.kt index 7b1652927..b5322e3ac 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/util/HTExperienceHelper.kt +++ b/src/main/kotlin/hiiragi283/ragium/util/HTExperienceHelper.kt @@ -1,4 +1,4 @@ -package hiiragi283.ragium.common.util +package hiiragi283.ragium.util import com.google.common.primitives.Ints import hiiragi283.ragium.config.RagiumConfig diff --git a/src/main/kotlin/hiiragi283/ragium/common/util/HTItemDropHelper.kt b/src/main/kotlin/hiiragi283/ragium/util/HTItemDropHelper.kt similarity index 98% rename from src/main/kotlin/hiiragi283/ragium/common/util/HTItemDropHelper.kt rename to src/main/kotlin/hiiragi283/ragium/util/HTItemDropHelper.kt index 3236281c4..271a093aa 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/util/HTItemDropHelper.kt +++ b/src/main/kotlin/hiiragi283/ragium/util/HTItemDropHelper.kt @@ -1,4 +1,4 @@ -package hiiragi283.ragium.common.util +package hiiragi283.ragium.util import hiiragi283.ragium.api.stack.ImmutableItemStack import hiiragi283.ragium.api.storage.capability.HTItemCapabilities diff --git a/src/main/kotlin/hiiragi283/ragium/common/util/HTStackMoveResult.kt b/src/main/kotlin/hiiragi283/ragium/util/HTStackMoveResult.kt similarity index 94% rename from src/main/kotlin/hiiragi283/ragium/common/util/HTStackMoveResult.kt rename to src/main/kotlin/hiiragi283/ragium/util/HTStackMoveResult.kt index 4520f16a3..932c54e4f 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/util/HTStackMoveResult.kt +++ b/src/main/kotlin/hiiragi283/ragium/util/HTStackMoveResult.kt @@ -1,4 +1,4 @@ -package hiiragi283.ragium.common.util +package hiiragi283.ragium.util import hiiragi283.ragium.api.stack.ImmutableStack diff --git a/src/main/kotlin/hiiragi283/ragium/common/util/HTStackSlotHelper.kt b/src/main/kotlin/hiiragi283/ragium/util/HTStackSlotHelper.kt similarity index 99% rename from src/main/kotlin/hiiragi283/ragium/common/util/HTStackSlotHelper.kt rename to src/main/kotlin/hiiragi283/ragium/util/HTStackSlotHelper.kt index 39caf6471..e05bceaf0 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/util/HTStackSlotHelper.kt +++ b/src/main/kotlin/hiiragi283/ragium/util/HTStackSlotHelper.kt @@ -1,4 +1,4 @@ -package hiiragi283.ragium.common.util +package hiiragi283.ragium.util import hiiragi283.ragium.api.RagiumAPI import hiiragi283.ragium.api.stack.ImmutableFluidStack diff --git a/src/main/kotlin/hiiragi283/ragium/common/util/RagiumChunkLoader.kt b/src/main/kotlin/hiiragi283/ragium/util/RagiumChunkLoader.kt similarity index 98% rename from src/main/kotlin/hiiragi283/ragium/common/util/RagiumChunkLoader.kt rename to src/main/kotlin/hiiragi283/ragium/util/RagiumChunkLoader.kt index dac3ea9ed..9fdb81abd 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/util/RagiumChunkLoader.kt +++ b/src/main/kotlin/hiiragi283/ragium/util/RagiumChunkLoader.kt @@ -1,4 +1,4 @@ -package hiiragi283.ragium.common.util +package hiiragi283.ragium.util import hiiragi283.ragium.api.RagiumAPI import hiiragi283.ragium.api.world.getTypedBlockEntity From a00cac0f8ac31bc7f8c237201dca67dfa24becca Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Thu, 11 Dec 2025 02:53:17 +0900 Subject: [PATCH 14/49] feat!: replaced item Ragi-Coke with Coal Coke feat: added new fluid Creosote --- .../ingredient/HTFluidIngredientCreator.kt | 3 ++ .../data/client/RagiumEnglishProvider.kt | 2 +- .../data/client/RagiumJapaneseProvider.kt | 2 +- .../data/server/RagiumDataMapProvider.kt | 7 +-- .../recipe/RagiumChemistryRecipeProvider.kt | 40 +++++++++++++++++- .../recipe/RagiumMaterialRecipeProvider.kt | 7 --- .../compat/RagiumCreateRecipeProvider.kt | 22 ++++++++++ .../recipe/compat/RagiumEIORecipeProvider.kt | 5 +++ .../compat/RagiumImmersiveRecipeProvider.kt | 3 +- .../compat/RagiumMekanismRecipeProvider.kt | 5 +++ .../compat/RagiumOritechRecipeProvider.kt | 2 + .../data/server/tag/RagiumItemTagsProvider.kt | 4 ++ .../recipe/material/FoodMaterialRecipeData.kt | 10 +++++ .../material/RagiumMaterialRecipeData.kt | 7 +++ .../hiiragi283/ragium/client/RagiumClient.kt | 1 + .../ragium/setup/RagiumFluidContents.kt | 3 ++ .../hiiragi283/ragium/setup/RagiumItems.kt | 5 +-- .../assets/ragium/textures/item/coal_coke.png | Bin 0 -> 283 bytes .../ragium/textures/item/sulfur_dust.png | Bin 340 -> 289 bytes 19 files changed, 111 insertions(+), 17 deletions(-) create mode 100644 src/main/resources/assets/ragium/textures/item/coal_coke.png diff --git a/src/api/kotlin/hiiragi283/ragium/api/data/recipe/ingredient/HTFluidIngredientCreator.kt b/src/api/kotlin/hiiragi283/ragium/api/data/recipe/ingredient/HTFluidIngredientCreator.kt index 652fe4918..8e7d7c512 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/data/recipe/ingredient/HTFluidIngredientCreator.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/data/recipe/ingredient/HTFluidIngredientCreator.kt @@ -14,6 +14,9 @@ interface HTFluidIngredientCreator : HTIngredientCreator Charcoal + Creosote + HTItemWithCatalystRecipeBuilder + .compressing( + itemCreator.fromTagKey(ItemTags.LOGS_THAT_BURN), + resultHelper.item(CommonMaterialPrefixes.FUEL, VanillaMaterialKeys.CHARCOAL), + fluidResult = resultHelper.fluid(RagiumFluidContents.CREOSOTE, 125), + ).saveSuffixed(output, "_from_logs") + // Compressed Sawdust -> Charcoal + Creosote + HTItemWithCatalystRecipeBuilder + .compressing( + itemCreator.fromItem(RagiumItems.COMPRESSED_SAWDUST), + resultHelper.item(CommonMaterialPrefixes.FUEL, VanillaMaterialKeys.CHARCOAL), + ).saveSuffixed(output, "_from_compressed") + // Sugar -> Charcoal + HTItemWithCatalystRecipeBuilder + .compressing( + itemCreator.fromItem(Items.SUGAR, 12), + resultHelper.item(CommonMaterialPrefixes.FUEL, VanillaMaterialKeys.CHARCOAL), + ).saveSuffixed(output, "_from_sugar") + + // Coal -> Coal Coke + Creosote + HTItemWithCatalystRecipeBuilder + .compressing( + itemCreator.fromTagKey(CommonMaterialPrefixes.FUEL, VanillaMaterialKeys.COAL), + resultHelper.item(CommonMaterialPrefixes.FUEL, CommonMaterialKeys.COAL_COKE), + fluidResult = resultHelper.fluid(RagiumFluidContents.CREOSOTE, 250), + ).saveSuffixed(output, "_from_coal") + // Creosote -> Tar + Fuel + distillation( + RagiumFluidContents.CREOSOTE to 1000, + resultHelper.item(RagiumItems.TAR, 3), + resultHelper.fluid(RagiumFluidContents.FUEL, 125) to null, + ) + } + @JvmStatic private fun crudeOil() { // Coal -> Crude Oil @@ -456,7 +494,7 @@ object RagiumChemistryRecipeProvider : HTRecipeProvider.Direct() { HTComplexRecipeBuilder .mixing() .addIngredient(itemCreator.fromTagKey(CommonMaterialPrefixes.DUST, RagiumMaterialKeys.RAGINITE)) - .addIngredient(fluidCreator.fromHolder(RagiumFluidContents.NAPHTHA, 1000)) + .addIngredient(fluidCreator.fromHolders(RagiumFluidContents.CREOSOTE, RagiumFluidContents.NAPHTHA, amount = 1000)) .setResult(resultHelper.fluid(RagiumFluidContents.LUBRICANT, 1000)) .save(output) } diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumMaterialRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumMaterialRecipeProvider.kt index 6d51301c0..37140861d 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumMaterialRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumMaterialRecipeProvider.kt @@ -74,13 +74,6 @@ object RagiumMaterialRecipeProvider : HTRecipeProvider.Direct() { } alloyFromData(RagiumMaterialRecipeData.RAGI_ALLOY) - - HTShapedRecipeBuilder - .create(RagiumItems.RAGI_COKE) - .hollow4() - .define('A', CommonMaterialPrefixes.DUST, RagiumMaterialKeys.RAGINITE) - .define('B', CommonMaterialPrefixes.FUEL, VanillaMaterialKeys.COAL) - .save(output) // Advanced Ragi-Alloy alloyFromData(RagiumMaterialRecipeData.ADVANCED_RAGI_ALLOY) // Ragi-Crystal diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumCreateRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumCreateRecipeProvider.kt index 697ea0233..fae4a8846 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumCreateRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumCreateRecipeProvider.kt @@ -21,7 +21,9 @@ import hiiragi283.ragium.common.material.RagiumMaterialKeys import hiiragi283.ragium.common.variant.HTOreVariant import hiiragi283.ragium.impl.data.recipe.HTComplexRecipeBuilder import hiiragi283.ragium.impl.data.recipe.HTShapelessRecipeBuilder +import hiiragi283.ragium.impl.data.recipe.material.FoodMaterialRecipeData import hiiragi283.ragium.impl.data.recipe.material.RagiumMaterialRecipeData +import hiiragi283.ragium.impl.data.recipe.material.VanillaMaterialRecipeData import hiiragi283.ragium.setup.RagiumBlocks import hiiragi283.ragium.setup.RagiumIntegrationItems import hiiragi283.ragium.setup.RagiumItems @@ -82,6 +84,26 @@ object RagiumCreateRecipeProvider : HTRecipeProvider.Integration(RagiumConst.CRE .output(0.125f, variant.baseStone) .build(output) } + + fun fromData(data: HTRecipeData) { + val builder: StandardProcessingRecipe.Builder<*> = factory.apply(data.getModifiedId()) + // Input + builder.require(data.getIngredients()[0]) + // Outputs + for ((stack: ItemStack) in data.getItemStacks()) { + builder.output(stack) + } + builder.build(output) + } + + // Vanilla + fromData(VanillaMaterialRecipeData.AMETHYST_DUST) + fromData(VanillaMaterialRecipeData.ECHO_DUST) + + // Ragium + fromData(RagiumMaterialRecipeData.AZURE_DUST) + + fromData(FoodMaterialRecipeData.MINCED_MEAT) } @JvmStatic diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumEIORecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumEIORecipeProvider.kt index 6774bc24d..e389a3589 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumEIORecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumEIORecipeProvider.kt @@ -10,6 +10,7 @@ import hiiragi283.ragium.api.RagiumConst import hiiragi283.ragium.api.data.recipe.HTRecipeData import hiiragi283.ragium.api.data.recipe.HTRecipeProvider import hiiragi283.ragium.api.util.Ior +import hiiragi283.ragium.impl.data.recipe.material.FoodMaterialRecipeData import hiiragi283.ragium.impl.data.recipe.material.RagiumMaterialRecipeData import hiiragi283.ragium.impl.data.recipe.material.VanillaMaterialRecipeData import hiiragi283.ragium.setup.RagiumBlocks @@ -76,9 +77,13 @@ object RagiumEIORecipeProvider : HTRecipeProvider.Integration(RagiumConst.EIO_MA // Ragium sagMillFromData(RagiumMaterialRecipeData.RAGINITE_ORE) + sagMillFromData(RagiumMaterialRecipeData.AZURE_DUST) + sagMillFromData(RagiumMaterialRecipeData.RAGI_CRYSTAL_ORE) sagMillFromData(RagiumMaterialRecipeData.CRIMSON_ORE) sagMillFromData(RagiumMaterialRecipeData.WARPED_ORE) + + sagMillFromData(FoodMaterialRecipeData.MINCED_MEAT) } @JvmStatic diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumImmersiveRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumImmersiveRecipeProvider.kt index 1c3b67448..1ab538b6a 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumImmersiveRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumImmersiveRecipeProvider.kt @@ -25,6 +25,7 @@ import hiiragi283.ragium.common.material.VanillaMaterialKeys import hiiragi283.ragium.impl.data.recipe.HTComplexRecipeBuilder import hiiragi283.ragium.impl.data.recipe.material.FoodMaterialRecipeData import hiiragi283.ragium.impl.data.recipe.material.RagiumMaterialRecipeData +import hiiragi283.ragium.setup.RagiumFluidContents import net.minecraft.tags.ItemTags import net.minecraft.tags.TagKey import net.minecraft.world.item.Item @@ -42,7 +43,7 @@ object RagiumImmersiveRecipeProvider : HTRecipeProvider.Integration(RagiumConst. HTComplexRecipeBuilder .mixing() .addIngredient(itemCreator.fromTagKey(ItemTags.PLANKS)) - .addIngredient(fluidCreator.fromTagKey(IETags.fluidCreosote, 125)) + .addIngredient(fluidCreator.fromHolder(RagiumFluidContents.CREOSOTE, 125)) .setResult(resultHelper.item(IEBlocks.WoodenDecoration.TREATED_WOOD[TreatedWoodStyles.HORIZONTAL]!!)) .save(output) // Redstone Acid diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumMekanismRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumMekanismRecipeProvider.kt index 3660df682..00693fd0a 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumMekanismRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumMekanismRecipeProvider.kt @@ -15,6 +15,7 @@ import hiiragi283.ragium.common.material.RagiumMaterialKeys import hiiragi283.ragium.common.material.RagiumMoltenCrystalData import hiiragi283.ragium.common.material.VanillaMaterialKeys import hiiragi283.ragium.impl.data.recipe.HTComplexRecipeBuilder +import hiiragi283.ragium.impl.data.recipe.material.FoodMaterialRecipeData import hiiragi283.ragium.impl.data.recipe.material.RagiumMaterialRecipeData import hiiragi283.ragium.impl.data.recipe.material.VanillaMaterialRecipeData import hiiragi283.ragium.setup.RagiumChemicals @@ -216,7 +217,11 @@ object RagiumMekanismRecipeProvider : HTRecipeProvider.Integration(RagiumConst.M ).build(output, id("metallurgic_infusing/night_metal")) crushFromData(VanillaMaterialRecipeData.AMETHYST_DUST) + crushFromData(RagiumMaterialRecipeData.AZURE_DUST) + crushFromData(VanillaMaterialRecipeData.ECHO_DUST) + + crushFromData(FoodMaterialRecipeData.MINCED_MEAT) } // Extensions // diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumOritechRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumOritechRecipeProvider.kt index a3ae7acca..58890eb40 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumOritechRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumOritechRecipeProvider.kt @@ -113,6 +113,8 @@ object RagiumOritechRecipeProvider : HTRecipeProvider.Integration(RagiumConst.OR pulverizerFromData(VanillaMaterialRecipeData.AMETHYST_DUST) pulverizerFromData(VanillaMaterialRecipeData.ECHO_DUST) // Ragium + pulverizerFromData(RagiumMaterialRecipeData.AZURE_DUST) + pulverizerFromData(RagiumMaterialRecipeData.RAGI_CRYSTAL_ORE) pulverizerFromData(RagiumMaterialRecipeData.CRIMSON_ORE) pulverizerFromData(RagiumMaterialRecipeData.WARPED_ORE) diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/tag/RagiumItemTagsProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/tag/RagiumItemTagsProvider.kt index 04b2a53dd..a7b08b3f3 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/tag/RagiumItemTagsProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/tag/RagiumItemTagsProvider.kt @@ -129,6 +129,10 @@ class RagiumItemTagsProvider(private val blockTags: CompletableFutureMFeW8K8>5TqWOxtq1jqJ{EHqK`>c>g=^ zSmB<>0!-U(G<~_XXI-|DaD#Dds3?Q(>7+GVPxeS05L=S*(4vorZKIMyiS=GR`M>^` zQ}%pcDWrMl{AZcfq6U-C{Ned{kMZwqCi!gRWQGm%ST0jHq&b`RBEP e3^tJ8m>H%&u7BwCJ3AIA!rljri`rOPUgyDv_ya4USuMvR*Lz+ko(T1ymc^b}5r01=q^J zhn?)jXl~Pt8uTz027WfsS8G%)<0eHErVLCIR#5u}k|<(Qgnpf6vJofilQki%YM?$3 zlX!>7sDwCG`m=)B-|kMTR0aL8QRUQ~{)9Q1Vv11S)i4?(N)=d`-=75ULAw2NgS+kf z(a04+SzDh;{$b&1hv2BeugZQ*F8}}l|NncS7>xh`00v1!K~w_(oWoP0;#z=$00000 LNkvXXu0mjfvr>0? delta 313 zcmV-90mlBJ0@MPKB!2;OQb$4nuFf3k0003FNkl<|U1f6|>(!p2AVlp{PadVNlIJg7}nF^=ZDYi;1p;PHU9mjni|NZd4 z6Z=BNzEHo0&-<~Gsr{ow8-g8IU@TSuIIiHZ8$H$}_JxwEt$&*9R>{;>=lxhU*R6_u zq3%hZ`tWRNebuu(n&LNCdI`CaVUvx_!{5$yscC39*i2*N?00000 LNkvXXu0mjfrQ3?v From 4369221058345139b71532d10b6f49fccdba12bf Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Thu, 11 Dec 2025 04:53:31 +0900 Subject: [PATCH 15/49] feat!: redesigned Simulator and its recipe type --- .../hiiragi283/ragium/api/RagiumConst.kt | 5 +- .../hiiragi283/ragium/api/item/ItemStacks.kt | 12 - .../ragium/api/item/component/HTSpawnerMob.kt | 3 + .../ragium/api/math/HTBoundsProvider.kt | 2 + .../ragium/api/recipe/RagiumRecipeTypes.kt | 3 +- .../ragium/api/recipe/input/HTRecipeInput.kt | 13 +- .../api/recipe/multi/HTSimulatingRecipe.kt | 15 ++ .../api/data/recipe/HTRecipeProvider.kt | 13 -- .../recipe/RagiumSimulatingRecipeProvider.kt | 213 ++++++++++-------- .../recipe/compat/RagiumAE2RecipeProvider.kt | 14 +- .../client/integration/emi/EmiExtensions.kt | 3 + .../client/integration/emi/RagiumEmiPlugin.kt | 19 +- .../integration/emi/RagiumEmiStackProvider.kt | 2 +- .../recipe/base/HTMultiOutputsEmiRecipe.kt | 9 +- .../processor/HTItemWithCatalystEmiRecipe.kt | 25 +- .../recipe/processor/HTSimulatingEmiRecipe.kt | 62 +++++ .../hiiragi283/ragium/client/RagiumClient.kt | 3 +- .../client/gui/component/HTFakeSlotWidget.kt | 31 +++ .../client/gui/component/HTSpriteWidget.kt | 2 +- .../screen/HTBlockEntityContainerScreen.kt | 6 + .../gui/screen/processor/HTSimulatorScreen.kt | 36 +++ .../common/block/HTImitationSpawnerBlock.kt | 14 ++ .../entity/device/HTDeviceBlockEntity.kt | 4 +- .../device/HTStoneCollectorBlockEntity.kt | 2 +- .../processor/HTProcessorBlockEntity.kt | 9 +- .../processor/HTSimulatorBlockEntity.kt | 31 ++- .../recipe/HTItemWithCatalystRecipeBuilder.kt | 30 +-- .../impl/data/recipe/HTShapedRecipeBuilder.kt | 19 ++ .../data/recipe/HTSimulatingRecipeBuilder.kt | 49 ++++ .../impl/recipe/HTBlockSimulatingRecipe.kt | 22 ++ .../impl/recipe/HTEntitySimulatingRecipe.kt | 26 +++ .../ragium/impl/recipe/HTSimulatingRecipe.kt | 27 --- .../recipe/base/HTBasicSimulatingRecipe.kt | 22 ++ .../ragium/setup/RagiumRecipeBiCodecs.kt | 23 ++ .../ragium/setup/RagiumRecipeSerializers.kt | 15 +- 35 files changed, 540 insertions(+), 244 deletions(-) create mode 100644 src/api/kotlin/hiiragi283/ragium/api/recipe/multi/HTSimulatingRecipe.kt create mode 100644 src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTSimulatingEmiRecipe.kt create mode 100644 src/main/kotlin/hiiragi283/ragium/client/gui/component/HTFakeSlotWidget.kt create mode 100644 src/main/kotlin/hiiragi283/ragium/client/gui/screen/processor/HTSimulatorScreen.kt create mode 100644 src/main/kotlin/hiiragi283/ragium/impl/data/recipe/HTSimulatingRecipeBuilder.kt create mode 100644 src/main/kotlin/hiiragi283/ragium/impl/recipe/HTBlockSimulatingRecipe.kt create mode 100644 src/main/kotlin/hiiragi283/ragium/impl/recipe/HTEntitySimulatingRecipe.kt delete mode 100644 src/main/kotlin/hiiragi283/ragium/impl/recipe/HTSimulatingRecipe.kt create mode 100644 src/main/kotlin/hiiragi283/ragium/impl/recipe/base/HTBasicSimulatingRecipe.kt diff --git a/src/api/kotlin/hiiragi283/ragium/api/RagiumConst.kt b/src/api/kotlin/hiiragi283/ragium/api/RagiumConst.kt index c10a5f33e..7ba882e7d 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/RagiumConst.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/RagiumConst.kt @@ -104,11 +104,14 @@ object RagiumConst { const val REFINING = "refining" const val ROCK_GENERATING = "rock_generating" const val SIMULATING = "simulating" + const val SIMULATING_BLOCK = "$SIMULATING/block" + const val SIMULATING_ENTITY = "$SIMULATING/entity" const val SOLIDIFYING = "solidifying" - const val WASHING = "washing" const val INGREDIENT = "ingredient" + const val CATALYST = "catalyst" + const val RESULT = "result" const val RESULTS = "results" const val ITEM_RESULT = "item_result" diff --git a/src/api/kotlin/hiiragi283/ragium/api/item/ItemStacks.kt b/src/api/kotlin/hiiragi283/ragium/api/item/ItemStacks.kt index 021e25036..5e9da7c14 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/item/ItemStacks.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/item/ItemStacks.kt @@ -6,7 +6,6 @@ import net.minecraft.world.item.ItemStack import net.minecraft.world.item.Items import net.minecraft.world.item.enchantment.Enchantment import net.minecraft.world.level.ItemLike -import java.util.function.Supplier // ItemStack // @@ -21,17 +20,6 @@ fun createItemStack( return stack } -fun createItemStack( - item: ItemLike, - type: Supplier>, - value: T, - count: Int = 1, -): ItemStack { - val stack = ItemStack(item, count) - stack.set(type, value) - return stack -} - fun createEnchantedBook(enchantment: Holder, level: Int = enchantment.value().maxLevel): ItemStack { val stack = ItemStack(Items.ENCHANTED_BOOK) stack.enchant(enchantment, level) diff --git a/src/api/kotlin/hiiragi283/ragium/api/item/component/HTSpawnerMob.kt b/src/api/kotlin/hiiragi283/ragium/api/item/component/HTSpawnerMob.kt index 017537972..c7ec8313f 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/item/component/HTSpawnerMob.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/item/component/HTSpawnerMob.kt @@ -3,6 +3,7 @@ package hiiragi283.ragium.api.item.component import hiiragi283.ragium.api.serialization.codec.BiCodec import hiiragi283.ragium.api.serialization.codec.VanillaBiCodecs import net.minecraft.core.Holder +import net.minecraft.core.HolderSet import net.minecraft.core.registries.Registries import net.minecraft.network.RegistryFriendlyByteBuf import net.minecraft.world.entity.EntityType @@ -19,4 +20,6 @@ data class HTSpawnerMob(val holder: Holder>) { constructor(entityType: EntityType<*>) : this(entityType.builtInRegistryHolder()) val entityType: EntityType<*> get() = holder.value() + + fun isOf(holderSet: HolderSet>): Boolean = entityType.`is`(holderSet) } diff --git a/src/api/kotlin/hiiragi283/ragium/api/math/HTBoundsProvider.kt b/src/api/kotlin/hiiragi283/ragium/api/math/HTBoundsProvider.kt index f2862fb24..b32d21cdc 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/math/HTBoundsProvider.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/math/HTBoundsProvider.kt @@ -5,4 +5,6 @@ package hiiragi283.ragium.api.math */ fun interface HTBoundsProvider { fun getBounds(): HTBounds + + fun isHovered(x: Int, y: Int): Boolean = getBounds().contains(x, y) } diff --git a/src/api/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeTypes.kt b/src/api/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeTypes.kt index 81cff1d6f..8e3c3d130 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeTypes.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeTypes.kt @@ -10,6 +10,7 @@ import hiiragi283.ragium.api.recipe.multi.HTComplexRecipe import hiiragi283.ragium.api.recipe.multi.HTItemWithCatalystRecipe import hiiragi283.ragium.api.recipe.multi.HTRockGeneratingRecipe import hiiragi283.ragium.api.recipe.multi.HTShapelessInputsRecipe +import hiiragi283.ragium.api.recipe.multi.HTSimulatingRecipe import hiiragi283.ragium.api.recipe.single.HTSingleFluidRecipe import hiiragi283.ragium.api.registry.impl.HTDeferredRecipeType import net.minecraft.world.item.crafting.Recipe @@ -53,7 +54,7 @@ object RagiumRecipeTypes { 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/input/HTRecipeInput.kt b/src/api/kotlin/hiiragi283/ragium/api/recipe/input/HTRecipeInput.kt index c7292abd2..c09011b73 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/recipe/input/HTRecipeInput.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/recipe/input/HTRecipeInput.kt @@ -7,6 +7,7 @@ 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.core.BlockPos import net.minecraft.world.item.ItemStack import net.minecraft.world.item.crafting.RecipeInput import net.minecraft.world.item.crafting.SingleRecipeInput @@ -14,10 +15,14 @@ import java.util.Optional @ConsistentCopyVisibility @JvmRecord -data class HTRecipeInput private constructor(val items: List, val fluids: List) : RecipeInput { +data class HTRecipeInput private constructor( + val pos: BlockPos?, + val items: List, + val fluids: List, +) : RecipeInput { companion object { @JvmStatic - inline fun create(builderAction: Builder.() -> Unit): HTRecipeInput? = Builder().apply(builderAction).build() + inline fun create(pos: BlockPos?, builderAction: Builder.() -> Unit): HTRecipeInput? = Builder().apply(builderAction).build(pos) @JvmStatic fun > getMatchingSlots( @@ -102,7 +107,7 @@ data class HTRecipeInput private constructor(val items: List = mutableListOf() val fluids: MutableList = mutableListOf() - fun build(): HTRecipeInput? = HTRecipeInput(items, fluids).takeUnless(HTRecipeInput::isEmpty) + fun build(pos: BlockPos?): HTRecipeInput? = HTRecipeInput(pos, items, fluids).takeUnless(HTRecipeInput::isEmpty) } } diff --git a/src/api/kotlin/hiiragi283/ragium/api/recipe/multi/HTSimulatingRecipe.kt b/src/api/kotlin/hiiragi283/ragium/api/recipe/multi/HTSimulatingRecipe.kt new file mode 100644 index 000000000..01c357cfa --- /dev/null +++ b/src/api/kotlin/hiiragi283/ragium/api/recipe/multi/HTSimulatingRecipe.kt @@ -0,0 +1,15 @@ +package hiiragi283.ragium.api.recipe.multi + +import hiiragi283.ragium.api.recipe.HTFluidRecipe +import hiiragi283.ragium.api.recipe.RagiumRecipeTypes +import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient +import net.minecraft.world.item.crafting.RecipeType + +/** + * 単一のアイテムと触媒から複数の完成品(アイテム,液体)を生産するレシピ + */ +interface HTSimulatingRecipe : + HTFluidRecipe, + HTItemIngredient.CountGetter { + override fun getType(): RecipeType<*> = RagiumRecipeTypes.SIMULATING.get() +} diff --git a/src/data/kotlin/hiiragi283/ragium/api/data/recipe/HTRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/api/data/recipe/HTRecipeProvider.kt index 9c4df3755..8cd49f67e 100644 --- a/src/data/kotlin/hiiragi283/ragium/api/data/recipe/HTRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/api/data/recipe/HTRecipeProvider.kt @@ -7,7 +7,6 @@ import hiiragi283.ragium.api.data.recipe.ingredient.HTFluidIngredientCreator import hiiragi283.ragium.api.data.recipe.ingredient.HTItemIngredientCreator import hiiragi283.ragium.api.item.alchemy.HTMobEffectInstance import hiiragi283.ragium.api.item.alchemy.HTPotionContents -import hiiragi283.ragium.api.item.component.HTSpawnerMob import hiiragi283.ragium.api.material.HTMaterialLike import hiiragi283.ragium.api.material.getDefaultPrefix import hiiragi283.ragium.api.material.prefix.HTMaterialPrefix @@ -34,8 +33,6 @@ import hiiragi283.ragium.impl.data.recipe.HTShapelessRecipeBuilder import hiiragi283.ragium.impl.data.recipe.HTSingleExtraItemRecipeBuilder import hiiragi283.ragium.impl.data.recipe.HTSingleRecipeBuilder import hiiragi283.ragium.impl.data.recipe.HTSmithingRecipeBuilder -import hiiragi283.ragium.setup.RagiumBlocks -import hiiragi283.ragium.setup.RagiumDataComponents import hiiragi283.ragium.setup.RagiumItems import net.minecraft.advancements.Advancement import net.minecraft.advancements.AdvancementHolder @@ -45,7 +42,6 @@ import net.minecraft.core.component.DataComponentType import net.minecraft.data.recipes.RecipeOutput import net.minecraft.resources.ResourceLocation import net.minecraft.world.effect.MobEffect -import net.minecraft.world.entity.EntityType import net.minecraft.world.item.Items import net.minecraft.world.item.alchemy.Potion import net.minecraft.world.item.crafting.CraftingBookCategory @@ -57,7 +53,6 @@ import net.neoforged.neoforge.common.conditions.ICondition import net.neoforged.neoforge.common.conditions.ModLoadedCondition import net.neoforged.neoforge.common.conditions.NotCondition import net.neoforged.neoforge.common.conditions.OrCondition -import net.neoforged.neoforge.common.crafting.DataComponentIngredient /** * Ragiumがレシピ生成で使用するクラス @@ -164,14 +159,6 @@ sealed class HTRecipeProvider { protected fun getDefaultPrefix(material: HTMaterialLike): HTMaterialPrefix? = RagiumPlatform.INSTANCE.getMaterialDefinition(material.asMaterialKey()).getDefaultPrefix() - protected fun spawnerIngredient(entityType: EntityType<*>): Ingredient = DataComponentIngredient - .of( - false, - RagiumDataComponents.SPAWNER_MOB, - HTSpawnerMob(entityType), - RagiumBlocks.IMITATION_SPAWNER, - ) - // Recipe Builders /** diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumSimulatingRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumSimulatingRecipeProvider.kt index 7369c6b63..923ed8697 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumSimulatingRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumSimulatingRecipeProvider.kt @@ -1,45 +1,64 @@ package hiiragi283.ragium.data.server.recipe import hiiragi283.ragium.api.data.recipe.HTRecipeProvider +import hiiragi283.ragium.api.material.HTMaterialLike +import hiiragi283.ragium.api.material.prefix.HTPrefixLike import hiiragi283.ragium.api.registry.HTFluidHolderLike +import hiiragi283.ragium.api.stack.toImmutableOrThrow +import hiiragi283.ragium.common.block.HTImitationSpawnerBlock import hiiragi283.ragium.common.material.CommonMaterialPrefixes import hiiragi283.ragium.common.material.RagiumMaterialKeys import hiiragi283.ragium.common.material.VanillaMaterialKeys import hiiragi283.ragium.impl.data.recipe.HTComplexRecipeBuilder -import hiiragi283.ragium.impl.data.recipe.HTItemWithCatalystRecipeBuilder import hiiragi283.ragium.impl.data.recipe.HTShapedRecipeBuilder +import hiiragi283.ragium.impl.data.recipe.HTSimulatingRecipeBuilder import hiiragi283.ragium.setup.RagiumBlocks import hiiragi283.ragium.setup.RagiumFluidContents import hiiragi283.ragium.setup.RagiumItems +import net.minecraft.core.HolderSet +import net.minecraft.core.registries.Registries import net.minecraft.tags.ItemTags import net.minecraft.world.entity.EntityType import net.minecraft.world.item.Items +import net.minecraft.world.level.block.Block +import net.minecraft.world.level.block.Blocks import net.neoforged.neoforge.common.Tags +@Suppress("DEPRECATION") object RagiumSimulatingRecipeProvider : HTRecipeProvider.Direct() { + @JvmStatic + private fun block(vararg blocks: Block): HolderSet = HolderSet.direct(Block::builtInRegistryHolder, *blocks) + + @JvmStatic + private fun block(prefix: HTPrefixLike, material: HTMaterialLike): HolderSet = + provider.lookupOrThrow(Registries.BLOCK).getOrThrow(prefix.createTagKey(Registries.BLOCK, material)) + + @JvmStatic + private fun entity(vararg entityTypes: EntityType<*>): HolderSet> = + HolderSet.direct(EntityType<*>::builtInRegistryHolder, *entityTypes) + override fun buildRecipeInternal() { // Amethyst - HTItemWithCatalystRecipeBuilder - .simulating( + HTSimulatingRecipeBuilder + .block( null, - itemCreator.fromItem(Items.BUDDING_AMETHYST), - resultHelper.item(Items.AMETHYST_SHARD, 4), - ).save(output) + block(Blocks.BUDDING_AMETHYST), + ).setResult(resultHelper.item(Items.AMETHYST_SHARD, 4)) + .save(output) // Quartz - HTItemWithCatalystRecipeBuilder - .simulating( + HTSimulatingRecipeBuilder + .block( null, - itemCreator.fromItem(RagiumBlocks.BUDDING_QUARTZ), - resultHelper.item(Items.QUARTZ, 4), - ).save(output) + block(RagiumBlocks.BUDDING_QUARTZ.get()), + ).setResult(resultHelper.item(Items.QUARTZ, 4)) + .save(output) // Echo Shard - HTItemWithCatalystRecipeBuilder - .simulating( + HTSimulatingRecipeBuilder + .block( itemCreator.fromTagKey(CommonMaterialPrefixes.GEM, VanillaMaterialKeys.AMETHYST), - itemCreator.fromItem(Items.SCULK_CATALYST), - resultHelper.item(Items.ECHO_SHARD), - ).save(output) - + block(Blocks.SCULK_SHRIEKER), + ).setResult(resultHelper.item(Items.ECHO_SHARD)) + .save(output) // Imitation Spawner HTShapedRecipeBuilder .create(RagiumBlocks.IMITATION_SPAWNER) @@ -57,41 +76,40 @@ object RagiumSimulatingRecipeProvider : HTRecipeProvider.Direct() { @JvmStatic fun mobExtracting() { // Armadillo Scute - HTItemWithCatalystRecipeBuilder - .simulating( + HTSimulatingRecipeBuilder + .entity( null, - itemCreator.from(spawnerIngredient(EntityType.ARMADILLO)), - resultHelper.item(Items.ARMADILLO_SCUTE), - ).save(output) + entity(EntityType.ARMADILLO), + ).setResult(resultHelper.item(Items.ARMADILLO_SCUTE)) + .save(output) // Honeycomb - HTItemWithCatalystRecipeBuilder - .simulating( + HTSimulatingRecipeBuilder + .block( null, - itemCreator.fromItem(Items.BEE_NEST), - resultHelper.item(Items.HONEYCOMB), - ).save(output) + block(Blocks.BEE_NEST), + ).setResult(resultHelper.item(Items.HONEYCOMB)) + .save(output) // Honey Bottle - HTItemWithCatalystRecipeBuilder - .simulating( + HTSimulatingRecipeBuilder + .block( itemCreator.fromItem(Items.GLASS_BOTTLE), - itemCreator.fromItem(Items.BEE_NEST), - resultHelper.item(Items.HONEY_BOTTLE), - ).save(output) + block(Blocks.BEE_NEST), + ).setResult(resultHelper.item(Items.HONEY_BOTTLE)) + .save(output) // Egg - HTItemWithCatalystRecipeBuilder - .simulating( + HTSimulatingRecipeBuilder + .entity( itemCreator.fromTagKey(Tags.Items.SEEDS), - itemCreator.from(spawnerIngredient(EntityType.CHICKEN)), - resultHelper.item(Items.EGG), - ).save(output) + entity(EntityType.CHICKEN), + ).setResult(resultHelper.item(Items.EGG)) + .save(output) // Milk from Cow - HTItemWithCatalystRecipeBuilder - .simulating( + HTSimulatingRecipeBuilder + .entity( null, - itemCreator.from(spawnerIngredient(EntityType.COW)), - null, - resultHelper.fluid(HTFluidHolderLike.MILK, 250), - ).saveSuffixed(output, "_from_cow") + entity(EntityType.COW), + ).setResult(resultHelper.fluid(HTFluidHolderLike.MILK, 250)) + .saveSuffixed(output, "_from_cow") // Heart of the Sea HTComplexRecipeBuilder .mixing() @@ -103,64 +121,62 @@ object RagiumSimulatingRecipeProvider : HTRecipeProvider.Direct() { .setResult(resultHelper.item(Items.HEART_OF_THE_SEA)) .save(output) // Dragon Breath - HTItemWithCatalystRecipeBuilder - .simulating( + HTSimulatingRecipeBuilder + .block( itemCreator.fromItem(Items.GLASS_BOTTLE), - itemCreator.fromItem(Items.DRAGON_HEAD), - resultHelper.item(Items.DRAGON_BREATH), - ).save(output) + block(Blocks.DRAGON_HEAD), + ).setResult(resultHelper.item(Items.DRAGON_BREATH)) + .save(output) // Frog Lights // Milk from Goat - HTItemWithCatalystRecipeBuilder - .simulating( + HTSimulatingRecipeBuilder + .entity( null, - itemCreator.from(spawnerIngredient(EntityType.GOAT)), - null, - resultHelper.fluid(HTFluidHolderLike.MILK, 500), - ).saveSuffixed(output, "_from_goat") + entity(EntityType.GOAT), + ).setResult(resultHelper.fluid(HTFluidHolderLike.MILK, 500)) + .saveSuffixed(output, "_from_goat") // Poppy - HTItemWithCatalystRecipeBuilder - .simulating( + HTSimulatingRecipeBuilder + .entity( itemCreator.fromTagKey(Tags.Items.FERTILIZERS), - itemCreator.from(spawnerIngredient(EntityType.IRON_GOLEM)), - resultHelper.item(Items.POPPY), - ).save(output) + entity(EntityType.IRON_GOLEM), + ).setResult(resultHelper.item(Items.POPPY)) + .save(output) // Mushroom Stew from Mooshroom - HTItemWithCatalystRecipeBuilder - .simulating( + HTSimulatingRecipeBuilder + .entity( null, - itemCreator.from(spawnerIngredient(EntityType.MOOSHROOM)), - null, - resultHelper.fluid(RagiumFluidContents.MUSHROOM_STEW, 500), - ).save(output) + entity(EntityType.MOOSHROOM), + ).setResult(resultHelper.fluid(RagiumFluidContents.MUSHROOM_STEW, 500)) + .save(output) // Ancient Debris - HTItemWithCatalystRecipeBuilder - .simulating( + HTSimulatingRecipeBuilder + .entity( itemCreator.fromItem(Items.NETHER_BRICKS, 64), - itemCreator.from(spawnerIngredient(EntityType.PIGLIN_BRUTE)), - resultHelper.item(Items.ANCIENT_DEBRIS), - ).save(output) + entity(EntityType.PIGLIN_BRUTE), + ).setResult(resultHelper.item(Items.ANCIENT_DEBRIS)) + .save(output) // Wool - HTItemWithCatalystRecipeBuilder - .simulating( + HTSimulatingRecipeBuilder + .entity( null, - itemCreator.from(spawnerIngredient(EntityType.SHEEP)), - resultHelper.item(Items.WHITE_WOOL), - ).save(output) + entity(EntityType.SHEEP), + ).setResult(resultHelper.item(Items.WHITE_WOOL)) + .save(output) // Turtle Scute - HTItemWithCatalystRecipeBuilder - .simulating( + HTSimulatingRecipeBuilder + .entity( itemCreator.fromItem(Items.SEAGRASS, 8), - itemCreator.from(spawnerIngredient(EntityType.TURTLE)), - resultHelper.item(Items.TURTLE_SCUTE), - ).save(output) + entity(EntityType.TURTLE), + ).setResult(resultHelper.item(Items.TURTLE_SCUTE)) + .save(output) // Resonant Debris - HTItemWithCatalystRecipeBuilder - .simulating( + HTSimulatingRecipeBuilder + .entity( itemCreator.fromItem(Items.DEEPSLATE, 8), - itemCreator.from(spawnerIngredient(EntityType.WARDEN)), - resultHelper.item(RagiumBlocks.RESONANT_DEBRIS), - ).save(output) + entity(EntityType.WARDEN), + ).setResult(resultHelper.item(RagiumBlocks.RESONANT_DEBRIS)) + .save(output) // Nether Star HTShapedRecipeBuilder .create(RagiumItems.WITHER_DOLl) @@ -172,12 +188,12 @@ object RagiumSimulatingRecipeProvider : HTRecipeProvider.Direct() { .define('B', ItemTags.SOUL_FIRE_BASE_BLOCKS) .save(output) - HTItemWithCatalystRecipeBuilder - .simulating( + HTSimulatingRecipeBuilder + .block( itemCreator.fromItem(RagiumItems.WITHER_DOLl), - itemCreator.fromTagKey(CommonMaterialPrefixes.STORAGE_BLOCK, RagiumMaterialKeys.NIGHT_METAL), - resultHelper.item(RagiumItems.WITHER_STAR), - ).save(output) + block(CommonMaterialPrefixes.STORAGE_BLOCK, RagiumMaterialKeys.NIGHT_METAL), + ).setResult(resultHelper.item(RagiumItems.WITHER_STAR)) + .save(output) HTComplexRecipeBuilder .mixing() @@ -189,11 +205,18 @@ object RagiumSimulatingRecipeProvider : HTRecipeProvider.Direct() { .setResult(resultHelper.item(Items.NETHER_STAR)) .save(output) - HTItemWithCatalystRecipeBuilder - .simulating( + HTShapedRecipeBuilder + .cross8Mirrored(output, HTImitationSpawnerBlock.createStack(EntityType.WITHER).toImmutableOrThrow()) { + define('A', RagiumItems.IRIDESCENT_POWDER) + define('B', Items.WITHER_ROSE) + define('C', RagiumBlocks.IMITATION_SPAWNER) + } + + HTSimulatingRecipeBuilder + .entity( itemCreator.fromItem(RagiumItems.WITHER_DOLl), - itemCreator.fromItem(RagiumItems.ETERNAL_COMPONENT), - resultHelper.item(Items.NETHER_STAR), - ).save(output) + entity(EntityType.WITHER), + ).setResult(resultHelper.item(Items.NETHER_STAR)) + .save(output) } } diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumAE2RecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumAE2RecipeProvider.kt index 7b7978952..d8c695db2 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumAE2RecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumAE2RecipeProvider.kt @@ -11,10 +11,11 @@ import hiiragi283.ragium.common.material.CommonMaterialPrefixes import hiiragi283.ragium.common.material.ModMaterialKeys import hiiragi283.ragium.common.material.VanillaMaterialKeys import hiiragi283.ragium.impl.data.recipe.HTComplexRecipeBuilder -import hiiragi283.ragium.impl.data.recipe.HTItemWithCatalystRecipeBuilder import hiiragi283.ragium.impl.data.recipe.HTRockGeneratingRecipeBuilder import hiiragi283.ragium.impl.data.recipe.HTShapelessInputsRecipeBuilder +import hiiragi283.ragium.impl.data.recipe.HTSimulatingRecipeBuilder import hiiragi283.ragium.setup.RagiumFluidContents +import net.minecraft.core.HolderSet object RagiumAE2RecipeProvider : HTRecipeProvider.Integration(RagiumConst.AE2) { override fun buildRecipeInternal() { @@ -64,14 +65,15 @@ object RagiumAE2RecipeProvider : HTRecipeProvider.Integration(RagiumConst.AE2) { ) } + @Suppress("DEPRECATION") @JvmStatic private fun certusBudding(budding: BlockDefinition<*>, count: Int) { - HTItemWithCatalystRecipeBuilder - .simulating( + HTSimulatingRecipeBuilder + .block( null, - itemCreator.fromItem(budding), - resultHelper.item(AEItems.CERTUS_QUARTZ_CRYSTAL, count), - ).saveSuffixed(output, "_from_${budding.id().path.removeSuffix("_budding_quartz")}") + HolderSet.direct(budding.block().builtInRegistryHolder()), + ).setResult(resultHelper.item(AEItems.CERTUS_QUARTZ_CRYSTAL, count)) + .saveSuffixed(output, "_from_${budding.id().path.removeSuffix("_budding_quartz")}") } @JvmStatic diff --git a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/EmiExtensions.kt b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/EmiExtensions.kt index 3a48e44d0..d31a721c8 100644 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/EmiExtensions.kt +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/EmiExtensions.kt @@ -21,6 +21,7 @@ import hiiragi283.ragium.api.stack.ImmutableItemStack import hiiragi283.ragium.api.text.HTTranslation import hiiragi283.ragium.api.text.RagiumTranslation import hiiragi283.ragium.client.integration.emi.widget.HTTankWidget +import net.minecraft.core.Holder import net.minecraft.core.component.DataComponents import net.minecraft.core.registries.Registries import net.minecraft.network.chat.Component @@ -38,6 +39,8 @@ fun EmiStack.copyAsCatalyst(): EmiStack = copy().setRemainder(this) // Mutable Stack fun ItemLike.toEmi(amount: Int = 1): EmiStack = EmiStack.of(this, amount.toLong()) +fun Holder.toItemEmi(amount: Int = 1): EmiStack = this.value().toEmi(amount) + fun ItemStack.toEmi(): EmiStack = EmiStack.of(this) fun Fluid.toEmi(amount: Int = 0): EmiStack = EmiStack.of(this, amount.toLong()) 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 ab244a7b4..e3133c545 100644 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/RagiumEmiPlugin.kt +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/RagiumEmiPlugin.kt @@ -18,7 +18,6 @@ import hiiragi283.ragium.api.data.map.RagiumDataMapTypes import hiiragi283.ragium.api.data.recipe.HTResultHelper import hiiragi283.ragium.api.function.partially1 import hiiragi283.ragium.api.item.alchemy.HTPotionHelper -import hiiragi283.ragium.api.item.component.HTSpawnerMob import hiiragi283.ragium.api.item.createItemStack import hiiragi283.ragium.api.recipe.HTRecipe import hiiragi283.ragium.api.recipe.RagiumRecipeTypes @@ -50,6 +49,7 @@ import hiiragi283.ragium.client.integration.emi.recipe.processor.HTMeltingEmiRec import hiiragi283.ragium.client.integration.emi.recipe.processor.HTMixingEmiRecipe import hiiragi283.ragium.client.integration.emi.recipe.processor.HTPlantingEmiRecipe import hiiragi283.ragium.client.integration.emi.recipe.processor.HTRefiningEmiRecipe +import hiiragi283.ragium.client.integration.emi.recipe.processor.HTSimulatingEmiRecipe import hiiragi283.ragium.client.integration.emi.recipe.processor.HTSingleExtraItemEmiRecipe import hiiragi283.ragium.common.block.HTImitationSpawnerBlock import hiiragi283.ragium.common.block.entity.HTBlockEntity @@ -114,7 +114,7 @@ class RagiumEmiPlugin : EmiPlugin { .filterElements { item: Item -> item.defaultInstance.has(RagiumDataComponents.MACHINE_UPGRADE_FILTER) } .listElements() .map { holder: Holder -> - holder.idOrThrow.withPrefix("/machine/upgrade/") to EmiStack.of(holder.value()) + holder.idOrThrow.withPrefix("/machine/upgrade/") to holder.toItemEmi() }.asSequence(), ::HTMachineUpgradeEmiRecipe, ) @@ -192,14 +192,13 @@ class RagiumEmiPlugin : EmiPlugin { .filterElements { item: Item -> item.defaultInstance.isDamageableItem } .listElements() .forEach { holder: Holder -> - val item: Item = holder.value() registry.addCustomRecipe(holder.idOrThrow, "eternal_upgrade") { id1: ResourceLocation -> EmiCraftingRecipe( listOf( - EmiStack.of(item), + holder.toItemEmi(), RagiumItems.ETERNAL_COMPONENT.toEmi(), ), - createItemStack(item, DataComponents.UNBREAKABLE, Unbreakable(true)).toEmi(), + createItemStack(holder.value(), DataComponents.UNBREAKABLE, Unbreakable(true)).toEmi(), id1, true, ) @@ -211,7 +210,7 @@ class RagiumEmiPlugin : EmiPlugin { registry.addCustomRecipe(id, "gravitational_upgrade") { id1: ResourceLocation -> EmiCraftingRecipe( listOf( - EmiStack.of(item), + holder.toItemEmi(), RagiumItems.GRAVITATIONAL_UNIT.toEmi(), ), createItemStack(item, RagiumDataComponents.ANTI_GRAVITY, true).toEmi(), @@ -341,7 +340,7 @@ class RagiumEmiPlugin : EmiPlugin { addRegistryRecipes(registry, RagiumRecipeTypes.PLANTING, ::HTPlantingEmiRecipe) // Ultimate addRegistryRecipes(registry, RagiumRecipeTypes.ENCHANTING, ::HTEnchantingEmiRecipe) - addRegistryRecipes(registry, RagiumRecipeTypes.SIMULATING, HTItemWithCatalystEmiRecipe::simulating) + addRegistryRecipes(registry, RagiumRecipeTypes.SIMULATING, ::HTSimulatingEmiRecipe) registry.addRecipeSafe(HTCopyEnchantingRecipe.RECIPE_ID.withPrefix("/"), ::HTCopyEnchantingEmiRecipe) @@ -356,11 +355,7 @@ class RagiumEmiPlugin : EmiPlugin { .filterElements(HTImitationSpawnerBlock::filterEntityType) .listElements() .forEach { holder: Holder.Reference> -> - val spawner: EmiStack = createItemStack( - RagiumBlocks.IMITATION_SPAWNER, - RagiumDataComponents.SPAWNER_MOB, - HTSpawnerMob(holder), - ).toEmi() + val spawner: EmiStack = HTImitationSpawnerBlock.createStack(holder).toEmi() val egg: EmiStack = SpawnEggItem.byId(holder.value())?.toEmi() ?: return@forEach registry.addInteraction(spawner, id = holder.idOrThrow, prefix = "imitation_spawner") { leftInput(RagiumBlocks.IMITATION_SPAWNER.toEmi()) diff --git a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/RagiumEmiStackProvider.kt b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/RagiumEmiStackProvider.kt index 63369ac07..afdc13b4f 100644 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/RagiumEmiStackProvider.kt +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/RagiumEmiStackProvider.kt @@ -19,7 +19,7 @@ object RagiumEmiStackProvider : EmiStackProvider { } // Get stack from tanks for (widget: HTFluidWidget in screen.getFluidWidgets()) { - if (widget.getBounds().contains(x, y)) { + if (widget.isHovered(x, y)) { return EmiStackInteraction(widget.getStack().toEmi(), null, false) } } 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 48fc51bbb..a180bafd7 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 @@ -8,12 +8,11 @@ import net.minecraft.resources.ResourceLocation import net.minecraft.world.item.crafting.RecipeHolder abstract class HTMultiOutputsEmiRecipe : HTEmiHolderRecipe { - constructor(category: HTEmiRecipeCategory, id: ResourceLocation, recipe: RECIPE) : super(category, id, recipe) { - initInputs() - addOutputs(recipe.results) - } + constructor(category: HTEmiRecipeCategory, id: ResourceLocation, recipe: RECIPE) : super(category, id, recipe) + + constructor(category: HTEmiRecipeCategory, holder: RecipeHolder) : super(category, holder) - constructor(category: HTEmiRecipeCategory, holder: RecipeHolder) : super(category, holder) { + init { initInputs() addOutputs(recipe.results) } diff --git a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTItemWithCatalystEmiRecipe.kt b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTItemWithCatalystEmiRecipe.kt index f90d5a382..17b03eed7 100644 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTItemWithCatalystEmiRecipe.kt +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTItemWithCatalystEmiRecipe.kt @@ -5,9 +5,6 @@ import hiiragi283.ragium.client.integration.emi.addArrow import hiiragi283.ragium.client.integration.emi.category.HTEmiRecipeCategory import hiiragi283.ragium.client.integration.emi.category.RagiumEmiRecipeCategories import hiiragi283.ragium.client.integration.emi.recipe.base.HTMultiOutputsEmiRecipe -import hiiragi283.ragium.impl.recipe.HTCompressingRecipe -import hiiragi283.ragium.impl.recipe.HTExtractingRecipe -import hiiragi283.ragium.impl.recipe.HTSimulatingRecipe import hiiragi283.ragium.impl.recipe.base.HTBasicItemWithCatalystRecipe import net.minecraft.resources.ResourceLocation import net.minecraft.world.item.crafting.RecipeHolder @@ -37,29 +34,11 @@ class HTItemWithCatalystEmiRecipe : HTMultiOutputsEmiRecipe): HTItemWithCatalystEmiRecipe = HTItemWithCatalystEmiRecipe(RagiumEmiRecipeCategories.EXTRACTING, holder) - - @JvmStatic - fun simulating(holder: RecipeHolder): HTItemWithCatalystEmiRecipe = - HTItemWithCatalystEmiRecipe(RagiumEmiRecipeCategories.SIMULATING, holder) } override fun initInputs() { - when (recipe) { - is HTCompressingRecipe -> { - addInput(recipe.required) - addCatalyst(recipe.optional.getOrNull()) - } - - is HTExtractingRecipe -> { - addInput(recipe.required) - addCatalyst(recipe.optional.getOrNull()) - } - - is HTSimulatingRecipe -> { - addInput(recipe.optional.getOrNull()) - addCatalyst(recipe.required) - } - } + addInput(recipe.required) + addCatalyst(recipe.optional.getOrNull()) } override fun initInputSlots(widgets: WidgetHolder) { diff --git a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTSimulatingEmiRecipe.kt b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTSimulatingEmiRecipe.kt new file mode 100644 index 000000000..1fcc905f5 --- /dev/null +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTSimulatingEmiRecipe.kt @@ -0,0 +1,62 @@ +package hiiragi283.ragium.client.integration.emi.recipe.processor + +import dev.emi.emi.api.stack.EmiIngredient +import dev.emi.emi.api.widget.WidgetHolder +import hiiragi283.ragium.client.integration.emi.addArrow +import hiiragi283.ragium.client.integration.emi.category.RagiumEmiRecipeCategories +import hiiragi283.ragium.client.integration.emi.recipe.HTEmiHolderRecipe +import hiiragi283.ragium.client.integration.emi.toEmi +import hiiragi283.ragium.client.integration.emi.toItemEmi +import hiiragi283.ragium.common.block.HTImitationSpawnerBlock +import hiiragi283.ragium.impl.recipe.HTBlockSimulatingRecipe +import hiiragi283.ragium.impl.recipe.HTEntitySimulatingRecipe +import hiiragi283.ragium.impl.recipe.base.HTBasicSimulatingRecipe +import net.minecraft.core.Holder +import net.minecraft.resources.ResourceLocation +import net.minecraft.world.item.ItemStack +import net.minecraft.world.item.crafting.RecipeHolder +import net.minecraft.world.level.block.Block +import kotlin.jvm.optionals.getOrNull + +class HTSimulatingEmiRecipe : HTEmiHolderRecipe> { + constructor(id: ResourceLocation, recipe: HTBasicSimulatingRecipe<*>) : super( + RagiumEmiRecipeCategories.SIMULATING, + id, + recipe, + ) + + constructor(holder: RecipeHolder>) : super(RagiumEmiRecipeCategories.SIMULATING, holder) + + init { + addInput(recipe.ingredient.getOrNull()) + + when (recipe) { + is HTBlockSimulatingRecipe -> + addCatalyst( + recipe.catalyst + .map(Holder::toItemEmi) + .let(EmiIngredient::of), + ) + is HTEntitySimulatingRecipe -> + addCatalyst( + recipe.catalyst + .map(HTImitationSpawnerBlock::createStack) + .map(ItemStack::toEmi) + .let(EmiIngredient::of), + ) + } + + addOutputs(recipe.results) + } + + override fun addWidgets(widgets: WidgetHolder) { + widgets.addArrow(getPosition(2.5), getPosition(1)) + + // Input + widgets.addSlot(input(0), getPosition(1), getPosition(0)) + widgets.addCatalyst(0, getPosition(1), getPosition(2)) + // Output + widgets.addOutput(0, getPosition(4.5), getPosition(0) + 4, true) + widgets.addSlot(output(1), getPosition(4.5), getPosition(2)) + } +} diff --git a/src/main/kotlin/hiiragi283/ragium/client/RagiumClient.kt b/src/main/kotlin/hiiragi283/ragium/client/RagiumClient.kt index 74558d05c..e7b0b18b5 100644 --- a/src/main/kotlin/hiiragi283/ragium/client/RagiumClient.kt +++ b/src/main/kotlin/hiiragi283/ragium/client/RagiumClient.kt @@ -28,6 +28,7 @@ import hiiragi283.ragium.client.gui.screen.processor.HTMixerScreen import hiiragi283.ragium.client.gui.screen.processor.HTMobCrusherScreen import hiiragi283.ragium.client.gui.screen.processor.HTProcessorScreen import hiiragi283.ragium.client.gui.screen.processor.HTRefineryScreen +import hiiragi283.ragium.client.gui.screen.processor.HTSimulatorScreen import hiiragi283.ragium.client.gui.screen.processor.HTSingleFluidProcessorScreen import hiiragi283.ragium.client.key.RagiumKeyMappings import hiiragi283.ragium.client.model.HTFuelGeneratorModel @@ -283,7 +284,7 @@ class RagiumClient(eventBus: IEventBus, container: ModContainer) { event.register(RagiumMenuTypes.MOB_CRUSHER, ::HTMobCrusherScreen) event.register(RagiumMenuTypes.PROCESSOR, ::HTProcessorScreen) event.register(RagiumMenuTypes.REFINERY, ::HTRefineryScreen) - event.register(RagiumMenuTypes.SIMULATOR, HTSingleFluidProcessorScreen.Companion::itemWithCatalyst) + event.register(RagiumMenuTypes.SIMULATOR, ::HTSimulatorScreen) event.register(RagiumMenuTypes.SINGLE_ITEM_WITH_FLUID, ::HTCrusherScreen) event.register(RagiumMenuTypes.SMELTER, HTProcessorScreen.createFactory("smelter")) event.register(RagiumMenuTypes.TELEPAD, ::HTTelepadScreen) diff --git a/src/main/kotlin/hiiragi283/ragium/client/gui/component/HTFakeSlotWidget.kt b/src/main/kotlin/hiiragi283/ragium/client/gui/component/HTFakeSlotWidget.kt new file mode 100644 index 000000000..5e1f035a2 --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/client/gui/component/HTFakeSlotWidget.kt @@ -0,0 +1,31 @@ +package hiiragi283.ragium.client.gui.component + +import net.minecraft.client.Minecraft +import net.minecraft.client.gui.Font +import net.minecraft.client.gui.GuiGraphics +import net.minecraft.network.chat.Component +import net.minecraft.world.item.ItemStack +import java.util.function.Supplier + +/** + * @see mekanism.client.gui.element.slot.GuiVirtualSlot + */ +class HTFakeSlotWidget(private val getter: Supplier, x: Int, y: Int) : HTAbstractWidget(x, y, 18, 18, Component.empty()) { + override fun renderWidget( + guiGraphics: GuiGraphics, + mouseX: Int, + mouseY: Int, + partialTick: Float, + ) { + val font: Font = Minecraft.getInstance().font + // Render stack + val stack: ItemStack = getter.get() + if (stack.isEmpty) return + guiGraphics.renderFakeItem(stack, x, y) + guiGraphics.renderItemDecorations(font, stack, x, y) + // Render tooltip + if (isHovered(mouseX, mouseY)) { + guiGraphics.renderTooltip(font, stack, mouseX, mouseY) + } + } +} diff --git a/src/main/kotlin/hiiragi283/ragium/client/gui/component/HTSpriteWidget.kt b/src/main/kotlin/hiiragi283/ragium/client/gui/component/HTSpriteWidget.kt index 5851dfa1e..dcad00cf6 100644 --- a/src/main/kotlin/hiiragi283/ragium/client/gui/component/HTSpriteWidget.kt +++ b/src/main/kotlin/hiiragi283/ragium/client/gui/component/HTSpriteWidget.kt @@ -36,7 +36,7 @@ abstract class HTSpriteWidget( // Render sprite renderSprite(guiGraphics) // Render tooltip - if (getBounds().contains(mouseX, mouseY)) { + if (isHovered(mouseX, mouseY)) { guiGraphics.renderComponentTooltip( font, buildList { collectTooltips(this::add, getTooltipFlag()) }, diff --git a/src/main/kotlin/hiiragi283/ragium/client/gui/screen/HTBlockEntityContainerScreen.kt b/src/main/kotlin/hiiragi283/ragium/client/gui/screen/HTBlockEntityContainerScreen.kt index e6ce52029..41ca0e7d7 100644 --- a/src/main/kotlin/hiiragi283/ragium/client/gui/screen/HTBlockEntityContainerScreen.kt +++ b/src/main/kotlin/hiiragi283/ragium/client/gui/screen/HTBlockEntityContainerScreen.kt @@ -4,6 +4,7 @@ import hiiragi283.ragium.api.RagiumAPI import hiiragi283.ragium.api.storage.energy.HTEnergyBattery import hiiragi283.ragium.api.storage.fluid.HTFluidView import hiiragi283.ragium.client.gui.component.HTEnergyWidget +import hiiragi283.ragium.client.gui.component.HTFakeSlotWidget import hiiragi283.ragium.client.gui.component.HTFluidTankWidget import hiiragi283.ragium.common.block.entity.HTBlockEntity import hiiragi283.ragium.common.inventory.HTSlotHelper @@ -12,7 +13,9 @@ import hiiragi283.ragium.common.storage.energy.battery.HTBasicEnergyBattery import net.minecraft.network.chat.Component import net.minecraft.resources.ResourceLocation import net.minecraft.world.entity.player.Inventory +import net.minecraft.world.item.ItemStack import java.util.function.IntConsumer +import java.util.function.Supplier open class HTBlockEntityContainerScreen : HTContainerScreen> { companion object { @@ -49,6 +52,9 @@ open class HTBlockEntityContainerScreen : HTContainerScreen< // Extensions // + fun createFakeSlot(getter: Supplier, x: Int, y: Int): HTFakeSlotWidget = + HTFakeSlotWidget(getter, startX + x, startY + y).apply(::addRenderableWidget) + fun createFluidTank(view: HTFluidView, x: Int, y: Int): HTFluidTankWidget = HTFluidTankWidget.createTank(view, startX + x, startY + y).apply(::addRenderableWidget) diff --git a/src/main/kotlin/hiiragi283/ragium/client/gui/screen/processor/HTSimulatorScreen.kt b/src/main/kotlin/hiiragi283/ragium/client/gui/screen/processor/HTSimulatorScreen.kt new file mode 100644 index 000000000..67e3a3806 --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/client/gui/screen/processor/HTSimulatorScreen.kt @@ -0,0 +1,36 @@ +package hiiragi283.ragium.client.gui.screen.processor + +import hiiragi283.ragium.client.gui.component.HTFluidTankWidget +import hiiragi283.ragium.common.block.entity.processor.HTSimulatorBlockEntity +import hiiragi283.ragium.common.inventory.HTSlotHelper +import hiiragi283.ragium.common.inventory.container.HTBlockEntityContainerMenu +import net.minecraft.core.BlockPos +import net.minecraft.network.chat.Component +import net.minecraft.world.entity.player.Inventory +import net.minecraft.world.item.ItemStack +import net.minecraft.world.level.Level +import net.minecraft.world.level.block.state.BlockState + +class HTSimulatorScreen(menu: HTBlockEntityContainerMenu, inventory: Inventory, title: Component) : + HTSingleFluidProcessorScreen(menu, inventory, title) { + @Suppress("DEPRECATION") + override fun init() { + super.init() + createFakeSlot( + { + val level: Level = blockEntity.level ?: return@createFakeSlot ItemStack.EMPTY + val pos: BlockPos = blockEntity.blockPos.below() + + val state: BlockState = level.getBlockState(pos) + val stack: ItemStack = state.block.getCloneItemStack(level, pos, state) + level.getBlockEntity(pos)?.saveToItem(stack, level.registryAccess()) + stack + }, + HTSlotHelper.getSlotPosX(2), + HTSlotHelper.getSlotPosY(2), + ) + } + + override fun createFluidWidget(): HTFluidTankWidget = + createFluidSlot(blockEntity.outputTank, HTSlotHelper.getSlotPosX(5.5), HTSlotHelper.getSlotPosY(2)) +} diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/HTImitationSpawnerBlock.kt b/src/main/kotlin/hiiragi283/ragium/common/block/HTImitationSpawnerBlock.kt index 18e45c0c4..c16a03b89 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/HTImitationSpawnerBlock.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/HTImitationSpawnerBlock.kt @@ -1,9 +1,15 @@ package hiiragi283.ragium.common.block import hiiragi283.ragium.api.block.HTBlockWithEntity +import hiiragi283.ragium.api.item.component.HTSpawnerMob +import hiiragi283.ragium.api.item.createItemStack import hiiragi283.ragium.api.registry.impl.HTDeferredBlockEntityType import hiiragi283.ragium.setup.RagiumBlockEntityTypes +import hiiragi283.ragium.setup.RagiumBlocks +import hiiragi283.ragium.setup.RagiumDataComponents +import net.minecraft.core.Holder import net.minecraft.world.entity.EntityType +import net.minecraft.world.item.ItemStack import net.minecraft.world.item.SpawnEggItem import net.minecraft.world.level.block.Block @@ -13,6 +19,14 @@ class HTImitationSpawnerBlock(properties: Properties) : companion object { @JvmStatic fun filterEntityType(entityType: EntityType<*>): Boolean = SpawnEggItem.byId(entityType) != null + + @JvmStatic + fun createStack(entityType: EntityType<*>): ItemStack = + createItemStack(RagiumBlocks.IMITATION_SPAWNER, RagiumDataComponents.SPAWNER_MOB, HTSpawnerMob(entityType)) + + @JvmStatic + fun createStack(holder: Holder>): ItemStack = + createItemStack(RagiumBlocks.IMITATION_SPAWNER, RagiumDataComponents.SPAWNER_MOB, HTSpawnerMob(holder)) } override fun getBlockEntityType(): HTDeferredBlockEntityType<*> = RagiumBlockEntityTypes.IMITATION_SPAWNER diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTDeviceBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTDeviceBlockEntity.kt index 78007f822..d3f457911 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTDeviceBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTDeviceBlockEntity.kt @@ -1,6 +1,7 @@ package hiiragi283.ragium.common.block.entity.device import hiiragi283.ragium.api.math.fraction +import hiiragi283.ragium.api.math.minus import hiiragi283.ragium.common.block.entity.HTConfigurableBlockEntity import hiiragi283.ragium.common.block.entity.HTMachineBlockEntity import hiiragi283.ragium.common.inventory.container.HTContainerMenu @@ -43,7 +44,8 @@ abstract class HTDeviceBlockEntity(blockHolder: Holder, pos: BlockPos, st fun getProgress(): Fraction { val totalTick: Int = ticks val maxTicks = 20 - return fraction(totalTick, maxTicks) + val rawFraction: Fraction = fraction(totalTick, maxTicks) + return rawFraction - rawFraction.properWhole } } } 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 b0b3afefb..c794ff0ce 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 @@ -57,7 +57,7 @@ class HTStoneCollectorBlockEntity(pos: BlockPos, state: BlockState) : return true } - private fun createInput(level: ServerLevel, pos: BlockPos, front: Direction): HTRecipeInput? = HTRecipeInput.create { + private fun createInput(level: ServerLevel, pos: BlockPos, front: Direction): HTRecipeInput? = HTRecipeInput.create(pos) { val leftPos: BlockPos = pos.relative(front.counterClockWise) val rightPos: BlockPos = pos.relative(front.clockWise) // 左側は液体のみ 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 021fddbba..10263b1b5 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,10 +3,12 @@ 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.math.minus 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.recipe.input.HTRecipeInput.Builder import hiiragi283.ragium.api.storage.holder.HTSlotInfo import hiiragi283.ragium.api.util.HTContentListener import hiiragi283.ragium.common.block.entity.HTMachineBlockEntity @@ -52,7 +54,8 @@ abstract class HTProcessorBlockEntity(blockHolder: Ho val totalTick: Int = usedEnergy val maxTicks: Int = requiredEnergy if (maxTicks <= 0) return Fraction.ZERO - return fraction(totalTick, maxTicks) + val rawFraction: Fraction = fraction(totalTick, maxTicks) + return rawFraction - rawFraction.properWhole } final override fun onUpdateMachine(level: ServerLevel, pos: BlockPos, state: BlockState): Boolean { @@ -134,9 +137,9 @@ abstract class HTProcessorBlockEntity(blockHolder: Ho abstract class RecipeBased(blockHolder: Holder, pos: BlockPos, state: BlockState) : HTProcessorBlockEntity(blockHolder, pos, state) { - final override fun createRecipeInput(level: ServerLevel, pos: BlockPos): HTRecipeInput? = HTRecipeInput.create(::buildRecipeInput) + override fun createRecipeInput(level: ServerLevel, pos: BlockPos): HTRecipeInput? = HTRecipeInput.create(null, ::buildRecipeInput) - protected abstract fun buildRecipeInput(builder: HTRecipeInput.Builder) + protected abstract fun buildRecipeInput(builder: Builder) } // Cached // 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 647c3cbdd..b6fc2fa9f 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 @@ -2,8 +2,13 @@ package hiiragi283.ragium.common.block.entity.processor import hiiragi283.ragium.api.recipe.RagiumRecipeTypes 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.api.recipe.multi.HTSimulatingRecipe +import hiiragi283.ragium.api.storage.HTStorageAccess +import hiiragi283.ragium.api.storage.HTStorageAction +import hiiragi283.ragium.api.util.HTContentListener +import hiiragi283.ragium.common.block.entity.processor.base.HTComplexBlockEntity +import hiiragi283.ragium.common.storage.holder.HTBasicItemSlotHolder +import hiiragi283.ragium.common.storage.item.slot.HTBasicItemSlot import hiiragi283.ragium.setup.RagiumBlocks import net.minecraft.core.BlockPos import net.minecraft.server.level.ServerLevel @@ -12,20 +17,38 @@ import net.minecraft.sounds.SoundSource import net.minecraft.world.level.block.state.BlockState class HTSimulatorBlockEntity(pos: BlockPos, state: BlockState) : - HTItemWithCatalystBlockEntity( + HTComplexBlockEntity( RagiumRecipeTypes.SIMULATING, RagiumBlocks.SIMULATOR, pos, state, ) { + lateinit var inputSlot: HTBasicItemSlot + private set + + override fun initializeItemSlots(builder: HTBasicItemSlotHolder.Builder, listener: HTContentListener) { + // input + inputSlot = singleInput(builder, listener) + // output + outputSlot = upperOutput(builder, listener) + } + + override fun createRecipeInput(level: ServerLevel, pos: BlockPos): HTRecipeInput? = HTRecipeInput.create(pos, ::buildRecipeInput) + + override fun buildRecipeInput(builder: HTRecipeInput.Builder) { + builder.items += inputSlot.getStack() + } + override fun completeRecipe( level: ServerLevel, pos: BlockPos, state: BlockState, input: HTRecipeInput, - recipe: HTItemWithCatalystRecipe, + recipe: HTSimulatingRecipe, ) { super.completeRecipe(level, pos, state, input, recipe) + // 実際にインプットを減らす + inputSlot.extract(recipe.getRequiredCount(), HTStorageAction.EXECUTE, HTStorageAccess.INTERNAL) // SEを鳴らす level.playSound(null, pos, SoundEvents.RESPAWN_ANCHOR_CHARGE, SoundSource.BLOCKS, 0.5f, 1f) } diff --git a/src/main/kotlin/hiiragi283/ragium/impl/data/recipe/HTItemWithCatalystRecipeBuilder.kt b/src/main/kotlin/hiiragi283/ragium/impl/data/recipe/HTItemWithCatalystRecipeBuilder.kt index f8d5dc7fd..3e3d5c6fc 100644 --- a/src/main/kotlin/hiiragi283/ragium/impl/data/recipe/HTItemWithCatalystRecipeBuilder.kt +++ b/src/main/kotlin/hiiragi283/ragium/impl/data/recipe/HTItemWithCatalystRecipeBuilder.kt @@ -10,8 +10,7 @@ import hiiragi283.ragium.api.util.wrapOptional import hiiragi283.ragium.impl.data.recipe.base.HTComplexResultRecipeBuilder import hiiragi283.ragium.impl.recipe.HTCompressingRecipe import hiiragi283.ragium.impl.recipe.HTExtractingRecipe -import hiiragi283.ragium.impl.recipe.HTSimulatingRecipe -import java.util.* +import java.util.Optional class HTItemWithCatalystRecipeBuilder( prefix: String, @@ -20,15 +19,6 @@ class HTItemWithCatalystRecipeBuilder( val optional: Optional, ) : HTComplexResultRecipeBuilder(prefix) { companion object { - @JvmStatic - fun compressing(ingredient: HTItemIngredient, catalyst: Optional): HTItemWithCatalystRecipeBuilder = - HTItemWithCatalystRecipeBuilder( - RagiumConst.COMPRESSING, - ::HTCompressingRecipe, - ingredient, - catalyst, - ) - @JvmStatic fun compressing( ingredient: HTItemIngredient, @@ -64,24 +54,6 @@ class HTItemWithCatalystRecipeBuilder( builder.setResult(fluidResult) return builder } - - @JvmStatic - fun simulating( - ingredient: HTItemIngredient?, - catalyst: HTItemIngredient, - itemResult: HTItemResult?, - fluidResult: HTFluidResult? = null, - ): HTItemWithCatalystRecipeBuilder { - val builder = HTItemWithCatalystRecipeBuilder( - RagiumConst.SIMULATING, - ::HTSimulatingRecipe, - catalyst, - ingredient, - ) - builder.setResult(itemResult) - builder.setResult(fluidResult) - return builder - } } constructor( diff --git a/src/main/kotlin/hiiragi283/ragium/impl/data/recipe/HTShapedRecipeBuilder.kt b/src/main/kotlin/hiiragi283/ragium/impl/data/recipe/HTShapedRecipeBuilder.kt index 55cd9d3c5..d046dacac 100644 --- a/src/main/kotlin/hiiragi283/ragium/impl/data/recipe/HTShapedRecipeBuilder.kt +++ b/src/main/kotlin/hiiragi283/ragium/impl/data/recipe/HTShapedRecipeBuilder.kt @@ -20,6 +20,25 @@ class HTShapedRecipeBuilder(stack: ImmutableItemStack) : HTStackRecipeBuilder Unit, + ) { + HTShapedRecipeBuilder(stack) + .pattern("ABA", "BCB", "ABA") + .apply(builderAction) + .setGroup() + .saveSuffixed(recipeOutput, suffix) + HTShapedRecipeBuilder(stack) + .pattern("BAB", "ACA", "BAB") + .apply(builderAction) + .setGroup() + .saveSuffixed(recipeOutput, "_alt$suffix") + } + @JvmStatic fun cross8Mirrored( recipeOutput: RecipeOutput, diff --git a/src/main/kotlin/hiiragi283/ragium/impl/data/recipe/HTSimulatingRecipeBuilder.kt b/src/main/kotlin/hiiragi283/ragium/impl/data/recipe/HTSimulatingRecipeBuilder.kt new file mode 100644 index 000000000..902369ee5 --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/impl/data/recipe/HTSimulatingRecipeBuilder.kt @@ -0,0 +1,49 @@ +package hiiragi283.ragium.impl.data.recipe + +import hiiragi283.ragium.api.RagiumConst +import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient +import hiiragi283.ragium.api.recipe.multi.HTSimulatingRecipe +import hiiragi283.ragium.api.recipe.result.HTFluidResult +import hiiragi283.ragium.api.recipe.result.HTItemResult +import hiiragi283.ragium.api.util.Ior +import hiiragi283.ragium.api.util.wrapOptional +import hiiragi283.ragium.impl.data.recipe.base.HTComplexResultRecipeBuilder +import hiiragi283.ragium.impl.recipe.HTBlockSimulatingRecipe +import hiiragi283.ragium.impl.recipe.HTEntitySimulatingRecipe +import net.minecraft.core.HolderSet +import net.minecraft.world.entity.EntityType +import net.minecraft.world.level.block.Block +import java.util.Optional + +class HTSimulatingRecipeBuilder( + prefix: String, + private val factory: Factory, + private val ingredient: Optional, + private val catalyst: T, +) : HTComplexResultRecipeBuilder>(prefix) { + companion object { + @JvmStatic + fun block(ingredient: HTItemIngredient?, catalyst: HolderSet): HTSimulatingRecipeBuilder> = + HTSimulatingRecipeBuilder( + RagiumConst.SIMULATING_BLOCK, + ::HTBlockSimulatingRecipe, + ingredient.wrapOptional(), + catalyst, + ) + + @JvmStatic + fun entity(ingredient: HTItemIngredient?, catalyst: HolderSet>): HTSimulatingRecipeBuilder>> = + HTSimulatingRecipeBuilder( + RagiumConst.SIMULATING_ENTITY, + ::HTEntitySimulatingRecipe, + ingredient.wrapOptional(), + catalyst, + ) + } + + override fun createRecipe(): HTSimulatingRecipe = factory.create(ingredient, catalyst, toIorResult()) + + fun interface Factory { + fun create(ingredient: Optional, catalyst: T, results: Ior): RECIPE + } +} diff --git a/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTBlockSimulatingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTBlockSimulatingRecipe.kt new file mode 100644 index 000000000..132d73811 --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTBlockSimulatingRecipe.kt @@ -0,0 +1,22 @@ +package hiiragi283.ragium.impl.recipe + +import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient +import hiiragi283.ragium.api.recipe.input.HTRecipeInput +import hiiragi283.ragium.api.recipe.result.HTComplexResult +import hiiragi283.ragium.impl.recipe.base.HTBasicSimulatingRecipe +import hiiragi283.ragium.setup.RagiumRecipeSerializers +import net.minecraft.core.HolderSet +import net.minecraft.world.item.crafting.RecipeSerializer +import net.minecraft.world.level.Level +import net.minecraft.world.level.block.Block +import java.util.Optional + +class HTBlockSimulatingRecipe(ingredient: Optional, catalyst: HolderSet, results: HTComplexResult) : + HTBasicSimulatingRecipe>(ingredient, catalyst, results) { + override fun testCatalyst(input: HTRecipeInput, level: Level): Boolean = input.pos + ?.below() + ?.let(level::getBlockState) + ?.`is`(catalyst) ?: false + + override fun getSerializer(): RecipeSerializer<*> = RagiumRecipeSerializers.SIMULATING_BLOCK +} diff --git a/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTEntitySimulatingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTEntitySimulatingRecipe.kt new file mode 100644 index 000000000..cf74db61e --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTEntitySimulatingRecipe.kt @@ -0,0 +1,26 @@ +package hiiragi283.ragium.impl.recipe + +import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient +import hiiragi283.ragium.api.recipe.input.HTRecipeInput +import hiiragi283.ragium.api.recipe.result.HTComplexResult +import hiiragi283.ragium.common.block.entity.HTImitationSpawnerBlockEntity +import hiiragi283.ragium.impl.recipe.base.HTBasicSimulatingRecipe +import hiiragi283.ragium.setup.RagiumRecipeSerializers +import net.minecraft.core.HolderSet +import net.minecraft.world.entity.EntityType +import net.minecraft.world.item.crafting.RecipeSerializer +import net.minecraft.world.level.Level +import java.util.Optional + +class HTEntitySimulatingRecipe(ingredient: Optional, catalyst: HolderSet>, results: HTComplexResult) : + HTBasicSimulatingRecipe>>(ingredient, catalyst, results) { + override fun testCatalyst(input: HTRecipeInput, level: Level): Boolean = input.pos + ?.below() + ?.let(level::getBlockEntity) + ?.let { it as? HTImitationSpawnerBlockEntity } + ?.spawnerMob + ?.isOf(catalyst) + ?: false + + override fun getSerializer(): RecipeSerializer<*> = RagiumRecipeSerializers.SIMULATING_ENTITY +} diff --git a/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTSimulatingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTSimulatingRecipe.kt deleted file mode 100644 index efd1cf2db..000000000 --- a/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTSimulatingRecipe.kt +++ /dev/null @@ -1,27 +0,0 @@ -package hiiragi283.ragium.impl.recipe - -import hiiragi283.ragium.api.recipe.RagiumRecipeTypes -import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient -import hiiragi283.ragium.api.recipe.input.HTRecipeInput -import hiiragi283.ragium.api.recipe.result.HTComplexResult -import hiiragi283.ragium.impl.recipe.base.HTBasicItemWithCatalystRecipe -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 HTSimulatingRecipe(catalyst: HTItemIngredient, ingredient: Optional, results: HTComplexResult) : - HTBasicItemWithCatalystRecipe(catalyst, ingredient, results) { - 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 - } - - override fun getSerializer(): RecipeSerializer<*> = RagiumRecipeSerializers.SIMULATING - - override fun getType(): RecipeType<*> = RagiumRecipeTypes.SIMULATING.get() - - override fun getRequiredCount(): Int = optional.map(HTItemIngredient::getRequiredAmount).orElse(0) -} diff --git a/src/main/kotlin/hiiragi283/ragium/impl/recipe/base/HTBasicSimulatingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/impl/recipe/base/HTBasicSimulatingRecipe.kt new file mode 100644 index 000000000..faebc2fb6 --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/impl/recipe/base/HTBasicSimulatingRecipe.kt @@ -0,0 +1,22 @@ +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.multi.HTSimulatingRecipe +import hiiragi283.ragium.api.recipe.result.HTComplexResult +import net.minecraft.world.level.Level +import java.util.Optional + +abstract class HTBasicSimulatingRecipe(val ingredient: Optional, val catalyst: T, results: HTComplexResult) : + HTBasicComplexOutputRecipe(results), + HTSimulatingRecipe { + final override fun matches(input: HTRecipeInput, level: Level): Boolean { + val bool1: Boolean = testCatalyst(input, level) + val bool2: Boolean = input.testItem(0, ingredient) + return bool1 && bool2 + } + + protected abstract fun testCatalyst(input: HTRecipeInput, level: Level): Boolean + + final override fun getRequiredCount(): Int = ingredient.map(HTItemIngredient::getRequiredAmount).orElse(0) +} diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeBiCodecs.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeBiCodecs.kt index a8e2bfd99..ee5982fdc 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeBiCodecs.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeBiCodecs.kt @@ -9,12 +9,16 @@ import hiiragi283.ragium.api.recipe.result.HTComplexResult import hiiragi283.ragium.api.recipe.result.HTFluidResult import hiiragi283.ragium.api.recipe.result.HTItemResult import hiiragi283.ragium.api.registry.HTKeyOrTagHelper +import hiiragi283.ragium.api.registry.RegistryKey +import hiiragi283.ragium.api.serialization.codec.BiCodec import hiiragi283.ragium.api.serialization.codec.BiCodecs import hiiragi283.ragium.api.serialization.codec.MapBiCodec import hiiragi283.ragium.api.serialization.codec.MapBiCodecs import hiiragi283.ragium.api.serialization.codec.ParameterCodec +import hiiragi283.ragium.api.serialization.codec.VanillaBiCodecs import hiiragi283.ragium.impl.data.recipe.HTCombineRecipeBuilder import hiiragi283.ragium.impl.data.recipe.HTItemWithCatalystRecipeBuilder +import hiiragi283.ragium.impl.data.recipe.HTSimulatingRecipeBuilder import hiiragi283.ragium.impl.data.recipe.HTSingleExtraItemRecipeBuilder import hiiragi283.ragium.impl.recipe.HTMeltingRecipe import hiiragi283.ragium.impl.recipe.HTMixingRecipe @@ -22,8 +26,10 @@ import hiiragi283.ragium.impl.recipe.HTRefiningRecipe import hiiragi283.ragium.impl.recipe.HTSimpleMixingRecipe import hiiragi283.ragium.impl.recipe.base.HTBasicCombineRecipe import hiiragi283.ragium.impl.recipe.base.HTBasicItemWithCatalystRecipe +import hiiragi283.ragium.impl.recipe.base.HTBasicSimulatingRecipe import hiiragi283.ragium.impl.recipe.base.HTBasicSingleExtraItemRecipe import hiiragi283.ragium.impl.recipe.base.HTBasicSingleOutputRecipe +import net.minecraft.core.HolderSet import net.minecraft.core.registries.Registries import net.minecraft.network.RegistryFriendlyByteBuf @@ -133,4 +139,21 @@ object RagiumRecipeBiCodecs { HTItemResult.CODEC.optionalFieldOf("extra").forGetter(HTBasicSingleExtraItemRecipe::extra), factory::create, ) + + @JvmStatic + fun >> simulating( + registryKey: RegistryKey, + factory: HTSimulatingRecipeBuilder.Factory, R>, + ): MapBiCodec = simulating(VanillaBiCodecs.holderSet(registryKey), factory) + + @JvmStatic + fun > simulating( + catalyst: BiCodec, + factory: HTSimulatingRecipeBuilder.Factory, + ): MapBiCodec = MapBiCodec.composite( + HTItemIngredient.CODEC.optionalFieldOf(RagiumConst.INGREDIENT).forGetter(HTBasicSimulatingRecipe::ingredient), + catalyst.fieldOf(RagiumConst.CATALYST).forGetter(HTBasicSimulatingRecipe::catalyst), + RESULTS.forGetter(HTBasicSimulatingRecipe::results), + factory::create, + ) } diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeSerializers.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeSerializers.kt index 600601c50..15dfecbe7 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeSerializers.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeSerializers.kt @@ -20,17 +20,18 @@ import hiiragi283.ragium.common.recipe.machine.HTBioExtractingRecipe import hiiragi283.ragium.common.recipe.machine.HTCopyEnchantingRecipe import hiiragi283.ragium.common.recipe.machine.HTExpExtractingRecipe import hiiragi283.ragium.impl.recipe.HTAlloyingRecipe +import hiiragi283.ragium.impl.recipe.HTBlockSimulatingRecipe import hiiragi283.ragium.impl.recipe.HTBrewingRecipe import hiiragi283.ragium.impl.recipe.HTCompressingRecipe import hiiragi283.ragium.impl.recipe.HTCrushingRecipe import hiiragi283.ragium.impl.recipe.HTCuttingRecipe import hiiragi283.ragium.impl.recipe.HTEnchantingRecipe +import hiiragi283.ragium.impl.recipe.HTEntitySimulatingRecipe import hiiragi283.ragium.impl.recipe.HTExtractingRecipe import hiiragi283.ragium.impl.recipe.HTMeltingRecipe import hiiragi283.ragium.impl.recipe.HTMixingRecipe import hiiragi283.ragium.impl.recipe.HTRefiningRecipe import hiiragi283.ragium.impl.recipe.HTSimpleMixingRecipe -import hiiragi283.ragium.impl.recipe.HTSimulatingRecipe import net.minecraft.core.registries.Registries import net.minecraft.network.RegistryFriendlyByteBuf import net.minecraft.network.codec.StreamCodec @@ -189,9 +190,15 @@ object RagiumRecipeSerializers { ) @JvmField - val SIMULATING: RecipeSerializer = register( - RagiumConst.SIMULATING, - RagiumRecipeBiCodecs.itemWithCatalyst(::HTSimulatingRecipe), + val SIMULATING_BLOCK: RecipeSerializer = register( + RagiumConst.SIMULATING_BLOCK, + RagiumRecipeBiCodecs.simulating(Registries.BLOCK, ::HTBlockSimulatingRecipe), + ) + + @JvmField + val SIMULATING_ENTITY: RecipeSerializer = register( + RagiumConst.SIMULATING_ENTITY, + RagiumRecipeBiCodecs.simulating(Registries.ENTITY_TYPE, ::HTEntitySimulatingRecipe), ) private class SimpleSerializer>(private val codec: MapBiCodec) : From 002997bebf4218cced3c75e860c07a29632b48b5 Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Thu, 11 Dec 2025 05:06:18 +0900 Subject: [PATCH 16/49] refactor!: moved recipe implementations --- .../api/data/recipe/HTRecipeProvider.kt | 18 ++++---- .../recipe/RagiumBrewingRecipeProvider.kt | 2 +- .../recipe/RagiumChemistryRecipeProvider.kt | 18 ++++---- .../recipe/RagiumCompressingRecipeProvider.kt | 4 +- .../recipe/RagiumCrushingRecipeProvider.kt | 4 +- .../recipe/RagiumDecorationRecipeProvider.kt | 12 ++--- .../recipe/RagiumEnchantingRecipeProvider.kt | 6 +-- .../recipe/RagiumEngineeringRecipeProvider.kt | 10 ++--- .../server/recipe/RagiumFoodRecipeProvider.kt | 14 +++--- .../recipe/RagiumMachineRecipeProvider.kt | 4 +- .../recipe/RagiumMaterialRecipeProvider.kt | 12 ++--- .../recipe/RagiumPlantingRecipeProvider.kt | 2 +- .../RagiumRockGeneratingRecipeProvider.kt | 2 +- .../recipe/RagiumSimulatingRecipeProvider.kt | 18 ++++---- .../server/recipe/RagiumToolRecipeProvider.kt | 12 ++--- .../recipe/compat/RagiumAARecipeProvider.kt | 4 +- .../recipe/compat/RagiumAE2RecipeProvider.kt | 8 ++-- .../compat/RagiumCreateRecipeProvider.kt | 4 +- .../compat/RagiumDelightRecipeProvider.kt | 6 +-- .../compat/RagiumImmersiveRecipeProvider.kt | 2 +- .../compat/RagiumKaleidoRecipeProvider.kt | 4 +- .../compat/RagiumMekanismRecipeProvider.kt | 2 +- .../client/integration/emi/RagiumEmiPlugin.kt | 8 ++-- .../emi/recipe/base/HTCombineEmiRecipe.kt | 2 +- .../recipe/base/HTMultiOutputsEmiRecipe.kt | 2 +- .../custom/HTCopyEnchantingEmiRecipe.kt | 2 +- .../recipe/custom/HTExpExtractingEmiRecipe.kt | 2 +- .../recipe/processor/HTAlloyingEmiRecipe.kt | 2 +- .../recipe/processor/HTBrewingEmiRecipe.kt | 2 +- .../recipe/processor/HTEnchantingEmiRecipe.kt | 2 +- .../processor/HTItemWithCatalystEmiRecipe.kt | 2 +- .../recipe/processor/HTMeltingEmiRecipe.kt | 2 +- .../emi/recipe/processor/HTMixingEmiRecipe.kt | 6 +-- .../recipe/processor/HTRefiningEmiRecipe.kt | 2 +- .../recipe/processor/HTSimulatingEmiRecipe.kt | 6 +-- .../processor/HTSingleExtraItemEmiRecipe.kt | 2 +- .../entity/processor/HTBreweryBlockEntity.kt | 2 +- .../processor/HTElectricFurnaceBlockEntity.kt | 2 +- .../processor/HTMultiSmelterBlockEntity.kt | 2 +- .../base/HTAbstractSmelterBlockEntity.kt | 2 +- .../crafting/HTClearComponentRecipe.kt | 2 +- .../crafting/HTEternalUpgradeRecipe.kt | 2 +- .../crafting/HTGravitationalUpgradeRecipe.kt | 2 +- .../crafting/HTIceCreamSodaRecipe.kt | 2 +- .../crafting/HTPotionDropRecipe.kt | 2 +- .../crafting/HTUpgradeChargeRecipe.kt | 2 +- .../data/recipe/HTCombineRecipeBuilder.kt | 6 +-- .../data/recipe/HTComplexRecipeBuilder.kt | 10 ++--- .../data/recipe/HTCookingRecipeBuilder.kt | 2 +- .../recipe/HTItemWithCatalystRecipeBuilder.kt | 8 ++-- .../data/recipe/HTPlantingRecipeBuilder.kt | 2 +- .../recipe/HTRockGeneratingRecipeBuilder.kt | 2 +- .../data/recipe/HTShapedRecipeBuilder.kt | 21 +-------- .../recipe/HTShapelessInputsRecipeBuilder.kt | 4 +- .../data/recipe/HTShapelessRecipeBuilder.kt | 2 +- .../data/recipe/HTSimulatingRecipeBuilder.kt | 8 ++-- .../recipe/HTSingleExtraItemRecipeBuilder.kt | 6 +-- .../data/recipe/HTSingleRecipeBuilder.kt | 4 +- .../data/recipe/HTSmithingRecipeBuilder.kt | 2 +- .../recipe/HTStonecuttingRecipeBuilder.kt | 2 +- .../base/HTComplexResultRecipeBuilder.kt | 2 +- .../recipe/base/HTGeneratorRecipeBuilder.kt | 2 +- .../event/RagiumRuntimeRecipeHandler.kt | 8 ++-- .../recipe/HTAlloyingRecipe.kt | 4 +- .../recipe/HTBlockSimulatingRecipe.kt | 4 +- .../recipe/HTBrewingRecipe.kt | 4 +- .../recipe/HTCompressingRecipe.kt | 4 +- .../recipe/HTCrushingRecipe.kt | 4 +- .../recipe/HTCuttingRecipe.kt | 4 +- .../recipe/HTEnchantingRecipe.kt | 4 +- .../recipe/HTEntitySimulatingRecipe.kt | 4 +- .../recipe/HTExtractingRecipe.kt | 4 +- .../recipe/HTMeltingRecipe.kt | 4 +- .../{impl => common}/recipe/HTMixingRecipe.kt | 4 +- .../recipe/HTRefiningRecipe.kt | 4 +- .../recipe/HTSimpleMixingRecipe.kt | 4 +- .../recipe/base/HTBasicCombineRecipe.kt | 2 +- .../recipe/base/HTBasicComplexOutputRecipe.kt | 2 +- .../recipe/base/HTBasicComplexRecipe.kt | 2 +- .../base/HTBasicItemWithCatalystRecipe.kt | 2 +- .../base/HTBasicShapelessInputsRecipe.kt | 2 +- .../recipe/base/HTBasicSimulatingRecipe.kt | 2 +- .../base/HTBasicSingleExtraItemRecipe.kt | 2 +- .../recipe/base/HTBasicSingleFluidRecipe.kt | 2 +- .../recipe/base/HTBasicSingleOutputRecipe.kt | 2 +- .../HTBioExtractingRecipe.kt | 2 +- .../HTCopyEnchantingRecipe.kt | 2 +- .../HTExpExtractingRecipe.kt | 2 +- .../{ => vanilla}/HTAutoCraftingRecipe.kt | 2 +- .../{ => vanilla}/HTVanillaCookingRecipe.kt | 2 +- .../{ => vanilla}/HTVanillaResultFactory.kt | 2 +- .../HTVanillaSingleItemRecipe.kt | 2 +- .../ragium/setup/RagiumRecipeBiCodecs.kt | 26 +++++------ .../ragium/setup/RagiumRecipeSerializers.kt | 44 +++++++++---------- 94 files changed, 228 insertions(+), 247 deletions(-) rename src/main/kotlin/hiiragi283/ragium/common/{recipe => }/crafting/HTClearComponentRecipe.kt (98%) rename src/main/kotlin/hiiragi283/ragium/common/{recipe => }/crafting/HTEternalUpgradeRecipe.kt (97%) rename src/main/kotlin/hiiragi283/ragium/common/{recipe => }/crafting/HTGravitationalUpgradeRecipe.kt (97%) rename src/main/kotlin/hiiragi283/ragium/common/{recipe => }/crafting/HTIceCreamSodaRecipe.kt (97%) rename src/main/kotlin/hiiragi283/ragium/common/{recipe => }/crafting/HTPotionDropRecipe.kt (97%) rename src/main/kotlin/hiiragi283/ragium/common/{recipe => }/crafting/HTUpgradeChargeRecipe.kt (97%) rename src/main/kotlin/hiiragi283/ragium/{impl => common}/data/recipe/HTCombineRecipeBuilder.kt (94%) rename src/main/kotlin/hiiragi283/ragium/{impl => common}/data/recipe/HTComplexRecipeBuilder.kt (89%) rename src/main/kotlin/hiiragi283/ragium/{impl => common}/data/recipe/HTCookingRecipeBuilder.kt (98%) rename src/main/kotlin/hiiragi283/ragium/{impl => common}/data/recipe/HTItemWithCatalystRecipeBuilder.kt (90%) rename src/main/kotlin/hiiragi283/ragium/{impl => common}/data/recipe/HTPlantingRecipeBuilder.kt (97%) rename src/main/kotlin/hiiragi283/ragium/{impl => common}/data/recipe/HTRockGeneratingRecipeBuilder.kt (97%) rename src/main/kotlin/hiiragi283/ragium/{impl => common}/data/recipe/HTShapedRecipeBuilder.kt (87%) rename src/main/kotlin/hiiragi283/ragium/{impl => common}/data/recipe/HTShapelessInputsRecipeBuilder.kt (93%) rename src/main/kotlin/hiiragi283/ragium/{impl => common}/data/recipe/HTShapelessRecipeBuilder.kt (98%) rename src/main/kotlin/hiiragi283/ragium/{impl => common}/data/recipe/HTSimulatingRecipeBuilder.kt (88%) rename src/main/kotlin/hiiragi283/ragium/{impl => common}/data/recipe/HTSingleExtraItemRecipeBuilder.kt (91%) rename src/main/kotlin/hiiragi283/ragium/{impl => common}/data/recipe/HTSingleRecipeBuilder.kt (92%) rename src/main/kotlin/hiiragi283/ragium/{impl => common}/data/recipe/HTSmithingRecipeBuilder.kt (96%) rename src/main/kotlin/hiiragi283/ragium/{impl => common}/data/recipe/HTStonecuttingRecipeBuilder.kt (95%) rename src/main/kotlin/hiiragi283/ragium/{impl => common}/data/recipe/base/HTComplexResultRecipeBuilder.kt (95%) rename src/main/kotlin/hiiragi283/ragium/{impl => common}/data/recipe/base/HTGeneratorRecipeBuilder.kt (82%) rename src/main/kotlin/hiiragi283/ragium/{impl => common}/recipe/HTAlloyingRecipe.kt (85%) rename src/main/kotlin/hiiragi283/ragium/{impl => common}/recipe/HTBlockSimulatingRecipe.kt (89%) rename src/main/kotlin/hiiragi283/ragium/{impl => common}/recipe/HTBrewingRecipe.kt (94%) rename src/main/kotlin/hiiragi283/ragium/{impl => common}/recipe/HTCompressingRecipe.kt (90%) rename src/main/kotlin/hiiragi283/ragium/{impl => common}/recipe/HTCrushingRecipe.kt (86%) rename src/main/kotlin/hiiragi283/ragium/{impl => common}/recipe/HTCuttingRecipe.kt (86%) rename src/main/kotlin/hiiragi283/ragium/{impl => common}/recipe/HTEnchantingRecipe.kt (94%) rename src/main/kotlin/hiiragi283/ragium/{impl => common}/recipe/HTEntitySimulatingRecipe.kt (91%) rename src/main/kotlin/hiiragi283/ragium/{impl => common}/recipe/HTExtractingRecipe.kt (90%) rename src/main/kotlin/hiiragi283/ragium/{impl => common}/recipe/HTMeltingRecipe.kt (85%) rename src/main/kotlin/hiiragi283/ragium/{impl => common}/recipe/HTMixingRecipe.kt (92%) rename src/main/kotlin/hiiragi283/ragium/{impl => common}/recipe/HTRefiningRecipe.kt (92%) rename src/main/kotlin/hiiragi283/ragium/{impl => common}/recipe/HTSimpleMixingRecipe.kt (92%) rename src/main/kotlin/hiiragi283/ragium/{impl => common}/recipe/base/HTBasicCombineRecipe.kt (95%) rename src/main/kotlin/hiiragi283/ragium/{impl => common}/recipe/base/HTBasicComplexOutputRecipe.kt (94%) rename src/main/kotlin/hiiragi283/ragium/{impl => common}/recipe/base/HTBasicComplexRecipe.kt (86%) rename src/main/kotlin/hiiragi283/ragium/{impl => common}/recipe/base/HTBasicItemWithCatalystRecipe.kt (91%) rename src/main/kotlin/hiiragi283/ragium/{impl => common}/recipe/base/HTBasicShapelessInputsRecipe.kt (93%) rename src/main/kotlin/hiiragi283/ragium/{impl => common}/recipe/base/HTBasicSimulatingRecipe.kt (95%) rename src/main/kotlin/hiiragi283/ragium/{impl => common}/recipe/base/HTBasicSingleExtraItemRecipe.kt (95%) rename src/main/kotlin/hiiragi283/ragium/{impl => common}/recipe/base/HTBasicSingleFluidRecipe.kt (95%) rename src/main/kotlin/hiiragi283/ragium/{impl => common}/recipe/base/HTBasicSingleOutputRecipe.kt (91%) rename src/main/kotlin/hiiragi283/ragium/common/recipe/{machine => custom}/HTBioExtractingRecipe.kt (97%) rename src/main/kotlin/hiiragi283/ragium/common/recipe/{machine => custom}/HTCopyEnchantingRecipe.kt (98%) rename src/main/kotlin/hiiragi283/ragium/common/recipe/{machine => custom}/HTExpExtractingRecipe.kt (98%) rename src/main/kotlin/hiiragi283/ragium/common/recipe/{ => vanilla}/HTAutoCraftingRecipe.kt (97%) rename src/main/kotlin/hiiragi283/ragium/common/recipe/{ => vanilla}/HTVanillaCookingRecipe.kt (95%) rename src/main/kotlin/hiiragi283/ragium/common/recipe/{ => vanilla}/HTVanillaResultFactory.kt (84%) rename src/main/kotlin/hiiragi283/ragium/common/recipe/{ => vanilla}/HTVanillaSingleItemRecipe.kt (96%) diff --git a/src/data/kotlin/hiiragi283/ragium/api/data/recipe/HTRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/api/data/recipe/HTRecipeProvider.kt index 8cd49f67e..8dec32d2a 100644 --- a/src/data/kotlin/hiiragi283/ragium/api/data/recipe/HTRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/api/data/recipe/HTRecipeProvider.kt @@ -22,17 +22,17 @@ import hiiragi283.ragium.api.registry.toHolderLike import hiiragi283.ragium.api.registry.toId import hiiragi283.ragium.api.tag.RagiumModTags import hiiragi283.ragium.common.HTMoldType +import hiiragi283.ragium.common.crafting.HTClearComponentRecipe +import hiiragi283.ragium.common.data.recipe.HTCombineRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTComplexRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTItemWithCatalystRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTPlantingRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTShapelessRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTSingleExtraItemRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTSingleRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTSmithingRecipeBuilder import hiiragi283.ragium.common.material.CommonMaterialPrefixes import hiiragi283.ragium.common.material.VanillaMaterialKeys -import hiiragi283.ragium.common.recipe.crafting.HTClearComponentRecipe -import hiiragi283.ragium.impl.data.recipe.HTCombineRecipeBuilder -import hiiragi283.ragium.impl.data.recipe.HTComplexRecipeBuilder -import hiiragi283.ragium.impl.data.recipe.HTItemWithCatalystRecipeBuilder -import hiiragi283.ragium.impl.data.recipe.HTPlantingRecipeBuilder -import hiiragi283.ragium.impl.data.recipe.HTShapelessRecipeBuilder -import hiiragi283.ragium.impl.data.recipe.HTSingleExtraItemRecipeBuilder -import hiiragi283.ragium.impl.data.recipe.HTSingleRecipeBuilder -import hiiragi283.ragium.impl.data.recipe.HTSmithingRecipeBuilder import hiiragi283.ragium.setup.RagiumItems import net.minecraft.advancements.Advancement import net.minecraft.advancements.AdvancementHolder diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumBrewingRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumBrewingRecipeProvider.kt index 6224cb60a..07ff09e0b 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumBrewingRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumBrewingRecipeProvider.kt @@ -2,7 +2,7 @@ package hiiragi283.ragium.data.server.recipe import hiiragi283.ragium.api.RagiumAPI import hiiragi283.ragium.api.data.recipe.HTRecipeProvider -import hiiragi283.ragium.common.recipe.crafting.HTPotionDropRecipe +import hiiragi283.ragium.common.crafting.HTPotionDropRecipe import net.minecraft.core.Holder import net.minecraft.world.effect.MobEffect import net.minecraft.world.effect.MobEffects diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumChemistryRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumChemistryRecipeProvider.kt index d1d73ddf1..12abe36ca 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumChemistryRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumChemistryRecipeProvider.kt @@ -9,22 +9,22 @@ import hiiragi283.ragium.api.registry.HTFluidHolderLike import hiiragi283.ragium.api.registry.toHolderLike import hiiragi283.ragium.api.tag.RagiumModTags import hiiragi283.ragium.common.HTMoldType +import hiiragi283.ragium.common.data.recipe.HTComplexRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTCookingRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTItemWithCatalystRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTShapedRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTShapelessInputsRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTShapelessRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTSingleExtraItemRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTSingleRecipeBuilder import hiiragi283.ragium.common.material.CommonMaterialKeys import hiiragi283.ragium.common.material.CommonMaterialPrefixes import hiiragi283.ragium.common.material.HTColorMaterial import hiiragi283.ragium.common.material.RagiumMaterialKeys import hiiragi283.ragium.common.material.RagiumMoltenCrystalData import hiiragi283.ragium.common.material.VanillaMaterialKeys -import hiiragi283.ragium.common.recipe.machine.HTBioExtractingRecipe +import hiiragi283.ragium.common.recipe.custom.HTBioExtractingRecipe import hiiragi283.ragium.common.variant.HTColoredVariant -import hiiragi283.ragium.impl.data.recipe.HTComplexRecipeBuilder -import hiiragi283.ragium.impl.data.recipe.HTCookingRecipeBuilder -import hiiragi283.ragium.impl.data.recipe.HTItemWithCatalystRecipeBuilder -import hiiragi283.ragium.impl.data.recipe.HTShapedRecipeBuilder -import hiiragi283.ragium.impl.data.recipe.HTShapelessInputsRecipeBuilder -import hiiragi283.ragium.impl.data.recipe.HTShapelessRecipeBuilder -import hiiragi283.ragium.impl.data.recipe.HTSingleExtraItemRecipeBuilder -import hiiragi283.ragium.impl.data.recipe.HTSingleRecipeBuilder import hiiragi283.ragium.impl.data.recipe.material.RagiumMaterialRecipeData import hiiragi283.ragium.setup.RagiumBlocks import hiiragi283.ragium.setup.RagiumFluidContents diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumCompressingRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumCompressingRecipeProvider.kt index f5b73f5e5..f4a41200f 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumCompressingRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumCompressingRecipeProvider.kt @@ -2,11 +2,11 @@ package hiiragi283.ragium.data.server.recipe import hiiragi283.ragium.api.data.recipe.HTRecipeProvider import hiiragi283.ragium.common.HTMoldType +import hiiragi283.ragium.common.data.recipe.HTItemWithCatalystRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTShapedRecipeBuilder import hiiragi283.ragium.common.material.CommonMaterialPrefixes import hiiragi283.ragium.common.material.RagiumMaterialKeys import hiiragi283.ragium.common.material.VanillaMaterialKeys -import hiiragi283.ragium.impl.data.recipe.HTItemWithCatalystRecipeBuilder -import hiiragi283.ragium.impl.data.recipe.HTShapedRecipeBuilder import hiiragi283.ragium.setup.RagiumItems import net.minecraft.world.item.Items import net.neoforged.neoforge.common.Tags diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumCrushingRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumCrushingRecipeProvider.kt index 437f337ec..6ff3c9111 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumCrushingRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumCrushingRecipeProvider.kt @@ -1,11 +1,11 @@ package hiiragi283.ragium.data.server.recipe import hiiragi283.ragium.api.data.recipe.HTRecipeProvider +import hiiragi283.ragium.common.data.recipe.HTItemWithCatalystRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTSingleExtraItemRecipeBuilder import hiiragi283.ragium.common.material.CommonMaterialKeys import hiiragi283.ragium.common.material.CommonMaterialPrefixes import hiiragi283.ragium.common.material.VanillaMaterialKeys -import hiiragi283.ragium.impl.data.recipe.HTItemWithCatalystRecipeBuilder -import hiiragi283.ragium.impl.data.recipe.HTSingleExtraItemRecipeBuilder import hiiragi283.ragium.setup.RagiumBlocks import hiiragi283.ragium.setup.RagiumItems import net.minecraft.tags.ItemTags diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumDecorationRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumDecorationRecipeProvider.kt index 449492dac..76628444f 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumDecorationRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumDecorationRecipeProvider.kt @@ -3,18 +3,18 @@ package hiiragi283.ragium.data.server.recipe import hiiragi283.ragium.api.data.recipe.HTRecipeProvider import hiiragi283.ragium.api.material.HTMaterialKey import hiiragi283.ragium.common.HTDecorationType +import hiiragi283.ragium.common.data.recipe.HTComplexRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTCookingRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTShapedRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTShapelessInputsRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTSingleExtraItemRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTStonecuttingRecipeBuilder import hiiragi283.ragium.common.material.CommonMaterialKeys import hiiragi283.ragium.common.material.CommonMaterialPrefixes import hiiragi283.ragium.common.material.FoodMaterialKeys import hiiragi283.ragium.common.material.RagiumMaterialKeys import hiiragi283.ragium.common.material.VanillaMaterialKeys import hiiragi283.ragium.common.variant.HTGlassVariant -import hiiragi283.ragium.impl.data.recipe.HTComplexRecipeBuilder -import hiiragi283.ragium.impl.data.recipe.HTCookingRecipeBuilder -import hiiragi283.ragium.impl.data.recipe.HTShapedRecipeBuilder -import hiiragi283.ragium.impl.data.recipe.HTShapelessInputsRecipeBuilder -import hiiragi283.ragium.impl.data.recipe.HTSingleExtraItemRecipeBuilder -import hiiragi283.ragium.impl.data.recipe.HTStonecuttingRecipeBuilder import hiiragi283.ragium.setup.RagiumBlocks import net.minecraft.tags.ItemTags import net.minecraft.tags.TagKey diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumEnchantingRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumEnchantingRecipeProvider.kt index 03389ce4b..3718aff6a 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumEnchantingRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumEnchantingRecipeProvider.kt @@ -2,12 +2,12 @@ package hiiragi283.ragium.data.server.recipe import hiiragi283.ragium.api.data.recipe.HTRecipeProvider import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient +import hiiragi283.ragium.common.data.recipe.HTCombineRecipeBuilder import hiiragi283.ragium.common.material.CommonMaterialPrefixes import hiiragi283.ragium.common.material.RagiumMaterialKeys import hiiragi283.ragium.common.material.VanillaMaterialKeys -import hiiragi283.ragium.common.recipe.machine.HTCopyEnchantingRecipe -import hiiragi283.ragium.common.recipe.machine.HTExpExtractingRecipe -import hiiragi283.ragium.impl.data.recipe.HTCombineRecipeBuilder +import hiiragi283.ragium.common.recipe.custom.HTCopyEnchantingRecipe +import hiiragi283.ragium.common.recipe.custom.HTExpExtractingRecipe import hiiragi283.ragium.setup.RagiumEnchantments import hiiragi283.ragium.setup.RagiumItems import net.minecraft.core.HolderGetter diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumEngineeringRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumEngineeringRecipeProvider.kt index 0f3f0eb62..7b475df5f 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumEngineeringRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumEngineeringRecipeProvider.kt @@ -6,16 +6,16 @@ import hiiragi283.ragium.api.material.HTMaterialKey import hiiragi283.ragium.api.tag.RagiumCommonTags import hiiragi283.ragium.api.tag.RagiumModTags import hiiragi283.ragium.common.HTMoldType +import hiiragi283.ragium.common.crafting.HTEternalUpgradeRecipe +import hiiragi283.ragium.common.crafting.HTGravitationalUpgradeRecipe +import hiiragi283.ragium.common.data.recipe.HTShapedRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTShapelessInputsRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTStonecuttingRecipeBuilder import hiiragi283.ragium.common.material.CommonMaterialPrefixes import hiiragi283.ragium.common.material.HTColorMaterial import hiiragi283.ragium.common.material.RagiumMaterialKeys import hiiragi283.ragium.common.material.VanillaMaterialKeys -import hiiragi283.ragium.common.recipe.crafting.HTEternalUpgradeRecipe -import hiiragi283.ragium.common.recipe.crafting.HTGravitationalUpgradeRecipe import hiiragi283.ragium.common.tier.HTComponentTier -import hiiragi283.ragium.impl.data.recipe.HTShapedRecipeBuilder -import hiiragi283.ragium.impl.data.recipe.HTShapelessInputsRecipeBuilder -import hiiragi283.ragium.impl.data.recipe.HTStonecuttingRecipeBuilder import hiiragi283.ragium.setup.RagiumBlocks import hiiragi283.ragium.setup.RagiumItems import net.minecraft.world.item.Items diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumFoodRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumFoodRecipeProvider.kt index 6bac3a0fb..2bd1d2546 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumFoodRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumFoodRecipeProvider.kt @@ -8,18 +8,18 @@ import hiiragi283.ragium.api.tag.RagiumCommonTags import hiiragi283.ragium.api.tag.RagiumModTags import hiiragi283.ragium.common.HTDecorationType import hiiragi283.ragium.common.HTMoldType +import hiiragi283.ragium.common.crafting.HTIceCreamSodaRecipe +import hiiragi283.ragium.common.data.recipe.HTComplexRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTCookingRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTItemWithCatalystRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTShapedRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTShapelessRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTSingleExtraItemRecipeBuilder import hiiragi283.ragium.common.material.CommonMaterialKeys import hiiragi283.ragium.common.material.CommonMaterialPrefixes import hiiragi283.ragium.common.material.FoodMaterialKeys import hiiragi283.ragium.common.material.RagiumMaterialKeys import hiiragi283.ragium.common.material.VanillaMaterialKeys -import hiiragi283.ragium.common.recipe.crafting.HTIceCreamSodaRecipe -import hiiragi283.ragium.impl.data.recipe.HTComplexRecipeBuilder -import hiiragi283.ragium.impl.data.recipe.HTCookingRecipeBuilder -import hiiragi283.ragium.impl.data.recipe.HTItemWithCatalystRecipeBuilder -import hiiragi283.ragium.impl.data.recipe.HTShapedRecipeBuilder -import hiiragi283.ragium.impl.data.recipe.HTShapelessRecipeBuilder -import hiiragi283.ragium.impl.data.recipe.HTSingleExtraItemRecipeBuilder import hiiragi283.ragium.impl.data.recipe.material.FoodMaterialRecipeData import hiiragi283.ragium.setup.RagiumBlocks import hiiragi283.ragium.setup.RagiumFluidContents diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumMachineRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumMachineRecipeProvider.kt index dca05db49..8fdb3f095 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumMachineRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumMachineRecipeProvider.kt @@ -8,6 +8,8 @@ import hiiragi283.ragium.api.registry.HTItemHolderLike import hiiragi283.ragium.api.tag.RagiumCommonTags import hiiragi283.ragium.api.tag.RagiumModTags import hiiragi283.ragium.api.tier.HTBaseTier +import hiiragi283.ragium.common.data.recipe.HTShapedRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTShapelessRecipeBuilder import hiiragi283.ragium.common.material.CommonMaterialPrefixes import hiiragi283.ragium.common.material.RagiumMaterialKeys import hiiragi283.ragium.common.material.VanillaMaterialKeys @@ -16,8 +18,6 @@ import hiiragi283.ragium.common.tier.HTCrateTier import hiiragi283.ragium.common.tier.HTDrumTier import hiiragi283.ragium.common.variant.HTUpgradeVariant import hiiragi283.ragium.common.variant.VanillaToolVariant -import hiiragi283.ragium.impl.data.recipe.HTShapedRecipeBuilder -import hiiragi283.ragium.impl.data.recipe.HTShapelessRecipeBuilder import hiiragi283.ragium.setup.RagiumBlocks import hiiragi283.ragium.setup.RagiumDataComponents import hiiragi283.ragium.setup.RagiumFluidContents diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumMaterialRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumMaterialRecipeProvider.kt index 37140861d..a0d2fe173 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumMaterialRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumMaterialRecipeProvider.kt @@ -15,17 +15,17 @@ import hiiragi283.ragium.api.registry.impl.HTSimpleDeferredItem import hiiragi283.ragium.api.tag.RagiumCommonTags import hiiragi283.ragium.api.util.Ior import hiiragi283.ragium.common.HTMoldType +import hiiragi283.ragium.common.data.recipe.HTComplexRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTCookingRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTShapedRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTShapelessInputsRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTShapelessRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTSingleExtraItemRecipeBuilder import hiiragi283.ragium.common.material.CommonMaterialKeys import hiiragi283.ragium.common.material.CommonMaterialPrefixes import hiiragi283.ragium.common.material.ModMaterialKeys import hiiragi283.ragium.common.material.RagiumMaterialKeys import hiiragi283.ragium.common.material.VanillaMaterialKeys -import hiiragi283.ragium.impl.data.recipe.HTComplexRecipeBuilder -import hiiragi283.ragium.impl.data.recipe.HTCookingRecipeBuilder -import hiiragi283.ragium.impl.data.recipe.HTShapedRecipeBuilder -import hiiragi283.ragium.impl.data.recipe.HTShapelessInputsRecipeBuilder -import hiiragi283.ragium.impl.data.recipe.HTShapelessRecipeBuilder -import hiiragi283.ragium.impl.data.recipe.HTSingleExtraItemRecipeBuilder import hiiragi283.ragium.impl.data.recipe.material.CommonMaterialRecipeData import hiiragi283.ragium.impl.data.recipe.material.CreateMaterialRecipeData import hiiragi283.ragium.impl.data.recipe.material.EIOMaterialRecipeData diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumPlantingRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumPlantingRecipeProvider.kt index efc63f640..712725f3d 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumPlantingRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumPlantingRecipeProvider.kt @@ -3,7 +3,7 @@ package hiiragi283.ragium.data.server.recipe import hiiragi283.ragium.api.data.recipe.HTRecipeProvider import hiiragi283.ragium.api.registry.toHolderLike import hiiragi283.ragium.api.tag.RagiumModTags -import hiiragi283.ragium.impl.data.recipe.HTPlantingRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTPlantingRecipeBuilder import hiiragi283.ragium.setup.RagiumBlocks import hiiragi283.ragium.setup.RagiumFluidContents import net.minecraft.tags.ItemTags diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumRockGeneratingRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumRockGeneratingRecipeProvider.kt index 14d532b2a..fb69eb326 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumRockGeneratingRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumRockGeneratingRecipeProvider.kt @@ -3,7 +3,7 @@ package hiiragi283.ragium.data.server.recipe import hiiragi283.ragium.api.data.recipe.HTRecipeProvider import hiiragi283.ragium.api.recipe.ingredient.HTFluidIngredient import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient -import hiiragi283.ragium.impl.data.recipe.HTRockGeneratingRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTRockGeneratingRecipeBuilder import hiiragi283.ragium.setup.RagiumBlocks import hiiragi283.ragium.setup.RagiumFluidContents import net.minecraft.world.item.Item diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumSimulatingRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumSimulatingRecipeProvider.kt index 923ed8697..2ad5ccb87 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumSimulatingRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumSimulatingRecipeProvider.kt @@ -6,12 +6,12 @@ import hiiragi283.ragium.api.material.prefix.HTPrefixLike import hiiragi283.ragium.api.registry.HTFluidHolderLike import hiiragi283.ragium.api.stack.toImmutableOrThrow import hiiragi283.ragium.common.block.HTImitationSpawnerBlock +import hiiragi283.ragium.common.data.recipe.HTComplexRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTShapedRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTSimulatingRecipeBuilder import hiiragi283.ragium.common.material.CommonMaterialPrefixes import hiiragi283.ragium.common.material.RagiumMaterialKeys import hiiragi283.ragium.common.material.VanillaMaterialKeys -import hiiragi283.ragium.impl.data.recipe.HTComplexRecipeBuilder -import hiiragi283.ragium.impl.data.recipe.HTShapedRecipeBuilder -import hiiragi283.ragium.impl.data.recipe.HTSimulatingRecipeBuilder import hiiragi283.ragium.setup.RagiumBlocks import hiiragi283.ragium.setup.RagiumFluidContents import hiiragi283.ragium.setup.RagiumItems @@ -205,12 +205,12 @@ object RagiumSimulatingRecipeProvider : HTRecipeProvider.Direct() { .setResult(resultHelper.item(Items.NETHER_STAR)) .save(output) - HTShapedRecipeBuilder - .cross8Mirrored(output, HTImitationSpawnerBlock.createStack(EntityType.WITHER).toImmutableOrThrow()) { - define('A', RagiumItems.IRIDESCENT_POWDER) - define('B', Items.WITHER_ROSE) - define('C', RagiumBlocks.IMITATION_SPAWNER) - } + HTShapedRecipeBuilder(HTImitationSpawnerBlock.createStack(EntityType.WITHER).toImmutableOrThrow()) + .cross8() + .define('A', RagiumItems.IRIDESCENT_POWDER) + .define('B', Items.WITHER_ROSE) + .define('C', RagiumBlocks.IMITATION_SPAWNER) + .saveSuffixed(output, "/wither") HTSimulatingRecipeBuilder .entity( diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumToolRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumToolRecipeProvider.kt index 75cb51137..e3e5e3ec3 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumToolRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumToolRecipeProvider.kt @@ -10,19 +10,19 @@ import hiiragi283.ragium.api.stack.ImmutableItemStack import hiiragi283.ragium.api.tag.RagiumCommonTags import hiiragi283.ragium.api.variant.HTToolVariant import hiiragi283.ragium.common.HTChargeType +import hiiragi283.ragium.common.crafting.HTUpgradeChargeRecipe +import hiiragi283.ragium.common.data.recipe.HTComplexRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTShapedRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTShapelessRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTSmithingRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTStonecuttingRecipeBuilder import hiiragi283.ragium.common.item.tool.HTUniversalBundleItem import hiiragi283.ragium.common.material.CommonMaterialPrefixes import hiiragi283.ragium.common.material.HTColorMaterial import hiiragi283.ragium.common.material.RagiumMaterialKeys import hiiragi283.ragium.common.material.VanillaMaterialKeys -import hiiragi283.ragium.common.recipe.crafting.HTUpgradeChargeRecipe import hiiragi283.ragium.common.variant.HTArmorVariant import hiiragi283.ragium.common.variant.VanillaToolVariant -import hiiragi283.ragium.impl.data.recipe.HTComplexRecipeBuilder -import hiiragi283.ragium.impl.data.recipe.HTShapedRecipeBuilder -import hiiragi283.ragium.impl.data.recipe.HTShapelessRecipeBuilder -import hiiragi283.ragium.impl.data.recipe.HTSmithingRecipeBuilder -import hiiragi283.ragium.impl.data.recipe.HTStonecuttingRecipeBuilder import hiiragi283.ragium.setup.RagiumDataComponents import hiiragi283.ragium.setup.RagiumFluidContents import hiiragi283.ragium.setup.RagiumItems diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumAARecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumAARecipeProvider.kt index c98ad9755..35d5846e4 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumAARecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumAARecipeProvider.kt @@ -5,8 +5,8 @@ import de.ellpeck.actuallyadditions.mod.fluids.InitFluids import de.ellpeck.actuallyadditions.mod.items.ActuallyItems import hiiragi283.ragium.api.RagiumConst import hiiragi283.ragium.api.data.recipe.HTRecipeProvider -import hiiragi283.ragium.impl.data.recipe.HTComplexRecipeBuilder -import hiiragi283.ragium.impl.data.recipe.HTItemWithCatalystRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTComplexRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTItemWithCatalystRecipeBuilder import hiiragi283.ragium.setup.RagiumFluidContents object RagiumAARecipeProvider : HTRecipeProvider.Integration(RagiumConst.ACTUALLY) { diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumAE2RecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumAE2RecipeProvider.kt index d8c695db2..19d9bb2c8 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumAE2RecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumAE2RecipeProvider.kt @@ -7,13 +7,13 @@ import hiiragi283.ragium.api.RagiumConst import hiiragi283.ragium.api.data.recipe.HTRecipeProvider import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient import hiiragi283.ragium.api.recipe.result.HTItemResult +import hiiragi283.ragium.common.data.recipe.HTComplexRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTRockGeneratingRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTShapelessInputsRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTSimulatingRecipeBuilder import hiiragi283.ragium.common.material.CommonMaterialPrefixes import hiiragi283.ragium.common.material.ModMaterialKeys import hiiragi283.ragium.common.material.VanillaMaterialKeys -import hiiragi283.ragium.impl.data.recipe.HTComplexRecipeBuilder -import hiiragi283.ragium.impl.data.recipe.HTRockGeneratingRecipeBuilder -import hiiragi283.ragium.impl.data.recipe.HTShapelessInputsRecipeBuilder -import hiiragi283.ragium.impl.data.recipe.HTSimulatingRecipeBuilder import hiiragi283.ragium.setup.RagiumFluidContents import net.minecraft.core.HolderSet diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumCreateRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumCreateRecipeProvider.kt index fae4a8846..a1e7ffbb7 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumCreateRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumCreateRecipeProvider.kt @@ -16,11 +16,11 @@ import hiiragi283.ragium.api.material.HTMaterialKey import hiiragi283.ragium.api.material.prefix.HTMaterialPrefix import hiiragi283.ragium.api.registry.HTItemHolderLike import hiiragi283.ragium.common.HTMoldType +import hiiragi283.ragium.common.data.recipe.HTComplexRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTShapelessRecipeBuilder import hiiragi283.ragium.common.material.CommonMaterialPrefixes import hiiragi283.ragium.common.material.RagiumMaterialKeys import hiiragi283.ragium.common.variant.HTOreVariant -import hiiragi283.ragium.impl.data.recipe.HTComplexRecipeBuilder -import hiiragi283.ragium.impl.data.recipe.HTShapelessRecipeBuilder import hiiragi283.ragium.impl.data.recipe.material.FoodMaterialRecipeData import hiiragi283.ragium.impl.data.recipe.material.RagiumMaterialRecipeData import hiiragi283.ragium.impl.data.recipe.material.VanillaMaterialRecipeData diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumDelightRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumDelightRecipeProvider.kt index d4858c3d9..b9b669366 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumDelightRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumDelightRecipeProvider.kt @@ -9,14 +9,14 @@ import hiiragi283.ragium.api.registry.HTFluidHolderLike import hiiragi283.ragium.api.registry.HTItemHolderLike import hiiragi283.ragium.api.stack.toImmutableOrThrow import hiiragi283.ragium.api.tag.RagiumCommonTags +import hiiragi283.ragium.common.data.recipe.HTComplexRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTShapedRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTSingleExtraItemRecipeBuilder import hiiragi283.ragium.common.material.CommonMaterialPrefixes import hiiragi283.ragium.common.material.FoodMaterialKeys import hiiragi283.ragium.common.material.RagiumMaterialKeys -import hiiragi283.ragium.impl.data.recipe.HTComplexRecipeBuilder import hiiragi283.ragium.impl.data.recipe.HTCookingPotRecipeBuilder import hiiragi283.ragium.impl.data.recipe.HTCuttingBoardRecipeBuilder -import hiiragi283.ragium.impl.data.recipe.HTShapedRecipeBuilder -import hiiragi283.ragium.impl.data.recipe.HTSingleExtraItemRecipeBuilder import hiiragi283.ragium.impl.data.recipe.material.FoodMaterialRecipeData import hiiragi283.ragium.setup.RagiumFluidContents import hiiragi283.ragium.setup.RagiumIntegrationItems diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumImmersiveRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumImmersiveRecipeProvider.kt index 1ab538b6a..23f2c3267 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumImmersiveRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumImmersiveRecipeProvider.kt @@ -19,10 +19,10 @@ import hiiragi283.ragium.api.data.recipe.HTRecipeProvider import hiiragi283.ragium.api.registry.HTBasicFluidContent import hiiragi283.ragium.api.util.Ior import hiiragi283.ragium.common.HTMoldType +import hiiragi283.ragium.common.data.recipe.HTComplexRecipeBuilder import hiiragi283.ragium.common.material.CommonMaterialPrefixes import hiiragi283.ragium.common.material.RagiumMoltenCrystalData import hiiragi283.ragium.common.material.VanillaMaterialKeys -import hiiragi283.ragium.impl.data.recipe.HTComplexRecipeBuilder import hiiragi283.ragium.impl.data.recipe.material.FoodMaterialRecipeData import hiiragi283.ragium.impl.data.recipe.material.RagiumMaterialRecipeData import hiiragi283.ragium.setup.RagiumFluidContents diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumKaleidoRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumKaleidoRecipeProvider.kt index 0711a0538..cfd26a756 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumKaleidoRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumKaleidoRecipeProvider.kt @@ -9,11 +9,11 @@ import hiiragi283.ragium.api.material.prefix.HTPrefixLike import hiiragi283.ragium.api.registry.toHolderLike import hiiragi283.ragium.api.stack.toImmutableOrThrow import hiiragi283.ragium.api.tag.RagiumModTags +import hiiragi283.ragium.common.data.recipe.HTPlantingRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTShapedRecipeBuilder import hiiragi283.ragium.common.material.CommonMaterialPrefixes import hiiragi283.ragium.common.material.RagiumMaterialKeys import hiiragi283.ragium.impl.data.recipe.HTChoppingBoardRecipeBuilder -import hiiragi283.ragium.impl.data.recipe.HTPlantingRecipeBuilder -import hiiragi283.ragium.impl.data.recipe.HTShapedRecipeBuilder import hiiragi283.ragium.impl.data.recipe.material.FoodMaterialRecipeData import hiiragi283.ragium.setup.RagiumIntegrationItems import net.minecraft.world.item.ItemStack diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumMekanismRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumMekanismRecipeProvider.kt index 00693fd0a..dee992140 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumMekanismRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumMekanismRecipeProvider.kt @@ -8,13 +8,13 @@ import hiiragi283.ragium.api.material.HTMaterialLike import hiiragi283.ragium.api.material.prefix.HTPrefixLike import hiiragi283.ragium.api.registry.HTBasicFluidContent import hiiragi283.ragium.api.tag.RagiumCommonTags +import hiiragi283.ragium.common.data.recipe.HTComplexRecipeBuilder import hiiragi283.ragium.common.material.CommonMaterialPrefixes import hiiragi283.ragium.common.material.MekanismMaterialPrefixes import hiiragi283.ragium.common.material.RagiumEssenceType import hiiragi283.ragium.common.material.RagiumMaterialKeys import hiiragi283.ragium.common.material.RagiumMoltenCrystalData import hiiragi283.ragium.common.material.VanillaMaterialKeys -import hiiragi283.ragium.impl.data.recipe.HTComplexRecipeBuilder import hiiragi283.ragium.impl.data.recipe.material.FoodMaterialRecipeData import hiiragi283.ragium.impl.data.recipe.material.RagiumMaterialRecipeData import hiiragi283.ragium.impl.data.recipe.material.VanillaMaterialRecipeData 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 e3133c545..aeb2f20b8 100644 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/RagiumEmiPlugin.kt +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/RagiumEmiPlugin.kt @@ -56,10 +56,10 @@ import hiiragi283.ragium.common.block.entity.HTBlockEntity import hiiragi283.ragium.common.block.entity.generator.HTCulinaryGeneratorBlockEntity import hiiragi283.ragium.common.material.CommonMaterialPrefixes import hiiragi283.ragium.common.material.FoodMaterialKeys -import hiiragi283.ragium.common.recipe.machine.HTBioExtractingRecipe -import hiiragi283.ragium.common.recipe.machine.HTCopyEnchantingRecipe -import hiiragi283.ragium.common.recipe.machine.HTExpExtractingRecipe -import hiiragi283.ragium.impl.recipe.HTExtractingRecipe +import hiiragi283.ragium.common.recipe.HTExtractingRecipe +import hiiragi283.ragium.common.recipe.custom.HTBioExtractingRecipe +import hiiragi283.ragium.common.recipe.custom.HTCopyEnchantingRecipe +import hiiragi283.ragium.common.recipe.custom.HTExpExtractingRecipe import hiiragi283.ragium.setup.DeferredBEMenu import hiiragi283.ragium.setup.RagiumBlocks import hiiragi283.ragium.setup.RagiumDataComponents diff --git a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/base/HTCombineEmiRecipe.kt b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/base/HTCombineEmiRecipe.kt index 2f5f49e93..c11ace69b 100644 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/base/HTCombineEmiRecipe.kt +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/base/HTCombineEmiRecipe.kt @@ -9,7 +9,7 @@ import hiiragi283.ragium.client.integration.emi.addArrow import hiiragi283.ragium.client.integration.emi.addPlus import hiiragi283.ragium.client.integration.emi.category.HTEmiRecipeCategory import hiiragi283.ragium.client.integration.emi.recipe.HTEmiHolderRecipe -import hiiragi283.ragium.impl.recipe.base.HTBasicCombineRecipe +import hiiragi283.ragium.common.recipe.base.HTBasicCombineRecipe import net.minecraft.world.item.crafting.RecipeHolder abstract class HTCombineEmiRecipe(category: HTEmiRecipeCategory, holder: RecipeHolder) : 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 a180bafd7..89d90c852 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 @@ -3,7 +3,7 @@ package hiiragi283.ragium.client.integration.emi.recipe.base import dev.emi.emi.api.widget.WidgetHolder import hiiragi283.ragium.client.integration.emi.category.HTEmiRecipeCategory import hiiragi283.ragium.client.integration.emi.recipe.HTEmiHolderRecipe -import hiiragi283.ragium.impl.recipe.base.HTBasicComplexOutputRecipe +import hiiragi283.ragium.common.recipe.base.HTBasicComplexOutputRecipe import net.minecraft.resources.ResourceLocation import net.minecraft.world.item.crafting.RecipeHolder diff --git a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/custom/HTCopyEnchantingEmiRecipe.kt b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/custom/HTCopyEnchantingEmiRecipe.kt index 5dae7674e..49ba7cdcf 100644 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/custom/HTCopyEnchantingEmiRecipe.kt +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/custom/HTCopyEnchantingEmiRecipe.kt @@ -9,7 +9,7 @@ import hiiragi283.ragium.client.integration.emi.addPlus import hiiragi283.ragium.client.integration.emi.category.RagiumEmiRecipeCategories import hiiragi283.ragium.client.integration.emi.recipe.HTEmiRecipe import hiiragi283.ragium.client.integration.emi.toFluidEmi -import hiiragi283.ragium.common.recipe.machine.HTCopyEnchantingRecipe +import hiiragi283.ragium.common.recipe.custom.HTCopyEnchantingRecipe import hiiragi283.ragium.setup.RagiumFluidContents import net.minecraft.resources.ResourceLocation import net.minecraft.world.item.Items diff --git a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/custom/HTExpExtractingEmiRecipe.kt b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/custom/HTExpExtractingEmiRecipe.kt index 4396ca309..4d7c964cc 100644 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/custom/HTExpExtractingEmiRecipe.kt +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/custom/HTExpExtractingEmiRecipe.kt @@ -7,7 +7,7 @@ import hiiragi283.ragium.client.integration.emi.addArrow import hiiragi283.ragium.client.integration.emi.category.RagiumEmiRecipeCategories import hiiragi283.ragium.client.integration.emi.recipe.HTEmiRecipe import hiiragi283.ragium.client.integration.emi.toFluidEmi -import hiiragi283.ragium.common.recipe.machine.HTExpExtractingRecipe +import hiiragi283.ragium.common.recipe.custom.HTExpExtractingRecipe import hiiragi283.ragium.setup.RagiumFluidContents import net.minecraft.resources.ResourceLocation import net.minecraft.world.item.Items diff --git a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTAlloyingEmiRecipe.kt b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTAlloyingEmiRecipe.kt index cc3ccfe00..017f81827 100644 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTAlloyingEmiRecipe.kt +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTAlloyingEmiRecipe.kt @@ -5,7 +5,7 @@ import dev.emi.emi.api.widget.WidgetHolder import hiiragi283.ragium.client.integration.emi.addArrow import hiiragi283.ragium.client.integration.emi.category.RagiumEmiRecipeCategories import hiiragi283.ragium.client.integration.emi.recipe.HTEmiHolderRecipe -import hiiragi283.ragium.impl.recipe.HTAlloyingRecipe +import hiiragi283.ragium.common.recipe.HTAlloyingRecipe import net.minecraft.world.item.crafting.RecipeHolder class HTAlloyingEmiRecipe(holder: RecipeHolder) : diff --git a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTBrewingEmiRecipe.kt b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTBrewingEmiRecipe.kt index edc062592..24cfbc0d9 100644 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTBrewingEmiRecipe.kt +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTBrewingEmiRecipe.kt @@ -6,7 +6,7 @@ import hiiragi283.ragium.api.item.alchemy.HTPotionHelper import hiiragi283.ragium.client.integration.emi.category.RagiumEmiRecipeCategories import hiiragi283.ragium.client.integration.emi.recipe.base.HTCombineEmiRecipe import hiiragi283.ragium.client.integration.emi.toEmi -import hiiragi283.ragium.impl.recipe.HTBrewingRecipe +import hiiragi283.ragium.common.recipe.HTBrewingRecipe import hiiragi283.ragium.setup.RagiumItems import net.minecraft.world.item.crafting.RecipeHolder diff --git a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTEnchantingEmiRecipe.kt b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTEnchantingEmiRecipe.kt index d00e5e4a3..a82045216 100644 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTEnchantingEmiRecipe.kt +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTEnchantingEmiRecipe.kt @@ -7,7 +7,7 @@ import hiiragi283.ragium.client.integration.emi.category.RagiumEmiRecipeCategori import hiiragi283.ragium.client.integration.emi.recipe.base.HTCombineEmiRecipe import hiiragi283.ragium.client.integration.emi.toEmi import hiiragi283.ragium.client.integration.emi.toFluidEmi -import hiiragi283.ragium.impl.recipe.HTEnchantingRecipe +import hiiragi283.ragium.common.recipe.HTEnchantingRecipe import hiiragi283.ragium.setup.RagiumFluidContents import net.minecraft.world.item.crafting.RecipeHolder diff --git a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTItemWithCatalystEmiRecipe.kt b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTItemWithCatalystEmiRecipe.kt index 17b03eed7..054e2d3fc 100644 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTItemWithCatalystEmiRecipe.kt +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTItemWithCatalystEmiRecipe.kt @@ -5,7 +5,7 @@ import hiiragi283.ragium.client.integration.emi.addArrow import hiiragi283.ragium.client.integration.emi.category.HTEmiRecipeCategory import hiiragi283.ragium.client.integration.emi.category.RagiumEmiRecipeCategories import hiiragi283.ragium.client.integration.emi.recipe.base.HTMultiOutputsEmiRecipe -import hiiragi283.ragium.impl.recipe.base.HTBasicItemWithCatalystRecipe +import hiiragi283.ragium.common.recipe.base.HTBasicItemWithCatalystRecipe import net.minecraft.resources.ResourceLocation import net.minecraft.world.item.crafting.RecipeHolder import kotlin.jvm.optionals.getOrNull diff --git a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTMeltingEmiRecipe.kt b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTMeltingEmiRecipe.kt index ca38e7249..4a5896a83 100644 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTMeltingEmiRecipe.kt +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTMeltingEmiRecipe.kt @@ -7,7 +7,7 @@ import hiiragi283.ragium.client.integration.emi.addArrow import hiiragi283.ragium.client.integration.emi.addTank import hiiragi283.ragium.client.integration.emi.category.RagiumEmiRecipeCategories import hiiragi283.ragium.client.integration.emi.recipe.HTEmiHolderRecipe -import hiiragi283.ragium.impl.recipe.base.HTBasicSingleFluidRecipe +import hiiragi283.ragium.common.recipe.base.HTBasicSingleFluidRecipe import net.minecraft.world.item.crafting.RecipeHolder class HTMeltingEmiRecipe(holder: RecipeHolder) : diff --git a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTMixingEmiRecipe.kt b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTMixingEmiRecipe.kt index fdeae2949..28bb377f8 100644 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTMixingEmiRecipe.kt +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTMixingEmiRecipe.kt @@ -4,9 +4,9 @@ import dev.emi.emi.api.widget.WidgetHolder import hiiragi283.ragium.client.integration.emi.addArrow import hiiragi283.ragium.client.integration.emi.category.RagiumEmiRecipeCategories import hiiragi283.ragium.client.integration.emi.recipe.base.HTMultiOutputsEmiRecipe -import hiiragi283.ragium.impl.recipe.HTMixingRecipe -import hiiragi283.ragium.impl.recipe.HTSimpleMixingRecipe -import hiiragi283.ragium.impl.recipe.base.HTBasicComplexRecipe +import hiiragi283.ragium.common.recipe.HTMixingRecipe +import hiiragi283.ragium.common.recipe.HTSimpleMixingRecipe +import hiiragi283.ragium.common.recipe.base.HTBasicComplexRecipe import net.minecraft.world.item.crafting.RecipeHolder class HTMixingEmiRecipe(holder: RecipeHolder) : diff --git a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTRefiningEmiRecipe.kt b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTRefiningEmiRecipe.kt index a5f724ffc..1c9cf6f35 100644 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTRefiningEmiRecipe.kt +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTRefiningEmiRecipe.kt @@ -5,7 +5,7 @@ import hiiragi283.ragium.client.integration.emi.addArrow import hiiragi283.ragium.client.integration.emi.addTank import hiiragi283.ragium.client.integration.emi.category.RagiumEmiRecipeCategories import hiiragi283.ragium.client.integration.emi.recipe.HTEmiHolderRecipe -import hiiragi283.ragium.impl.recipe.HTRefiningRecipe +import hiiragi283.ragium.common.recipe.HTRefiningRecipe import net.minecraft.world.item.crafting.RecipeHolder import kotlin.jvm.optionals.getOrNull diff --git a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTSimulatingEmiRecipe.kt b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTSimulatingEmiRecipe.kt index 1fcc905f5..a7449bf4b 100644 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTSimulatingEmiRecipe.kt +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTSimulatingEmiRecipe.kt @@ -8,9 +8,9 @@ import hiiragi283.ragium.client.integration.emi.recipe.HTEmiHolderRecipe import hiiragi283.ragium.client.integration.emi.toEmi import hiiragi283.ragium.client.integration.emi.toItemEmi import hiiragi283.ragium.common.block.HTImitationSpawnerBlock -import hiiragi283.ragium.impl.recipe.HTBlockSimulatingRecipe -import hiiragi283.ragium.impl.recipe.HTEntitySimulatingRecipe -import hiiragi283.ragium.impl.recipe.base.HTBasicSimulatingRecipe +import hiiragi283.ragium.common.recipe.HTBlockSimulatingRecipe +import hiiragi283.ragium.common.recipe.HTEntitySimulatingRecipe +import hiiragi283.ragium.common.recipe.base.HTBasicSimulatingRecipe import net.minecraft.core.Holder import net.minecraft.resources.ResourceLocation import net.minecraft.world.item.ItemStack diff --git a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTSingleExtraItemEmiRecipe.kt b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTSingleExtraItemEmiRecipe.kt index 1e860da4b..ed7bb937f 100644 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTSingleExtraItemEmiRecipe.kt +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTSingleExtraItemEmiRecipe.kt @@ -6,7 +6,7 @@ import hiiragi283.ragium.client.integration.emi.category.HTEmiRecipeCategory import hiiragi283.ragium.client.integration.emi.category.RagiumEmiRecipeCategories import hiiragi283.ragium.client.integration.emi.recipe.HTEmiHolderRecipe import hiiragi283.ragium.client.integration.emi.toEmi -import hiiragi283.ragium.impl.recipe.base.HTBasicSingleExtraItemRecipe +import hiiragi283.ragium.common.recipe.base.HTBasicSingleExtraItemRecipe import hiiragi283.ragium.setup.RagiumFluidContents import net.minecraft.world.item.crafting.RecipeHolder import kotlin.jvm.optionals.getOrNull 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 99bcd1cf6..e6acb0e4f 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 @@ -5,7 +5,7 @@ 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 -import hiiragi283.ragium.impl.recipe.HTBrewingRecipe +import hiiragi283.ragium.common.recipe.HTBrewingRecipe import hiiragi283.ragium.setup.RagiumBlocks import net.minecraft.core.BlockPos import net.minecraft.server.level.ServerLevel 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 1664309a3..eff1f3bad 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 @@ -2,7 +2,7 @@ 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.common.recipe.vanilla.HTVanillaCookingRecipe import hiiragi283.ragium.setup.RagiumBlocks import net.minecraft.core.BlockPos import net.minecraft.server.level.ServerLevel 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 dbe303f72..ae95045e0 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 @@ -6,7 +6,7 @@ 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.common.recipe.vanilla.HTVanillaCookingRecipe import hiiragi283.ragium.setup.RagiumBlocks import net.minecraft.core.BlockPos import net.minecraft.core.HolderLookup 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 1b2eef1bb..95bff0ff5 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 @@ -8,7 +8,7 @@ import hiiragi283.ragium.api.storage.holder.HTSlotInfo import hiiragi283.ragium.api.util.HTContentListener import hiiragi283.ragium.common.inventory.HTSlotHelper import hiiragi283.ragium.common.recipe.HTFinderRecipeCache -import hiiragi283.ragium.common.recipe.HTVanillaCookingRecipe +import hiiragi283.ragium.common.recipe.vanilla.HTVanillaCookingRecipe import hiiragi283.ragium.common.storage.holder.HTBasicItemSlotHolder import hiiragi283.ragium.common.storage.item.slot.HTBasicItemSlot import hiiragi283.ragium.util.HTStackSlotHelper diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/crafting/HTClearComponentRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/crafting/HTClearComponentRecipe.kt similarity index 98% rename from src/main/kotlin/hiiragi283/ragium/common/recipe/crafting/HTClearComponentRecipe.kt rename to src/main/kotlin/hiiragi283/ragium/common/crafting/HTClearComponentRecipe.kt index 40d4f536b..354521ed7 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/recipe/crafting/HTClearComponentRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/crafting/HTClearComponentRecipe.kt @@ -1,4 +1,4 @@ -package hiiragi283.ragium.common.recipe.crafting +package hiiragi283.ragium.common.crafting import hiiragi283.ragium.api.registry.builtInRegistryHolder import hiiragi283.ragium.api.serialization.codec.BiCodec diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/crafting/HTEternalUpgradeRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/crafting/HTEternalUpgradeRecipe.kt similarity index 97% rename from src/main/kotlin/hiiragi283/ragium/common/recipe/crafting/HTEternalUpgradeRecipe.kt rename to src/main/kotlin/hiiragi283/ragium/common/crafting/HTEternalUpgradeRecipe.kt index 871c2e058..d83276dcf 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/recipe/crafting/HTEternalUpgradeRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/crafting/HTEternalUpgradeRecipe.kt @@ -1,4 +1,4 @@ -package hiiragi283.ragium.common.recipe.crafting +package hiiragi283.ragium.common.crafting import hiiragi283.ragium.api.recipe.HTCustomRecipe import hiiragi283.ragium.api.recipe.input.ImmutableRecipeInput diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/crafting/HTGravitationalUpgradeRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/crafting/HTGravitationalUpgradeRecipe.kt similarity index 97% rename from src/main/kotlin/hiiragi283/ragium/common/recipe/crafting/HTGravitationalUpgradeRecipe.kt rename to src/main/kotlin/hiiragi283/ragium/common/crafting/HTGravitationalUpgradeRecipe.kt index a51367a69..503de41ee 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/recipe/crafting/HTGravitationalUpgradeRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/crafting/HTGravitationalUpgradeRecipe.kt @@ -1,4 +1,4 @@ -package hiiragi283.ragium.common.recipe.crafting +package hiiragi283.ragium.common.crafting import hiiragi283.ragium.api.recipe.HTCustomRecipe import hiiragi283.ragium.api.recipe.input.ImmutableRecipeInput diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/crafting/HTIceCreamSodaRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/crafting/HTIceCreamSodaRecipe.kt similarity index 97% rename from src/main/kotlin/hiiragi283/ragium/common/recipe/crafting/HTIceCreamSodaRecipe.kt rename to src/main/kotlin/hiiragi283/ragium/common/crafting/HTIceCreamSodaRecipe.kt index 031b8d9a8..b75301886 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/recipe/crafting/HTIceCreamSodaRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/crafting/HTIceCreamSodaRecipe.kt @@ -1,4 +1,4 @@ -package hiiragi283.ragium.common.recipe.crafting +package hiiragi283.ragium.common.crafting import hiiragi283.ragium.api.item.alchemy.HTPotionHelper import hiiragi283.ragium.api.recipe.HTCustomRecipe diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/crafting/HTPotionDropRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/crafting/HTPotionDropRecipe.kt similarity index 97% rename from src/main/kotlin/hiiragi283/ragium/common/recipe/crafting/HTPotionDropRecipe.kt rename to src/main/kotlin/hiiragi283/ragium/common/crafting/HTPotionDropRecipe.kt index d5d04fae3..e7264699f 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/recipe/crafting/HTPotionDropRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/crafting/HTPotionDropRecipe.kt @@ -1,4 +1,4 @@ -package hiiragi283.ragium.common.recipe.crafting +package hiiragi283.ragium.common.crafting import hiiragi283.ragium.api.item.alchemy.HTPotionHelper import hiiragi283.ragium.api.recipe.HTCustomRecipe diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/crafting/HTUpgradeChargeRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/crafting/HTUpgradeChargeRecipe.kt similarity index 97% rename from src/main/kotlin/hiiragi283/ragium/common/recipe/crafting/HTUpgradeChargeRecipe.kt rename to src/main/kotlin/hiiragi283/ragium/common/crafting/HTUpgradeChargeRecipe.kt index 50d66258d..b5b5b22fd 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/recipe/crafting/HTUpgradeChargeRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/crafting/HTUpgradeChargeRecipe.kt @@ -1,4 +1,4 @@ -package hiiragi283.ragium.common.recipe.crafting +package hiiragi283.ragium.common.crafting import hiiragi283.ragium.api.math.plus import hiiragi283.ragium.api.recipe.HTCustomRecipe diff --git a/src/main/kotlin/hiiragi283/ragium/impl/data/recipe/HTCombineRecipeBuilder.kt b/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTCombineRecipeBuilder.kt similarity index 94% rename from src/main/kotlin/hiiragi283/ragium/impl/data/recipe/HTCombineRecipeBuilder.kt rename to src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTCombineRecipeBuilder.kt index afa264561..bf922782e 100644 --- a/src/main/kotlin/hiiragi283/ragium/impl/data/recipe/HTCombineRecipeBuilder.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTCombineRecipeBuilder.kt @@ -1,4 +1,4 @@ -package hiiragi283.ragium.impl.data.recipe +package hiiragi283.ragium.common.data.recipe import hiiragi283.ragium.api.RagiumConst import hiiragi283.ragium.api.data.recipe.HTRecipeBuilder @@ -7,8 +7,8 @@ import hiiragi283.ragium.api.item.alchemy.HTPotionContents import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient import hiiragi283.ragium.api.recipe.multi.HTCombineRecipe import hiiragi283.ragium.api.registry.idOrThrow -import hiiragi283.ragium.impl.recipe.HTBrewingRecipe -import hiiragi283.ragium.impl.recipe.HTEnchantingRecipe +import hiiragi283.ragium.common.recipe.HTBrewingRecipe +import hiiragi283.ragium.common.recipe.HTEnchantingRecipe import net.minecraft.core.Holder import net.minecraft.resources.ResourceLocation import net.minecraft.world.item.Items diff --git a/src/main/kotlin/hiiragi283/ragium/impl/data/recipe/HTComplexRecipeBuilder.kt b/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTComplexRecipeBuilder.kt similarity index 89% rename from src/main/kotlin/hiiragi283/ragium/impl/data/recipe/HTComplexRecipeBuilder.kt rename to src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTComplexRecipeBuilder.kt index 8a7f8fa13..26db1f6ca 100644 --- a/src/main/kotlin/hiiragi283/ragium/impl/data/recipe/HTComplexRecipeBuilder.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTComplexRecipeBuilder.kt @@ -1,4 +1,4 @@ -package hiiragi283.ragium.impl.data.recipe +package hiiragi283.ragium.common.data.recipe import hiiragi283.ragium.api.RagiumConst import hiiragi283.ragium.api.recipe.ingredient.HTFluidIngredient @@ -6,10 +6,10 @@ import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient import hiiragi283.ragium.api.recipe.multi.HTComplexRecipe import hiiragi283.ragium.api.recipe.result.HTComplexResult import hiiragi283.ragium.api.util.wrapOptional -import hiiragi283.ragium.impl.data.recipe.base.HTComplexResultRecipeBuilder -import hiiragi283.ragium.impl.recipe.HTMixingRecipe -import hiiragi283.ragium.impl.recipe.HTRefiningRecipe -import hiiragi283.ragium.impl.recipe.HTSimpleMixingRecipe +import hiiragi283.ragium.common.data.recipe.base.HTComplexResultRecipeBuilder +import hiiragi283.ragium.common.recipe.HTMixingRecipe +import hiiragi283.ragium.common.recipe.HTRefiningRecipe +import hiiragi283.ragium.common.recipe.HTSimpleMixingRecipe class HTComplexRecipeBuilder(prefix: String, private val factory: Factory<*>) : HTComplexResultRecipeBuilder(prefix) { diff --git a/src/main/kotlin/hiiragi283/ragium/impl/data/recipe/HTCookingRecipeBuilder.kt b/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTCookingRecipeBuilder.kt similarity index 98% rename from src/main/kotlin/hiiragi283/ragium/impl/data/recipe/HTCookingRecipeBuilder.kt rename to src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTCookingRecipeBuilder.kt index 21257fcd1..415391b84 100644 --- a/src/main/kotlin/hiiragi283/ragium/impl/data/recipe/HTCookingRecipeBuilder.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTCookingRecipeBuilder.kt @@ -1,4 +1,4 @@ -package hiiragi283.ragium.impl.data.recipe +package hiiragi283.ragium.common.data.recipe import hiiragi283.ragium.api.data.recipe.HTStackRecipeBuilder import hiiragi283.ragium.api.stack.ImmutableItemStack diff --git a/src/main/kotlin/hiiragi283/ragium/impl/data/recipe/HTItemWithCatalystRecipeBuilder.kt b/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTItemWithCatalystRecipeBuilder.kt similarity index 90% rename from src/main/kotlin/hiiragi283/ragium/impl/data/recipe/HTItemWithCatalystRecipeBuilder.kt rename to src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTItemWithCatalystRecipeBuilder.kt index 3e3d5c6fc..e1167c32c 100644 --- a/src/main/kotlin/hiiragi283/ragium/impl/data/recipe/HTItemWithCatalystRecipeBuilder.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTItemWithCatalystRecipeBuilder.kt @@ -1,4 +1,4 @@ -package hiiragi283.ragium.impl.data.recipe +package hiiragi283.ragium.common.data.recipe import hiiragi283.ragium.api.RagiumConst import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient @@ -7,9 +7,9 @@ import hiiragi283.ragium.api.recipe.result.HTFluidResult import hiiragi283.ragium.api.recipe.result.HTItemResult import hiiragi283.ragium.api.util.Ior import hiiragi283.ragium.api.util.wrapOptional -import hiiragi283.ragium.impl.data.recipe.base.HTComplexResultRecipeBuilder -import hiiragi283.ragium.impl.recipe.HTCompressingRecipe -import hiiragi283.ragium.impl.recipe.HTExtractingRecipe +import hiiragi283.ragium.common.data.recipe.base.HTComplexResultRecipeBuilder +import hiiragi283.ragium.common.recipe.HTCompressingRecipe +import hiiragi283.ragium.common.recipe.HTExtractingRecipe import java.util.Optional class HTItemWithCatalystRecipeBuilder( diff --git a/src/main/kotlin/hiiragi283/ragium/impl/data/recipe/HTPlantingRecipeBuilder.kt b/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTPlantingRecipeBuilder.kt similarity index 97% rename from src/main/kotlin/hiiragi283/ragium/impl/data/recipe/HTPlantingRecipeBuilder.kt rename to src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTPlantingRecipeBuilder.kt index 648611201..6974a5b21 100644 --- a/src/main/kotlin/hiiragi283/ragium/impl/data/recipe/HTPlantingRecipeBuilder.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTPlantingRecipeBuilder.kt @@ -1,4 +1,4 @@ -package hiiragi283.ragium.impl.data.recipe +package hiiragi283.ragium.common.data.recipe import hiiragi283.ragium.api.RagiumConst import hiiragi283.ragium.api.data.recipe.HTRecipeBuilder diff --git a/src/main/kotlin/hiiragi283/ragium/impl/data/recipe/HTRockGeneratingRecipeBuilder.kt b/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTRockGeneratingRecipeBuilder.kt similarity index 97% rename from src/main/kotlin/hiiragi283/ragium/impl/data/recipe/HTRockGeneratingRecipeBuilder.kt rename to src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTRockGeneratingRecipeBuilder.kt index 55a5f2d15..a522c9947 100644 --- a/src/main/kotlin/hiiragi283/ragium/impl/data/recipe/HTRockGeneratingRecipeBuilder.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTRockGeneratingRecipeBuilder.kt @@ -1,4 +1,4 @@ -package hiiragi283.ragium.impl.data.recipe +package hiiragi283.ragium.common.data.recipe import com.mojang.datafixers.util.Either import hiiragi283.ragium.api.RagiumConst diff --git a/src/main/kotlin/hiiragi283/ragium/impl/data/recipe/HTShapedRecipeBuilder.kt b/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTShapedRecipeBuilder.kt similarity index 87% rename from src/main/kotlin/hiiragi283/ragium/impl/data/recipe/HTShapedRecipeBuilder.kt rename to src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTShapedRecipeBuilder.kt index d046dacac..9f2c180d5 100644 --- a/src/main/kotlin/hiiragi283/ragium/impl/data/recipe/HTShapedRecipeBuilder.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTShapedRecipeBuilder.kt @@ -1,4 +1,4 @@ -package hiiragi283.ragium.impl.data.recipe +package hiiragi283.ragium.common.data.recipe import hiiragi283.ragium.api.data.recipe.HTStackRecipeBuilder import hiiragi283.ragium.api.material.HTMaterialLike @@ -20,25 +20,6 @@ class HTShapedRecipeBuilder(stack: ImmutableItemStack) : HTStackRecipeBuilder Unit, - ) { - HTShapedRecipeBuilder(stack) - .pattern("ABA", "BCB", "ABA") - .apply(builderAction) - .setGroup() - .saveSuffixed(recipeOutput, suffix) - HTShapedRecipeBuilder(stack) - .pattern("BAB", "ACA", "BAB") - .apply(builderAction) - .setGroup() - .saveSuffixed(recipeOutput, "_alt$suffix") - } - @JvmStatic fun cross8Mirrored( recipeOutput: RecipeOutput, diff --git a/src/main/kotlin/hiiragi283/ragium/impl/data/recipe/HTShapelessInputsRecipeBuilder.kt b/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTShapelessInputsRecipeBuilder.kt similarity index 93% rename from src/main/kotlin/hiiragi283/ragium/impl/data/recipe/HTShapelessInputsRecipeBuilder.kt rename to src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTShapelessInputsRecipeBuilder.kt index d19ca6320..b81def5c8 100644 --- a/src/main/kotlin/hiiragi283/ragium/impl/data/recipe/HTShapelessInputsRecipeBuilder.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTShapelessInputsRecipeBuilder.kt @@ -1,11 +1,11 @@ -package hiiragi283.ragium.impl.data.recipe +package hiiragi283.ragium.common.data.recipe import hiiragi283.ragium.api.RagiumConst import hiiragi283.ragium.api.data.recipe.HTRecipeBuilder import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient import hiiragi283.ragium.api.recipe.multi.HTShapelessInputsRecipe import hiiragi283.ragium.api.recipe.result.HTItemResult -import hiiragi283.ragium.impl.recipe.HTAlloyingRecipe +import hiiragi283.ragium.common.recipe.HTAlloyingRecipe import net.minecraft.resources.ResourceLocation class HTShapelessInputsRecipeBuilder( diff --git a/src/main/kotlin/hiiragi283/ragium/impl/data/recipe/HTShapelessRecipeBuilder.kt b/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTShapelessRecipeBuilder.kt similarity index 98% rename from src/main/kotlin/hiiragi283/ragium/impl/data/recipe/HTShapelessRecipeBuilder.kt rename to src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTShapelessRecipeBuilder.kt index e47a7e0cb..2d57bc664 100644 --- a/src/main/kotlin/hiiragi283/ragium/impl/data/recipe/HTShapelessRecipeBuilder.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTShapelessRecipeBuilder.kt @@ -1,4 +1,4 @@ -package hiiragi283.ragium.impl.data.recipe +package hiiragi283.ragium.common.data.recipe import hiiragi283.ragium.api.data.recipe.HTIngredientRecipeBuilder import hiiragi283.ragium.api.data.recipe.HTStackRecipeBuilder diff --git a/src/main/kotlin/hiiragi283/ragium/impl/data/recipe/HTSimulatingRecipeBuilder.kt b/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTSimulatingRecipeBuilder.kt similarity index 88% rename from src/main/kotlin/hiiragi283/ragium/impl/data/recipe/HTSimulatingRecipeBuilder.kt rename to src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTSimulatingRecipeBuilder.kt index 902369ee5..f13edf835 100644 --- a/src/main/kotlin/hiiragi283/ragium/impl/data/recipe/HTSimulatingRecipeBuilder.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTSimulatingRecipeBuilder.kt @@ -1,4 +1,4 @@ -package hiiragi283.ragium.impl.data.recipe +package hiiragi283.ragium.common.data.recipe import hiiragi283.ragium.api.RagiumConst import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient @@ -7,9 +7,9 @@ import hiiragi283.ragium.api.recipe.result.HTFluidResult import hiiragi283.ragium.api.recipe.result.HTItemResult import hiiragi283.ragium.api.util.Ior import hiiragi283.ragium.api.util.wrapOptional -import hiiragi283.ragium.impl.data.recipe.base.HTComplexResultRecipeBuilder -import hiiragi283.ragium.impl.recipe.HTBlockSimulatingRecipe -import hiiragi283.ragium.impl.recipe.HTEntitySimulatingRecipe +import hiiragi283.ragium.common.data.recipe.base.HTComplexResultRecipeBuilder +import hiiragi283.ragium.common.recipe.HTBlockSimulatingRecipe +import hiiragi283.ragium.common.recipe.HTEntitySimulatingRecipe import net.minecraft.core.HolderSet import net.minecraft.world.entity.EntityType import net.minecraft.world.level.block.Block diff --git a/src/main/kotlin/hiiragi283/ragium/impl/data/recipe/HTSingleExtraItemRecipeBuilder.kt b/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTSingleExtraItemRecipeBuilder.kt similarity index 91% rename from src/main/kotlin/hiiragi283/ragium/impl/data/recipe/HTSingleExtraItemRecipeBuilder.kt rename to src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTSingleExtraItemRecipeBuilder.kt index 252e43dd1..112cfcefc 100644 --- a/src/main/kotlin/hiiragi283/ragium/impl/data/recipe/HTSingleExtraItemRecipeBuilder.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTSingleExtraItemRecipeBuilder.kt @@ -1,4 +1,4 @@ -package hiiragi283.ragium.impl.data.recipe +package hiiragi283.ragium.common.data.recipe import hiiragi283.ragium.api.RagiumConst import hiiragi283.ragium.api.data.recipe.HTRecipeBuilder @@ -6,8 +6,8 @@ import hiiragi283.ragium.api.recipe.extra.HTSingleExtraItemRecipe import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient import hiiragi283.ragium.api.recipe.result.HTItemResult import hiiragi283.ragium.api.util.wrapOptional -import hiiragi283.ragium.impl.recipe.HTCrushingRecipe -import hiiragi283.ragium.impl.recipe.HTCuttingRecipe +import hiiragi283.ragium.common.recipe.HTCrushingRecipe +import hiiragi283.ragium.common.recipe.HTCuttingRecipe import net.minecraft.resources.ResourceLocation import java.util.Optional diff --git a/src/main/kotlin/hiiragi283/ragium/impl/data/recipe/HTSingleRecipeBuilder.kt b/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTSingleRecipeBuilder.kt similarity index 92% rename from src/main/kotlin/hiiragi283/ragium/impl/data/recipe/HTSingleRecipeBuilder.kt rename to src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTSingleRecipeBuilder.kt index 0dfdca44f..1014d86db 100644 --- a/src/main/kotlin/hiiragi283/ragium/impl/data/recipe/HTSingleRecipeBuilder.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTSingleRecipeBuilder.kt @@ -1,4 +1,4 @@ -package hiiragi283.ragium.impl.data.recipe +package hiiragi283.ragium.common.data.recipe import hiiragi283.ragium.api.RagiumConst import hiiragi283.ragium.api.data.recipe.HTRecipeBuilder @@ -6,7 +6,7 @@ import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient import hiiragi283.ragium.api.recipe.result.HTFluidResult import hiiragi283.ragium.api.recipe.result.HTRecipeResult import hiiragi283.ragium.api.recipe.single.HTSingleItemRecipe -import hiiragi283.ragium.impl.recipe.HTMeltingRecipe +import hiiragi283.ragium.common.recipe.HTMeltingRecipe import net.minecraft.resources.ResourceLocation class HTSingleRecipeBuilder>( diff --git a/src/main/kotlin/hiiragi283/ragium/impl/data/recipe/HTSmithingRecipeBuilder.kt b/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTSmithingRecipeBuilder.kt similarity index 96% rename from src/main/kotlin/hiiragi283/ragium/impl/data/recipe/HTSmithingRecipeBuilder.kt rename to src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTSmithingRecipeBuilder.kt index f0003e41a..e625655a8 100644 --- a/src/main/kotlin/hiiragi283/ragium/impl/data/recipe/HTSmithingRecipeBuilder.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTSmithingRecipeBuilder.kt @@ -1,4 +1,4 @@ -package hiiragi283.ragium.impl.data.recipe +package hiiragi283.ragium.common.data.recipe import hiiragi283.ragium.api.data.recipe.HTIngredientRecipeBuilder import hiiragi283.ragium.api.data.recipe.HTStackRecipeBuilder diff --git a/src/main/kotlin/hiiragi283/ragium/impl/data/recipe/HTStonecuttingRecipeBuilder.kt b/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTStonecuttingRecipeBuilder.kt similarity index 95% rename from src/main/kotlin/hiiragi283/ragium/impl/data/recipe/HTStonecuttingRecipeBuilder.kt rename to src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTStonecuttingRecipeBuilder.kt index 67bbafd1b..a290e3601 100644 --- a/src/main/kotlin/hiiragi283/ragium/impl/data/recipe/HTStonecuttingRecipeBuilder.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTStonecuttingRecipeBuilder.kt @@ -1,4 +1,4 @@ -package hiiragi283.ragium.impl.data.recipe +package hiiragi283.ragium.common.data.recipe import hiiragi283.ragium.api.data.recipe.HTStackRecipeBuilder import hiiragi283.ragium.api.stack.ImmutableItemStack diff --git a/src/main/kotlin/hiiragi283/ragium/impl/data/recipe/base/HTComplexResultRecipeBuilder.kt b/src/main/kotlin/hiiragi283/ragium/common/data/recipe/base/HTComplexResultRecipeBuilder.kt similarity index 95% rename from src/main/kotlin/hiiragi283/ragium/impl/data/recipe/base/HTComplexResultRecipeBuilder.kt rename to src/main/kotlin/hiiragi283/ragium/common/data/recipe/base/HTComplexResultRecipeBuilder.kt index 84641db01..5db7f1c64 100644 --- a/src/main/kotlin/hiiragi283/ragium/impl/data/recipe/base/HTComplexResultRecipeBuilder.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/data/recipe/base/HTComplexResultRecipeBuilder.kt @@ -1,4 +1,4 @@ -package hiiragi283.ragium.impl.data.recipe.base +package hiiragi283.ragium.common.data.recipe.base import hiiragi283.ragium.api.data.recipe.HTRecipeBuilder import hiiragi283.ragium.api.recipe.result.HTComplexResult diff --git a/src/main/kotlin/hiiragi283/ragium/impl/data/recipe/base/HTGeneratorRecipeBuilder.kt b/src/main/kotlin/hiiragi283/ragium/common/data/recipe/base/HTGeneratorRecipeBuilder.kt similarity index 82% rename from src/main/kotlin/hiiragi283/ragium/impl/data/recipe/base/HTGeneratorRecipeBuilder.kt rename to src/main/kotlin/hiiragi283/ragium/common/data/recipe/base/HTGeneratorRecipeBuilder.kt index c375b8904..97c1c1d43 100644 --- a/src/main/kotlin/hiiragi283/ragium/impl/data/recipe/base/HTGeneratorRecipeBuilder.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/data/recipe/base/HTGeneratorRecipeBuilder.kt @@ -1,4 +1,4 @@ -package hiiragi283.ragium.impl.data.recipe.base +package hiiragi283.ragium.common.data.recipe.base import hiiragi283.ragium.api.data.recipe.HTRecipeBuilder diff --git a/src/main/kotlin/hiiragi283/ragium/common/event/RagiumRuntimeRecipeHandler.kt b/src/main/kotlin/hiiragi283/ragium/common/event/RagiumRuntimeRecipeHandler.kt index 786d2b852..c78763825 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/event/RagiumRuntimeRecipeHandler.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/event/RagiumRuntimeRecipeHandler.kt @@ -12,11 +12,11 @@ import hiiragi283.ragium.api.material.prefix.HTPrefixLike import hiiragi283.ragium.api.recipe.HTRegisterRuntimeRecipeEvent import hiiragi283.ragium.api.tag.RagiumModTags import hiiragi283.ragium.common.HTMoldType +import hiiragi283.ragium.common.data.recipe.HTComplexRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTItemWithCatalystRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTShapelessInputsRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTSingleExtraItemRecipeBuilder import hiiragi283.ragium.common.material.CommonMaterialPrefixes -import hiiragi283.ragium.impl.data.recipe.HTComplexRecipeBuilder -import hiiragi283.ragium.impl.data.recipe.HTItemWithCatalystRecipeBuilder -import hiiragi283.ragium.impl.data.recipe.HTShapelessInputsRecipeBuilder -import hiiragi283.ragium.impl.data.recipe.HTSingleExtraItemRecipeBuilder import hiiragi283.ragium.setup.RagiumFluidContents import net.minecraft.tags.TagKey import net.minecraft.world.item.Item diff --git a/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTAlloyingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/HTAlloyingRecipe.kt similarity index 85% rename from src/main/kotlin/hiiragi283/ragium/impl/recipe/HTAlloyingRecipe.kt rename to src/main/kotlin/hiiragi283/ragium/common/recipe/HTAlloyingRecipe.kt index ec7786556..629b2cb2b 100644 --- a/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTAlloyingRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/HTAlloyingRecipe.kt @@ -1,9 +1,9 @@ -package hiiragi283.ragium.impl.recipe +package hiiragi283.ragium.common.recipe import hiiragi283.ragium.api.recipe.RagiumRecipeTypes import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient import hiiragi283.ragium.api.recipe.result.HTItemResult -import hiiragi283.ragium.impl.recipe.base.HTBasicShapelessInputsRecipe +import hiiragi283.ragium.common.recipe.base.HTBasicShapelessInputsRecipe import hiiragi283.ragium.setup.RagiumRecipeSerializers import net.minecraft.world.item.crafting.RecipeSerializer import net.minecraft.world.item.crafting.RecipeType diff --git a/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTBlockSimulatingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/HTBlockSimulatingRecipe.kt similarity index 89% rename from src/main/kotlin/hiiragi283/ragium/impl/recipe/HTBlockSimulatingRecipe.kt rename to src/main/kotlin/hiiragi283/ragium/common/recipe/HTBlockSimulatingRecipe.kt index 132d73811..113cb2ca1 100644 --- a/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTBlockSimulatingRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/HTBlockSimulatingRecipe.kt @@ -1,9 +1,9 @@ -package hiiragi283.ragium.impl.recipe +package hiiragi283.ragium.common.recipe import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient import hiiragi283.ragium.api.recipe.input.HTRecipeInput import hiiragi283.ragium.api.recipe.result.HTComplexResult -import hiiragi283.ragium.impl.recipe.base.HTBasicSimulatingRecipe +import hiiragi283.ragium.common.recipe.base.HTBasicSimulatingRecipe import hiiragi283.ragium.setup.RagiumRecipeSerializers import net.minecraft.core.HolderSet import net.minecraft.world.item.crafting.RecipeSerializer diff --git a/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTBrewingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/HTBrewingRecipe.kt similarity index 94% rename from src/main/kotlin/hiiragi283/ragium/impl/recipe/HTBrewingRecipe.kt rename to src/main/kotlin/hiiragi283/ragium/common/recipe/HTBrewingRecipe.kt index 94b739030..6be9b239b 100644 --- a/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTBrewingRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/HTBrewingRecipe.kt @@ -1,4 +1,4 @@ -package hiiragi283.ragium.impl.recipe +package hiiragi283.ragium.common.recipe import hiiragi283.ragium.api.RagiumPlatform import hiiragi283.ragium.api.item.alchemy.HTPotionContents @@ -10,7 +10,7 @@ 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 -import hiiragi283.ragium.impl.recipe.base.HTBasicCombineRecipe +import hiiragi283.ragium.common.recipe.base.HTBasicCombineRecipe import hiiragi283.ragium.setup.RagiumItems import hiiragi283.ragium.setup.RagiumRecipeSerializers import net.minecraft.core.HolderLookup diff --git a/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTCompressingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/HTCompressingRecipe.kt similarity index 90% rename from src/main/kotlin/hiiragi283/ragium/impl/recipe/HTCompressingRecipe.kt rename to src/main/kotlin/hiiragi283/ragium/common/recipe/HTCompressingRecipe.kt index 4bdc56344..2575e2aa3 100644 --- a/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTCompressingRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/HTCompressingRecipe.kt @@ -1,10 +1,10 @@ -package hiiragi283.ragium.impl.recipe +package hiiragi283.ragium.common.recipe import hiiragi283.ragium.api.recipe.RagiumRecipeTypes import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient import hiiragi283.ragium.api.recipe.input.HTRecipeInput import hiiragi283.ragium.api.recipe.result.HTComplexResult -import hiiragi283.ragium.impl.recipe.base.HTBasicItemWithCatalystRecipe +import hiiragi283.ragium.common.recipe.base.HTBasicItemWithCatalystRecipe import hiiragi283.ragium.setup.RagiumRecipeSerializers import net.minecraft.world.item.crafting.RecipeSerializer import net.minecraft.world.item.crafting.RecipeType diff --git a/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTCrushingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/HTCrushingRecipe.kt similarity index 86% rename from src/main/kotlin/hiiragi283/ragium/impl/recipe/HTCrushingRecipe.kt rename to src/main/kotlin/hiiragi283/ragium/common/recipe/HTCrushingRecipe.kt index 37d122c8f..8793a150a 100644 --- a/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTCrushingRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/HTCrushingRecipe.kt @@ -1,9 +1,9 @@ -package hiiragi283.ragium.impl.recipe +package hiiragi283.ragium.common.recipe import hiiragi283.ragium.api.recipe.RagiumRecipeTypes import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient import hiiragi283.ragium.api.recipe.result.HTItemResult -import hiiragi283.ragium.impl.recipe.base.HTBasicSingleExtraItemRecipe +import hiiragi283.ragium.common.recipe.base.HTBasicSingleExtraItemRecipe import hiiragi283.ragium.setup.RagiumRecipeSerializers import net.minecraft.world.item.crafting.RecipeSerializer import net.minecraft.world.item.crafting.RecipeType diff --git a/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTCuttingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/HTCuttingRecipe.kt similarity index 86% rename from src/main/kotlin/hiiragi283/ragium/impl/recipe/HTCuttingRecipe.kt rename to src/main/kotlin/hiiragi283/ragium/common/recipe/HTCuttingRecipe.kt index cf7a66c2e..83fbdee58 100644 --- a/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTCuttingRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/HTCuttingRecipe.kt @@ -1,9 +1,9 @@ -package hiiragi283.ragium.impl.recipe +package hiiragi283.ragium.common.recipe import hiiragi283.ragium.api.recipe.RagiumRecipeTypes import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient import hiiragi283.ragium.api.recipe.result.HTItemResult -import hiiragi283.ragium.impl.recipe.base.HTBasicSingleExtraItemRecipe +import hiiragi283.ragium.common.recipe.base.HTBasicSingleExtraItemRecipe import hiiragi283.ragium.setup.RagiumRecipeSerializers import net.minecraft.world.item.crafting.RecipeSerializer import net.minecraft.world.item.crafting.RecipeType diff --git a/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTEnchantingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/HTEnchantingRecipe.kt similarity index 94% rename from src/main/kotlin/hiiragi283/ragium/impl/recipe/HTEnchantingRecipe.kt rename to src/main/kotlin/hiiragi283/ragium/common/recipe/HTEnchantingRecipe.kt index f3e3cb3d3..ec77101ae 100644 --- a/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTEnchantingRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/HTEnchantingRecipe.kt @@ -1,4 +1,4 @@ -package hiiragi283.ragium.impl.recipe +package hiiragi283.ragium.common.recipe import hiiragi283.ragium.api.item.createEnchantedBook import hiiragi283.ragium.api.recipe.RagiumRecipeTypes @@ -7,7 +7,7 @@ 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 -import hiiragi283.ragium.impl.recipe.base.HTBasicCombineRecipe +import hiiragi283.ragium.common.recipe.base.HTBasicCombineRecipe import hiiragi283.ragium.setup.RagiumFluidContents import hiiragi283.ragium.setup.RagiumRecipeSerializers import hiiragi283.ragium.util.HTExperienceHelper diff --git a/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTEntitySimulatingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/HTEntitySimulatingRecipe.kt similarity index 91% rename from src/main/kotlin/hiiragi283/ragium/impl/recipe/HTEntitySimulatingRecipe.kt rename to src/main/kotlin/hiiragi283/ragium/common/recipe/HTEntitySimulatingRecipe.kt index cf74db61e..050468efb 100644 --- a/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTEntitySimulatingRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/HTEntitySimulatingRecipe.kt @@ -1,10 +1,10 @@ -package hiiragi283.ragium.impl.recipe +package hiiragi283.ragium.common.recipe import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient import hiiragi283.ragium.api.recipe.input.HTRecipeInput import hiiragi283.ragium.api.recipe.result.HTComplexResult import hiiragi283.ragium.common.block.entity.HTImitationSpawnerBlockEntity -import hiiragi283.ragium.impl.recipe.base.HTBasicSimulatingRecipe +import hiiragi283.ragium.common.recipe.base.HTBasicSimulatingRecipe import hiiragi283.ragium.setup.RagiumRecipeSerializers import net.minecraft.core.HolderSet import net.minecraft.world.entity.EntityType diff --git a/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTExtractingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/HTExtractingRecipe.kt similarity index 90% rename from src/main/kotlin/hiiragi283/ragium/impl/recipe/HTExtractingRecipe.kt rename to src/main/kotlin/hiiragi283/ragium/common/recipe/HTExtractingRecipe.kt index 490e193a7..732a2ce36 100644 --- a/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTExtractingRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/HTExtractingRecipe.kt @@ -1,10 +1,10 @@ -package hiiragi283.ragium.impl.recipe +package hiiragi283.ragium.common.recipe import hiiragi283.ragium.api.recipe.RagiumRecipeTypes import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient import hiiragi283.ragium.api.recipe.input.HTRecipeInput import hiiragi283.ragium.api.recipe.result.HTComplexResult -import hiiragi283.ragium.impl.recipe.base.HTBasicItemWithCatalystRecipe +import hiiragi283.ragium.common.recipe.base.HTBasicItemWithCatalystRecipe import hiiragi283.ragium.setup.RagiumRecipeSerializers import net.minecraft.world.item.crafting.RecipeSerializer import net.minecraft.world.item.crafting.RecipeType diff --git a/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTMeltingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/HTMeltingRecipe.kt similarity index 85% rename from src/main/kotlin/hiiragi283/ragium/impl/recipe/HTMeltingRecipe.kt rename to src/main/kotlin/hiiragi283/ragium/common/recipe/HTMeltingRecipe.kt index 37735f930..c56783a3f 100644 --- a/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTMeltingRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/HTMeltingRecipe.kt @@ -1,9 +1,9 @@ -package hiiragi283.ragium.impl.recipe +package hiiragi283.ragium.common.recipe import hiiragi283.ragium.api.recipe.RagiumRecipeTypes import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient import hiiragi283.ragium.api.recipe.result.HTFluidResult -import hiiragi283.ragium.impl.recipe.base.HTBasicSingleFluidRecipe +import hiiragi283.ragium.common.recipe.base.HTBasicSingleFluidRecipe import hiiragi283.ragium.setup.RagiumRecipeSerializers import net.minecraft.world.item.crafting.RecipeSerializer import net.minecraft.world.item.crafting.RecipeType diff --git a/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTMixingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/HTMixingRecipe.kt similarity index 92% rename from src/main/kotlin/hiiragi283/ragium/impl/recipe/HTMixingRecipe.kt rename to src/main/kotlin/hiiragi283/ragium/common/recipe/HTMixingRecipe.kt index f41862973..540adb64b 100644 --- a/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTMixingRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/HTMixingRecipe.kt @@ -1,11 +1,11 @@ -package hiiragi283.ragium.impl.recipe +package hiiragi283.ragium.common.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.HTRecipeInput import hiiragi283.ragium.api.recipe.result.HTComplexResult -import hiiragi283.ragium.impl.recipe.base.HTBasicComplexRecipe +import hiiragi283.ragium.common.recipe.base.HTBasicComplexRecipe import hiiragi283.ragium.setup.RagiumRecipeSerializers import net.minecraft.world.item.crafting.RecipeSerializer import net.minecraft.world.item.crafting.RecipeType diff --git a/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTRefiningRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/HTRefiningRecipe.kt similarity index 92% rename from src/main/kotlin/hiiragi283/ragium/impl/recipe/HTRefiningRecipe.kt rename to src/main/kotlin/hiiragi283/ragium/common/recipe/HTRefiningRecipe.kt index 1a30cc9a5..3d9175c2e 100644 --- a/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTRefiningRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/HTRefiningRecipe.kt @@ -1,11 +1,11 @@ -package hiiragi283.ragium.impl.recipe +package hiiragi283.ragium.common.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.HTRecipeInput import hiiragi283.ragium.api.recipe.result.HTComplexResult -import hiiragi283.ragium.impl.recipe.base.HTBasicComplexRecipe +import hiiragi283.ragium.common.recipe.base.HTBasicComplexRecipe import hiiragi283.ragium.setup.RagiumRecipeSerializers import net.minecraft.world.item.crafting.RecipeSerializer import net.minecraft.world.item.crafting.RecipeType diff --git a/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTSimpleMixingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/HTSimpleMixingRecipe.kt similarity index 92% rename from src/main/kotlin/hiiragi283/ragium/impl/recipe/HTSimpleMixingRecipe.kt rename to src/main/kotlin/hiiragi283/ragium/common/recipe/HTSimpleMixingRecipe.kt index 9e8dd94aa..13dc5f913 100644 --- a/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTSimpleMixingRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/HTSimpleMixingRecipe.kt @@ -1,11 +1,11 @@ -package hiiragi283.ragium.impl.recipe +package hiiragi283.ragium.common.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.HTRecipeInput import hiiragi283.ragium.api.recipe.result.HTComplexResult -import hiiragi283.ragium.impl.recipe.base.HTBasicComplexRecipe +import hiiragi283.ragium.common.recipe.base.HTBasicComplexRecipe import hiiragi283.ragium.setup.RagiumRecipeSerializers import net.minecraft.world.item.crafting.RecipeSerializer import net.minecraft.world.item.crafting.RecipeType diff --git a/src/main/kotlin/hiiragi283/ragium/impl/recipe/base/HTBasicCombineRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/base/HTBasicCombineRecipe.kt similarity index 95% rename from src/main/kotlin/hiiragi283/ragium/impl/recipe/base/HTBasicCombineRecipe.kt rename to src/main/kotlin/hiiragi283/ragium/common/recipe/base/HTBasicCombineRecipe.kt index 4674b2f67..318fbc8aa 100644 --- a/src/main/kotlin/hiiragi283/ragium/impl/recipe/base/HTBasicCombineRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/base/HTBasicCombineRecipe.kt @@ -1,4 +1,4 @@ -package hiiragi283.ragium.impl.recipe.base +package hiiragi283.ragium.common.recipe.base import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient import hiiragi283.ragium.api.recipe.multi.HTCombineRecipe diff --git a/src/main/kotlin/hiiragi283/ragium/impl/recipe/base/HTBasicComplexOutputRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/base/HTBasicComplexOutputRecipe.kt similarity index 94% rename from src/main/kotlin/hiiragi283/ragium/impl/recipe/base/HTBasicComplexOutputRecipe.kt rename to src/main/kotlin/hiiragi283/ragium/common/recipe/base/HTBasicComplexOutputRecipe.kt index 8c1c2af0f..7653e3455 100644 --- a/src/main/kotlin/hiiragi283/ragium/impl/recipe/base/HTBasicComplexOutputRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/base/HTBasicComplexOutputRecipe.kt @@ -1,4 +1,4 @@ -package hiiragi283.ragium.impl.recipe.base +package hiiragi283.ragium.common.recipe.base import hiiragi283.ragium.api.recipe.HTFluidRecipe import hiiragi283.ragium.api.recipe.input.HTRecipeInput diff --git a/src/main/kotlin/hiiragi283/ragium/impl/recipe/base/HTBasicComplexRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/base/HTBasicComplexRecipe.kt similarity index 86% rename from src/main/kotlin/hiiragi283/ragium/impl/recipe/base/HTBasicComplexRecipe.kt rename to src/main/kotlin/hiiragi283/ragium/common/recipe/base/HTBasicComplexRecipe.kt index fba6d075d..085c56775 100644 --- a/src/main/kotlin/hiiragi283/ragium/impl/recipe/base/HTBasicComplexRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/base/HTBasicComplexRecipe.kt @@ -1,4 +1,4 @@ -package hiiragi283.ragium.impl.recipe.base +package hiiragi283.ragium.common.recipe.base import hiiragi283.ragium.api.recipe.multi.HTComplexRecipe import hiiragi283.ragium.api.recipe.result.HTComplexResult diff --git a/src/main/kotlin/hiiragi283/ragium/impl/recipe/base/HTBasicItemWithCatalystRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/base/HTBasicItemWithCatalystRecipe.kt similarity index 91% rename from src/main/kotlin/hiiragi283/ragium/impl/recipe/base/HTBasicItemWithCatalystRecipe.kt rename to src/main/kotlin/hiiragi283/ragium/common/recipe/base/HTBasicItemWithCatalystRecipe.kt index 016472aff..48a82382a 100644 --- a/src/main/kotlin/hiiragi283/ragium/impl/recipe/base/HTBasicItemWithCatalystRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/base/HTBasicItemWithCatalystRecipe.kt @@ -1,4 +1,4 @@ -package hiiragi283.ragium.impl.recipe.base +package hiiragi283.ragium.common.recipe.base import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient import hiiragi283.ragium.api.recipe.multi.HTItemWithCatalystRecipe diff --git a/src/main/kotlin/hiiragi283/ragium/impl/recipe/base/HTBasicShapelessInputsRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/base/HTBasicShapelessInputsRecipe.kt similarity index 93% rename from src/main/kotlin/hiiragi283/ragium/impl/recipe/base/HTBasicShapelessInputsRecipe.kt rename to src/main/kotlin/hiiragi283/ragium/common/recipe/base/HTBasicShapelessInputsRecipe.kt index 4922aac00..1b1b3cb2c 100644 --- a/src/main/kotlin/hiiragi283/ragium/impl/recipe/base/HTBasicShapelessInputsRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/base/HTBasicShapelessInputsRecipe.kt @@ -1,4 +1,4 @@ -package hiiragi283.ragium.impl.recipe.base +package hiiragi283.ragium.common.recipe.base import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient import hiiragi283.ragium.api.recipe.input.HTRecipeInput diff --git a/src/main/kotlin/hiiragi283/ragium/impl/recipe/base/HTBasicSimulatingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/base/HTBasicSimulatingRecipe.kt similarity index 95% rename from src/main/kotlin/hiiragi283/ragium/impl/recipe/base/HTBasicSimulatingRecipe.kt rename to src/main/kotlin/hiiragi283/ragium/common/recipe/base/HTBasicSimulatingRecipe.kt index faebc2fb6..02a6088c8 100644 --- a/src/main/kotlin/hiiragi283/ragium/impl/recipe/base/HTBasicSimulatingRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/base/HTBasicSimulatingRecipe.kt @@ -1,4 +1,4 @@ -package hiiragi283.ragium.impl.recipe.base +package hiiragi283.ragium.common.recipe.base import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient import hiiragi283.ragium.api.recipe.input.HTRecipeInput diff --git a/src/main/kotlin/hiiragi283/ragium/impl/recipe/base/HTBasicSingleExtraItemRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/base/HTBasicSingleExtraItemRecipe.kt similarity index 95% rename from src/main/kotlin/hiiragi283/ragium/impl/recipe/base/HTBasicSingleExtraItemRecipe.kt rename to src/main/kotlin/hiiragi283/ragium/common/recipe/base/HTBasicSingleExtraItemRecipe.kt index edfb98372..edf964f16 100644 --- a/src/main/kotlin/hiiragi283/ragium/impl/recipe/base/HTBasicSingleExtraItemRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/base/HTBasicSingleExtraItemRecipe.kt @@ -1,4 +1,4 @@ -package hiiragi283.ragium.impl.recipe.base +package hiiragi283.ragium.common.recipe.base import hiiragi283.ragium.api.recipe.extra.HTSingleExtraItemRecipe import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient diff --git a/src/main/kotlin/hiiragi283/ragium/impl/recipe/base/HTBasicSingleFluidRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/base/HTBasicSingleFluidRecipe.kt similarity index 95% rename from src/main/kotlin/hiiragi283/ragium/impl/recipe/base/HTBasicSingleFluidRecipe.kt rename to src/main/kotlin/hiiragi283/ragium/common/recipe/base/HTBasicSingleFluidRecipe.kt index 158d7dc01..990c8ce29 100644 --- a/src/main/kotlin/hiiragi283/ragium/impl/recipe/base/HTBasicSingleFluidRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/base/HTBasicSingleFluidRecipe.kt @@ -1,4 +1,4 @@ -package hiiragi283.ragium.impl.recipe.base +package hiiragi283.ragium.common.recipe.base import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient import hiiragi283.ragium.api.recipe.input.HTRecipeInput diff --git a/src/main/kotlin/hiiragi283/ragium/impl/recipe/base/HTBasicSingleOutputRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/base/HTBasicSingleOutputRecipe.kt similarity index 91% rename from src/main/kotlin/hiiragi283/ragium/impl/recipe/base/HTBasicSingleOutputRecipe.kt rename to src/main/kotlin/hiiragi283/ragium/common/recipe/base/HTBasicSingleOutputRecipe.kt index c59f5dc6c..7f84a91cd 100644 --- a/src/main/kotlin/hiiragi283/ragium/impl/recipe/base/HTBasicSingleOutputRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/base/HTBasicSingleOutputRecipe.kt @@ -1,4 +1,4 @@ -package hiiragi283.ragium.impl.recipe.base +package hiiragi283.ragium.common.recipe.base import hiiragi283.ragium.api.recipe.HTRecipe import hiiragi283.ragium.api.recipe.input.HTRecipeInput diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/machine/HTBioExtractingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/custom/HTBioExtractingRecipe.kt similarity index 97% rename from src/main/kotlin/hiiragi283/ragium/common/recipe/machine/HTBioExtractingRecipe.kt rename to src/main/kotlin/hiiragi283/ragium/common/recipe/custom/HTBioExtractingRecipe.kt index 1f0d44193..b12f990a0 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/recipe/machine/HTBioExtractingRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/custom/HTBioExtractingRecipe.kt @@ -1,4 +1,4 @@ -package hiiragi283.ragium.common.recipe.machine +package hiiragi283.ragium.common.recipe.custom import hiiragi283.ragium.api.RagiumAPI import hiiragi283.ragium.api.RagiumConst diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/machine/HTCopyEnchantingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/custom/HTCopyEnchantingRecipe.kt similarity index 98% rename from src/main/kotlin/hiiragi283/ragium/common/recipe/machine/HTCopyEnchantingRecipe.kt rename to src/main/kotlin/hiiragi283/ragium/common/recipe/custom/HTCopyEnchantingRecipe.kt index b5db3af08..07a9a77e1 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/recipe/machine/HTCopyEnchantingRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/custom/HTCopyEnchantingRecipe.kt @@ -1,4 +1,4 @@ -package hiiragi283.ragium.common.recipe.machine +package hiiragi283.ragium.common.recipe.custom import hiiragi283.ragium.api.RagiumAPI import hiiragi283.ragium.api.RagiumConst diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/machine/HTExpExtractingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/custom/HTExpExtractingRecipe.kt similarity index 98% rename from src/main/kotlin/hiiragi283/ragium/common/recipe/machine/HTExpExtractingRecipe.kt rename to src/main/kotlin/hiiragi283/ragium/common/recipe/custom/HTExpExtractingRecipe.kt index cd99b5b1f..2133c334f 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/recipe/machine/HTExpExtractingRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/custom/HTExpExtractingRecipe.kt @@ -1,4 +1,4 @@ -package hiiragi283.ragium.common.recipe.machine +package hiiragi283.ragium.common.recipe.custom import hiiragi283.ragium.api.RagiumAPI import hiiragi283.ragium.api.RagiumConst diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/HTAutoCraftingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/vanilla/HTAutoCraftingRecipe.kt similarity index 97% rename from src/main/kotlin/hiiragi283/ragium/common/recipe/HTAutoCraftingRecipe.kt rename to src/main/kotlin/hiiragi283/ragium/common/recipe/vanilla/HTAutoCraftingRecipe.kt index 7d9ab26ba..c7c09f195 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/recipe/HTAutoCraftingRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/vanilla/HTAutoCraftingRecipe.kt @@ -1,4 +1,4 @@ -package hiiragi283.ragium.common.recipe +package hiiragi283.ragium.common.recipe.vanilla import hiiragi283.ragium.api.recipe.HTRecipe import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/HTVanillaCookingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/vanilla/HTVanillaCookingRecipe.kt similarity index 95% rename from src/main/kotlin/hiiragi283/ragium/common/recipe/HTVanillaCookingRecipe.kt rename to src/main/kotlin/hiiragi283/ragium/common/recipe/vanilla/HTVanillaCookingRecipe.kt index c7c276ad2..a99538d11 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/recipe/HTVanillaCookingRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/vanilla/HTVanillaCookingRecipe.kt @@ -1,4 +1,4 @@ -package hiiragi283.ragium.common.recipe +package hiiragi283.ragium.common.recipe.vanilla import hiiragi283.ragium.api.function.andThen import hiiragi283.ragium.api.recipe.HTRecipe diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/HTVanillaResultFactory.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/vanilla/HTVanillaResultFactory.kt similarity index 84% rename from src/main/kotlin/hiiragi283/ragium/common/recipe/HTVanillaResultFactory.kt rename to src/main/kotlin/hiiragi283/ragium/common/recipe/vanilla/HTVanillaResultFactory.kt index 40734d164..fc2041034 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/recipe/HTVanillaResultFactory.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/vanilla/HTVanillaResultFactory.kt @@ -1,4 +1,4 @@ -package hiiragi283.ragium.common.recipe +package hiiragi283.ragium.common.recipe.vanilla import hiiragi283.ragium.api.recipe.input.HTRecipeInput import net.minecraft.core.HolderLookup diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/HTVanillaSingleItemRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/vanilla/HTVanillaSingleItemRecipe.kt similarity index 96% rename from src/main/kotlin/hiiragi283/ragium/common/recipe/HTVanillaSingleItemRecipe.kt rename to src/main/kotlin/hiiragi283/ragium/common/recipe/vanilla/HTVanillaSingleItemRecipe.kt index e61c50812..a66d2af74 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/recipe/HTVanillaSingleItemRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/vanilla/HTVanillaSingleItemRecipe.kt @@ -1,4 +1,4 @@ -package hiiragi283.ragium.common.recipe +package hiiragi283.ragium.common.recipe.vanilla import hiiragi283.ragium.api.recipe.HTRecipe import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeBiCodecs.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeBiCodecs.kt index ee5982fdc..0de91db3e 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeBiCodecs.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeBiCodecs.kt @@ -16,19 +16,19 @@ import hiiragi283.ragium.api.serialization.codec.MapBiCodec import hiiragi283.ragium.api.serialization.codec.MapBiCodecs import hiiragi283.ragium.api.serialization.codec.ParameterCodec import hiiragi283.ragium.api.serialization.codec.VanillaBiCodecs -import hiiragi283.ragium.impl.data.recipe.HTCombineRecipeBuilder -import hiiragi283.ragium.impl.data.recipe.HTItemWithCatalystRecipeBuilder -import hiiragi283.ragium.impl.data.recipe.HTSimulatingRecipeBuilder -import hiiragi283.ragium.impl.data.recipe.HTSingleExtraItemRecipeBuilder -import hiiragi283.ragium.impl.recipe.HTMeltingRecipe -import hiiragi283.ragium.impl.recipe.HTMixingRecipe -import hiiragi283.ragium.impl.recipe.HTRefiningRecipe -import hiiragi283.ragium.impl.recipe.HTSimpleMixingRecipe -import hiiragi283.ragium.impl.recipe.base.HTBasicCombineRecipe -import hiiragi283.ragium.impl.recipe.base.HTBasicItemWithCatalystRecipe -import hiiragi283.ragium.impl.recipe.base.HTBasicSimulatingRecipe -import hiiragi283.ragium.impl.recipe.base.HTBasicSingleExtraItemRecipe -import hiiragi283.ragium.impl.recipe.base.HTBasicSingleOutputRecipe +import hiiragi283.ragium.common.data.recipe.HTCombineRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTItemWithCatalystRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTSimulatingRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTSingleExtraItemRecipeBuilder +import hiiragi283.ragium.common.recipe.HTMeltingRecipe +import hiiragi283.ragium.common.recipe.HTMixingRecipe +import hiiragi283.ragium.common.recipe.HTRefiningRecipe +import hiiragi283.ragium.common.recipe.HTSimpleMixingRecipe +import hiiragi283.ragium.common.recipe.base.HTBasicCombineRecipe +import hiiragi283.ragium.common.recipe.base.HTBasicItemWithCatalystRecipe +import hiiragi283.ragium.common.recipe.base.HTBasicSimulatingRecipe +import hiiragi283.ragium.common.recipe.base.HTBasicSingleExtraItemRecipe +import hiiragi283.ragium.common.recipe.base.HTBasicSingleOutputRecipe import net.minecraft.core.HolderSet import net.minecraft.core.registries.Registries import net.minecraft.network.RegistryFriendlyByteBuf diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeSerializers.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeSerializers.kt index 15dfecbe7..21c126cfc 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeSerializers.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeSerializers.kt @@ -10,28 +10,28 @@ import hiiragi283.ragium.api.recipe.multi.HTRockGeneratingRecipe import hiiragi283.ragium.api.registry.HTDeferredRegister import hiiragi283.ragium.api.serialization.codec.MapBiCodec import hiiragi283.ragium.api.serialization.codec.VanillaBiCodecs -import hiiragi283.ragium.common.recipe.crafting.HTClearComponentRecipe -import hiiragi283.ragium.common.recipe.crafting.HTEternalUpgradeRecipe -import hiiragi283.ragium.common.recipe.crafting.HTGravitationalUpgradeRecipe -import hiiragi283.ragium.common.recipe.crafting.HTIceCreamSodaRecipe -import hiiragi283.ragium.common.recipe.crafting.HTPotionDropRecipe -import hiiragi283.ragium.common.recipe.crafting.HTUpgradeChargeRecipe -import hiiragi283.ragium.common.recipe.machine.HTBioExtractingRecipe -import hiiragi283.ragium.common.recipe.machine.HTCopyEnchantingRecipe -import hiiragi283.ragium.common.recipe.machine.HTExpExtractingRecipe -import hiiragi283.ragium.impl.recipe.HTAlloyingRecipe -import hiiragi283.ragium.impl.recipe.HTBlockSimulatingRecipe -import hiiragi283.ragium.impl.recipe.HTBrewingRecipe -import hiiragi283.ragium.impl.recipe.HTCompressingRecipe -import hiiragi283.ragium.impl.recipe.HTCrushingRecipe -import hiiragi283.ragium.impl.recipe.HTCuttingRecipe -import hiiragi283.ragium.impl.recipe.HTEnchantingRecipe -import hiiragi283.ragium.impl.recipe.HTEntitySimulatingRecipe -import hiiragi283.ragium.impl.recipe.HTExtractingRecipe -import hiiragi283.ragium.impl.recipe.HTMeltingRecipe -import hiiragi283.ragium.impl.recipe.HTMixingRecipe -import hiiragi283.ragium.impl.recipe.HTRefiningRecipe -import hiiragi283.ragium.impl.recipe.HTSimpleMixingRecipe +import hiiragi283.ragium.common.crafting.HTClearComponentRecipe +import hiiragi283.ragium.common.crafting.HTEternalUpgradeRecipe +import hiiragi283.ragium.common.crafting.HTGravitationalUpgradeRecipe +import hiiragi283.ragium.common.crafting.HTIceCreamSodaRecipe +import hiiragi283.ragium.common.crafting.HTPotionDropRecipe +import hiiragi283.ragium.common.crafting.HTUpgradeChargeRecipe +import hiiragi283.ragium.common.recipe.HTAlloyingRecipe +import hiiragi283.ragium.common.recipe.HTBlockSimulatingRecipe +import hiiragi283.ragium.common.recipe.HTBrewingRecipe +import hiiragi283.ragium.common.recipe.HTCompressingRecipe +import hiiragi283.ragium.common.recipe.HTCrushingRecipe +import hiiragi283.ragium.common.recipe.HTCuttingRecipe +import hiiragi283.ragium.common.recipe.HTEnchantingRecipe +import hiiragi283.ragium.common.recipe.HTEntitySimulatingRecipe +import hiiragi283.ragium.common.recipe.HTExtractingRecipe +import hiiragi283.ragium.common.recipe.HTMeltingRecipe +import hiiragi283.ragium.common.recipe.HTMixingRecipe +import hiiragi283.ragium.common.recipe.HTRefiningRecipe +import hiiragi283.ragium.common.recipe.HTSimpleMixingRecipe +import hiiragi283.ragium.common.recipe.custom.HTBioExtractingRecipe +import hiiragi283.ragium.common.recipe.custom.HTCopyEnchantingRecipe +import hiiragi283.ragium.common.recipe.custom.HTExpExtractingRecipe import net.minecraft.core.registries.Registries import net.minecraft.network.RegistryFriendlyByteBuf import net.minecraft.network.codec.StreamCodec From b169fae71522a306e01c1fda6ee2bb9dfb41a536 Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Thu, 11 Dec 2025 07:20:32 +0900 Subject: [PATCH 17/49] feat!: migrated HTBrewingRecipe to HTBrewingRecipeData --- .../kotlin/hiiragi283/ragium/api/RagiumAPI.kt | 11 ++ .../ragium/api/data/HTBrewingRecipeData.kt | 27 +++++ .../ragium/api/data/map/HTEquipAction.kt | 4 +- .../slot/payload/HTSyncablePayload.kt | 4 +- .../api/item/alchemy/HTPotionContents.kt | 48 -------- .../ragium/api/item/alchemy/HTPotionHelper.kt | 12 -- .../item/component/HTIntrinsicEnchantment.kt | 4 +- .../recipe/ingredient/HTPotionIngredient.kt | 58 ---------- .../ingredient/RagiumIngredientTypes.kt | 16 --- .../ragium/api/serialization/codec/Codecs.kt | 8 +- .../api/serialization/codec/MapBiCodec.kt | 37 ++++++- .../ragium/api/data/HTDataGenContext.kt | 3 + .../ragium/api/data/HTDataGenerator.kt | 5 + .../ragium/api/data/HTDataPackGenerator.kt | 3 + .../ragium/api/data/HTRootDataGenerator.kt | 6 +- .../api/data/recipe/HTRecipeProvider.kt | 96 +--------------- .../hiiragi283/ragium/data/RagiumDatagen.kt | 3 + .../data/client/RagiumEnglishProvider.kt | 3 +- .../data/client/RagiumJapaneseProvider.kt | 3 +- .../data/server/RagiumRecipeProvider.kt | 2 - .../RagiumBrewingRecipeDataProvider.kt | 104 ++++++++++++++++++ .../recipe/RagiumBrewingRecipeProvider.kt | 75 ------------- .../client/integration/emi/RagiumEmiPlugin.kt | 38 ++++++- .../emi/category/RagiumEmiRecipeCategories.kt | 7 +- .../emi/data/HTEmiFluidFuelData.kt | 4 +- .../emi/recipe/base/HTCombineEmiRecipe.kt | 22 +--- .../recipe/processor/HTBrewingEmiRecipe.kt | 19 ++-- .../recipe/processor/HTEnchantingEmiRecipe.kt | 14 ++- .../kotlin/hiiragi283/ragium/RagiumCommon.kt | 4 +- .../entity/processor/HTBreweryBlockEntity.kt | 48 +++++++- .../data/brewing/HTEffectBrewingRecipeData.kt | 60 ++++++++++ .../data/brewing/HTPotionBrewingRecipeData.kt | 45 ++++++++ .../data/recipe/HTCombineRecipeBuilder.kt | 35 ------ .../ragium/common/recipe/HTBrewingRecipe.kt | 66 ++++++++--- .../common/text/RagiumCommonTranslation.kt | 2 + .../ragium/setup/RagiumMiscRegister.kt | 24 +--- .../ragium/setup/RagiumRecipeSerializers.kt | 11 -- 37 files changed, 489 insertions(+), 442 deletions(-) create mode 100644 src/api/kotlin/hiiragi283/ragium/api/data/HTBrewingRecipeData.kt delete mode 100644 src/api/kotlin/hiiragi283/ragium/api/item/alchemy/HTPotionContents.kt delete mode 100644 src/api/kotlin/hiiragi283/ragium/api/recipe/ingredient/HTPotionIngredient.kt delete mode 100644 src/api/kotlin/hiiragi283/ragium/api/recipe/ingredient/RagiumIngredientTypes.kt create mode 100644 src/data/kotlin/hiiragi283/ragium/data/server/bootstrap/RagiumBrewingRecipeDataProvider.kt delete mode 100644 src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumBrewingRecipeProvider.kt create mode 100644 src/main/kotlin/hiiragi283/ragium/common/data/brewing/HTEffectBrewingRecipeData.kt create mode 100644 src/main/kotlin/hiiragi283/ragium/common/data/brewing/HTPotionBrewingRecipeData.kt diff --git a/src/api/kotlin/hiiragi283/ragium/api/RagiumAPI.kt b/src/api/kotlin/hiiragi283/ragium/api/RagiumAPI.kt index f25a6a8bd..a50c99bfb 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/RagiumAPI.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/RagiumAPI.kt @@ -2,6 +2,7 @@ package hiiragi283.ragium.api import com.mojang.logging.LogUtils import com.mojang.serialization.MapCodec +import hiiragi283.ragium.api.data.HTBrewingRecipeData import hiiragi283.ragium.api.data.map.HTEquipAction import hiiragi283.ragium.api.inventory.slot.payload.HTSyncablePayload import hiiragi283.ragium.api.registry.toId @@ -62,6 +63,12 @@ object RagiumAPI { .create() // Builtin + @JvmField + val BREWING_RECIPE_TYPE_KEY: ResourceKey>> = createKey("brewing_recipe_type") + + @JvmField + val BREWING_RECIPE_TYPE_REGISTRY: Registry> = createRegistry(BREWING_RECIPE_TYPE_KEY) + @JvmField val EQUIP_ACTION_TYPE_KEY: ResourceKey>> = createKey("equip_action_type") @@ -74,6 +81,10 @@ object RagiumAPI { @JvmField val SLOT_TYPE_REGISTRY: Registry> = createRegistry(SLOT_TYPE_KEY) + // Dynamic + @JvmField + val BREWING_RECIPE_KEY: ResourceKey> = createKey("brewing_recipe_data") + // Feature Flag @JvmField val WORK_IN_PROGRESS: FeatureFlag = FeatureFlags.REGISTRY.getFlag(RagiumAPI.id("work_in_progress")) diff --git a/src/api/kotlin/hiiragi283/ragium/api/data/HTBrewingRecipeData.kt b/src/api/kotlin/hiiragi283/ragium/api/data/HTBrewingRecipeData.kt new file mode 100644 index 000000000..9096617da --- /dev/null +++ b/src/api/kotlin/hiiragi283/ragium/api/data/HTBrewingRecipeData.kt @@ -0,0 +1,27 @@ +package hiiragi283.ragium.api.data + +import com.mojang.serialization.Codec +import com.mojang.serialization.MapCodec +import hiiragi283.ragium.api.RagiumAPI +import hiiragi283.ragium.api.function.identity +import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient +import net.minecraft.world.item.alchemy.PotionContents + +interface HTBrewingRecipeData { + companion object { + @JvmField + val CODEC: Codec = RagiumAPI.BREWING_RECIPE_TYPE_REGISTRY + .byNameCodec() + .dispatch(HTBrewingRecipeData::type, identity()) + } + + fun type(): MapCodec + + fun getIngredient(): HTItemIngredient + + fun getBasePotion(): PotionContents + + fun getLongPotion(): PotionContents + + fun getStrongPotion(): PotionContents +} diff --git a/src/api/kotlin/hiiragi283/ragium/api/data/map/HTEquipAction.kt b/src/api/kotlin/hiiragi283/ragium/api/data/map/HTEquipAction.kt index aff0b336d..4bb054b91 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/data/map/HTEquipAction.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/data/map/HTEquipAction.kt @@ -3,16 +3,16 @@ package hiiragi283.ragium.api.data.map import com.mojang.serialization.Codec import com.mojang.serialization.MapCodec import hiiragi283.ragium.api.RagiumAPI +import hiiragi283.ragium.api.function.identity import net.minecraft.world.entity.player.Player import net.minecraft.world.item.ItemStack -import java.util.function.Function interface HTEquipAction { companion object { @JvmField val CODEC: Codec = RagiumAPI.EQUIP_ACTION_TYPE_REGISTRY .byNameCodec() - .dispatch(HTEquipAction::type, Function.identity()) + .dispatch(HTEquipAction::type, identity()) } fun type(): MapCodec diff --git a/src/api/kotlin/hiiragi283/ragium/api/inventory/slot/payload/HTSyncablePayload.kt b/src/api/kotlin/hiiragi283/ragium/api/inventory/slot/payload/HTSyncablePayload.kt index 4913c70cc..9c75184f3 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/inventory/slot/payload/HTSyncablePayload.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/inventory/slot/payload/HTSyncablePayload.kt @@ -1,11 +1,11 @@ package hiiragi283.ragium.api.inventory.slot.payload import hiiragi283.ragium.api.RagiumAPI +import hiiragi283.ragium.api.function.identity import hiiragi283.ragium.api.inventory.container.HTSyncableMenu import net.minecraft.network.RegistryFriendlyByteBuf import net.minecraft.network.codec.ByteBufCodecs import net.minecraft.network.codec.StreamCodec -import java.util.function.Function /** * @see mekanism.common.network.to_client.container.property.PropertyData @@ -16,7 +16,7 @@ interface HTSyncablePayload { val STREAM_CODEC: StreamCodec = ByteBufCodecs .registry(RagiumAPI.SLOT_TYPE_KEY) - .dispatch(HTSyncablePayload::type, Function.identity()) + .dispatch(HTSyncablePayload::type, identity()) } fun type(): StreamCodec diff --git a/src/api/kotlin/hiiragi283/ragium/api/item/alchemy/HTPotionContents.kt b/src/api/kotlin/hiiragi283/ragium/api/item/alchemy/HTPotionContents.kt deleted file mode 100644 index 0c7eb6056..000000000 --- a/src/api/kotlin/hiiragi283/ragium/api/item/alchemy/HTPotionContents.kt +++ /dev/null @@ -1,48 +0,0 @@ -package hiiragi283.ragium.api.item.alchemy - -import hiiragi283.ragium.api.serialization.codec.BiCodec -import hiiragi283.ragium.api.serialization.codec.VanillaBiCodecs.holder -import hiiragi283.ragium.api.util.wrapOptional -import net.minecraft.core.Holder -import net.minecraft.core.registries.Registries -import net.minecraft.network.RegistryFriendlyByteBuf -import net.minecraft.world.item.alchemy.Potion -import net.minecraft.world.item.alchemy.PotionContents -import java.util.Optional -import kotlin.jvm.optionals.getOrNull - -/** - * @see PotionContents - */ -@JvmRecord -data class HTPotionContents(private val potion: Optional>, private val instances: List) { - companion object { - @JvmField - val CODEC: BiCodec = BiCodec.composite( - holder(Registries.POTION).optionalFieldOf("potion").forGetter(HTPotionContents::potion), - HTMobEffectInstance.CODEC - .listOf() - .optionalFieldOf("custom_effects", listOf()) - .forGetter(HTPotionContents::instances), - ::HTPotionContents, - ) - - @JvmStatic - fun fromVanilla(contents: PotionContents): HTPotionContents { - val instances: List = contents.customEffects().map(::HTMobEffectInstance) - return HTPotionContents(contents.potion(), instances) - } - } - - constructor(potion: Holder) : this(potion.wrapOptional(), listOf()) - - constructor(instances: List) : this(Optional.empty(), instances) - - constructor(vararg instances: HTMobEffectInstance) : this(listOf(*instances)) - - fun isEmpty(): Boolean = potion.isEmpty && instances.isEmpty() - - fun isOf(contents: PotionContents): Boolean = contents == this.toVanilla() - - fun toVanilla(): PotionContents = HTPotionHelper.contents(potion.getOrNull(), null, instances) -} diff --git a/src/api/kotlin/hiiragi283/ragium/api/item/alchemy/HTPotionHelper.kt b/src/api/kotlin/hiiragi283/ragium/api/item/alchemy/HTPotionHelper.kt index 9cc9f2eb7..05038415a 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/item/alchemy/HTPotionHelper.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/item/alchemy/HTPotionHelper.kt @@ -7,7 +7,6 @@ import net.minecraft.world.item.ItemStack import net.minecraft.world.item.alchemy.Potion import net.minecraft.world.item.alchemy.PotionContents import net.minecraft.world.level.ItemLike -import java.util.Optional object HTPotionHelper { @JvmStatic @@ -16,22 +15,11 @@ object HTPotionHelper { @JvmStatic fun contents(potion: Holder): PotionContents = PotionContents(potion) - @JvmStatic - fun contents(potion: Holder?, customColor: Int?, instances: List): PotionContents = PotionContents( - Optional.ofNullable(potion), - Optional.ofNullable(customColor), - instances.map(HTMobEffectInstance::toMutable), - ) - // ItemStack // @JvmStatic fun createPotion(item: ItemLike, potion: Holder, count: Int = 1): ItemStack = createPotion(item, contents(potion), count) - @JvmStatic - fun createPotion(item: ItemLike, contents: HTPotionContents, count: Int = 1): ItemStack = - createPotion(item, contents.toVanilla(), count) - @JvmStatic fun createPotion(item: ItemLike, contents: PotionContents, count: Int = 1): ItemStack = createItemStack(item, DataComponents.POTION_CONTENTS, contents, count) diff --git a/src/api/kotlin/hiiragi283/ragium/api/item/component/HTIntrinsicEnchantment.kt b/src/api/kotlin/hiiragi283/ragium/api/item/component/HTIntrinsicEnchantment.kt index 7649fe788..a1d7450e4 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/item/component/HTIntrinsicEnchantment.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/item/component/HTIntrinsicEnchantment.kt @@ -1,5 +1,6 @@ package hiiragi283.ragium.api.item.component +import hiiragi283.ragium.api.function.identity import hiiragi283.ragium.api.registry.HTKeyOrTagEntry import hiiragi283.ragium.api.registry.HTKeyOrTagHelper import hiiragi283.ragium.api.serialization.codec.BiCodec @@ -18,7 +19,6 @@ import net.minecraft.world.item.TooltipFlag import net.minecraft.world.item.component.TooltipProvider import net.minecraft.world.item.enchantment.Enchantment import java.util.function.Consumer -import java.util.function.Function @JvmRecord data class HTIntrinsicEnchantment(val entry: HTKeyOrTagEntry, val level: Int) : TooltipProvider { @@ -49,7 +49,7 @@ data class HTIntrinsicEnchantment(val entry: HTKeyOrTagEntry, val l tooltipFlag.hasShiftDown() -> getFullName(context.registries()) .fold( { RagiumTranslation.TOOLTIP_INTRINSIC_ENCHANTMENT.translate(it) }, - Function.identity()::apply, + identity(), ) else -> RagiumTranslation.TOOLTIP_SHOW_DESCRIPTION.translateColored(ChatFormatting.YELLOW) }.let(tooltipAdder::accept) diff --git a/src/api/kotlin/hiiragi283/ragium/api/recipe/ingredient/HTPotionIngredient.kt b/src/api/kotlin/hiiragi283/ragium/api/recipe/ingredient/HTPotionIngredient.kt deleted file mode 100644 index e9d506d56..000000000 --- a/src/api/kotlin/hiiragi283/ragium/api/recipe/ingredient/HTPotionIngredient.kt +++ /dev/null @@ -1,58 +0,0 @@ -package hiiragi283.ragium.api.recipe.ingredient - -import hiiragi283.ragium.api.item.alchemy.HTPotionContents -import hiiragi283.ragium.api.item.alchemy.HTPotionHelper -import hiiragi283.ragium.api.registry.builtInRegistryHolder -import hiiragi283.ragium.api.serialization.codec.MapBiCodec -import hiiragi283.ragium.api.serialization.codec.VanillaBiCodecs -import net.minecraft.core.Holder -import net.minecraft.core.HolderSet -import net.minecraft.core.component.DataComponents -import net.minecraft.core.registries.Registries -import net.minecraft.network.RegistryFriendlyByteBuf -import net.minecraft.world.item.Item -import net.minecraft.world.item.ItemStack -import net.minecraft.world.item.alchemy.PotionContents -import net.minecraft.world.item.crafting.Ingredient -import net.minecraft.world.level.ItemLike -import net.neoforged.neoforge.common.crafting.ICustomIngredient -import net.neoforged.neoforge.common.crafting.IngredientType -import java.util.stream.Stream - -/** - * @see net.neoforged.neoforge.common.crafting.DataComponentIngredient - */ -data class HTPotionIngredient(val items: HolderSet, val contents: HTPotionContents) : ICustomIngredient { - companion object { - @JvmField - val CODEC: MapBiCodec = MapBiCodec.composite( - VanillaBiCodecs.holderSet(Registries.ITEM).fieldOf("items").forGetter(HTPotionIngredient::items), - HTPotionContents.CODEC.fieldOf("contents").forGetter(HTPotionIngredient::contents), - ::HTPotionIngredient, - ) - - @JvmStatic - fun of(contents: HTPotionContents, items: Collection): Ingredient = HTPotionIngredient( - HolderSet.direct(ItemLike::builtInRegistryHolder, items), - contents, - ).toVanilla() - - @JvmStatic - fun of(contents: HTPotionContents, vararg items: ItemLike): Ingredient = HTPotionIngredient( - HolderSet.direct(ItemLike::builtInRegistryHolder, *items), - contents, - ).toVanilla() - } - - private val stacks: List = items - .map { holder: Holder -> HTPotionHelper.createPotion(holder.value(), contents) } - - override fun test(stack: ItemStack): Boolean = - stack.`is`(items) && contents.isOf(stack.getOrDefault(DataComponents.POTION_CONTENTS, PotionContents.EMPTY)) - - override fun getItems(): Stream = stacks.stream() - - override fun isSimple(): Boolean = false - - override fun getType(): IngredientType<*> = RagiumIngredientTypes.POTION.get() -} diff --git a/src/api/kotlin/hiiragi283/ragium/api/recipe/ingredient/RagiumIngredientTypes.kt b/src/api/kotlin/hiiragi283/ragium/api/recipe/ingredient/RagiumIngredientTypes.kt deleted file mode 100644 index 32878e0fe..000000000 --- a/src/api/kotlin/hiiragi283/ragium/api/recipe/ingredient/RagiumIngredientTypes.kt +++ /dev/null @@ -1,16 +0,0 @@ -package hiiragi283.ragium.api.recipe.ingredient - -import hiiragi283.ragium.api.RagiumAPI -import hiiragi283.ragium.api.registry.HTDeferredHolder -import net.neoforged.neoforge.common.crafting.ICustomIngredient -import net.neoforged.neoforge.common.crafting.IngredientType -import net.neoforged.neoforge.registries.NeoForgeRegistries - -object RagiumIngredientTypes { - @JvmField - val POTION: HTDeferredHolder, IngredientType> = create("potion") - - @JvmStatic - private fun create(path: String): HTDeferredHolder, IngredientType> = - HTDeferredHolder(NeoForgeRegistries.Keys.INGREDIENT_TYPES, RagiumAPI.id(path)) -} diff --git a/src/api/kotlin/hiiragi283/ragium/api/serialization/codec/Codecs.kt b/src/api/kotlin/hiiragi283/ragium/api/serialization/codec/Codecs.kt index a36d7e131..4ae63a8aa 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/serialization/codec/Codecs.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/serialization/codec/Codecs.kt @@ -4,6 +4,7 @@ import com.mojang.datafixers.util.Either import com.mojang.serialization.Codec import com.mojang.serialization.DataResult import com.mojang.serialization.MapCodec +import hiiragi283.ragium.api.function.identity import io.netty.buffer.ByteBuf import java.util.function.Function import kotlin.collections.List @@ -11,17 +12,16 @@ import kotlin.collections.List // Codec // fun Codec.listOrElement(): Codec> = Codec.either(this.listOf(), this).xmap( - { either: Either, A> -> either.map(Function.identity(), ::listOf) }, + { either: Either, A> -> either.map(identity(), ::listOf) }, { list: List -> if (list.size == 1) Either.right(list[0]) else Either.left(list) }, ) fun Codec.listOrElement(min: Int, max: Int): Codec> = Codec.either(this.listOf(min, max), this).xmap( - { either: Either, A> -> either.map(Function.identity(), ::listOf) }, + { either: Either, A> -> either.map(identity(), ::listOf) }, { list: List -> if (list.size == 1) Either.right(list[0]) else Either.left(list) }, ) -fun > Codec.dispatchSelf(type: Function): Codec = - this.dispatch(type, Function.identity()) +fun > Codec.dispatchSelf(type: Function): Codec = this.dispatch(type, identity()) // BiCodec // diff --git a/src/api/kotlin/hiiragi283/ragium/api/serialization/codec/MapBiCodec.kt b/src/api/kotlin/hiiragi283/ragium/api/serialization/codec/MapBiCodec.kt index 4c8b0e8f2..ddda5a95b 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/serialization/codec/MapBiCodec.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/serialization/codec/MapBiCodec.kt @@ -2,6 +2,7 @@ package hiiragi283.ragium.api.serialization.codec import com.mojang.datafixers.util.Function3 import com.mojang.datafixers.util.Function4 +import com.mojang.datafixers.util.Function5 import com.mojang.serialization.MapCodec import com.mojang.serialization.codecs.RecordCodecBuilder import io.netty.buffer.ByteBuf @@ -100,6 +101,40 @@ data class MapBiCodec private constructor(val codec: MapCo ), ) + @JvmStatic + fun composite( + codec1: ParameterCodec, + codec2: ParameterCodec, + codec3: ParameterCodec, + codec4: ParameterCodec, + codec5: ParameterCodec, + factory: Function5, + ): MapBiCodec = of( + RecordCodecBuilder.mapCodec { instance -> + instance + .group( + codec1.toRecordParam(), + codec2.toRecordParam(), + codec3.toRecordParam(), + codec4.toRecordParam(), + codec5.toRecordParam(), + ).apply(instance, factory) + }, + StreamCodec.composite( + codec1.streamCodec, + codec1.getter, + codec2.streamCodec, + codec2.getter, + codec3.streamCodec, + codec3.getter, + codec4.streamCodec, + codec4.getter, + codec5.streamCodec, + codec5.getter, + factory, + ), + ) + @JvmStatic fun unit(instance: V): MapBiCodec = of(MapCodec.unit(instance), StreamCodec.unit(instance)) } @@ -130,6 +165,4 @@ data class MapBiCodec private constructor(val codec: MapCo fun validate(validator: UnaryOperator): MapBiCodec = flatXmap(validator::apply, validator::apply) fun forGetter(getter: Function): ParameterCodec = ParameterCodec.of(this, getter) - - fun toSerializer(transform: (MapCodec, StreamCodec) -> T): T = transform(codec, streamCodec) } diff --git a/src/data/kotlin/hiiragi283/ragium/api/data/HTDataGenContext.kt b/src/data/kotlin/hiiragi283/ragium/api/data/HTDataGenContext.kt index 3da1f2416..732b2feea 100644 --- a/src/data/kotlin/hiiragi283/ragium/api/data/HTDataGenContext.kt +++ b/src/data/kotlin/hiiragi283/ragium/api/data/HTDataGenContext.kt @@ -5,6 +5,9 @@ import net.minecraft.data.PackOutput import net.neoforged.neoforge.common.data.ExistingFileHelper import java.util.concurrent.CompletableFuture +/** + * データ生成でよく使うインスタンスを束ねたデータクラス + */ data class HTDataGenContext( val output: PackOutput, val registries: CompletableFuture, diff --git a/src/data/kotlin/hiiragi283/ragium/api/data/HTDataGenerator.kt b/src/data/kotlin/hiiragi283/ragium/api/data/HTDataGenerator.kt index c47abf97e..6b8482eee 100644 --- a/src/data/kotlin/hiiragi283/ragium/api/data/HTDataGenerator.kt +++ b/src/data/kotlin/hiiragi283/ragium/api/data/HTDataGenerator.kt @@ -2,6 +2,11 @@ package hiiragi283.ragium.api.data import net.minecraft.data.DataProvider +/** + * [DataProvider]を登録するインターフェース + * @see HTRootDataGenerator + * @see HTDataPackGenerator + */ interface HTDataGenerator { fun addProvider(factory: DataProvider.Factory): DATA diff --git a/src/data/kotlin/hiiragi283/ragium/api/data/HTDataPackGenerator.kt b/src/data/kotlin/hiiragi283/ragium/api/data/HTDataPackGenerator.kt index ff508bcf2..74532585d 100644 --- a/src/data/kotlin/hiiragi283/ragium/api/data/HTDataPackGenerator.kt +++ b/src/data/kotlin/hiiragi283/ragium/api/data/HTDataPackGenerator.kt @@ -7,6 +7,9 @@ import net.minecraft.data.PackOutput import net.neoforged.neoforge.common.data.ExistingFileHelper import java.util.concurrent.CompletableFuture +/** + * データパック向けの[HTDataGenerator]の実装クラス + */ data class HTDataPackGenerator( private val generator: DataGenerator.PackGenerator, val registries: CompletableFuture, diff --git a/src/data/kotlin/hiiragi283/ragium/api/data/HTRootDataGenerator.kt b/src/data/kotlin/hiiragi283/ragium/api/data/HTRootDataGenerator.kt index 9de7df83f..e3a71b28f 100644 --- a/src/data/kotlin/hiiragi283/ragium/api/data/HTRootDataGenerator.kt +++ b/src/data/kotlin/hiiragi283/ragium/api/data/HTRootDataGenerator.kt @@ -14,7 +14,7 @@ import java.util.concurrent.CompletableFuture import java.util.function.BooleanSupplier /** - * データ生成でよく使うインスタンスを束ねたデータクラス + * 基本の[HTDataGenerator]の実装クラス */ @ConsistentCopyVisibility @JvmRecord @@ -48,6 +48,10 @@ data class HTRootDataGenerator private constructor( } } + /** + * 指定された[id]でデータパックを作成します。 + * @return 指定された[id]に基づいた[HTDataPackGenerator] + */ fun createDataPackGenerator(id: ResourceLocation): HTDataPackGenerator = HTDataPackGenerator( generator.getBuiltinDatapack(doRun.asBoolean, id.namespace, id.path), registries, diff --git a/src/data/kotlin/hiiragi283/ragium/api/data/recipe/HTRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/api/data/recipe/HTRecipeProvider.kt index 8dec32d2a..48bcc0032 100644 --- a/src/data/kotlin/hiiragi283/ragium/api/data/recipe/HTRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/api/data/recipe/HTRecipeProvider.kt @@ -5,15 +5,12 @@ import hiiragi283.ragium.api.RagiumConst import hiiragi283.ragium.api.RagiumPlatform import hiiragi283.ragium.api.data.recipe.ingredient.HTFluidIngredientCreator import hiiragi283.ragium.api.data.recipe.ingredient.HTItemIngredientCreator -import hiiragi283.ragium.api.item.alchemy.HTMobEffectInstance -import hiiragi283.ragium.api.item.alchemy.HTPotionContents import hiiragi283.ragium.api.material.HTMaterialLike import hiiragi283.ragium.api.material.getDefaultPrefix import hiiragi283.ragium.api.material.prefix.HTMaterialPrefix import hiiragi283.ragium.api.material.prefix.HTPrefixLike import hiiragi283.ragium.api.recipe.ingredient.HTFluidIngredient import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient -import hiiragi283.ragium.api.recipe.ingredient.HTPotionIngredient import hiiragi283.ragium.api.recipe.result.HTFluidResult import hiiragi283.ragium.api.recipe.result.HTItemResult import hiiragi283.ragium.api.registry.HTFluidHolderLike @@ -23,7 +20,6 @@ import hiiragi283.ragium.api.registry.toId import hiiragi283.ragium.api.tag.RagiumModTags import hiiragi283.ragium.common.HTMoldType import hiiragi283.ragium.common.crafting.HTClearComponentRecipe -import hiiragi283.ragium.common.data.recipe.HTCombineRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTComplexRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTItemWithCatalystRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTPlantingRecipeBuilder @@ -33,22 +29,17 @@ import hiiragi283.ragium.common.data.recipe.HTSingleRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTSmithingRecipeBuilder import hiiragi283.ragium.common.material.CommonMaterialPrefixes import hiiragi283.ragium.common.material.VanillaMaterialKeys -import hiiragi283.ragium.setup.RagiumItems import net.minecraft.advancements.Advancement import net.minecraft.advancements.AdvancementHolder -import net.minecraft.core.Holder import net.minecraft.core.HolderLookup import net.minecraft.core.component.DataComponentType import net.minecraft.data.recipes.RecipeOutput import net.minecraft.resources.ResourceLocation -import net.minecraft.world.effect.MobEffect import net.minecraft.world.item.Items -import net.minecraft.world.item.alchemy.Potion import net.minecraft.world.item.crafting.CraftingBookCategory import net.minecraft.world.item.crafting.Ingredient import net.minecraft.world.item.crafting.Recipe import net.minecraft.world.level.ItemLike -import net.neoforged.neoforge.common.Tags import net.neoforged.neoforge.common.conditions.ICondition import net.neoforged.neoforge.common.conditions.ModLoadedCondition import net.neoforged.neoforge.common.conditions.NotCondition @@ -140,7 +131,7 @@ sealed class HTRecipeProvider { val namespace: String = id.namespace return if (namespace in RagiumConst.BUILTIN_IDS) { val path: List = id.path.split("/", limit = 2) - return RagiumAPI.id(path[0], modid, path[1]) + RagiumAPI.id(path[0], modid, path[1]) } else { val path: List = id.path.split("/", limit = 2) RagiumAPI.id(path[0], namespace, path[1]) @@ -189,91 +180,6 @@ sealed class HTRecipeProvider { .addIngredient(input) .addIngredient(CommonMaterialPrefixes.INGOT, VanillaMaterialKeys.NETHERITE) - // Brewing - // Potion - protected fun brewing(right: HTItemIngredient, potion: Holder) { - HTCombineRecipeBuilder - .brewing( - itemCreator.fromTagKey(Tags.Items.CROPS_NETHER_WART), - right, - potion, - ).save(output) - } - - protected fun brewing( - right: HTItemIngredient, - base: Holder, - long: Holder?, - strong: Holder?, - ) { - // Base - brewing(right, base) - val drop: HTItemIngredient = - itemCreator.from(HTPotionIngredient.of(HTPotionContents(base), RagiumItems.POTION_DROP)) - // Long - if (long != null) { - HTCombineRecipeBuilder - .brewing( - itemCreator.fromTagKey(CommonMaterialPrefixes.DUST, VanillaMaterialKeys.REDSTONE), - drop, - long, - ).save(output) - } - // Strong - if (strong != null) { - HTCombineRecipeBuilder - .brewing( - itemCreator.fromTagKey(CommonMaterialPrefixes.DUST, VanillaMaterialKeys.GLOWSTONE), - drop, - strong, - ).save(output) - } - } - - // HTMobEffectInstance - private fun brewing( - right: HTItemIngredient, - left: HTItemIngredient = itemCreator.fromTagKey(Tags.Items.CROPS_NETHER_WART), - builderAction: MutableList.() -> Unit, - ): HTCombineRecipeBuilder = HTCombineRecipeBuilder - .brewing( - left, - right, - builderAction, - ) - - protected fun benefitBrewing(right: HTItemIngredient, effect: Holder) { - longAndStrongBrewing(right, effect, 3600, 9600, 1800) - } - - protected fun harmfulBrewing(right: HTItemIngredient, effect: Holder) { - longAndStrongBrewing(right, effect, 900, 1800, 432) - } - - private fun longAndStrongBrewing( - right: HTItemIngredient, - effect: Holder, - baseTime: Int, - longTime: Int, - strongTime: Int, - ) { - val instance = HTMobEffectInstance(effect, baseTime) - val drop: HTItemIngredient = - itemCreator.from(HTPotionIngredient.of(HTPotionContents(instance), RagiumItems.POTION_DROP)) - // Base - brewing(right) { add(instance) }.save(output) - // Long - brewing( - itemCreator.fromTagKey(CommonMaterialPrefixes.DUST, VanillaMaterialKeys.REDSTONE), - drop, - ) { add(HTMobEffectInstance(effect, longTime)) }.savePrefixed(output, "long_") - // Strong - brewing( - itemCreator.fromTagKey(CommonMaterialPrefixes.DUST, VanillaMaterialKeys.GLOWSTONE), - drop, - ) { add(HTMobEffectInstance(effect, strongTime, 1)) }.savePrefixed(output, "strong_") - } - // Compressing protected fun compressingTo( mold: HTMoldType, diff --git a/src/data/kotlin/hiiragi283/ragium/data/RagiumDatagen.kt b/src/data/kotlin/hiiragi283/ragium/data/RagiumDatagen.kt index bf35e6343..a3faf0c3c 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/RagiumDatagen.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/RagiumDatagen.kt @@ -14,6 +14,7 @@ import hiiragi283.ragium.data.server.RagiumDataMapProvider import hiiragi283.ragium.data.server.RagiumRecipeProvider import hiiragi283.ragium.data.server.advancement.RagiumAdvancementGenerator import hiiragi283.ragium.data.server.bootstrap.RagiumBiomeModifierProvider +import hiiragi283.ragium.data.server.bootstrap.RagiumBrewingRecipeDataProvider import hiiragi283.ragium.data.server.bootstrap.RagiumConfiguredProvider import hiiragi283.ragium.data.server.bootstrap.RagiumEnchantmentProvider import hiiragi283.ragium.data.server.bootstrap.RagiumPlacedProvider @@ -54,6 +55,8 @@ object RagiumDatagen { add(NeoForgeRegistries.Keys.BIOME_MODIFIERS, RagiumBiomeModifierProvider) + add(RagiumAPI.BREWING_RECIPE_KEY, RagiumBrewingRecipeDataProvider) + add(CreateRegistries.POTATO_PROJECTILE_TYPE, RagiumPotatoProjectileProvider) } diff --git a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt index 4f4e0f5b9..509ccc06a 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt @@ -347,7 +347,6 @@ class RagiumEnglishProvider(output: PackOutput) : HTLanguageProvider.English(out private fun recipeType() { add(RagiumRecipeTypes.ALLOYING, "Alloying") - add(RagiumRecipeTypes.BREWING, "Brewing") add(RagiumRecipeTypes.COMPRESSING, "Compressing") add(RagiumRecipeTypes.CRUSHING, "Crushing") add(RagiumRecipeTypes.CUTTING, "Cutting") @@ -495,6 +494,8 @@ class RagiumEnglishProvider(output: PackOutput) : HTLanguageProvider.English(out private fun emi() { add(RagiumCommonTranslation.EMI_MACHINE_UPGRADE, "Machine Upgrades") + + add(RagiumCommonTranslation.EMI_BREWING, "Brewing") } private fun jade() { diff --git a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt index 425af4d04..17718773d 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt @@ -349,7 +349,6 @@ class RagiumJapaneseProvider(output: PackOutput) : HTLanguageProvider.Japanese(o private fun recipeType() { add(RagiumRecipeTypes.ALLOYING, "合金") - add(RagiumRecipeTypes.BREWING, "醸造") add(RagiumRecipeTypes.COMPRESSING, "圧縮") add(RagiumRecipeTypes.CRUSHING, "破砕") add(RagiumRecipeTypes.CUTTING, "裁断") @@ -500,6 +499,8 @@ class RagiumJapaneseProvider(output: PackOutput) : HTLanguageProvider.Japanese(o private fun emi() { add(RagiumCommonTranslation.EMI_MACHINE_UPGRADE, "機械のアップグレード") + + add(RagiumCommonTranslation.EMI_BREWING, "醸造") } private fun jade() { diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/RagiumRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/RagiumRecipeProvider.kt index 9f7362dd9..a5dd4a331 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/RagiumRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/RagiumRecipeProvider.kt @@ -1,7 +1,6 @@ package hiiragi283.ragium.data.server import hiiragi283.ragium.api.data.HTDataGenContext -import hiiragi283.ragium.data.server.recipe.RagiumBrewingRecipeProvider import hiiragi283.ragium.data.server.recipe.RagiumChemistryRecipeProvider import hiiragi283.ragium.data.server.recipe.RagiumCompressingRecipeProvider import hiiragi283.ragium.data.server.recipe.RagiumCrushingRecipeProvider @@ -32,7 +31,6 @@ import net.minecraft.data.recipes.RecipeProvider class RagiumRecipeProvider(context: HTDataGenContext) : RecipeProvider(context.output, context.registries) { override fun buildRecipes(recipeOutput: RecipeOutput, holderLookup: HolderLookup.Provider) { - RagiumBrewingRecipeProvider.buildRecipes(recipeOutput, holderLookup) RagiumChemistryRecipeProvider.buildRecipes(recipeOutput, holderLookup) RagiumCompressingRecipeProvider.buildRecipes(recipeOutput, holderLookup) RagiumCrushingRecipeProvider.buildRecipes(recipeOutput, holderLookup) diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/bootstrap/RagiumBrewingRecipeDataProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/bootstrap/RagiumBrewingRecipeDataProvider.kt new file mode 100644 index 000000000..5be9ba1ae --- /dev/null +++ b/src/data/kotlin/hiiragi283/ragium/data/server/bootstrap/RagiumBrewingRecipeDataProvider.kt @@ -0,0 +1,104 @@ +package hiiragi283.ragium.data.server.bootstrap + +import hiiragi283.ragium.api.RagiumAPI +import hiiragi283.ragium.api.RagiumPlatform +import hiiragi283.ragium.api.data.HTBrewingRecipeData +import hiiragi283.ragium.api.data.recipe.ingredient.HTItemIngredientCreator +import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient +import hiiragi283.ragium.api.registry.createKey +import hiiragi283.ragium.api.registry.idOrThrow +import hiiragi283.ragium.api.util.wrapOptional +import hiiragi283.ragium.common.data.brewing.HTEffectBrewingRecipeData +import hiiragi283.ragium.common.data.brewing.HTPotionBrewingRecipeData +import net.minecraft.core.Holder +import net.minecraft.core.RegistrySetBuilder +import net.minecraft.data.worldgen.BootstrapContext +import net.minecraft.world.effect.MobEffect +import net.minecraft.world.effect.MobEffects +import net.minecraft.world.item.Item +import net.minecraft.world.item.Items +import net.minecraft.world.item.alchemy.Potion +import net.minecraft.world.item.alchemy.Potions +import net.neoforged.neoforge.common.Tags + +object RagiumBrewingRecipeDataProvider : RegistrySetBuilder.RegistryBootstrap { + val itemCreator: HTItemIngredientCreator = RagiumPlatform.INSTANCE.itemCreator() + + private lateinit var context: BootstrapContext + + override fun run(context: BootstrapContext) { + this.context = context + // Potion + register(itemCreator.fromItem(Items.GOLDEN_CARROT), Potions.NIGHT_VISION, Potions.LONG_NIGHT_VISION) + register(itemCreator.fromTagKey(Tags.Items.GEMS_AMETHYST), Potions.INVISIBILITY, Potions.LONG_INVISIBILITY) + register(itemCreator.fromItem(Items.RABBIT_FOOT), Potions.LEAPING, Potions.LONG_LEAPING, Potions.STRONG_LEAPING) + register(itemCreator.fromItem(Items.MAGMA_CREAM), Potions.FIRE_RESISTANCE, Potions.LONG_FIRE_RESISTANCE) + register(itemCreator.fromItem(Items.SUGAR), Potions.SWIFTNESS, Potions.LONG_SWIFTNESS, Potions.STRONG_SWIFTNESS) + register(itemCreator.fromTagKey(Tags.Items.INGOTS_IRON), Potions.SLOWNESS, Potions.LONG_SLOWNESS, Potions.STRONG_SLOWNESS) + register(itemCreator.fromItem(Items.TURTLE_SCUTE), Potions.TURTLE_MASTER, Potions.LONG_TURTLE_MASTER, Potions.STRONG_TURTLE_MASTER) + register(itemCreator.fromItem(Items.PUFFERFISH), Potions.WATER_BREATHING, Potions.LONG_WATER_BREATHING) + register(itemCreator.fromItem(Items.GLISTERING_MELON_SLICE), Potions.HEALING, null, Potions.STRONG_HEALING) + register(itemCreator.fromItem(Items.FERMENTED_SPIDER_EYE), Potions.HARMING, null, Potions.STRONG_HARMING) + register(itemCreator.fromItem(Items.SPIDER_EYE), Potions.POISON, Potions.LONG_POISON, Potions.STRONG_POISON) + register(itemCreator.fromItem(Items.GHAST_TEAR), Potions.REGENERATION, Potions.LONG_REGENERATION, Potions.STRONG_REGENERATION) + register(itemCreator.fromItem(Items.BLAZE_POWDER), Potions.STRENGTH, Potions.LONG_STRENGTH, Potions.STRONG_STRENGTH) + register(itemCreator.fromItem(Items.BONE), Potions.WEAKNESS, Potions.LONG_WEAKNESS) + register(itemCreator.fromTagKey(Tags.Items.GEMS_EMERALD), Potions.LUCK) + register(itemCreator.fromItem(Items.PHANTOM_MEMBRANE), Potions.SLOW_FALLING, Potions.LONG_SLOW_FALLING) + + register(itemCreator.fromItem(Items.WIND_CHARGE), Potions.WIND_CHARGED) + register(itemCreator.fromItem(Items.COBWEB), Potions.WEAVING) + register(itemCreator.fromTagKey(Tags.Items.STORAGE_BLOCKS_SLIME), Potions.OOZING) + register(itemCreator.fromTagKey(Tags.Items.STONES), Potions.INFESTED) + // Effect + mapOf( + Items.CAKE to MobEffects.SATURATION, + Items.GLOWSTONE to MobEffects.GLOWING, + Items.GOLDEN_PICKAXE to MobEffects.DIG_SPEED, + ).forEach { (item: Item, effect: Holder) -> + register(itemCreator.fromItem(item), effect, HTEffectBrewingRecipeData::benefit) + } + + mapOf( + Items.ECHO_SHARD to MobEffects.DARKNESS, + Items.POISONOUS_POTATO to MobEffects.CONFUSION, + Items.ROTTEN_FLESH to MobEffects.HUNGER, + Items.SHULKER_SHELL to MobEffects.LEVITATION, + Items.STONE_PICKAXE to MobEffects.DIG_SLOWDOWN, + Items.TINTED_GLASS to MobEffects.BLINDNESS, + Items.WITHER_ROSE to MobEffects.WITHER, + ).forEach { (item: Item, effect: Holder) -> + register(itemCreator.fromItem(item), effect, HTEffectBrewingRecipeData::harmful) + } + } + + @JvmStatic + fun register( + ingredient: HTItemIngredient, + base: Holder, + long: Holder? = null, + strong: Holder? = null, + ) { + context.register( + RagiumAPI.BREWING_RECIPE_KEY.createKey(base.idOrThrow.withPrefix("potion/")), + HTPotionBrewingRecipeData( + ingredient, + base, + long.wrapOptional(), + strong.wrapOptional(), + ), + ) + } + + @JvmStatic + fun register( + ingredient: HTItemIngredient, + effect: Holder, + factory: (HTItemIngredient, Holder) -> HTEffectBrewingRecipeData, + ) { + context.register( + RagiumAPI.BREWING_RECIPE_KEY.createKey(effect.idOrThrow.withPrefix("effect/")), + factory(ingredient, effect), + ) + } +} diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumBrewingRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumBrewingRecipeProvider.kt deleted file mode 100644 index 07ff09e0b..000000000 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumBrewingRecipeProvider.kt +++ /dev/null @@ -1,75 +0,0 @@ -package hiiragi283.ragium.data.server.recipe - -import hiiragi283.ragium.api.RagiumAPI -import hiiragi283.ragium.api.data.recipe.HTRecipeProvider -import hiiragi283.ragium.common.crafting.HTPotionDropRecipe -import net.minecraft.core.Holder -import net.minecraft.world.effect.MobEffect -import net.minecraft.world.effect.MobEffects -import net.minecraft.world.item.Item -import net.minecraft.world.item.Items -import net.minecraft.world.item.alchemy.Potions -import net.minecraft.world.item.crafting.CraftingBookCategory -import net.neoforged.neoforge.common.Tags - -object RagiumBrewingRecipeProvider : HTRecipeProvider.Direct() { - override fun buildRecipeInternal() { - // Potion Drop -> Potion - save( - RagiumAPI.id("shapeless", "potion"), - HTPotionDropRecipe(CraftingBookCategory.MISC), - ) - - potions() - customEffects() - } - - @JvmStatic - private fun potions() { - brewing(itemCreator.fromItem(Items.GOLDEN_CARROT), Potions.NIGHT_VISION, Potions.LONG_NIGHT_VISION, null) - brewing(itemCreator.fromTagKey(Tags.Items.GEMS_AMETHYST), Potions.INVISIBILITY, Potions.LONG_INVISIBILITY, null) - brewing(itemCreator.fromItem(Items.RABBIT_FOOT), Potions.LEAPING, Potions.LONG_LEAPING, Potions.STRONG_LEAPING) - brewing(itemCreator.fromItem(Items.MAGMA_CREAM), Potions.FIRE_RESISTANCE, Potions.LONG_FIRE_RESISTANCE, null) - brewing(itemCreator.fromItem(Items.SUGAR), Potions.SWIFTNESS, Potions.LONG_SWIFTNESS, Potions.STRONG_SWIFTNESS) - brewing(itemCreator.fromTagKey(Tags.Items.INGOTS_IRON), Potions.SLOWNESS, Potions.LONG_SLOWNESS, Potions.STRONG_SLOWNESS) - brewing(itemCreator.fromItem(Items.TURTLE_SCUTE), Potions.TURTLE_MASTER, Potions.LONG_TURTLE_MASTER, Potions.STRONG_TURTLE_MASTER) - brewing(itemCreator.fromItem(Items.PUFFERFISH), Potions.WATER_BREATHING, Potions.LONG_WATER_BREATHING, null) - brewing(itemCreator.fromItem(Items.GLISTERING_MELON_SLICE), Potions.HEALING, null, Potions.STRONG_HEALING) - brewing(itemCreator.fromItem(Items.FERMENTED_SPIDER_EYE), Potions.HARMING, null, Potions.STRONG_HARMING) - brewing(itemCreator.fromItem(Items.SPIDER_EYE), Potions.POISON, Potions.LONG_POISON, Potions.STRONG_POISON) - brewing(itemCreator.fromItem(Items.GHAST_TEAR), Potions.REGENERATION, Potions.LONG_REGENERATION, Potions.STRONG_REGENERATION) - brewing(itemCreator.fromItem(Items.BLAZE_POWDER), Potions.STRENGTH, Potions.LONG_STRENGTH, Potions.STRONG_STRENGTH) - brewing(itemCreator.fromItem(Items.BONE), Potions.WEAKNESS, Potions.LONG_WEAKNESS, null) - brewing(itemCreator.fromTagKey(Tags.Items.GEMS_EMERALD), Potions.LUCK) - brewing(itemCreator.fromItem(Items.PHANTOM_MEMBRANE), Potions.SLOW_FALLING, Potions.LONG_SLOW_FALLING, null) - - brewing(itemCreator.fromItem(Items.WIND_CHARGE), Potions.WIND_CHARGED) - brewing(itemCreator.fromItem(Items.COBWEB), Potions.WEAVING) - brewing(itemCreator.fromTagKey(Tags.Items.STORAGE_BLOCKS_SLIME), Potions.OOZING) - brewing(itemCreator.fromTagKey(Tags.Items.STONES), Potions.INFESTED) - } - - @JvmStatic - private fun customEffects() { - // Dig - mapOf( - Items.CAKE to MobEffects.SATURATION, - Items.GLOWSTONE to MobEffects.GLOWING, - Items.GOLDEN_PICKAXE to MobEffects.DIG_SPEED, - ).forEach { (item: Item, effect: Holder) -> - benefitBrewing(itemCreator.fromItem(item), effect) - } - - mapOf( - Items.ECHO_SHARD to MobEffects.DARKNESS, - Items.POISONOUS_POTATO to MobEffects.CONFUSION, - Items.ROTTEN_FLESH to MobEffects.HUNGER, - Items.SHULKER_SHELL to MobEffects.LEVITATION, - Items.STONE_PICKAXE to MobEffects.DIG_SLOWDOWN, - Items.TINTED_GLASS to MobEffects.BLINDNESS, - Items.WITHER_ROSE to MobEffects.WITHER, - ).forEach { (item: Item, effect: Holder) -> - harmfulBrewing(itemCreator.fromItem(item), effect) - } - } -} 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 aeb2f20b8..4742aec2e 100644 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/RagiumEmiPlugin.kt +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/RagiumEmiPlugin.kt @@ -12,6 +12,8 @@ import dev.emi.emi.api.recipe.VanillaEmiRecipeCategories import dev.emi.emi.api.stack.Comparison import dev.emi.emi.api.stack.EmiStack import hiiragi283.ragium.api.RagiumAPI +import hiiragi283.ragium.api.RagiumPlatform +import hiiragi283.ragium.api.data.HTBrewingRecipeData import hiiragi283.ragium.api.data.map.HTFluidCoolantData import hiiragi283.ragium.api.data.map.HTFluidFuelData import hiiragi283.ragium.api.data.map.RagiumDataMapTypes @@ -56,6 +58,7 @@ import hiiragi283.ragium.common.block.entity.HTBlockEntity import hiiragi283.ragium.common.block.entity.generator.HTCulinaryGeneratorBlockEntity import hiiragi283.ragium.common.material.CommonMaterialPrefixes import hiiragi283.ragium.common.material.FoodMaterialKeys +import hiiragi283.ragium.common.recipe.HTBrewingRecipe import hiiragi283.ragium.common.recipe.HTExtractingRecipe import hiiragi283.ragium.common.recipe.custom.HTBioExtractingRecipe import hiiragi283.ragium.common.recipe.custom.HTCopyEnchantingRecipe @@ -68,6 +71,7 @@ import hiiragi283.ragium.setup.RagiumItems import hiiragi283.ragium.setup.RagiumMenuTypes import net.minecraft.core.Holder import net.minecraft.core.HolderLookup +import net.minecraft.core.RegistryAccess import net.minecraft.core.component.DataComponents import net.minecraft.core.registries.BuiltInRegistries import net.minecraft.resources.ResourceLocation @@ -336,7 +340,7 @@ class RagiumEmiPlugin : EmiPlugin { addRegistryRecipes(registry, RagiumRecipeTypes.MIXING, ::HTMixingEmiRecipe) addRegistryRecipes(registry, RagiumRecipeTypes.REFINING, ::HTRefiningEmiRecipe) // Elite - addRegistryRecipes(registry, RagiumRecipeTypes.BREWING, ::HTBrewingEmiRecipe) + addRecipes(registry, collectBrewingRecipes(), ::HTBrewingEmiRecipe) addRegistryRecipes(registry, RagiumRecipeTypes.PLANTING, ::HTPlantingEmiRecipe) // Ultimate addRegistryRecipes(registry, RagiumRecipeTypes.ENCHANTING, ::HTEnchantingEmiRecipe) @@ -348,6 +352,32 @@ class RagiumEmiPlugin : EmiPlugin { addRegistryRecipes(registry, RagiumRecipeTypes.ROCK_GENERATING, ::HTRockGeneratingEmiRecipe) } + private fun collectBrewingRecipes(): Sequence> { + val access: RegistryAccess = RagiumPlatform.INSTANCE.getRegistryAccess() ?: return sequenceOf() + return access + .lookupOrThrow(RagiumAPI.BREWING_RECIPE_KEY) + .listElements() + .asSequence() + .flatMap { holder: Holder -> + val id: ResourceLocation = holder.idOrThrow.withPrefix("/") + val recipeData: HTBrewingRecipeData = holder.value() + buildList { + // base + this.add(id to HTBrewingRecipe.createBaseRecipe(recipeData)) + // long + HTBrewingRecipe + .createLongRecipe(recipeData) + ?.let { id.withSuffix("/long") to it } + ?.let(this::add) + // strong + HTBrewingRecipe + .createStrongRecipe(recipeData) + ?.let { id.withSuffix("/strong") to it } + ?.let(this::add) + } + } + } + private fun addInteractions(registry: EmiRegistry) { // Imitation Spawner BuiltInRegistries.ENTITY_TYPE @@ -382,6 +412,10 @@ class RagiumEmiPlugin : EmiPlugin { // Extensions // + private fun skipRecipe(id: ResourceLocation) { + RagiumAPI.LOGGER.warn("Skipped recipe for EMI registration: $id") + } + private inline fun EmiRegistry.addRecipeSafe(id: ResourceLocation, factory: (ResourceLocation) -> EmiRecipe) { runCatching { addRecipe(factory(id)) @@ -411,7 +445,7 @@ class RagiumEmiPlugin : EmiPlugin { if (recipe is RECIPE) { RecipeHolder(id, recipe) } else { - RagiumAPI.LOGGER.warn("Skipped recipe for EMI registration: $id") + skipRecipe(id) null } }.mapNotNull(factory) 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 4d03ea911..b5a3862da 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 @@ -99,8 +99,11 @@ object RagiumEmiRecipeCategories { // Elite @JvmField - val BREWING: HTEmiRecipeCategory = - machine(RagiumRecipeTypes.BREWING, RagiumBlocks.BREWERY) + val BREWING: HTEmiRecipeCategory = HTEmiRecipeCategory.create( + MACHINE_BOUNDS, + RagiumBlocks.BREWERY, + RagiumCommonTranslation.EMI_BREWING::translate, + ) @JvmField val PLANTING: HTEmiRecipeCategory = diff --git a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/data/HTEmiFluidFuelData.kt b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/data/HTEmiFluidFuelData.kt index 096e717fe..9cc179c94 100644 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/data/HTEmiFluidFuelData.kt +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/data/HTEmiFluidFuelData.kt @@ -1,6 +1,6 @@ package hiiragi283.ragium.client.integration.emi.data -import dev.emi.emi.api.stack.EmiStack +import dev.emi.emi.api.stack.EmiIngredient @JvmRecord -data class HTEmiFluidFuelData(val input: EmiStack, val time: Int) +data class HTEmiFluidFuelData(val input: EmiIngredient, val time: Int) diff --git a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/base/HTCombineEmiRecipe.kt b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/base/HTCombineEmiRecipe.kt index c11ace69b..e0eff288d 100644 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/base/HTCombineEmiRecipe.kt +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/base/HTCombineEmiRecipe.kt @@ -1,31 +1,19 @@ package hiiragi283.ragium.client.integration.emi.recipe.base import dev.emi.emi.api.render.EmiTexture -import dev.emi.emi.api.stack.EmiIngredient -import dev.emi.emi.api.stack.EmiStack import dev.emi.emi.api.widget.WidgetHolder -import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient import hiiragi283.ragium.client.integration.emi.addArrow import hiiragi283.ragium.client.integration.emi.addPlus import hiiragi283.ragium.client.integration.emi.category.HTEmiRecipeCategory import hiiragi283.ragium.client.integration.emi.recipe.HTEmiHolderRecipe -import hiiragi283.ragium.common.recipe.base.HTBasicCombineRecipe +import net.minecraft.resources.ResourceLocation +import net.minecraft.world.item.crafting.Recipe import net.minecraft.world.item.crafting.RecipeHolder -abstract class HTCombineEmiRecipe(category: HTEmiRecipeCategory, holder: RecipeHolder) : - HTEmiHolderRecipe(category, holder) { - init { - val (left: HTItemIngredient, right: HTItemIngredient) = recipe.itemIngredients - addInput(left) - addInput(right) - addInput(getFluidIngredient(recipe)) +abstract class HTCombineEmiRecipe> : HTEmiHolderRecipe { + constructor(category: HTEmiRecipeCategory, id: ResourceLocation, recipe: RECIPE) : super(category, id, recipe) - addOutputs(getResult(recipe)) - } - - protected abstract fun getFluidIngredient(recipe: RECIPE): EmiIngredient - - protected abstract fun getResult(recipe: RECIPE): EmiStack + constructor(category: HTEmiRecipeCategory, holder: RecipeHolder) : super(category, holder) final override fun addWidgets(widgets: WidgetHolder) { widgets.addArrow(getPosition(2.5), getPosition(1)) diff --git a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTBrewingEmiRecipe.kt b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTBrewingEmiRecipe.kt index 24cfbc0d9..5022dda8f 100644 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTBrewingEmiRecipe.kt +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTBrewingEmiRecipe.kt @@ -1,19 +1,18 @@ package hiiragi283.ragium.client.integration.emi.recipe.processor -import dev.emi.emi.api.stack.EmiIngredient -import dev.emi.emi.api.stack.EmiStack -import hiiragi283.ragium.api.item.alchemy.HTPotionHelper import hiiragi283.ragium.client.integration.emi.category.RagiumEmiRecipeCategories import hiiragi283.ragium.client.integration.emi.recipe.base.HTCombineEmiRecipe import hiiragi283.ragium.client.integration.emi.toEmi import hiiragi283.ragium.common.recipe.HTBrewingRecipe -import hiiragi283.ragium.setup.RagiumItems -import net.minecraft.world.item.crafting.RecipeHolder +import net.minecraft.resources.ResourceLocation -class HTBrewingEmiRecipe(holder: RecipeHolder) : - HTCombineEmiRecipe(RagiumEmiRecipeCategories.BREWING, holder) { - override fun getFluidIngredient(recipe: HTBrewingRecipe): EmiIngredient = HTBrewingRecipe.FLUID_INGREDIENT.toEmi() +class HTBrewingEmiRecipe(id: ResourceLocation, recipe: HTBrewingRecipe) : + HTCombineEmiRecipe(RagiumEmiRecipeCategories.BREWING, id, recipe) { + init { + addInput(recipe.left.toEmi()) + addInput(recipe.ingredient) + addInput(HTBrewingRecipe.FLUID_INGREDIENT) - override fun getResult(recipe: HTBrewingRecipe): EmiStack = - HTPotionHelper.createPotion(RagiumItems.POTION_DROP, recipe.contents).toEmi() + addOutputs(recipe.potionDrop.toEmi()) + } } diff --git a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTEnchantingEmiRecipe.kt b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTEnchantingEmiRecipe.kt index a82045216..33908ab9f 100644 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTEnchantingEmiRecipe.kt +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTEnchantingEmiRecipe.kt @@ -1,8 +1,7 @@ package hiiragi283.ragium.client.integration.emi.recipe.processor -import dev.emi.emi.api.stack.EmiIngredient -import dev.emi.emi.api.stack.EmiStack import hiiragi283.ragium.api.item.createEnchantedBook +import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient import hiiragi283.ragium.client.integration.emi.category.RagiumEmiRecipeCategories import hiiragi283.ragium.client.integration.emi.recipe.base.HTCombineEmiRecipe import hiiragi283.ragium.client.integration.emi.toEmi @@ -13,8 +12,11 @@ import net.minecraft.world.item.crafting.RecipeHolder class HTEnchantingEmiRecipe(holder: RecipeHolder) : HTCombineEmiRecipe(RagiumEmiRecipeCategories.ENCHANTING, holder) { - override fun getFluidIngredient(recipe: HTEnchantingRecipe): EmiIngredient = - RagiumFluidContents.EXPERIENCE.toFluidEmi(recipe.getRequiredExpFluid()) - - override fun getResult(recipe: HTEnchantingRecipe): EmiStack = recipe.holder.let(::createEnchantedBook).toEmi() + init { + val (left: HTItemIngredient, right: HTItemIngredient) = recipe.itemIngredients + addInput(left) + addInput(right) + addInput(RagiumFluidContents.EXPERIENCE.toFluidEmi(recipe.getRequiredExpFluid())) + addOutputs(recipe.holder.let(::createEnchantedBook).toEmi()) + } } diff --git a/src/main/kotlin/hiiragi283/ragium/RagiumCommon.kt b/src/main/kotlin/hiiragi283/ragium/RagiumCommon.kt index f54917816..4212de6c7 100644 --- a/src/main/kotlin/hiiragi283/ragium/RagiumCommon.kt +++ b/src/main/kotlin/hiiragi283/ragium/RagiumCommon.kt @@ -1,6 +1,7 @@ package hiiragi283.ragium import hiiragi283.ragium.api.RagiumAPI +import hiiragi283.ragium.api.data.HTBrewingRecipeData import hiiragi283.ragium.api.data.map.RagiumDataMapTypes import hiiragi283.ragium.api.network.HTPayloadHandlers import hiiragi283.ragium.client.network.HTUpdateAccessConfigPayload @@ -78,6 +79,7 @@ class RagiumCommon(eventBus: IEventBus, container: ModContainer, dist: Dist) { } private fun registerRegistries(event: NewRegistryEvent) { + event.register(RagiumAPI.BREWING_RECIPE_TYPE_REGISTRY) event.register(RagiumAPI.EQUIP_ACTION_TYPE_REGISTRY) event.register(RagiumAPI.SLOT_TYPE_REGISTRY) @@ -85,7 +87,7 @@ class RagiumCommon(eventBus: IEventBus, container: ModContainer, dist: Dist) { } private fun registerDataPackRegistries(event: DataPackRegistryEvent.NewRegistry) { - // event.dataPackRegistry(RagiumAPI.SOLAR_POWER_KEY, HTSolarPower.DIRECT_CODEC, HTSolarPower.DIRECT_CODEC) + event.dataPackRegistry(RagiumAPI.BREWING_RECIPE_KEY, HTBrewingRecipeData.CODEC, HTBrewingRecipeData.CODEC) RagiumAPI.LOGGER.info("Registered new data pack registries!") } 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 e6acb0e4f..dd24f2f5c 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,6 +1,8 @@ package hiiragi283.ragium.common.block.entity.processor -import hiiragi283.ragium.api.recipe.RagiumRecipeTypes +import hiiragi283.ragium.api.RagiumAPI +import hiiragi283.ragium.api.data.HTBrewingRecipeData +import hiiragi283.ragium.api.recipe.HTRecipeFinder import hiiragi283.ragium.api.recipe.input.HTRecipeInput import hiiragi283.ragium.api.recipe.multi.HTCombineRecipe import hiiragi283.ragium.api.stack.ImmutableFluidStack @@ -8,13 +10,53 @@ import hiiragi283.ragium.common.block.entity.processor.base.HTAbstractCombinerBl import hiiragi283.ragium.common.recipe.HTBrewingRecipe import hiiragi283.ragium.setup.RagiumBlocks import net.minecraft.core.BlockPos +import net.minecraft.core.Holder +import net.minecraft.resources.ResourceLocation import net.minecraft.server.level.ServerLevel import net.minecraft.sounds.SoundEvents import net.minecraft.sounds.SoundSource +import net.minecraft.world.item.crafting.RecipeHolder +import net.minecraft.world.level.Level import net.minecraft.world.level.block.state.BlockState +import kotlin.streams.asSequence + +class HTBreweryBlockEntity(pos: BlockPos, state: BlockState) : HTAbstractCombinerBlockEntity(FINDER, RagiumBlocks.BREWERY, pos, state) { + companion object { + @JvmStatic + private val FAKE_ID: ResourceLocation = RagiumAPI.id("/brewing/fake") + + @JvmStatic + private val FINDER = HTRecipeFinder { _, input: HTRecipeInput, level: Level, lastRecipe: RecipeHolder? -> + if (lastRecipe != null && lastRecipe.value().matches(input, level)) { + return@HTRecipeFinder lastRecipe + } + level + .registryAccess() + .lookupOrThrow(RagiumAPI.BREWING_RECIPE_KEY) + .listElements() + .asSequence() + .forEach { holder: Holder.Reference -> + val recipeData: HTBrewingRecipeData = holder.value() + + val base: HTBrewingRecipe = HTBrewingRecipe.createBaseRecipe(recipeData) + if (base.matches(input, level)) { + return@HTRecipeFinder RecipeHolder(FAKE_ID, base) + } + HTBrewingRecipe.createLongRecipe(recipeData)?.let { long: HTBrewingRecipe -> + if (long.matches(input, level)) { + return@HTRecipeFinder RecipeHolder(FAKE_ID, long) + } + } + HTBrewingRecipe.createStrongRecipe(recipeData)?.let { strong: HTBrewingRecipe -> + if (strong.matches(input, level)) { + return@HTRecipeFinder RecipeHolder(FAKE_ID, strong) + } + } + } + null + } + } -class HTBreweryBlockEntity(pos: BlockPos, state: BlockState) : - HTAbstractCombinerBlockEntity(RagiumRecipeTypes.BREWING, RagiumBlocks.BREWERY, pos, state) { override fun filterFluid(stack: ImmutableFluidStack): Boolean = HTBrewingRecipe.FLUID_INGREDIENT.testOnlyType(stack) override fun completeRecipe( diff --git a/src/main/kotlin/hiiragi283/ragium/common/data/brewing/HTEffectBrewingRecipeData.kt b/src/main/kotlin/hiiragi283/ragium/common/data/brewing/HTEffectBrewingRecipeData.kt new file mode 100644 index 000000000..13e91c750 --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/data/brewing/HTEffectBrewingRecipeData.kt @@ -0,0 +1,60 @@ +package hiiragi283.ragium.common.data.brewing + +import com.mojang.serialization.MapCodec +import hiiragi283.ragium.api.RagiumConst +import hiiragi283.ragium.api.data.HTBrewingRecipeData +import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient +import hiiragi283.ragium.api.serialization.codec.BiCodecs +import hiiragi283.ragium.api.serialization.codec.MapBiCodec +import hiiragi283.ragium.api.serialization.codec.VanillaBiCodecs +import net.minecraft.core.Holder +import net.minecraft.core.registries.Registries +import net.minecraft.network.RegistryFriendlyByteBuf +import net.minecraft.world.effect.MobEffect +import net.minecraft.world.effect.MobEffectInstance +import net.minecraft.world.item.alchemy.PotionContents +import java.util.Optional + +class HTEffectBrewingRecipeData( + private val ingredient: HTItemIngredient, + private val effect: Holder, + private val baseTime: Int, + private val longTime: Int, + private val strongTime: Int, +) : HTBrewingRecipeData { + companion object { + @JvmField + val BI_CODEC: MapBiCodec = MapBiCodec.composite( + HTItemIngredient.UNSIZED_CODEC.fieldOf(RagiumConst.INGREDIENT).forGetter(HTEffectBrewingRecipeData::getIngredient), + VanillaBiCodecs.holder(Registries.MOB_EFFECT).fieldOf("effect").forGetter(HTEffectBrewingRecipeData::effect), + BiCodecs.POSITIVE_INT.fieldOf("base_time").forGetter(HTEffectBrewingRecipeData::baseTime), + BiCodecs.POSITIVE_INT.fieldOf("long_time").forGetter(HTEffectBrewingRecipeData::longTime), + BiCodecs.POSITIVE_INT.fieldOf("strong_time").forGetter(HTEffectBrewingRecipeData::strongTime), + ::HTEffectBrewingRecipeData, + ) + + @JvmField + val CODEC: MapCodec = BI_CODEC.codec + + @JvmStatic + fun benefit(ingredient: HTItemIngredient, effect: Holder): HTEffectBrewingRecipeData = + HTEffectBrewingRecipeData(ingredient, effect, 3600, 9600, 1800) + + @JvmStatic + fun harmful(ingredient: HTItemIngredient, effect: Holder): HTEffectBrewingRecipeData = + HTEffectBrewingRecipeData(ingredient, effect, 900, 1800, 432) + } + + override fun type(): MapCodec = CODEC + + override fun getIngredient(): HTItemIngredient = ingredient + + private fun createContent(instance: MobEffectInstance): PotionContents = + PotionContents(Optional.empty(), Optional.empty(), listOf(instance)) + + override fun getBasePotion(): PotionContents = createContent(MobEffectInstance(effect, baseTime)) + + override fun getLongPotion(): PotionContents = createContent(MobEffectInstance(effect, longTime)) + + override fun getStrongPotion(): PotionContents = createContent(MobEffectInstance(effect, strongTime, 1)) +} diff --git a/src/main/kotlin/hiiragi283/ragium/common/data/brewing/HTPotionBrewingRecipeData.kt b/src/main/kotlin/hiiragi283/ragium/common/data/brewing/HTPotionBrewingRecipeData.kt new file mode 100644 index 000000000..e546be1ca --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/data/brewing/HTPotionBrewingRecipeData.kt @@ -0,0 +1,45 @@ +package hiiragi283.ragium.common.data.brewing + +import com.mojang.serialization.MapCodec +import hiiragi283.ragium.api.RagiumConst +import hiiragi283.ragium.api.data.HTBrewingRecipeData +import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient +import hiiragi283.ragium.api.serialization.codec.MapBiCodec +import hiiragi283.ragium.api.serialization.codec.VanillaBiCodecs +import net.minecraft.core.Holder +import net.minecraft.core.registries.Registries +import net.minecraft.network.RegistryFriendlyByteBuf +import net.minecraft.world.item.alchemy.Potion +import net.minecraft.world.item.alchemy.PotionContents +import java.util.Optional + +class HTPotionBrewingRecipeData( + private val ingredient: HTItemIngredient, + private val base: Holder, + private val long: Optional>, + private val strong: Optional>, +) : HTBrewingRecipeData { + companion object { + @JvmField + val BI_CODEC: MapBiCodec = MapBiCodec.composite( + HTItemIngredient.UNSIZED_CODEC.fieldOf(RagiumConst.INGREDIENT).forGetter(HTPotionBrewingRecipeData::getIngredient), + VanillaBiCodecs.holder(Registries.POTION).fieldOf("base").forGetter(HTPotionBrewingRecipeData::base), + VanillaBiCodecs.holder(Registries.POTION).optionalFieldOf("long").forGetter(HTPotionBrewingRecipeData::long), + VanillaBiCodecs.holder(Registries.POTION).optionalFieldOf("strong").forGetter(HTPotionBrewingRecipeData::strong), + ::HTPotionBrewingRecipeData, + ) + + @JvmField + val CODEC: MapCodec = BI_CODEC.codec + } + + override fun type(): MapCodec = CODEC + + override fun getIngredient(): HTItemIngredient = ingredient + + override fun getBasePotion(): PotionContents = PotionContents(base) + + override fun getLongPotion(): PotionContents = PotionContents(long, Optional.empty(), listOf()) + + override fun getStrongPotion(): PotionContents = PotionContents(strong, Optional.empty(), listOf()) +} diff --git a/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTCombineRecipeBuilder.kt b/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTCombineRecipeBuilder.kt index bf922782e..6484fcd8b 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTCombineRecipeBuilder.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTCombineRecipeBuilder.kt @@ -2,17 +2,13 @@ package hiiragi283.ragium.common.data.recipe import hiiragi283.ragium.api.RagiumConst import hiiragi283.ragium.api.data.recipe.HTRecipeBuilder -import hiiragi283.ragium.api.item.alchemy.HTMobEffectInstance -import hiiragi283.ragium.api.item.alchemy.HTPotionContents import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient import hiiragi283.ragium.api.recipe.multi.HTCombineRecipe import hiiragi283.ragium.api.registry.idOrThrow -import hiiragi283.ragium.common.recipe.HTBrewingRecipe import hiiragi283.ragium.common.recipe.HTEnchantingRecipe import net.minecraft.core.Holder import net.minecraft.resources.ResourceLocation import net.minecraft.world.item.Items -import net.minecraft.world.item.alchemy.Potion import net.minecraft.world.item.crafting.Ingredient import net.minecraft.world.item.enchantment.Enchantment import java.util.function.Supplier @@ -26,37 +22,6 @@ class HTCombineRecipeBuilder( private val result: RESULT, ) : HTRecipeBuilder>(prefix) { companion object { - @JvmStatic - fun brewing( - leftIngredient: HTItemIngredient, - rightIngredient: HTItemIngredient, - potion: Holder, - ): HTCombineRecipeBuilder = HTCombineRecipeBuilder( - RagiumConst.BREWING, - ::HTBrewingRecipe, - potion::idOrThrow, - leftIngredient, - rightIngredient, - HTPotionContents(potion), - ) - - @JvmStatic - fun brewing( - leftIngredient: HTItemIngredient, - rightIngredient: HTItemIngredient, - builderAction: MutableList.() -> Unit, - ): HTCombineRecipeBuilder { - val instances: List = buildList(builderAction) - return HTCombineRecipeBuilder( - RagiumConst.BREWING, - ::HTBrewingRecipe, - { instances.first().getId() }, - leftIngredient, - rightIngredient, - HTPotionContents(instances), - ) - } - @Suppress("DEPRECATION") @JvmStatic fun enchanting(ingredient: HTItemIngredient, holder: Holder): HTCombineRecipeBuilder> = diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/HTBrewingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/HTBrewingRecipe.kt index 6be9b239b..296f96554 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/recipe/HTBrewingRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/HTBrewingRecipe.kt @@ -1,37 +1,75 @@ package hiiragi283.ragium.common.recipe import hiiragi283.ragium.api.RagiumPlatform -import hiiragi283.ragium.api.item.alchemy.HTPotionContents +import hiiragi283.ragium.api.data.HTBrewingRecipeData import hiiragi283.ragium.api.item.alchemy.HTPotionHelper -import hiiragi283.ragium.api.recipe.RagiumRecipeTypes +import hiiragi283.ragium.api.recipe.HTRecipe import hiiragi283.ragium.api.recipe.ingredient.HTFluidIngredient import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient 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 import hiiragi283.ragium.api.stack.toImmutable -import hiiragi283.ragium.common.recipe.base.HTBasicCombineRecipe import hiiragi283.ragium.setup.RagiumItems -import hiiragi283.ragium.setup.RagiumRecipeSerializers import net.minecraft.core.HolderLookup -import net.minecraft.world.item.crafting.RecipeSerializer -import net.minecraft.world.item.crafting.RecipeType +import net.minecraft.core.component.DataComponents +import net.minecraft.tags.TagKey +import net.minecraft.world.item.Item +import net.minecraft.world.item.ItemStack +import net.minecraft.world.item.alchemy.PotionContents +import net.neoforged.neoforge.common.Tags +import net.neoforged.neoforge.common.crafting.DataComponentIngredient -class HTBrewingRecipe(itemIngredients: Pair, val contents: HTPotionContents) : - HTBasicCombineRecipe(itemIngredients) { +class HTBrewingRecipe(val left: TagKey, val ingredient: HTItemIngredient, val contents: PotionContents) : + HTCombineRecipe, + HTRecipe.Fake { companion object { @JvmField val FLUID_INGREDIENT: HTFluidIngredient = RagiumPlatform.INSTANCE.fluidCreator().water(1000) + + @JvmStatic + fun createBaseRecipe(recipeData: HTBrewingRecipeData): HTBrewingRecipe = + HTBrewingRecipe(Tags.Items.CROPS_NETHER_WART, recipeData.getIngredient(), recipeData.getBasePotion()) + + @JvmStatic + private fun createDropIngredient(recipeData: HTBrewingRecipeData): HTItemIngredient = HTItemIngredient( + DataComponentIngredient.of( + false, + DataComponents.POTION_CONTENTS, + recipeData.getBasePotion(), + RagiumItems.POTION_DROP, + ), + 1, + ) + + @JvmStatic + fun createLongRecipe(recipeData: HTBrewingRecipeData): HTBrewingRecipe? { + val long: PotionContents = recipeData.getLongPotion().takeUnless { it.allEffects.none() } ?: return null + return HTBrewingRecipe(Tags.Items.DUSTS_REDSTONE, createDropIngredient(recipeData), long) + } + + @JvmStatic + fun createStrongRecipe(recipeData: HTBrewingRecipeData): HTBrewingRecipe? { + val strong: PotionContents = recipeData.getStrongPotion().takeUnless { it.allEffects.none() } ?: return null + return HTBrewingRecipe(Tags.Items.DUSTS_GLOWSTONE, createDropIngredient(recipeData), strong) + } } - override fun testFluid(stack: ImmutableFluidStack): Boolean = FLUID_INGREDIENT.test(stack) + val potionDrop: ItemStack = HTPotionHelper.createPotion(RagiumItems.POTION_DROP, contents) - override fun getRequiredAmount(input: HTRecipeInput): Int = FLUID_INGREDIENT.getRequiredAmount() + override fun getLeftRequiredCount(): Int = 1 + + override fun getRightRequiredCount(): Int = ingredient.getRequiredAmount() - override fun assembleItem(input: HTRecipeInput, provider: HolderLookup.Provider): ImmutableItemStack? = - HTPotionHelper.createPotion(RagiumItems.POTION_DROP, contents).toImmutable() + override fun getRequiredAmount(input: HTRecipeInput): Int = FLUID_INGREDIENT.getRequiredAmount() - override fun getSerializer(): RecipeSerializer<*> = RagiumRecipeSerializers.BREWING + override fun test(left: ImmutableItemStack, right: ImmutableItemStack, fluid: ImmutableFluidStack): Boolean { + val bool1: Boolean = left.isOf(this.left) + val bool2: Boolean = ingredient.test(right) + val bool3: Boolean = FLUID_INGREDIENT.test(fluid) + return bool1 && bool2 && bool3 + } - override fun getType(): RecipeType<*> = RagiumRecipeTypes.BREWING.get() + override fun assembleItem(input: HTRecipeInput, provider: HolderLookup.Provider): ImmutableItemStack? = potionDrop.toImmutable() } diff --git a/src/main/kotlin/hiiragi283/ragium/common/text/RagiumCommonTranslation.kt b/src/main/kotlin/hiiragi283/ragium/common/text/RagiumCommonTranslation.kt index 83a596ce3..575e79cd6 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/text/RagiumCommonTranslation.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/text/RagiumCommonTranslation.kt @@ -118,6 +118,8 @@ enum class RagiumCommonTranslation(type: String, vararg path: String) : HTTransl // EMI EMI_MACHINE_UPGRADE("emi.category", "machine_upgrade"), + EMI_BREWING("emi.category", "brewing"), + // Jade JADE_MACHINE_TIER("jade", "machine_tier"), ; diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumMiscRegister.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumMiscRegister.kt index 278e84b32..bae0b8ce4 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumMiscRegister.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumMiscRegister.kt @@ -3,28 +3,22 @@ package hiiragi283.ragium.setup import hiiragi283.ragium.api.RagiumAPI import hiiragi283.ragium.api.data.map.equip.HTMobEffectEquipAction import hiiragi283.ragium.api.recipe.RagiumRecipeTypes -import hiiragi283.ragium.api.recipe.ingredient.HTPotionIngredient -import hiiragi283.ragium.api.recipe.ingredient.RagiumIngredientTypes -import hiiragi283.ragium.api.registry.HTDeferredHolder import hiiragi283.ragium.api.registry.commonId import hiiragi283.ragium.api.registry.impl.HTDeferredRecipeType import hiiragi283.ragium.api.registry.vanillaId -import hiiragi283.ragium.api.serialization.codec.MapBiCodec import hiiragi283.ragium.api.variant.HTEquipmentMaterial +import hiiragi283.ragium.common.data.brewing.HTEffectBrewingRecipeData +import hiiragi283.ragium.common.data.brewing.HTPotionBrewingRecipeData import hiiragi283.ragium.common.inventory.slot.payload.HTFluidSyncPayload import hiiragi283.ragium.common.inventory.slot.payload.HTIntSyncPayload import hiiragi283.ragium.common.inventory.slot.payload.HTLongSyncPayload import hiiragi283.ragium.common.inventory.slot.payload.HTTeleportPosSyncPayload import net.minecraft.core.registries.Registries -import net.minecraft.network.RegistryFriendlyByteBuf import net.minecraft.resources.ResourceLocation import net.minecraft.world.item.ArmorItem import net.minecraft.world.item.ArmorMaterial import net.minecraft.world.item.crafting.Recipe import net.minecraft.world.item.crafting.RecipeType -import net.neoforged.neoforge.common.crafting.ICustomIngredient -import net.neoforged.neoforge.common.crafting.IngredientType -import net.neoforged.neoforge.registries.NeoForgeRegistries import net.neoforged.neoforge.registries.RegisterEvent object RagiumMiscRegister { @@ -40,7 +34,6 @@ object RagiumMiscRegister { event.register(Registries.RECIPE_TYPE) { helper -> // Machine register(helper, RagiumRecipeTypes.ALLOYING) - register(helper, RagiumRecipeTypes.BREWING) register(helper, RagiumRecipeTypes.COMPRESSING) register(helper, RagiumRecipeTypes.CRUSHING) register(helper, RagiumRecipeTypes.CUTTING) @@ -55,17 +48,12 @@ object RagiumMiscRegister { } // Ingredient Type - event.register(NeoForgeRegistries.Keys.INGREDIENT_TYPES) { helper -> - fun register( - holder: HTDeferredHolder, IngredientType>, - codec: MapBiCodec, - ) { - helper.register(holder.id, codec.toSerializer(::IngredientType)) - } - register(RagiumIngredientTypes.POTION, HTPotionIngredient.CODEC) + // Brewing Recipe Type + event.register(RagiumAPI.BREWING_RECIPE_TYPE_KEY) { helper -> + helper.register(RagiumAPI.id("potion"), HTPotionBrewingRecipeData.CODEC) + helper.register(RagiumAPI.id("effect"), HTEffectBrewingRecipeData.CODEC) } - // Armor Equip Type event.register(RagiumAPI.EQUIP_ACTION_TYPE_KEY) { helper -> helper.register(RagiumAPI.id("mob_effect"), HTMobEffectEquipAction.CODEC) diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeSerializers.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeSerializers.kt index 21c126cfc..85c1b43e0 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeSerializers.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeSerializers.kt @@ -3,7 +3,6 @@ package hiiragi283.ragium.setup import com.mojang.serialization.MapCodec import hiiragi283.ragium.api.RagiumAPI import hiiragi283.ragium.api.RagiumConst -import hiiragi283.ragium.api.item.alchemy.HTPotionContents import hiiragi283.ragium.api.recipe.extra.HTPlantingRecipe import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient import hiiragi283.ragium.api.recipe.multi.HTRockGeneratingRecipe @@ -18,7 +17,6 @@ import hiiragi283.ragium.common.crafting.HTPotionDropRecipe import hiiragi283.ragium.common.crafting.HTUpgradeChargeRecipe import hiiragi283.ragium.common.recipe.HTAlloyingRecipe import hiiragi283.ragium.common.recipe.HTBlockSimulatingRecipe -import hiiragi283.ragium.common.recipe.HTBrewingRecipe import hiiragi283.ragium.common.recipe.HTCompressingRecipe import hiiragi283.ragium.common.recipe.HTCrushingRecipe import hiiragi283.ragium.common.recipe.HTCuttingRecipe @@ -111,15 +109,6 @@ object RagiumRecipeSerializers { ), ) - @JvmField - val BREWING: RecipeSerializer = register( - RagiumConst.BREWING, - RagiumRecipeBiCodecs.combine( - ::HTBrewingRecipe, - HTPotionContents.CODEC.fieldOf("contents").forGetter(HTBrewingRecipe::contents), - ), - ) - @JvmField val COMPRESSING: RecipeSerializer = register( RagiumConst.COMPRESSING, From 6c6ec1661efed17fd083b7353a1e14ee57c5182c Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Thu, 11 Dec 2025 07:47:01 +0900 Subject: [PATCH 18/49] refactor: refine scripts --- .../ragium/api/item/component/HTSpawnerMob.kt | 3 +- .../ragium/api/recipe/RagiumRecipeTypes.kt | 6 +--- .../api/recipe/multi/HTSimulatingRecipe.kt | 15 -------- .../data/client/RagiumEnglishProvider.kt | 6 ++-- .../data/client/RagiumJapaneseProvider.kt | 6 ++-- .../emi/category/RagiumEmiRecipeCategories.kt | 4 +-- .../device/HTRockGeneratingEmiRecipe.kt | 6 +++- .../recipe/processor/HTSimulatingEmiRecipe.kt | 36 ++++++------------- .../processor/HTSimulatorBlockEntity.kt | 6 ++-- .../data/recipe/HTSimulatingRecipeBuilder.kt | 6 ++-- .../recipe/base/HTBasicSimulatingRecipe.kt | 8 +++-- .../common/text/RagiumCommonTranslation.kt | 6 ++-- 12 files changed, 45 insertions(+), 63 deletions(-) delete mode 100644 src/api/kotlin/hiiragi283/ragium/api/recipe/multi/HTSimulatingRecipe.kt diff --git a/src/api/kotlin/hiiragi283/ragium/api/item/component/HTSpawnerMob.kt b/src/api/kotlin/hiiragi283/ragium/api/item/component/HTSpawnerMob.kt index c7ec8313f..f9fcfab44 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/item/component/HTSpawnerMob.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/item/component/HTSpawnerMob.kt @@ -8,7 +8,8 @@ import net.minecraft.core.registries.Registries import net.minecraft.network.RegistryFriendlyByteBuf import net.minecraft.world.entity.EntityType -data class HTSpawnerMob(val holder: Holder>) { +@JvmInline +value class HTSpawnerMob(val holder: Holder>) { companion object { @JvmField val CODEC: BiCodec = VanillaBiCodecs diff --git a/src/api/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeTypes.kt b/src/api/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeTypes.kt index 8e3c3d130..4ac697d02 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeTypes.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeTypes.kt @@ -10,7 +10,6 @@ import hiiragi283.ragium.api.recipe.multi.HTComplexRecipe import hiiragi283.ragium.api.recipe.multi.HTItemWithCatalystRecipe import hiiragi283.ragium.api.recipe.multi.HTRockGeneratingRecipe import hiiragi283.ragium.api.recipe.multi.HTShapelessInputsRecipe -import hiiragi283.ragium.api.recipe.multi.HTSimulatingRecipe import hiiragi283.ragium.api.recipe.single.HTSingleFluidRecipe import hiiragi283.ragium.api.registry.impl.HTDeferredRecipeType import net.minecraft.world.item.crafting.Recipe @@ -20,9 +19,6 @@ object RagiumRecipeTypes { @JvmField val ALLOYING: HTDeferredRecipeType = create(RagiumConst.ALLOYING) - @JvmField - val BREWING: HTDeferredRecipeType = create(RagiumConst.BREWING) - @JvmField val COMPRESSING: HTDeferredRecipeType = create(RagiumConst.COMPRESSING) @@ -54,7 +50,7 @@ object RagiumRecipeTypes { 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/multi/HTSimulatingRecipe.kt b/src/api/kotlin/hiiragi283/ragium/api/recipe/multi/HTSimulatingRecipe.kt deleted file mode 100644 index 01c357cfa..000000000 --- a/src/api/kotlin/hiiragi283/ragium/api/recipe/multi/HTSimulatingRecipe.kt +++ /dev/null @@ -1,15 +0,0 @@ -package hiiragi283.ragium.api.recipe.multi - -import hiiragi283.ragium.api.recipe.HTFluidRecipe -import hiiragi283.ragium.api.recipe.RagiumRecipeTypes -import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient -import net.minecraft.world.item.crafting.RecipeType - -/** - * 単一のアイテムと触媒から複数の完成品(アイテム,液体)を生産するレシピ - */ -interface HTSimulatingRecipe : - HTFluidRecipe, - HTItemIngredient.CountGetter { - override fun getType(): RecipeType<*> = RagiumRecipeTypes.SIMULATING.get() -} diff --git a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt index 509ccc06a..c078f9175 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt @@ -493,9 +493,11 @@ class RagiumEnglishProvider(output: PackOutput) : HTLanguageProvider.English(out // Addon // private fun emi() { - add(RagiumCommonTranslation.EMI_MACHINE_UPGRADE, "Machine Upgrades") + add(RagiumCommonTranslation.EMI_MACHINE_UPGRADE_TITLE, "Machine Upgrades") - add(RagiumCommonTranslation.EMI_BREWING, "Brewing") + add(RagiumCommonTranslation.EMI_BREWING_TITLE, "Brewing") + + add(RagiumCommonTranslation.EMI_BLOCK_CATALYST, "Placed below the block.") } private fun jade() { diff --git a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt index 17718773d..ef6af5672 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt @@ -498,9 +498,11 @@ class RagiumJapaneseProvider(output: PackOutput) : HTLanguageProvider.Japanese(o // Addon // private fun emi() { - add(RagiumCommonTranslation.EMI_MACHINE_UPGRADE, "機械のアップグレード") + add(RagiumCommonTranslation.EMI_MACHINE_UPGRADE_TITLE, "機械のアップグレード") - add(RagiumCommonTranslation.EMI_BREWING, "醸造") + add(RagiumCommonTranslation.EMI_BREWING_TITLE, "醸造") + + add(RagiumCommonTranslation.EMI_BLOCK_CATALYST, "ブロックの下に設置します。") } private fun jade() { 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 b5a3862da..d4c989f02 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 @@ -25,7 +25,7 @@ object RagiumEmiRecipeCategories { val MACHINE_UPGRADE: HTEmiRecipeCategory = HTEmiRecipeCategory.create( MACHINE_BOUNDS, RagiumItems.getHammer(RagiumMaterialKeys.RAGI_ALLOY), - RagiumCommonTranslation.EMI_MACHINE_UPGRADE::translate, + RagiumCommonTranslation.EMI_MACHINE_UPGRADE_TITLE::translate, ) // Generators // @@ -102,7 +102,7 @@ object RagiumEmiRecipeCategories { val BREWING: HTEmiRecipeCategory = HTEmiRecipeCategory.create( MACHINE_BOUNDS, RagiumBlocks.BREWERY, - RagiumCommonTranslation.EMI_BREWING::translate, + RagiumCommonTranslation.EMI_BREWING_TITLE::translate, ) @JvmField diff --git a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/device/HTRockGeneratingEmiRecipe.kt b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/device/HTRockGeneratingEmiRecipe.kt index 7ecb081c0..4f238695b 100644 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/device/HTRockGeneratingEmiRecipe.kt +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/device/HTRockGeneratingEmiRecipe.kt @@ -6,6 +6,8 @@ import hiiragi283.ragium.client.integration.emi.addArrow import hiiragi283.ragium.client.integration.emi.addPlus import hiiragi283.ragium.client.integration.emi.category.RagiumEmiRecipeCategories import hiiragi283.ragium.client.integration.emi.recipe.HTEmiHolderRecipe +import hiiragi283.ragium.common.text.RagiumCommonTranslation +import net.minecraft.ChatFormatting import net.minecraft.world.item.crafting.RecipeHolder import kotlin.jvm.optionals.getOrNull @@ -28,7 +30,9 @@ class HTRockGeneratingEmiRecipe(holder: RecipeHolder) : widgets.addSlot(input(0), getPosition(0), getPosition(0)).catalyst(true) widgets.addSlot(input(1), getPosition(2), getPosition(0)).catalyst(true) - widgets.addCatalyst(0, getPosition(1), getPosition(2)) + widgets + .addCatalyst(0, getPosition(1), getPosition(2)) + .appendTooltip(RagiumCommonTranslation.EMI_BLOCK_CATALYST.translate(ChatFormatting.AQUA)) // output widgets.addOutput(0, getPosition(4.5), getPosition(1), true) } diff --git a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTSimulatingEmiRecipe.kt b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTSimulatingEmiRecipe.kt index a7449bf4b..859a55b1d 100644 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTSimulatingEmiRecipe.kt +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTSimulatingEmiRecipe.kt @@ -11,40 +11,24 @@ import hiiragi283.ragium.common.block.HTImitationSpawnerBlock import hiiragi283.ragium.common.recipe.HTBlockSimulatingRecipe import hiiragi283.ragium.common.recipe.HTEntitySimulatingRecipe import hiiragi283.ragium.common.recipe.base.HTBasicSimulatingRecipe +import hiiragi283.ragium.common.text.RagiumCommonTranslation +import net.minecraft.ChatFormatting import net.minecraft.core.Holder -import net.minecraft.resources.ResourceLocation import net.minecraft.world.item.ItemStack import net.minecraft.world.item.crafting.RecipeHolder import net.minecraft.world.level.block.Block import kotlin.jvm.optionals.getOrNull -class HTSimulatingEmiRecipe : HTEmiHolderRecipe> { - constructor(id: ResourceLocation, recipe: HTBasicSimulatingRecipe<*>) : super( - RagiumEmiRecipeCategories.SIMULATING, - id, - recipe, - ) - - constructor(holder: RecipeHolder>) : super(RagiumEmiRecipeCategories.SIMULATING, holder) - +class HTSimulatingEmiRecipe(holder: RecipeHolder>) : + HTEmiHolderRecipe>(RagiumEmiRecipeCategories.SIMULATING, holder) { init { addInput(recipe.ingredient.getOrNull()) when (recipe) { - is HTBlockSimulatingRecipe -> - addCatalyst( - recipe.catalyst - .map(Holder::toItemEmi) - .let(EmiIngredient::of), - ) - is HTEntitySimulatingRecipe -> - addCatalyst( - recipe.catalyst - .map(HTImitationSpawnerBlock::createStack) - .map(ItemStack::toEmi) - .let(EmiIngredient::of), - ) - } + is HTBlockSimulatingRecipe -> recipe.catalyst.map(Holder::toItemEmi) + is HTEntitySimulatingRecipe -> recipe.catalyst.map(HTImitationSpawnerBlock::createStack).map(ItemStack::toEmi) + else -> listOf() + }.let(EmiIngredient::of).let(::addCatalyst) addOutputs(recipe.results) } @@ -54,7 +38,9 @@ class HTSimulatingEmiRecipe : HTEmiHolderRecipe> { // Input widgets.addSlot(input(0), getPosition(1), getPosition(0)) - widgets.addCatalyst(0, getPosition(1), getPosition(2)) + widgets + .addCatalyst(0, getPosition(1), getPosition(2)) + .appendTooltip(RagiumCommonTranslation.EMI_BLOCK_CATALYST.translate(ChatFormatting.AQUA)) // Output widgets.addOutput(0, getPosition(4.5), getPosition(0) + 4, true) widgets.addSlot(output(1), getPosition(4.5), getPosition(2)) 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 b6fc2fa9f..2eab64b9a 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 @@ -2,7 +2,7 @@ package hiiragi283.ragium.common.block.entity.processor import hiiragi283.ragium.api.recipe.RagiumRecipeTypes import hiiragi283.ragium.api.recipe.input.HTRecipeInput -import hiiragi283.ragium.api.recipe.multi.HTSimulatingRecipe +import hiiragi283.ragium.api.recipe.multi.HTItemWithCatalystRecipe import hiiragi283.ragium.api.storage.HTStorageAccess import hiiragi283.ragium.api.storage.HTStorageAction import hiiragi283.ragium.api.util.HTContentListener @@ -17,7 +17,7 @@ import net.minecraft.sounds.SoundSource import net.minecraft.world.level.block.state.BlockState class HTSimulatorBlockEntity(pos: BlockPos, state: BlockState) : - HTComplexBlockEntity( + HTComplexBlockEntity( RagiumRecipeTypes.SIMULATING, RagiumBlocks.SIMULATOR, pos, @@ -44,7 +44,7 @@ class HTSimulatorBlockEntity(pos: BlockPos, state: BlockState) : pos: BlockPos, state: BlockState, input: HTRecipeInput, - recipe: HTSimulatingRecipe, + recipe: HTItemWithCatalystRecipe, ) { super.completeRecipe(level, pos, state, input, recipe) // 実際にインプットを減らす diff --git a/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTSimulatingRecipeBuilder.kt b/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTSimulatingRecipeBuilder.kt index f13edf835..2ca273f61 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTSimulatingRecipeBuilder.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTSimulatingRecipeBuilder.kt @@ -2,7 +2,7 @@ package hiiragi283.ragium.common.data.recipe import hiiragi283.ragium.api.RagiumConst import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient -import hiiragi283.ragium.api.recipe.multi.HTSimulatingRecipe +import hiiragi283.ragium.api.recipe.multi.HTItemWithCatalystRecipe import hiiragi283.ragium.api.recipe.result.HTFluidResult import hiiragi283.ragium.api.recipe.result.HTItemResult import hiiragi283.ragium.api.util.Ior @@ -41,9 +41,9 @@ class HTSimulatingRecipeBuilder( ) } - override fun createRecipe(): HTSimulatingRecipe = factory.create(ingredient, catalyst, toIorResult()) + override fun createRecipe(): HTItemWithCatalystRecipe = factory.create(ingredient, catalyst, toIorResult()) - fun interface Factory { + fun interface Factory { fun create(ingredient: Optional, catalyst: T, results: Ior): RECIPE } } diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/base/HTBasicSimulatingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/base/HTBasicSimulatingRecipe.kt index 02a6088c8..66d5600ab 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/recipe/base/HTBasicSimulatingRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/base/HTBasicSimulatingRecipe.kt @@ -1,15 +1,17 @@ package hiiragi283.ragium.common.recipe.base +import hiiragi283.ragium.api.recipe.RagiumRecipeTypes import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient import hiiragi283.ragium.api.recipe.input.HTRecipeInput -import hiiragi283.ragium.api.recipe.multi.HTSimulatingRecipe +import hiiragi283.ragium.api.recipe.multi.HTItemWithCatalystRecipe import hiiragi283.ragium.api.recipe.result.HTComplexResult +import net.minecraft.world.item.crafting.RecipeType import net.minecraft.world.level.Level import java.util.Optional abstract class HTBasicSimulatingRecipe(val ingredient: Optional, val catalyst: T, results: HTComplexResult) : HTBasicComplexOutputRecipe(results), - HTSimulatingRecipe { + HTItemWithCatalystRecipe { final override fun matches(input: HTRecipeInput, level: Level): Boolean { val bool1: Boolean = testCatalyst(input, level) val bool2: Boolean = input.testItem(0, ingredient) @@ -19,4 +21,6 @@ abstract class HTBasicSimulatingRecipe(val ingredient: Optional = RagiumRecipeTypes.SIMULATING.get() } diff --git a/src/main/kotlin/hiiragi283/ragium/common/text/RagiumCommonTranslation.kt b/src/main/kotlin/hiiragi283/ragium/common/text/RagiumCommonTranslation.kt index 575e79cd6..0ff085254 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/text/RagiumCommonTranslation.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/text/RagiumCommonTranslation.kt @@ -116,9 +116,11 @@ enum class RagiumCommonTranslation(type: String, vararg path: String) : HTTransl KEY_OPEN_UNIVERSAL_BUNDLE("key", "open_universal_bundle"), // EMI - EMI_MACHINE_UPGRADE("emi.category", "machine_upgrade"), + EMI_MACHINE_UPGRADE_TITLE("emi.category", "machine_upgrade"), - EMI_BREWING("emi.category", "brewing"), + EMI_BREWING_TITLE("emi.category", "brewing"), + + EMI_BLOCK_CATALYST("description", "block_catalyst"), // Jade JADE_MACHINE_TIER("jade", "machine_tier"), From bb4284deb71c7719fcc9cdc1fdf91ed8b064d505 Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Thu, 11 Dec 2025 09:54:29 +0900 Subject: [PATCH 19/49] feat!: removed fluid Sap, Natural Gas feat: added new material Raw Rubber, Rubber feat: added new fluid Latex --- .../ragium/api/data/recipe/HTResultHelper.kt | 17 +- .../api/registry/HTFluidContentRegister.kt | 11 + .../api/data/lang/HTMaterialTranslations.kt | 4 + .../api/data/recipe/HTRecipeProvider.kt | 32 +- .../data/client/RagiumEnglishProvider.kt | 3 +- .../data/client/RagiumJapaneseProvider.kt | 3 +- .../data/server/RagiumDataMapProvider.kt | 1 - .../recipe/RagiumChemistryRecipeProvider.kt | 286 +++++++++--------- .../server/recipe/RagiumFoodRecipeProvider.kt | 20 +- .../recipe/RagiumMachineRecipeProvider.kt | 11 +- .../server/recipe/RagiumToolRecipeProvider.kt | 6 +- .../recipe/compat/RagiumAARecipeProvider.kt | 18 +- .../compat/RagiumImmersiveRecipeProvider.kt | 4 +- .../server/tag/RagiumFluidTagsProvider.kt | 3 - .../client/integration/emi/RagiumEmiPlugin.kt | 2 +- .../kotlin/hiiragi283/ragium/RagiumCommon.kt | 2 +- .../hiiragi283/ragium/client/RagiumClient.kt | 5 +- .../recipe/HTItemWithCatalystRecipeBuilder.kt | 13 +- .../common/event/RagiumMaterialHandler.kt | 10 + .../common/material/CommonMaterialKeys.kt | 6 + .../ragium/setup/RagiumFluidContents.kt | 17 +- .../hiiragi283/ragium/setup/RagiumItems.kt | 2 + .../ragium/textures/item/raw_rubber_sheet.png | Bin 0 -> 300 bytes .../ragium/textures/item/rubber_sheet.png | Bin 0 -> 239 bytes 24 files changed, 247 insertions(+), 229 deletions(-) create mode 100644 src/main/resources/assets/ragium/textures/item/raw_rubber_sheet.png create mode 100644 src/main/resources/assets/ragium/textures/item/rubber_sheet.png diff --git a/src/api/kotlin/hiiragi283/ragium/api/data/recipe/HTResultHelper.kt b/src/api/kotlin/hiiragi283/ragium/api/data/recipe/HTResultHelper.kt index 5d418257b..943de9af8 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/data/recipe/HTResultHelper.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/data/recipe/HTResultHelper.kt @@ -11,6 +11,8 @@ import hiiragi283.ragium.api.registry.HTFluidHolderLike import hiiragi283.ragium.api.registry.HTKeyOrTagHelper import hiiragi283.ragium.api.registry.idOrThrow import hiiragi283.ragium.api.registry.toHolderLike +import hiiragi283.ragium.api.stack.ImmutableFluidStack +import hiiragi283.ragium.api.stack.toImmutableOrThrow import net.minecraft.core.component.DataComponentPatch import net.minecraft.core.registries.Registries import net.minecraft.resources.ResourceLocation @@ -102,10 +104,17 @@ data object HTResultHelper { * @param stack ベースとなる[FluidStack] */ @JvmStatic - fun fluid(stack: FluidStack): HTFluidResult = fluid( - stack.fluidHolder.idOrThrow, - stack.amount, - stack.componentsPatch, + fun fluid(stack: FluidStack): HTFluidResult = fluid(stack.toImmutableOrThrow()) + + /** + * 指定した引数から[HTFluidResult]を返します。 + * @param stack ベースとなる[FluidStack] + */ + @JvmStatic + fun fluid(stack: ImmutableFluidStack): HTFluidResult = fluid( + stack.getId(), + stack.amount(), + stack.componentsPatch(), ) /** diff --git a/src/api/kotlin/hiiragi283/ragium/api/registry/HTFluidContentRegister.kt b/src/api/kotlin/hiiragi283/ragium/api/registry/HTFluidContentRegister.kt index ac6e6043c..70e975679 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/registry/HTFluidContentRegister.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/registry/HTFluidContentRegister.kt @@ -41,6 +41,17 @@ class HTFluidContentRegister(modId: String) { private val contentCache: MutableList> = mutableListOf() val contents: List> get() = contentCache + fun addAlias(from: String, to: String) { + typeRegister.addAlias(from, to) + + fluidRegister.addAlias(from, to) + fluidRegister.addAlias("flowing_$from", "flowing_$to") + + blockRegister.addAlias(from, to) + + itemRegister.addAlias("${from}_bucket", "${to}_bucket") + } + fun init(eventBus: IEventBus) { fluidRegister.register(eventBus) typeRegister.register(eventBus) diff --git a/src/data/kotlin/hiiragi283/ragium/api/data/lang/HTMaterialTranslations.kt b/src/data/kotlin/hiiragi283/ragium/api/data/lang/HTMaterialTranslations.kt index e5aa924a1..fe03715b9 100644 --- a/src/data/kotlin/hiiragi283/ragium/api/data/lang/HTMaterialTranslations.kt +++ b/src/data/kotlin/hiiragi283/ragium/api/data/lang/HTMaterialTranslations.kt @@ -9,6 +9,7 @@ import hiiragi283.ragium.api.material.attribute.HTLangNameMaterialAttribute import hiiragi283.ragium.api.material.get import hiiragi283.ragium.api.material.prefix.HTMaterialPrefix import hiiragi283.ragium.api.material.prefix.HTPrefixLike +import hiiragi283.ragium.common.material.CommonMaterialKeys import hiiragi283.ragium.common.material.CommonMaterialPrefixes import hiiragi283.ragium.common.material.FoodMaterialKeys import hiiragi283.ragium.common.material.MekanismMaterialPrefixes @@ -71,6 +72,9 @@ object HTMaterialTranslations { register(CommonMaterialPrefixes.DUST, VanillaMaterialKeys.WOOD, "Sawdust", "おがくず") register(CommonMaterialPrefixes.DUST, FoodMaterialKeys.RAW_MEAT, "Minced Meat", "ひき肉") + + register(CommonMaterialPrefixes.PLATE, CommonMaterialKeys.RAW_RUBBER, "Raw Rubber Sheet", "生ゴムシート") + register(CommonMaterialPrefixes.PLATE, CommonMaterialKeys.RUBBER, "Rubber Sheet", "ゴムシート") } fun getLangName(material: HTMaterialLike): HTLangName? = (material as? HTLangName) diff --git a/src/data/kotlin/hiiragi283/ragium/api/data/recipe/HTRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/api/data/recipe/HTRecipeProvider.kt index 48bcc0032..0dca51cdd 100644 --- a/src/data/kotlin/hiiragi283/ragium/api/data/recipe/HTRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/api/data/recipe/HTRecipeProvider.kt @@ -11,7 +11,6 @@ import hiiragi283.ragium.api.material.prefix.HTMaterialPrefix import hiiragi283.ragium.api.material.prefix.HTPrefixLike import hiiragi283.ragium.api.recipe.ingredient.HTFluidIngredient import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient -import hiiragi283.ragium.api.recipe.result.HTFluidResult import hiiragi283.ragium.api.recipe.result.HTItemResult import hiiragi283.ragium.api.registry.HTFluidHolderLike import hiiragi283.ragium.api.registry.HTItemHolderLike @@ -246,12 +245,10 @@ sealed class HTRecipeProvider { ) { // Extracting HTItemWithCatalystRecipeBuilder - .extracting( - itemCreator.fromItem(filled), - resultHelper.item(empty), - null, - resultHelper.fluid(fluid.getFluid(), amount), - ).saveSuffixed(output, "_from_${filled.getPath()}") + .extracting(itemCreator.fromItem(filled)) + .setResult(resultHelper.item(empty)) + .setResult(resultHelper.fluid(fluid.getFluid(), amount)) + .saveSuffixed(output, "_from_${filled.getPath()}") // Mixing HTComplexRecipeBuilder .mixing() @@ -350,25 +347,4 @@ sealed class HTRecipeProvider { resultHelper.item(log, 6), ).save(output) } - - // Refining - protected fun distillation( - input: Pair, - itemResult: HTItemResult?, - vararg results: Pair, - ) { - val (holder: HTFluidHolderLike, amount: Int) = input - val suffix = "_from_${holder.getPath()}" - val ingredient: HTFluidIngredient = fluidCreator.fromHolder(holder, amount) - // Refining - for ((result: HTFluidResult, catalyst: HTItemIngredient?) in results) { - HTComplexRecipeBuilder - .refining() - .addIngredient(catalyst) - .addIngredient(ingredient) - .setResult(itemResult) - .setResult(result) - .saveSuffixed(output, suffix) - } - } } diff --git a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt index c078f9175..05ab5c112 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt @@ -212,13 +212,12 @@ class RagiumEnglishProvider(output: PackOutput) : HTLanguageProvider.English(out addFluid(RagiumFluidContents.BIOFUEL, "Biofuel") addFluid(RagiumFluidContents.CRUDE_OIL, "Crude Oil") - addFluid(RagiumFluidContents.NATURAL_GAS, "Natural Gas") addFluid(RagiumFluidContents.NAPHTHA, "Naphtha") addFluid(RagiumFluidContents.FUEL, "Fuel") addFluid(RagiumFluidContents.LUBRICANT, "Lubricant") - addFluid(RagiumFluidContents.SAP, "Sap") addFluid(RagiumFluidContents.SPRUCE_RESIN, "Spruce Resin") + addFluid(RagiumFluidContents.LATEX, "Latex") addFluid(RagiumFluidContents.CRIMSON_SAP, "Crimson Sap") addFluid(RagiumFluidContents.WARPED_SAP, "Warped Sap") diff --git a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt index ef6af5672..86827765c 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt @@ -203,13 +203,12 @@ class RagiumJapaneseProvider(output: PackOutput) : HTLanguageProvider.Japanese(o addFluid(RagiumFluidContents.BIOFUEL, "バイオ燃料") addFluid(RagiumFluidContents.CRUDE_OIL, "原油") - addFluid(RagiumFluidContents.NATURAL_GAS, "天然ガス") addFluid(RagiumFluidContents.NAPHTHA, "ナフサ") addFluid(RagiumFluidContents.FUEL, "燃料") addFluid(RagiumFluidContents.LUBRICANT, "潤滑油") - addFluid(RagiumFluidContents.SAP, "樹液") addFluid(RagiumFluidContents.SPRUCE_RESIN, "松脂") + addFluid(RagiumFluidContents.LATEX, "ラテックス") addFluid(RagiumFluidContents.CRIMSON_SAP, "深紅の樹液") addFluid(RagiumFluidContents.WARPED_SAP, "歪んだ樹液") diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/RagiumDataMapProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/RagiumDataMapProvider.kt index 3135c8961..0fb21c26b 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/RagiumDataMapProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/RagiumDataMapProvider.kt @@ -131,7 +131,6 @@ class RagiumDataMapProvider(context: HTDataGenContext) : DataMapProvider(context // low .add(InitFluids.CANOLA_OIL.get(), low, actually) // medium - .add(RagiumFluidContents.NATURAL_GAS, medium) .add("ethanol", medium) .add("bioethanol", medium) .add("lpg", medium) diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumChemistryRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumChemistryRecipeProvider.kt index 12abe36ca..dde93bd0c 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumChemistryRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumChemistryRecipeProvider.kt @@ -35,10 +35,8 @@ import net.minecraft.world.item.DyeItem import net.minecraft.world.item.Item import net.minecraft.world.item.Items import net.minecraft.world.item.alchemy.Potions -import net.minecraft.world.item.crafting.Ingredient import net.minecraft.world.level.ItemLike import net.neoforged.neoforge.common.Tags -import net.neoforged.neoforge.common.crafting.DifferenceIngredient object RagiumChemistryRecipeProvider : HTRecipeProvider.Direct() { override fun buildRecipeInternal() { @@ -53,68 +51,58 @@ object RagiumChemistryRecipeProvider : HTRecipeProvider.Direct() { private fun extracting() { // Vanilla HTItemWithCatalystRecipeBuilder - .extracting( - itemCreator.fromTagKey(Tags.Items.GRAVELS), - resultHelper.item(Items.FLINT), - ).saveSuffixed(output, "_from_gravel") + .extracting(itemCreator.fromTagKey(Tags.Items.GRAVELS)) + .setResult(resultHelper.item(Items.FLINT)) + .saveSuffixed(output, "_from_gravel") HTItemWithCatalystRecipeBuilder - .extracting( - itemCreator.fromTagKey(Tags.Items.SANDSTONE_RED_BLOCKS), - resultHelper.item(Items.REDSTONE), - ).saveSuffixed(output, "_from_red_sandstone") + .extracting(itemCreator.fromTagKey(Tags.Items.SANDSTONE_RED_BLOCKS)) + .setResult(resultHelper.item(Items.REDSTONE)) + .saveSuffixed(output, "_from_red_sandstone") HTItemWithCatalystRecipeBuilder - .extracting( - itemCreator.fromItem(Items.BROWN_MUSHROOM_BLOCK), - resultHelper.item(Items.BROWN_MUSHROOM, 3), - ).saveSuffixed(output, "_from_block") + .extracting(itemCreator.fromItem(Items.BROWN_MUSHROOM_BLOCK)) + .setResult(resultHelper.item(Items.BROWN_MUSHROOM, 3)) + .saveSuffixed(output, "_from_block") HTItemWithCatalystRecipeBuilder - .extracting( - itemCreator.fromItem(Items.RED_MUSHROOM_BLOCK), - resultHelper.item(Items.RED_MUSHROOM, 3), - ).saveSuffixed(output, "_from_block") + .extracting(itemCreator.fromItem(Items.RED_MUSHROOM_BLOCK)) + .setResult(resultHelper.item(Items.RED_MUSHROOM, 3)) + .saveSuffixed(output, "_from_block") // Ragium HTItemWithCatalystRecipeBuilder - .extracting( - itemCreator.fromItem(Items.MAGMA_CREAM, 3), - resultHelper.item(RagiumItems.MAGMA_SHARD), - ).save(output) + .extracting(itemCreator.fromItem(Items.MAGMA_CREAM, 3)) + .setResult(resultHelper.item(RagiumItems.MAGMA_SHARD)) + .save(output) HTItemWithCatalystRecipeBuilder - .extracting( - itemCreator.fromItem(Items.DRIED_KELP), - resultHelper.item(CommonMaterialPrefixes.DUST, CommonMaterialKeys.Gems.SALT), - ).tagCondition(CommonMaterialPrefixes.DUST, CommonMaterialKeys.Gems.SALT) + .extracting(itemCreator.fromItem(Items.DRIED_KELP)) + .setResult(resultHelper.item(CommonMaterialPrefixes.DUST, CommonMaterialKeys.Gems.SALT)) + .tagCondition(CommonMaterialPrefixes.DUST, CommonMaterialKeys.Gems.SALT) .saveSuffixed(output, "_from_kelp") HTItemWithCatalystRecipeBuilder - .extracting( - itemCreator.fromTagKey(Tags.Items.SANDSTONE_UNCOLORED_BLOCKS), - resultHelper.item(CommonMaterialPrefixes.DUST, CommonMaterialKeys.Gems.SALTPETER), - ).tagCondition(CommonMaterialPrefixes.DUST, CommonMaterialKeys.Gems.SALTPETER) + .extracting(itemCreator.fromTagKey(Tags.Items.SANDSTONE_UNCOLORED_BLOCKS)) + .setResult(resultHelper.item(CommonMaterialPrefixes.DUST, CommonMaterialKeys.Gems.SALTPETER)) + .tagCondition(CommonMaterialPrefixes.DUST, CommonMaterialKeys.Gems.SALTPETER) .saveSuffixed(output, "_from_sandstone") HTItemWithCatalystRecipeBuilder - .extracting( - itemCreator.fromItem(Items.WIND_CHARGE), - resultHelper.item(CommonMaterialPrefixes.DUST, CommonMaterialKeys.Gems.SALTPETER), - ).tagCondition(CommonMaterialPrefixes.DUST, CommonMaterialKeys.Gems.SALTPETER) + .extracting(itemCreator.fromItem(Items.WIND_CHARGE)) + .setResult(resultHelper.item(CommonMaterialPrefixes.DUST, CommonMaterialKeys.Gems.SALTPETER)) + .tagCondition(CommonMaterialPrefixes.DUST, CommonMaterialKeys.Gems.SALTPETER) .saveSuffixed(output, "_from_breeze") HTItemWithCatalystRecipeBuilder - .extracting( - itemCreator.fromTagKey(Tags.Items.GUNPOWDERS), - resultHelper.item(CommonMaterialPrefixes.DUST, CommonMaterialKeys.Gems.SULFUR), - ).tagCondition(CommonMaterialPrefixes.DUST, CommonMaterialKeys.Gems.SULFUR) + .extracting(itemCreator.fromTagKey(Tags.Items.GUNPOWDERS)) + .setResult(resultHelper.item(CommonMaterialPrefixes.DUST, CommonMaterialKeys.Gems.SULFUR)) + .tagCondition(CommonMaterialPrefixes.DUST, CommonMaterialKeys.Gems.SULFUR) .saveSuffixed(output, "_from_gunpowder") HTItemWithCatalystRecipeBuilder - .extracting( - itemCreator.fromItem(Items.BLAZE_POWDER), - resultHelper.item(CommonMaterialPrefixes.DUST, CommonMaterialKeys.Gems.SULFUR), - ).tagCondition(CommonMaterialPrefixes.DUST, CommonMaterialKeys.Gems.SULFUR) + .extracting(itemCreator.fromItem(Items.BLAZE_POWDER)) + .setResult(resultHelper.item(CommonMaterialPrefixes.DUST, CommonMaterialKeys.Gems.SULFUR)) + .tagCondition(CommonMaterialPrefixes.DUST, CommonMaterialKeys.Gems.SULFUR) .saveSuffixed(output, "_from_blaze") dyes() @@ -125,23 +113,20 @@ object RagiumChemistryRecipeProvider : HTRecipeProvider.Direct() { private fun dyes() { // Charcoal -> Brown HTItemWithCatalystRecipeBuilder - .extracting( - itemCreator.fromTagKey(CommonMaterialPrefixes.DUST, VanillaMaterialKeys.CHARCOAL), - resultHelper.item(Items.BROWN_DYE), - ).saveSuffixed(output, "_from_charcoal") + .extracting(itemCreator.fromTagKey(CommonMaterialPrefixes.DUST, VanillaMaterialKeys.CHARCOAL)) + .setResult(resultHelper.item(Items.BROWN_DYE)) + .saveSuffixed(output, "_from_charcoal") // Coal -> Black HTItemWithCatalystRecipeBuilder - .extracting( - itemCreator.fromTagKey(CommonMaterialPrefixes.DUST, VanillaMaterialKeys.COAL), - resultHelper.item(Items.BLACK_DYE), - ).saveSuffixed(output, "_from_coal") + .extracting(itemCreator.fromTagKey(CommonMaterialPrefixes.DUST, VanillaMaterialKeys.COAL)) + .setResult(resultHelper.item(Items.BLACK_DYE)) + .saveSuffixed(output, "_from_coal") for (material: HTColorMaterial in HTColorMaterial.entries) { HTItemWithCatalystRecipeBuilder - .extracting( - itemCreator.fromTagKey(CommonMaterialPrefixes.RAW_MATERIAL_DYE, material), - resultHelper.item(DyeItem.byColor(material.dyeColor), 2), - ).saveSuffixed(output, "_from_${material.asMaterialName()}") + .extracting(itemCreator.fromTagKey(CommonMaterialPrefixes.RAW_MATERIAL_DYE, material)) + .setResult(resultHelper.item(DyeItem.byColor(material.dyeColor), 2)) + .saveSuffixed(output, "_from_${material.asMaterialName()}") } } @@ -232,12 +217,9 @@ object RagiumChemistryRecipeProvider : HTRecipeProvider.Direct() { extractAndInfuse(Items.GLASS_BOTTLE, Items.EXPERIENCE_BOTTLE.toHolderLike(), RagiumFluidContents.EXPERIENCE) // Exp Berries -> Liquid Exp HTItemWithCatalystRecipeBuilder - .extracting( - itemCreator.fromItem(RagiumBlocks.EXP_BERRIES), - null, - null, - resultHelper.fluid(RagiumFluidContents.EXPERIENCE, 50), - ).saveSuffixed(output, "_from_berries") + .extracting(itemCreator.fromItem(RagiumBlocks.EXP_BERRIES)) + .setResult(resultHelper.fluid(RagiumFluidContents.EXPERIENCE, 50)) + .saveSuffixed(output, "_from_berries") // Golden Apple HTComplexRecipeBuilder @@ -453,12 +435,13 @@ object RagiumChemistryRecipeProvider : HTRecipeProvider.Direct() { resultHelper.item(CommonMaterialPrefixes.FUEL, CommonMaterialKeys.COAL_COKE), fluidResult = resultHelper.fluid(RagiumFluidContents.CREOSOTE, 250), ).saveSuffixed(output, "_from_coal") - // Creosote -> Tar + Fuel - distillation( - RagiumFluidContents.CREOSOTE to 1000, - resultHelper.item(RagiumItems.TAR, 3), - resultHelper.fluid(RagiumFluidContents.FUEL, 125) to null, - ) + // Creosote -> Tar + Lubricant + HTComplexRecipeBuilder + .refining() + .addIngredient(fluidCreator.fromHolder(RagiumFluidContents.CREOSOTE, 1000)) + .setResult(resultHelper.item(RagiumItems.TAR, 3)) + .setResult(resultHelper.fluid(RagiumFluidContents.LUBRICANT, 250)) + .saveSuffixed(output, "_from_creosote") } @JvmStatic @@ -476,20 +459,28 @@ object RagiumChemistryRecipeProvider : HTRecipeProvider.Direct() { resultHelper.fluid(RagiumFluidContents.CRUDE_OIL, 500), ).saveSuffixed(output, "_from_soul") - // Crude Oil -> Natural Gas + Naphtha + Tar - distillation( - RagiumFluidContents.CRUDE_OIL to 1000, - resultHelper.item(RagiumItems.TAR), - resultHelper.fluid(RagiumFluidContents.NAPHTHA, 375) to null, - resultHelper.fluid(RagiumFluidContents.NATURAL_GAS, 375) to itemCreator.fromTagKey(RagiumModTags.Items.PLASTICS), - ) + // Crude Oil -> Naphtha + Tar + HTComplexRecipeBuilder + .refining() + .addIngredient(fluidCreator.fromHolder(RagiumFluidContents.CRUDE_OIL, 1000)) + .setResult(resultHelper.item(RagiumItems.TAR)) + .setResult(resultHelper.fluid(RagiumFluidContents.NAPHTHA, 750)) + .saveSuffixed(output, "_from_crude_oil") + // Naphtha + Catalyst -> 4x Polymer Resin + HTComplexRecipeBuilder + .solidifying() + .addIngredient(itemCreator.fromItem(RagiumItems.POLYMER_CATALYST)) + .addIngredient(fluidCreator.fromHolder(RagiumFluidContents.NAPHTHA, 1000)) + .setResult(resultHelper.item(RagiumModTags.Items.POLYMER_RESIN, 4)) + .saveSuffixed(output, "_from_naphtha") // Naphtha -> Fuel + Sulfur - distillation( - RagiumFluidContents.NAPHTHA to 1000, - resultHelper.item(CommonMaterialPrefixes.DUST, CommonMaterialKeys.Gems.SULFUR), - resultHelper.fluid(RagiumFluidContents.FUEL, 375) to null, - ) + HTComplexRecipeBuilder + .refining() + .addIngredient(fluidCreator.fromHolder(RagiumFluidContents.NAPHTHA, 1000)) + .setResult(resultHelper.item(CommonMaterialPrefixes.DUST, CommonMaterialKeys.Gems.SULFUR)) + .setResult(resultHelper.fluid(RagiumFluidContents.FUEL, 750)) + .saveSuffixed(output, "_from_naphtha") // Naphtha + Raginite -> Lubricant HTComplexRecipeBuilder .mixing() @@ -515,13 +506,6 @@ object RagiumChemistryRecipeProvider : HTRecipeProvider.Direct() { .addIngredient(fluidCreator.fromHolder(RagiumFluidContents.CRUDE_OIL, 125)) .setResult(resultHelper.item(RagiumModTags.Items.POLYMER_RESIN)) .saveSuffixed(output, "_from_crude_oil") - // Natural Gas + Catalyst -> 4x Polymer Resin - HTComplexRecipeBuilder - .solidifying() - .addIngredient(itemCreator.fromItem(RagiumItems.POLYMER_CATALYST)) - .addIngredient(fluidCreator.fromHolder(RagiumFluidContents.NATURAL_GAS, 125)) - .setResult(resultHelper.item(RagiumModTags.Items.POLYMER_RESIN, 4)) - .saveSuffixed(output, "_from_lpg") // Plastic Plate HTItemWithCatalystRecipeBuilder @@ -558,37 +542,21 @@ object RagiumChemistryRecipeProvider : HTRecipeProvider.Direct() { @JvmStatic private fun sap() { - // XX Log (excluded Spruce) -> Wood Dust + Sap - HTItemWithCatalystRecipeBuilder - .extracting( - itemCreator.from( - DifferenceIngredient.of(Ingredient.of(ItemTags.LOGS_THAT_BURN), Ingredient.of(ItemTags.SPRUCE_LOGS)), - ), - resultHelper.item(CommonMaterialPrefixes.DUST, VanillaMaterialKeys.WOOD, 4), - null, - resultHelper.fluid(RagiumFluidContents.SAP, 125), - ).saveSuffixed(output, "_from_log") - // Sap -> Natural Gas - distillation( - RagiumFluidContents.SAP to 1000, - null, - resultHelper.fluid(RagiumFluidContents.NATURAL_GAS, 250) to null, - ) - // Spruce Log -> Spruce Resin HTItemWithCatalystRecipeBuilder - .extracting( - itemCreator.fromTagKey(ItemTags.SPRUCE_LOGS), - resultHelper.item(CommonMaterialPrefixes.DUST, VanillaMaterialKeys.WOOD, 4), - null, - resultHelper.fluid(RagiumFluidContents.SPRUCE_RESIN, 250), - ).saveSuffixed(output, "_from_log") + .extracting(itemCreator.fromTagKey(ItemTags.SPRUCE_LOGS)) + .setResult(resultHelper.item(CommonMaterialPrefixes.DUST, VanillaMaterialKeys.WOOD, 4)) + .setResult(resultHelper.fluid(RagiumFluidContents.SPRUCE_RESIN, 250)) + .saveSuffixed(output, "_from_log") // Resin -> Rosin - distillation( - RagiumFluidContents.SPRUCE_RESIN to 1000, - resultHelper.item(RagiumItems.ROSIN), - resultHelper.fluid(RagiumFluidContents.NATURAL_GAS, 250) to null, - ) + HTComplexRecipeBuilder + .refining() + .addIngredient(fluidCreator.fromHolder(RagiumFluidContents.SPRUCE_RESIN, 1000)) + .setResult(resultHelper.item(RagiumItems.ROSIN)) + .setResult(resultHelper.fluid(HTFluidHolderLike.WATER, 500)) + .saveSuffixed(output, "_from_spruce_resin") + + rubber() for (data: RagiumMoltenCrystalData in RagiumMoltenCrystalData.entries) { val base: TagKey? = data.base @@ -596,21 +564,19 @@ object RagiumChemistryRecipeProvider : HTRecipeProvider.Direct() { // Base -> Sap if (base != null && sap != null) { HTItemWithCatalystRecipeBuilder - .extracting( - itemCreator.fromTagKey(base), - resultHelper.item(CommonMaterialPrefixes.DUST, VanillaMaterialKeys.WOOD, 4), - null, - resultHelper.fluid(sap, RagiumConst.LOG_TO_SAP), - ).save(output) + .extracting(itemCreator.fromTagKey(base)) + .setResult(resultHelper.item(CommonMaterialPrefixes.DUST, VanillaMaterialKeys.WOOD, 4)) + .setResult(resultHelper.fluid(sap, RagiumConst.LOG_TO_SAP)) + .save(output) } // Sap -> Molten val molten: HTBasicFluidContent = data.molten if (sap != null) { - distillation( - sap to 1000, - null, - resultHelper.fluid(molten, RagiumConst.SAP_TO_MOLTEN) to null, - ) + HTComplexRecipeBuilder + .refining() + .addIngredient(fluidCreator.fromHolder(sap, 1000)) + .setResult(resultHelper.fluid(molten, RagiumConst.SAP_TO_MOLTEN)) + .saveSuffixed(output, "_from_${sap.getPath()}") } // Molten -> Gem HTComplexRecipeBuilder @@ -627,12 +593,12 @@ object RagiumChemistryRecipeProvider : HTRecipeProvider.Direct() { ).saveSuffixed(output, "_from_gem") } - // Crimson Crystal + // Crimson Crystal -> Blaze Powder HTCookingRecipeBuilder .blasting(Items.BLAZE_POWDER, 3) .addIngredient(CommonMaterialPrefixes.STORAGE_BLOCK, RagiumMaterialKeys.CRIMSON_CRYSTAL) .save(output) - // Warped Crystal + // Warped Crystal -> Ender Pearl HTCookingRecipeBuilder .blasting(Items.ENDER_PEARL, 3) .addIngredient(CommonMaterialPrefixes.STORAGE_BLOCK, RagiumMaterialKeys.WARPED_CRYSTAL) @@ -642,6 +608,56 @@ object RagiumChemistryRecipeProvider : HTRecipeProvider.Direct() { mixFromData(RagiumMaterialRecipeData.ELDRITCH_FLUX) } + @JvmStatic + private fun rubber() { + // Dandelion -> Latex + HTShapedRecipeBuilder + .create(RagiumFluidContents.LATEX.bucket) + .hollow8() + .define('A', Items.DANDELION) + .define('B', Tags.Items.BUCKETS_EMPTY) + .saveSuffixed(output, "_with_dandelion") + // Acacia / Jungle Log -> Latex + HTItemWithCatalystRecipeBuilder + .extracting(itemCreator.fromTagKeys(listOf(ItemTags.ACACIA_LOGS, ItemTags.JUNGLE_LOGS))) + .setResult(resultHelper.item(CommonMaterialPrefixes.DUST, VanillaMaterialKeys.WOOD, 4)) + .setResult(resultHelper.fluid(RagiumFluidContents.LATEX, 250)) + .saveSuffixed(output, "_from_log") + // Latex -> Raw Rubber + HTCookingRecipeBuilder + .smelting(RagiumItems.getPlate(CommonMaterialKeys.RAW_RUBBER)) + .addIngredient(RagiumFluidContents.LATEX.bucketTag) + .saveSuffixed(output, "_from_latex") + + HTComplexRecipeBuilder + .solidifying() + .addIngredient(itemCreator.fromItem(HTMoldType.PLATE)) + .addIngredient(fluidCreator.fromHolder(RagiumFluidContents.LATEX, 1000)) + .setResult(resultHelper.item(CommonMaterialPrefixes.PLATE, CommonMaterialKeys.RAW_RUBBER, 2)) + .save(output) + // Raw Rubber -> Rubber + HTCookingRecipeBuilder + .smelting(RagiumItems.getPlate(CommonMaterialKeys.RUBBER)) + .addIngredient(RagiumItems.getPlate(CommonMaterialKeys.RAW_RUBBER)) + .saveSuffixed(output, "_from_raw_rubber") + // Raw Rubber + Sulfur -> Rubber + HTShapelessInputsRecipeBuilder + .alloying( + resultHelper.item(CommonMaterialPrefixes.PLATE, CommonMaterialKeys.RUBBER, 2), + itemCreator.fromTagKey(CommonMaterialPrefixes.PLATE, CommonMaterialKeys.RAW_RUBBER), + itemCreator.fromTagKey(CommonMaterialPrefixes.DUST, CommonMaterialKeys.Gems.SULFUR), + ).save(output) + + // Latex + Sulfur + Coal -> Rubber + HTComplexRecipeBuilder + .mixing() + .addIngredient(itemCreator.fromTagKey(CommonMaterialPrefixes.DUST, VanillaMaterialKeys.COAL)) + .addIngredient(itemCreator.fromTagKey(CommonMaterialPrefixes.DUST, CommonMaterialKeys.Gems.SULFUR)) + .addIngredient(fluidCreator.fromHolder(RagiumFluidContents.LATEX, 1000)) + .setResult(resultHelper.item(CommonMaterialPrefixes.PLATE, CommonMaterialKeys.RUBBER, 4)) + .save(output) + } + @JvmStatic private fun biomass() { save(HTBioExtractingRecipe.RECIPE_ID, HTBioExtractingRecipe) @@ -653,11 +669,12 @@ object RagiumChemistryRecipeProvider : HTRecipeProvider.Direct() { ).save(output) // Crude Bio -> Bio Fuel - distillation( - RagiumFluidContents.CRUDE_BIO to 1000, - resultHelper.item(Items.CLAY_BALL), - resultHelper.fluid(RagiumFluidContents.BIOFUEL, 375) to null, - ) + HTComplexRecipeBuilder + .refining() + .addIngredient(fluidCreator.fromHolder(RagiumFluidContents.CRUDE_BIO, 1000)) + .setResult(resultHelper.item(Items.CLAY_BALL)) + .setResult(resultHelper.fluid(RagiumFluidContents.BIOFUEL, 750)) + .saveSuffixed(output, "_from_crude_bio") // Poisonous Potato HTComplexRecipeBuilder @@ -668,10 +685,9 @@ object RagiumChemistryRecipeProvider : HTRecipeProvider.Direct() { .save(output) // Potato Sprouts HTItemWithCatalystRecipeBuilder - .extracting( - itemCreator.fromItem(Items.POISONOUS_POTATO), - resultHelper.item(RagiumItems.POTATO_SPROUTS), - ).save(output) + .extracting(itemCreator.fromItem(Items.POISONOUS_POTATO)) + .setResult(resultHelper.item(RagiumItems.POTATO_SPROUTS)) + .save(output) // Green Cake HTItemWithCatalystRecipeBuilder .compressing( diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumFoodRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumFoodRecipeProvider.kt index 2bd1d2546..0e56f9c3a 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumFoodRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumFoodRecipeProvider.kt @@ -78,11 +78,9 @@ object RagiumFoodRecipeProvider : HTRecipeProvider.Direct() { .save(output) // Ragi-Cherry Juice HTItemWithCatalystRecipeBuilder - .extracting( - itemCreator.fromTagKey(CommonMaterialPrefixes.FOOD, FoodMaterialKeys.RAGI_CHERRY), - null, - fluidResult = resultHelper.fluid(RagiumFluidContents.RAGI_CHERRY_JUICE, 125), - ).save(output) + .extracting(itemCreator.fromTagKey(CommonMaterialPrefixes.FOOD, FoodMaterialKeys.RAGI_CHERRY)) + .setResult(resultHelper.fluid(RagiumFluidContents.RAGI_CHERRY_JUICE, 125)) + .save(output) extractAndInfuse(Items.GLASS_BOTTLE, RagiumItems.RAGI_CHERRY_JUICE, RagiumFluidContents.RAGI_CHERRY_JUICE) // Ragi-Cherry Jam @@ -151,12 +149,12 @@ object RagiumFoodRecipeProvider : HTRecipeProvider.Direct() { @JvmStatic private fun cream() { // Milk -> Cream - distillation( - HTFluidHolderLike.MILK to 1000, - null, - resultHelper.fluid(RagiumFluidContents.CREAM, 250) to null, - ) - + HTComplexRecipeBuilder + .refining() + .addIngredient(fluidCreator.fromHolder(HTFluidHolderLike.MILK, 1000)) + .setResult(resultHelper.fluid(RagiumFluidContents.CREAM, 250)) + .saveSuffixed(output, "_from_milk") + extractAndInfuse(Items.BOWL, RagiumItems.CREAM_BOWL, RagiumFluidContents.CREAM) // Cream -> Butter HTComplexRecipeBuilder diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumMachineRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumMachineRecipeProvider.kt index 8fdb3f095..e2f86a23d 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumMachineRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumMachineRecipeProvider.kt @@ -10,6 +10,7 @@ import hiiragi283.ragium.api.tag.RagiumModTags import hiiragi283.ragium.api.tier.HTBaseTier import hiiragi283.ragium.common.data.recipe.HTShapedRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTShapelessRecipeBuilder +import hiiragi283.ragium.common.material.CommonMaterialKeys import hiiragi283.ragium.common.material.CommonMaterialPrefixes import hiiragi283.ragium.common.material.RagiumMaterialKeys import hiiragi283.ragium.common.material.VanillaMaterialKeys @@ -386,7 +387,7 @@ object RagiumMachineRecipeProvider : HTRecipeProvider.Direct() { HTShapedRecipeBuilder .create(upgrade) .hollow4() - .define('A', CommonMaterialPrefixes.INGOT, RagiumMaterialKeys.NIGHT_METAL) + .define('A', CommonMaterialPrefixes.PLATE, CommonMaterialKeys.RUBBER) .apply(action) .save(output) } @@ -412,7 +413,7 @@ object RagiumMachineRecipeProvider : HTRecipeProvider.Direct() { "ACA", "ABA", ).define('A', prefix, key) - .define('B', CommonMaterialPrefixes.INGOT, RagiumMaterialKeys.NIGHT_METAL) + .define('B', CommonMaterialPrefixes.PLATE, CommonMaterialKeys.RUBBER) .define('C', Tags.Items.CHESTS_WOODEN) .save(output) } @@ -425,7 +426,7 @@ object RagiumMachineRecipeProvider : HTRecipeProvider.Direct() { "AAA", "ABA", "A A", - ).define('A', CommonMaterialPrefixes.INGOT, RagiumMaterialKeys.NIGHT_METAL) + ).define('A', CommonMaterialPrefixes.PLATE, CommonMaterialKeys.RUBBER) .define('B', Items.HOPPER) .save(output) } @@ -449,7 +450,7 @@ object RagiumMachineRecipeProvider : HTRecipeProvider.Direct() { "ACA", "ABA", ).define('A', prefix, key) - .define('B', CommonMaterialPrefixes.INGOT, RagiumMaterialKeys.NIGHT_METAL) + .define('B', CommonMaterialPrefixes.PLATE, CommonMaterialKeys.RUBBER) .define('C', Tags.Items.BUCKETS_EMPTY) .save(output) } @@ -463,7 +464,7 @@ object RagiumMachineRecipeProvider : HTRecipeProvider.Direct() { "ACA", "ABA", ).define('A', CommonMaterialPrefixes.GEM, VanillaMaterialKeys.EMERALD) - .define('B', CommonMaterialPrefixes.INGOT, RagiumMaterialKeys.NIGHT_METAL) + .define('B', CommonMaterialPrefixes.PLATE, CommonMaterialKeys.RUBBER) .define('C', Tags.Items.BUCKETS_EMPTY) .save(output) diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumToolRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumToolRecipeProvider.kt index e3e5e3ec3..1cdb20348 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumToolRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumToolRecipeProvider.kt @@ -17,6 +17,7 @@ import hiiragi283.ragium.common.data.recipe.HTShapelessRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTSmithingRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTStonecuttingRecipeBuilder import hiiragi283.ragium.common.item.tool.HTUniversalBundleItem +import hiiragi283.ragium.common.material.CommonMaterialKeys import hiiragi283.ragium.common.material.CommonMaterialPrefixes import hiiragi283.ragium.common.material.HTColorMaterial import hiiragi283.ragium.common.material.RagiumMaterialKeys @@ -148,9 +149,10 @@ object RagiumToolRecipeProvider : HTRecipeProvider.Direct() { .create(RagiumItems.NIGHT_VISION_GOGGLES) .pattern( "AAA", - "ABA", + "BCB", ).define('A', CommonMaterialPrefixes.INGOT, RagiumMaterialKeys.NIGHT_METAL) - .define('B', CommonMaterialPrefixes.GEM, RagiumMaterialKeys.RAGI_CRYSTAL) + .define('B', CommonMaterialPrefixes.PLATE, CommonMaterialKeys.RUBBER) + .define('C', CommonMaterialPrefixes.GEM, RagiumMaterialKeys.RAGI_CRYSTAL) .setCategory(CraftingBookCategory.EQUIPMENT) .save(output) } diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumAARecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumAARecipeProvider.kt index 35d5846e4..07cf05daa 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumAARecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumAARecipeProvider.kt @@ -20,12 +20,9 @@ object RagiumAARecipeProvider : HTRecipeProvider.Integration(RagiumConst.ACTUALL .save(output) // Solidified Exp -> Liquid Exp HTItemWithCatalystRecipeBuilder - .extracting( - itemCreator.fromItem(ActuallyItems.SOLIDIFIED_EXPERIENCE), - null, - null, - resultHelper.fluid(RagiumFluidContents.EXPERIENCE, 8 * 20), - ).saveSuffixed(output, "_from_solidified_aa") + .extracting(itemCreator.fromItem(ActuallyItems.SOLIDIFIED_EXPERIENCE)) + .setResult(resultHelper.fluid(RagiumFluidContents.EXPERIENCE, 8 * 20)) + .saveSuffixed(output, "_from_solidified_aa") // Crops cropAndSeed(ActuallyItems.CANOLA_SEEDS, ActuallyItems.CANOLA) @@ -39,12 +36,9 @@ object RagiumAARecipeProvider : HTRecipeProvider.Integration(RagiumConst.ACTUALL private fun canola() { // Canola -> Canola Oil HTItemWithCatalystRecipeBuilder - .extracting( - itemCreator.fromTagKey(ActuallyTags.Items.CROPS_CANOLA), - null, - null, - resultHelper.fluid(InitFluids.CANOLA_OIL.get(), 80), - ).save(output) + .extracting(itemCreator.fromTagKey(ActuallyTags.Items.CROPS_CANOLA)) + .setResult(resultHelper.fluid(InitFluids.CANOLA_OIL.get(), 80)) + .save(output) // Canola Oil -> Refined HTComplexRecipeBuilder .refining() diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumImmersiveRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumImmersiveRecipeProvider.kt index 23f2c3267..b1691932e 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumImmersiveRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumImmersiveRecipeProvider.kt @@ -1,9 +1,9 @@ package hiiragi283.ragium.data.server.recipe.compat -import blusunrize.immersiveengineering.api.IETags import blusunrize.immersiveengineering.api.crafting.IngredientWithSize import blusunrize.immersiveengineering.common.blocks.wooden.TreatedWoodStyles import blusunrize.immersiveengineering.common.register.IEBlocks +import blusunrize.immersiveengineering.common.register.IEFluids import blusunrize.immersiveengineering.common.register.IEItems import blusunrize.immersiveengineering.data.recipes.builder.AlloyRecipeBuilder import blusunrize.immersiveengineering.data.recipes.builder.ArcFurnaceRecipeBuilder @@ -51,7 +51,7 @@ object RagiumImmersiveRecipeProvider : HTRecipeProvider.Integration(RagiumConst. .mixing() .addIngredient(itemCreator.fromTagKey(CommonMaterialPrefixes.DUST, VanillaMaterialKeys.REDSTONE)) .addIngredient(fluidCreator.water(1000)) - .setResult(resultHelper.fluid(IETags.fluidRedstoneAcid, 1000)) + .setResult(resultHelper.fluid(IEFluids.REDSTONE_ACID.still, 1000)) .save(output) // Hemp Fiber cropAndSeed(IEItems.Misc.HEMP_SEEDS, IEItems.Ingredients.HEMP_FIBER) diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/tag/RagiumFluidTagsProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/tag/RagiumFluidTagsProvider.kt index 5e9718ac7..26d3f374a 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/tag/RagiumFluidTagsProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/tag/RagiumFluidTagsProvider.kt @@ -8,7 +8,6 @@ import hiiragi283.ragium.api.tag.RagiumCommonTags import hiiragi283.ragium.setup.RagiumFluidContents import net.minecraft.core.registries.Registries import net.minecraft.world.level.material.Fluid -import net.neoforged.neoforge.common.Tags class RagiumFluidTagsProvider(context: HTDataGenContext) : HTTagsProvider(Registries.FLUID, context) { override fun addTagsInternal(factory: BuilderFactory) { @@ -24,8 +23,6 @@ class RagiumFluidTagsProvider(context: HTDataGenContext) : HTTagsProvider } private fun category(factory: BuilderFactory) { - factory.apply(Tags.Fluids.GASEOUS).addContent(RagiumFluidContents.NATURAL_GAS) - factory.apply(RagiumCommonTags.Fluids.BIODIESEL).addContent(RagiumFluidContents.BIOFUEL) factory.apply(RagiumCommonTags.Fluids.DIESEL).addContent(RagiumFluidContents.FUEL) 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 4742aec2e..2a0618c3f 100644 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/RagiumEmiPlugin.kt +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/RagiumEmiPlugin.kt @@ -329,7 +329,7 @@ class RagiumEmiPlugin : EmiPlugin { HTExtractingRecipe( HTItemIngredient(Ingredient.of(stack), 1), HTItemIngredient(Ingredient.of(Items.COMPOSTER), 1).wrapOptional(), - Ior.Right(HTResultHelper.fluid(crudeBio.getId(), crudeBio.amount())), + Ior.Right(HTResultHelper.fluid(crudeBio)), ) }, HTItemWithCatalystEmiRecipe::extracting, diff --git a/src/main/kotlin/hiiragi283/ragium/RagiumCommon.kt b/src/main/kotlin/hiiragi283/ragium/RagiumCommon.kt index 4212de6c7..87f8d12d4 100644 --- a/src/main/kotlin/hiiragi283/ragium/RagiumCommon.kt +++ b/src/main/kotlin/hiiragi283/ragium/RagiumCommon.kt @@ -58,7 +58,7 @@ class RagiumCommon(eventBus: IEventBus, container: ModContainer, dist: Dist) { RagiumDataComponents.init(eventBus) RagiumEnchantmentComponents.REGISTER.register(eventBus) - RagiumFluidContents.REGISTER.init(eventBus) + RagiumFluidContents.init(eventBus) RagiumBlocks.init(eventBus) RagiumItems.init(eventBus) diff --git a/src/main/kotlin/hiiragi283/ragium/client/RagiumClient.kt b/src/main/kotlin/hiiragi283/ragium/client/RagiumClient.kt index e7b0b18b5..ecfe9766f 100644 --- a/src/main/kotlin/hiiragi283/ragium/client/RagiumClient.kt +++ b/src/main/kotlin/hiiragi283/ragium/client/RagiumClient.kt @@ -223,13 +223,12 @@ class RagiumClient(eventBus: IEventBus, container: ModContainer) { event.clear(RagiumFluidContents.BIOFUEL, Color(0x99cc00)) event.dull(RagiumFluidContents.CRUDE_OIL, Color(0x333333)) - event.clear(RagiumFluidContents.NATURAL_GAS, Color(0xcccccc)) event.dull(RagiumFluidContents.NAPHTHA, Color(0xff6633)) event.clear(RagiumFluidContents.FUEL, Color(0xcc3300)) event.dull(RagiumFluidContents.LUBRICANT, Color(0xff9900)) - event.clear(RagiumFluidContents.SAP, Color(0x996633)) - event.clear(RagiumFluidContents.SPRUCE_RESIN, Color(0xcc6600)) + event.dull(RagiumFluidContents.SPRUCE_RESIN, Color(0xcc6600)) + event.dull(RagiumFluidContents.LATEX, Color(0xcccccc)) event.molten(RagiumFluidContents.DESTABILIZED_RAGINITE, Color(0xff0033)) diff --git a/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTItemWithCatalystRecipeBuilder.kt b/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTItemWithCatalystRecipeBuilder.kt index e1167c32c..319b23894 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTItemWithCatalystRecipeBuilder.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTItemWithCatalystRecipeBuilder.kt @@ -38,22 +38,13 @@ class HTItemWithCatalystRecipeBuilder( } @JvmStatic - fun extracting( - ingredient: HTItemIngredient, - itemResult: HTItemResult?, - catalyst: HTItemIngredient? = null, - fluidResult: HTFluidResult? = null, - ): HTItemWithCatalystRecipeBuilder { - val builder = HTItemWithCatalystRecipeBuilder( + fun extracting(ingredient: HTItemIngredient, catalyst: HTItemIngredient? = null): HTItemWithCatalystRecipeBuilder = + HTItemWithCatalystRecipeBuilder( RagiumConst.EXTRACTING, ::HTExtractingRecipe, ingredient, catalyst, ) - builder.setResult(itemResult) - builder.setResult(fluidResult) - return builder - } } constructor( diff --git a/src/main/kotlin/hiiragi283/ragium/common/event/RagiumMaterialHandler.kt b/src/main/kotlin/hiiragi283/ragium/common/event/RagiumMaterialHandler.kt index 50b2d47a0..630e659a3 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/event/RagiumMaterialHandler.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/event/RagiumMaterialHandler.kt @@ -144,6 +144,16 @@ object RagiumMaterialHandler { addName("Plastic", "プラスチック") add(HTStorageBlockMaterialAttribute.THREE_BY_THREE) } + event.modify(CommonMaterialKeys.RAW_RUBBER) { + addDefaultPrefix(CommonMaterialPrefixes.PLATE) + addName("Raw Rubber", "生ゴム") + add(HTStorageBlockMaterialAttribute.THREE_BY_THREE) + } + event.modify(CommonMaterialKeys.RUBBER) { + addDefaultPrefix(CommonMaterialPrefixes.PLATE) + addName("Rubber", "ゴム") + add(HTStorageBlockMaterialAttribute.THREE_BY_THREE) + } } @JvmStatic diff --git a/src/main/kotlin/hiiragi283/ragium/common/material/CommonMaterialKeys.kt b/src/main/kotlin/hiiragi283/ragium/common/material/CommonMaterialKeys.kt index fdacc0111..665112696 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/material/CommonMaterialKeys.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/material/CommonMaterialKeys.kt @@ -92,4 +92,10 @@ object CommonMaterialKeys { // Plates @JvmStatic val PLASTIC: HTMaterialKey = HTMaterialKey.of("plastic") + + @JvmStatic + val RAW_RUBBER: HTMaterialKey = HTMaterialKey.of("raw_rubber") + + @JvmStatic + val RUBBER: HTMaterialKey = HTMaterialKey.of("rubber") } diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumFluidContents.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumFluidContents.kt index 4bdbf0e40..1affae0b8 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumFluidContents.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumFluidContents.kt @@ -23,6 +23,7 @@ import net.minecraft.world.level.block.state.BlockBehaviour import net.minecraft.world.level.block.state.BlockState import net.minecraft.world.level.material.FluidState import net.minecraft.world.level.pathfinder.PathType +import net.neoforged.bus.api.IEventBus import net.neoforged.neoforge.common.NeoForgeMod import net.neoforged.neoforge.common.SoundActions import net.neoforged.neoforge.fluids.BaseFlowingFluid @@ -34,6 +35,14 @@ object RagiumFluidContents { @JvmField val REGISTER = HTFluidContentRegister(RagiumAPI.MOD_ID) + @JvmStatic + fun init(eventBus: IEventBus) { + REGISTER.addAlias("sap", "spruce_resin") + REGISTER.addAlias("natural_gas", "naphtha") + + REGISTER.init(eventBus) + } + @JvmStatic fun registerSimple( name: String, @@ -148,10 +157,6 @@ object RagiumFluidContents { ::HTExplosiveFluidType.partially1(2f), ) { it.speedFactor(0.4f) } - @JvmField - val NATURAL_GAS: HTBasicFluidContent = - registerEffected("natural_gas", liquid().density(-1000), ::HTExplosiveFluidType.partially1(4f), MobEffects.LEVITATION) - @JvmField val NAPHTHA: HTBasicFluidContent = register("naphtha", liquid(), ::HTExplosiveFluidType.partially1(3f)) @@ -164,10 +169,10 @@ object RagiumFluidContents { // Sap // @JvmField - val SAP: HTBasicFluidContent = registerSimple("sap", liquid()) + val SPRUCE_RESIN: HTBasicFluidContent = registerSimple("spruce_resin", liquid()) @JvmField - val SPRUCE_RESIN: HTBasicFluidContent = registerSimple("spruce_resin", liquid()) + val LATEX: HTBasicFluidContent = registerSimple("latex", liquid()) @JvmField val CRIMSON_SAP: HTBasicFluidContent = register("crimson_sap", liquid(), ::HTNetherFluidType) diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumItems.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumItems.kt index 6e536261f..58881dddc 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumItems.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumItems.kt @@ -299,6 +299,8 @@ object RagiumItems { // Plates register(CommonMaterialPrefixes.PLATE, VanillaMaterialKeys.WOOD, "wood_plate") register(CommonMaterialPrefixes.PLATE, CommonMaterialKeys.PLASTIC, "plastic_plate") + register(CommonMaterialPrefixes.PLATE, CommonMaterialKeys.RAW_RUBBER, "raw_rubber_sheet") + register(CommonMaterialPrefixes.PLATE, CommonMaterialKeys.RUBBER, "rubber_sheet") // Scraps register(CommonMaterialPrefixes.SCRAP, RagiumMaterialKeys.DEEP_STEEL, "deep_scrap") } diff --git a/src/main/resources/assets/ragium/textures/item/raw_rubber_sheet.png b/src/main/resources/assets/ragium/textures/item/raw_rubber_sheet.png new file mode 100644 index 0000000000000000000000000000000000000000..840d4ce6734dd00906de89dbaf702c2e5e4f9b53 GIT binary patch literal 300 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`4?SHRLn`KMnWV^l$U)@z{ga~I zi4s1K*l(;lnXo}Gx=sF|UfM?PrpT}}VTYSeE^>7AJ;oX-km&fZWODhuJGU(){w036 zarb@s_ln~S6D&l|)U!TZp}1ikul|{ch6PvS>;5-tYj7?;&}Gh+cXO7-tR1&}XK?=L z`L=1_&t`c}?*!q1UM)>o|MCuVZr&vi+$%ix7agCx-A~tXy_U>&)~9LHZ44V%7>Hq)$ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ragium/textures/item/rubber_sheet.png b/src/main/resources/assets/ragium/textures/item/rubber_sheet.png new file mode 100644 index 0000000000000000000000000000000000000000..c2fba17512561fabac081672a2e611e15f72dc8a GIT binary patch literal 239 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`OFUg1Ln`KMnRJksRZyU<@**R< zti=n5+f^4DoB3j{Jb0U9lyv=u&!(IIk9??=H1yijBc%U%?Sbn1g>#FiMOs0a$BE#$60**v2=Q;;WI%OLxbs-H#{{8UN%fpaA}k%vQfNtt8Vh7n{ox8*%=uA k|L4&0a{#)R4dh;C23Efkm7W*LTY(}Bp00i_>zopr0H2mz5C8xG literal 0 HcmV?d00001 From a48214b77c12edba7995e1418493ddf9a6522bec Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Thu, 11 Dec 2025 10:32:02 +0900 Subject: [PATCH 20/49] feat: added new recipe type Solidifying --- .../ragium/api/recipe/RagiumRecipeTypes.kt | 4 ++ .../recipe/extra/HTSingleExtraItemRecipe.kt | 4 +- .../recipe/ingredient/HTFluidIngredient.kt | 2 +- .../recipe/multi/HTFluidWithCatalystRecipe.kt | 8 ++++ .../api/recipe/single/HTSingleFluidRecipe.kt | 2 +- ...emRecipe.kt => HTSingleItemInputRecipe.kt} | 2 +- .../api/data/recipe/HTRecipeProvider.kt | 25 ++++++------ .../data/client/RagiumEnglishProvider.kt | 1 + .../data/client/RagiumJapaneseProvider.kt | 1 + .../recipe/RagiumChemistryRecipeProvider.kt | 39 ++++++++++--------- .../server/recipe/RagiumFoodRecipeProvider.kt | 2 +- .../compat/RagiumMekanismRecipeProvider.kt | 14 +++---- .../client/integration/emi/RagiumEmiPlugin.kt | 2 + .../emi/category/RagiumEmiRecipeCategories.kt | 5 +++ .../recipe/processor/HTRefiningEmiRecipe.kt | 9 ++--- .../processor/HTSolidifyingEmiRecipe.kt | 35 +++++++++++++++++ .../data/recipe/HTComplexRecipeBuilder.kt | 16 ++------ .../HTFluidWithCatalystRecipeBuilder.kt | 38 ++++++++++++++++++ .../data/recipe/HTSingleRecipeBuilder.kt | 6 +-- .../ragium/common/recipe/HTRefiningRecipe.kt | 13 ++----- .../common/recipe/HTSolidifyingRecipe.kt | 18 +++++++++ .../base/HTBasicFluidWithCatalystRecipe.kt | 27 +++++++++++++ .../vanilla/HTVanillaSingleItemRecipe.kt | 4 +- .../ragium/setup/RagiumMiscRegister.kt | 1 + .../ragium/setup/RagiumRecipeBiCodecs.kt | 12 +++++- .../ragium/setup/RagiumRecipeSerializers.kt | 7 ++++ 26 files changed, 218 insertions(+), 79 deletions(-) create mode 100644 src/api/kotlin/hiiragi283/ragium/api/recipe/multi/HTFluidWithCatalystRecipe.kt rename src/api/kotlin/hiiragi283/ragium/api/recipe/single/{HTSingleItemRecipe.kt => HTSingleItemInputRecipe.kt} (94%) create mode 100644 src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTSolidifyingEmiRecipe.kt create mode 100644 src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTFluidWithCatalystRecipeBuilder.kt create mode 100644 src/main/kotlin/hiiragi283/ragium/common/recipe/HTSolidifyingRecipe.kt create mode 100644 src/main/kotlin/hiiragi283/ragium/common/recipe/base/HTBasicFluidWithCatalystRecipe.kt diff --git a/src/api/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeTypes.kt b/src/api/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeTypes.kt index 4ac697d02..ff7275fa4 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeTypes.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeTypes.kt @@ -7,6 +7,7 @@ import hiiragi283.ragium.api.recipe.extra.HTSingleExtraItemRecipe 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.HTFluidWithCatalystRecipe import hiiragi283.ragium.api.recipe.multi.HTItemWithCatalystRecipe import hiiragi283.ragium.api.recipe.multi.HTRockGeneratingRecipe import hiiragi283.ragium.api.recipe.multi.HTShapelessInputsRecipe @@ -52,6 +53,9 @@ object RagiumRecipeTypes { @JvmField val SIMULATING: HTDeferredRecipeType = create(RagiumConst.SIMULATING) + @JvmField + val SOLIDIFYING: HTDeferredRecipeType = create(RagiumConst.SOLIDIFYING) + @JvmStatic private fun > create(path: String): HTDeferredRecipeType = HTDeferredRecipeType(RagiumAPI.id(path)) 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 b49a93d89..fccc404f0 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/recipe/extra/HTSingleExtraItemRecipe.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/recipe/extra/HTSingleExtraItemRecipe.kt @@ -1,10 +1,10 @@ package hiiragi283.ragium.api.recipe.extra -import hiiragi283.ragium.api.recipe.single.HTSingleItemRecipe +import hiiragi283.ragium.api.recipe.single.HTSingleItemInputRecipe /** * 単一のアイテムから主産物と副産物を生産するレシピ */ interface HTSingleExtraItemRecipe : - HTSingleItemRecipe, + HTSingleItemInputRecipe, 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 a23e58e03..a179be90d 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/recipe/ingredient/HTFluidIngredient.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/recipe/ingredient/HTFluidIngredient.kt @@ -20,7 +20,7 @@ import net.neoforged.neoforge.fluids.crafting.TagFluidIngredient */ data class HTFluidIngredient(private val ingredient: FluidIngredient, private val amount: Int) : HTIngredient { fun interface AmountGetter { - fun getRequiredAmount(stack: ImmutableFluidStack): Int + fun getRequiredAmount(): Int } companion object { diff --git a/src/api/kotlin/hiiragi283/ragium/api/recipe/multi/HTFluidWithCatalystRecipe.kt b/src/api/kotlin/hiiragi283/ragium/api/recipe/multi/HTFluidWithCatalystRecipe.kt new file mode 100644 index 000000000..16678be04 --- /dev/null +++ b/src/api/kotlin/hiiragi283/ragium/api/recipe/multi/HTFluidWithCatalystRecipe.kt @@ -0,0 +1,8 @@ +package hiiragi283.ragium.api.recipe.multi + +import hiiragi283.ragium.api.recipe.HTRecipe +import hiiragi283.ragium.api.recipe.ingredient.HTFluidIngredient + +interface HTFluidWithCatalystRecipe : + HTRecipe, + HTFluidIngredient.AmountGetter 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 c8a7ef66f..84d00eec3 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/recipe/single/HTSingleFluidRecipe.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/recipe/single/HTSingleFluidRecipe.kt @@ -9,7 +9,7 @@ import net.minecraft.core.HolderLookup * 単一のアイテムから単一の液体を生産するレシピ */ interface HTSingleFluidRecipe : - HTSingleItemRecipe, + HTSingleItemInputRecipe, 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/HTSingleItemInputRecipe.kt similarity index 94% rename from src/api/kotlin/hiiragi283/ragium/api/recipe/single/HTSingleItemRecipe.kt rename to src/api/kotlin/hiiragi283/ragium/api/recipe/single/HTSingleItemInputRecipe.kt index 77f51f88b..938af9869 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/recipe/single/HTSingleItemRecipe.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/recipe/single/HTSingleItemInputRecipe.kt @@ -10,7 +10,7 @@ import java.util.function.Predicate /** * 単一のアイテムから単一のアイテムを生成するレシピ */ -interface HTSingleItemRecipe : +interface HTSingleItemInputRecipe : HTRecipe, Predicate, HTItemIngredient.CountGetter { diff --git a/src/data/kotlin/hiiragi283/ragium/api/data/recipe/HTRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/api/data/recipe/HTRecipeProvider.kt index 0dca51cdd..645765a8b 100644 --- a/src/data/kotlin/hiiragi283/ragium/api/data/recipe/HTRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/api/data/recipe/HTRecipeProvider.kt @@ -20,6 +20,7 @@ import hiiragi283.ragium.api.tag.RagiumModTags import hiiragi283.ragium.common.HTMoldType import hiiragi283.ragium.common.crafting.HTClearComponentRecipe import hiiragi283.ragium.common.data.recipe.HTComplexRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTFluidWithCatalystRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTItemWithCatalystRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTPlantingRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTShapelessRecipeBuilder @@ -272,22 +273,22 @@ sealed class HTRecipeProvider { resultHelper.fluid(fluid, amount), ).saveSuffixed(output, "_from_${solid.getPath()}") // Solidifying - HTComplexRecipeBuilder - .solidifying() - .addIngredient(itemCreator.fromItem(mold)) - .addIngredient(fluidCreator.fromHolder(fluid, amount)) - .setResult(resultHelper.item(solid)) - .saveSuffixed(output, "_from_${fluid.getPath()}") + HTFluidWithCatalystRecipeBuilder + .solidifying( + fluidCreator.fromHolder(fluid, amount), + itemCreator.fromItem(mold), + resultHelper.item(solid), + ).saveSuffixed(output, "_from_${fluid.getPath()}") } protected fun meltAndFreeze(data: HTRecipeData) { // Solidifying - HTComplexRecipeBuilder - .solidifying() - .addIngredient(data.catalyst?.let(itemCreator::fromItem)) - .addIngredient(data.getFluidIngredients(fluidCreator)[0]) - .setResult(data.getItemResults()[0].first) - .saveModified(output, data.operator) + HTFluidWithCatalystRecipeBuilder + .solidifying( + data.getFluidIngredients(fluidCreator)[0], + data.catalyst?.let(itemCreator::fromItem), + data.getItemResults()[0].first, + ).saveModified(output, data.operator) // Melting val data1: HTRecipeData = data.swap() HTSingleRecipeBuilder diff --git a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt index 05ab5c112..981eddf38 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt @@ -357,6 +357,7 @@ class RagiumEnglishProvider(output: PackOutput) : HTLanguageProvider.English(out add(RagiumRecipeTypes.REFINING, "Refining") add(RagiumRecipeTypes.ROCK_GENERATING, "Rock Generating") add(RagiumRecipeTypes.SIMULATING, "Simulating") + add(RagiumRecipeTypes.SOLIDIFYING, "Solidifying") } private fun text() { diff --git a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt index 86827765c..0008511ed 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt @@ -359,6 +359,7 @@ class RagiumJapaneseProvider(output: PackOutput) : HTLanguageProvider.Japanese(o add(RagiumRecipeTypes.REFINING, "精製") add(RagiumRecipeTypes.ROCK_GENERATING, "岩石生成") add(RagiumRecipeTypes.SIMULATING, "シミュレーション") + add(RagiumRecipeTypes.SOLIDIFYING, "成型") } private fun text() { diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumChemistryRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumChemistryRecipeProvider.kt index dde93bd0c..dfdb70712 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumChemistryRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumChemistryRecipeProvider.kt @@ -11,6 +11,7 @@ import hiiragi283.ragium.api.tag.RagiumModTags import hiiragi283.ragium.common.HTMoldType import hiiragi283.ragium.common.data.recipe.HTComplexRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTCookingRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTFluidWithCatalystRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTItemWithCatalystRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTShapedRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTShapelessInputsRecipeBuilder @@ -468,12 +469,12 @@ object RagiumChemistryRecipeProvider : HTRecipeProvider.Direct() { .saveSuffixed(output, "_from_crude_oil") // Naphtha + Catalyst -> 4x Polymer Resin - HTComplexRecipeBuilder - .solidifying() - .addIngredient(itemCreator.fromItem(RagiumItems.POLYMER_CATALYST)) - .addIngredient(fluidCreator.fromHolder(RagiumFluidContents.NAPHTHA, 1000)) - .setResult(resultHelper.item(RagiumModTags.Items.POLYMER_RESIN, 4)) - .saveSuffixed(output, "_from_naphtha") + HTFluidWithCatalystRecipeBuilder + .solidifying( + fluidCreator.fromHolder(RagiumFluidContents.NAPHTHA, 1000), + itemCreator.fromItem(RagiumItems.POLYMER_CATALYST), + resultHelper.item(RagiumModTags.Items.POLYMER_RESIN, 4), + ).saveSuffixed(output, "_from_naphtha") // Naphtha -> Fuel + Sulfur HTComplexRecipeBuilder .refining() @@ -555,7 +556,7 @@ object RagiumChemistryRecipeProvider : HTRecipeProvider.Direct() { .setResult(resultHelper.item(RagiumItems.ROSIN)) .setResult(resultHelper.fluid(HTFluidHolderLike.WATER, 500)) .saveSuffixed(output, "_from_spruce_resin") - + rubber() for (data: RagiumMoltenCrystalData in RagiumMoltenCrystalData.entries) { @@ -579,12 +580,12 @@ object RagiumChemistryRecipeProvider : HTRecipeProvider.Direct() { .saveSuffixed(output, "_from_${sap.getPath()}") } // Molten -> Gem - HTComplexRecipeBuilder - .solidifying() - .addIngredient(itemCreator.fromItem(HTMoldType.GEM)) - .addIngredient(fluidCreator.fromHolder(molten, 1000)) - .setResult(resultHelper.item(CommonMaterialPrefixes.GEM, data)) - .save(output) + HTFluidWithCatalystRecipeBuilder + .solidifying( + fluidCreator.fromHolder(molten, 1000), + itemCreator.fromItem(HTMoldType.GEM), + resultHelper.item(CommonMaterialPrefixes.GEM, data), + ).save(output) HTSingleRecipeBuilder .melting( @@ -629,12 +630,12 @@ object RagiumChemistryRecipeProvider : HTRecipeProvider.Direct() { .addIngredient(RagiumFluidContents.LATEX.bucketTag) .saveSuffixed(output, "_from_latex") - HTComplexRecipeBuilder - .solidifying() - .addIngredient(itemCreator.fromItem(HTMoldType.PLATE)) - .addIngredient(fluidCreator.fromHolder(RagiumFluidContents.LATEX, 1000)) - .setResult(resultHelper.item(CommonMaterialPrefixes.PLATE, CommonMaterialKeys.RAW_RUBBER, 2)) - .save(output) + HTFluidWithCatalystRecipeBuilder + .solidifying( + fluidCreator.fromHolder(RagiumFluidContents.LATEX, 1000), + itemCreator.fromItem(HTMoldType.PLATE), + resultHelper.item(CommonMaterialPrefixes.PLATE, CommonMaterialKeys.RAW_RUBBER, 2), + ).save(output) // Raw Rubber -> Rubber HTCookingRecipeBuilder .smelting(RagiumItems.getPlate(CommonMaterialKeys.RUBBER)) diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumFoodRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumFoodRecipeProvider.kt index 0e56f9c3a..441e1a37e 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumFoodRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumFoodRecipeProvider.kt @@ -154,7 +154,7 @@ object RagiumFoodRecipeProvider : HTRecipeProvider.Direct() { .addIngredient(fluidCreator.fromHolder(HTFluidHolderLike.MILK, 1000)) .setResult(resultHelper.fluid(RagiumFluidContents.CREAM, 250)) .saveSuffixed(output, "_from_milk") - + extractAndInfuse(Items.BOWL, RagiumItems.CREAM_BOWL, RagiumFluidContents.CREAM) // Cream -> Butter HTComplexRecipeBuilder diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumMekanismRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumMekanismRecipeProvider.kt index dee992140..6e0e6c09d 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumMekanismRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumMekanismRecipeProvider.kt @@ -8,7 +8,7 @@ import hiiragi283.ragium.api.material.HTMaterialLike import hiiragi283.ragium.api.material.prefix.HTPrefixLike import hiiragi283.ragium.api.registry.HTBasicFluidContent import hiiragi283.ragium.api.tag.RagiumCommonTags -import hiiragi283.ragium.common.data.recipe.HTComplexRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTFluidWithCatalystRecipeBuilder import hiiragi283.ragium.common.material.CommonMaterialPrefixes import hiiragi283.ragium.common.material.MekanismMaterialPrefixes import hiiragi283.ragium.common.material.RagiumEssenceType @@ -146,12 +146,12 @@ object RagiumMekanismRecipeProvider : HTRecipeProvider.Integration(RagiumConst.M ).build(output, id("metallurgic_infusing/azure_steel")) // Ethene + Catalyst -> HDPE - HTComplexRecipeBuilder - .solidifying() - .addIngredient(itemCreator.fromItem(RagiumItems.POLYMER_CATALYST)) - .addIngredient(fluidCreator.fromTagKey(MekanismTags.Fluids.ETHENE, 100)) - .setResult(resultHelper.item(MekanismItems.HDPE_PELLET)) - .save(output) + HTFluidWithCatalystRecipeBuilder + .solidifying( + fluidCreator.fromTagKey(MekanismTags.Fluids.ETHENE, 125), + itemCreator.fromItem(RagiumItems.POLYMER_CATALYST), + resultHelper.item(MekanismItems.HDPE_PELLET), + ).save(output) } @JvmStatic 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 2a0618c3f..56800004e 100644 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/RagiumEmiPlugin.kt +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/RagiumEmiPlugin.kt @@ -53,6 +53,7 @@ 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.HTSimulatingEmiRecipe import hiiragi283.ragium.client.integration.emi.recipe.processor.HTSingleExtraItemEmiRecipe +import hiiragi283.ragium.client.integration.emi.recipe.processor.HTSolidifyingEmiRecipe import hiiragi283.ragium.common.block.HTImitationSpawnerBlock import hiiragi283.ragium.common.block.entity.HTBlockEntity import hiiragi283.ragium.common.block.entity.generator.HTCulinaryGeneratorBlockEntity @@ -339,6 +340,7 @@ class RagiumEmiPlugin : EmiPlugin { addRegistryRecipes(registry, RagiumRecipeTypes.MELTING, ::HTMeltingEmiRecipe) addRegistryRecipes(registry, RagiumRecipeTypes.MIXING, ::HTMixingEmiRecipe) addRegistryRecipes(registry, RagiumRecipeTypes.REFINING, ::HTRefiningEmiRecipe) + addRegistryRecipes(registry, RagiumRecipeTypes.SOLIDIFYING, ::HTSolidifyingEmiRecipe) // Elite addRecipes(registry, collectBrewingRecipes(), ::HTBrewingEmiRecipe) addRegistryRecipes(registry, RagiumRecipeTypes.PLANTING, ::HTPlantingEmiRecipe) 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 d4c989f02..6295a8111 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 @@ -97,6 +97,10 @@ object RagiumEmiRecipeCategories { val REFINING: HTEmiRecipeCategory = machine(RagiumRecipeTypes.REFINING, RagiumBlocks.REFINERY) + @JvmField + val SOLIDIFYING: HTEmiRecipeCategory = + machine(RagiumRecipeTypes.SOLIDIFYING, RagiumBlocks.REFINERY) + // Elite @JvmField val BREWING: HTEmiRecipeCategory = HTEmiRecipeCategory.create( @@ -147,6 +151,7 @@ object RagiumEmiRecipeCategories { register(registry, MELTING) register(registry, MIXING) register(registry, REFINING) + register(registry, SOLIDIFYING) register(registry, BREWING) register(registry, PLANTING) diff --git a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTRefiningEmiRecipe.kt b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTRefiningEmiRecipe.kt index 1c9cf6f35..e320c1786 100644 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTRefiningEmiRecipe.kt +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTRefiningEmiRecipe.kt @@ -7,19 +7,17 @@ import hiiragi283.ragium.client.integration.emi.category.RagiumEmiRecipeCategori import hiiragi283.ragium.client.integration.emi.recipe.HTEmiHolderRecipe import hiiragi283.ragium.common.recipe.HTRefiningRecipe import net.minecraft.world.item.crafting.RecipeHolder -import kotlin.jvm.optionals.getOrNull class HTRefiningEmiRecipe(holder: RecipeHolder) : HTEmiHolderRecipe(RagiumEmiRecipeCategories.REFINING, holder) { init { - addInput(recipe.fluidIngredient) - addCatalyst(recipe.itemIngredient.getOrNull()) + addInput(recipe.ingredient) addOutputs(recipe.results) } override fun addWidgets(widgets: WidgetHolder) { - widgets.addArrow(getPosition(3), getPosition(1)) + widgets.addArrow(getPosition(2.5), getPosition(1)) // Input widgets @@ -28,9 +26,8 @@ class HTRefiningEmiRecipe(holder: RecipeHolder) : getPosition(1), getPosition(0), ) - widgets.addCatalyst(0, getPosition(2.5), getPosition(0)) // Output - widgets.addSlot(output(0), getPosition(3.5), getPosition(2)) + widgets.addSlot(output(0), getPosition(4), getPosition(1)) widgets .addTank( output(1), diff --git a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTSolidifyingEmiRecipe.kt b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTSolidifyingEmiRecipe.kt new file mode 100644 index 000000000..33be0f42a --- /dev/null +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTSolidifyingEmiRecipe.kt @@ -0,0 +1,35 @@ +package hiiragi283.ragium.client.integration.emi.recipe.processor + +import dev.emi.emi.api.widget.WidgetHolder +import hiiragi283.ragium.client.integration.emi.addArrow +import hiiragi283.ragium.client.integration.emi.addTank +import hiiragi283.ragium.client.integration.emi.category.RagiumEmiRecipeCategories +import hiiragi283.ragium.client.integration.emi.recipe.HTEmiHolderRecipe +import hiiragi283.ragium.common.recipe.base.HTBasicFluidWithCatalystRecipe +import net.minecraft.world.item.crafting.RecipeHolder +import kotlin.jvm.optionals.getOrNull + +class HTSolidifyingEmiRecipe(holder: RecipeHolder) : + HTEmiHolderRecipe(RagiumEmiRecipeCategories.SOLIDIFYING, holder) { + init { + addInput(recipe.ingredient) + addCatalyst(recipe.catalyst.getOrNull()) + + addOutputs(recipe.result) + } + + override fun addWidgets(widgets: WidgetHolder) { + widgets.addArrow(getPosition(2.5), getPosition(1)) + + // inputs + widgets + .addTank( + input(0), + getPosition(1), + getPosition(0), + ) + widgets.addCatalyst(0, getPosition(2.5), getPosition(0)) + // output + widgets.addOutput(0, getPosition(4.5), getPosition(1), true) + } +} diff --git a/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTComplexRecipeBuilder.kt b/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTComplexRecipeBuilder.kt index 26db1f6ca..b94b74e27 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTComplexRecipeBuilder.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTComplexRecipeBuilder.kt @@ -5,7 +5,6 @@ import hiiragi283.ragium.api.recipe.ingredient.HTFluidIngredient import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient import hiiragi283.ragium.api.recipe.multi.HTComplexRecipe import hiiragi283.ragium.api.recipe.result.HTComplexResult -import hiiragi283.ragium.api.util.wrapOptional import hiiragi283.ragium.common.data.recipe.base.HTComplexResultRecipeBuilder import hiiragi283.ragium.common.recipe.HTMixingRecipe import hiiragi283.ragium.common.recipe.HTRefiningRecipe @@ -26,17 +25,10 @@ class HTComplexRecipeBuilder(prefix: String, private val factory: Factory<*>) : } @JvmStatic - private fun refining(prefix: String): HTComplexRecipeBuilder = HTComplexRecipeBuilder( - prefix, - ) { itemIngredients: List, fluidIngredients: List, results: HTComplexResult -> - HTRefiningRecipe(itemIngredients.getOrNull(0).wrapOptional(), fluidIngredients[0], results) - } - - @JvmStatic - fun refining(): HTComplexRecipeBuilder = refining(RagiumConst.REFINING) - - @JvmStatic - fun solidifying(): HTComplexRecipeBuilder = refining(RagiumConst.SOLIDIFYING) + fun refining(): HTComplexRecipeBuilder = + HTComplexRecipeBuilder(RagiumConst.REFINING) { _, fluidIngredients: List, results: HTComplexResult -> + HTRefiningRecipe(fluidIngredients[0], results) + } } private val itemIngredients: MutableList = mutableListOf() diff --git a/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTFluidWithCatalystRecipeBuilder.kt b/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTFluidWithCatalystRecipeBuilder.kt new file mode 100644 index 000000000..4758ce55d --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTFluidWithCatalystRecipeBuilder.kt @@ -0,0 +1,38 @@ +package hiiragi283.ragium.common.data.recipe + +import hiiragi283.ragium.api.RagiumConst +import hiiragi283.ragium.api.data.recipe.HTRecipeBuilder +import hiiragi283.ragium.api.recipe.ingredient.HTFluidIngredient +import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient +import hiiragi283.ragium.api.recipe.multi.HTFluidWithCatalystRecipe +import hiiragi283.ragium.api.recipe.result.HTItemResult +import hiiragi283.ragium.api.util.wrapOptional +import hiiragi283.ragium.common.recipe.HTSolidifyingRecipe +import net.minecraft.resources.ResourceLocation +import java.util.Optional + +class HTFluidWithCatalystRecipeBuilder( + prefix: String, + private val factory: Factory<*>, + private val ingredient: HTFluidIngredient, + private val catalyst: Optional, + private val result: HTItemResult, +) : HTRecipeBuilder(prefix) { + companion object { + @JvmStatic + fun solidifying( + ingredient: HTFluidIngredient, + catalyst: HTItemIngredient?, + result: HTItemResult, + ): HTFluidWithCatalystRecipeBuilder = + HTFluidWithCatalystRecipeBuilder(RagiumConst.SOLIDIFYING, ::HTSolidifyingRecipe, ingredient, catalyst.wrapOptional(), result) + } + + override fun getPrimalId(): ResourceLocation = result.id + + override fun createRecipe(): HTFluidWithCatalystRecipe = factory.create(ingredient, catalyst, result) + + fun interface Factory { + fun create(ingredient: HTFluidIngredient, catalyst: Optional, result: HTItemResult): RECIPE + } +} diff --git a/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTSingleRecipeBuilder.kt b/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTSingleRecipeBuilder.kt index 1014d86db..0cbeb395f 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTSingleRecipeBuilder.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTSingleRecipeBuilder.kt @@ -5,7 +5,7 @@ import hiiragi283.ragium.api.data.recipe.HTRecipeBuilder import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient import hiiragi283.ragium.api.recipe.result.HTFluidResult import hiiragi283.ragium.api.recipe.result.HTRecipeResult -import hiiragi283.ragium.api.recipe.single.HTSingleItemRecipe +import hiiragi283.ragium.api.recipe.single.HTSingleItemInputRecipe import hiiragi283.ragium.common.recipe.HTMeltingRecipe import net.minecraft.resources.ResourceLocation @@ -23,9 +23,9 @@ class HTSingleRecipeBuilder>( override fun getPrimalId(): ResourceLocation = result.id - override fun createRecipe(): HTSingleItemRecipe = factory.create(ingredient, result) + override fun createRecipe(): HTSingleItemInputRecipe = factory.create(ingredient, result) - fun interface Factory, RECIPE : HTSingleItemRecipe> { + fun interface Factory, RECIPE : HTSingleItemInputRecipe> { fun create(ingredient: HTItemIngredient, result: RESULT): RECIPE } } diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/HTRefiningRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/HTRefiningRecipe.kt index 3d9175c2e..a1a44cb4c 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/recipe/HTRefiningRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/HTRefiningRecipe.kt @@ -2,7 +2,6 @@ package hiiragi283.ragium.common.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.HTRecipeInput import hiiragi283.ragium.api.recipe.result.HTComplexResult import hiiragi283.ragium.common.recipe.base.HTBasicComplexRecipe @@ -10,15 +9,9 @@ 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 matches(input: HTRecipeInput, level: Level): Boolean { - val bool1: Boolean = input.testCatalyst(0, itemIngredient) - val bool2: Boolean = input.testFluid(0, fluidIngredient) - return bool1 && bool2 - } +class HTRefiningRecipe(val ingredient: HTFluidIngredient, results: HTComplexResult) : HTBasicComplexRecipe(results) { + override fun matches(input: HTRecipeInput, level: Level): Boolean = input.testFluid(0, ingredient) override fun getSerializer(): RecipeSerializer<*> = RagiumRecipeSerializers.REFINING @@ -27,7 +20,7 @@ class HTRefiningRecipe(val itemIngredient: Optional, val fluid override fun getRequiredCount(index: Int): Int = 0 override fun getRequiredAmount(index: Int): Int = when (index) { - 0 -> fluidIngredient.getRequiredAmount() + 0 -> ingredient.getRequiredAmount() else -> 0 } } diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/HTSolidifyingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/HTSolidifyingRecipe.kt new file mode 100644 index 000000000..4cdf1e0f9 --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/HTSolidifyingRecipe.kt @@ -0,0 +1,18 @@ +package hiiragi283.ragium.common.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.result.HTItemResult +import hiiragi283.ragium.common.recipe.base.HTBasicFluidWithCatalystRecipe +import hiiragi283.ragium.setup.RagiumRecipeSerializers +import net.minecraft.world.item.crafting.RecipeSerializer +import net.minecraft.world.item.crafting.RecipeType +import java.util.Optional + +class HTSolidifyingRecipe(ingredient: HTFluidIngredient, catalyst: Optional, result: HTItemResult) : + HTBasicFluidWithCatalystRecipe(ingredient, catalyst, result) { + override fun getSerializer(): RecipeSerializer<*> = RagiumRecipeSerializers.SOLIDIFYING + + override fun getType(): RecipeType<*> = RagiumRecipeTypes.SOLIDIFYING.get() +} diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/base/HTBasicFluidWithCatalystRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/base/HTBasicFluidWithCatalystRecipe.kt new file mode 100644 index 000000000..7dac1dd52 --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/base/HTBasicFluidWithCatalystRecipe.kt @@ -0,0 +1,27 @@ +package hiiragi283.ragium.common.recipe.base + +import hiiragi283.ragium.api.recipe.ingredient.HTFluidIngredient +import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient +import hiiragi283.ragium.api.recipe.input.HTRecipeInput +import hiiragi283.ragium.api.recipe.multi.HTFluidWithCatalystRecipe +import hiiragi283.ragium.api.recipe.result.HTItemResult +import net.minecraft.world.level.Level +import java.util.* + +/** + * [HTFluidWithCatalystRecipe]の抽象クラス + */ +abstract class HTBasicFluidWithCatalystRecipe( + val ingredient: HTFluidIngredient, + val catalyst: Optional, + result: HTItemResult, +) : HTBasicSingleOutputRecipe(result), + HTFluidWithCatalystRecipe { + final override fun matches(input: HTRecipeInput, level: Level): Boolean { + val bool1: Boolean = input.testFluid(0, ingredient) + val bool2: Boolean = input.testCatalyst(0, catalyst) + return bool1 && bool2 + } + + override fun getRequiredAmount(): Int = ingredient.getRequiredAmount() +} diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/vanilla/HTVanillaSingleItemRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/vanilla/HTVanillaSingleItemRecipe.kt index a66d2af74..acbbfe253 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/recipe/vanilla/HTVanillaSingleItemRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/vanilla/HTVanillaSingleItemRecipe.kt @@ -3,7 +3,7 @@ package hiiragi283.ragium.common.recipe.vanilla 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.recipe.single.HTSingleItemInputRecipe import hiiragi283.ragium.api.stack.ImmutableItemStack import hiiragi283.ragium.api.stack.toImmutable import net.minecraft.core.HolderLookup @@ -16,7 +16,7 @@ open class HTVanillaSingleItemRecipe>( protected val ingredient: HTItemIngredient, protected val resultFactory: HTVanillaResultFactory, ) : HTRecipe.Fake, - HTSingleItemRecipe { + HTSingleItemInputRecipe { constructor(recipe: RECIPE) : this( recipe, HTItemIngredient(recipe.ingredients[0], 1), diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumMiscRegister.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumMiscRegister.kt index bae0b8ce4..9187ef7ed 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumMiscRegister.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumMiscRegister.kt @@ -45,6 +45,7 @@ object RagiumMiscRegister { register(helper, RagiumRecipeTypes.REFINING) register(helper, RagiumRecipeTypes.ROCK_GENERATING) register(helper, RagiumRecipeTypes.SIMULATING) + register(helper, RagiumRecipeTypes.SOLIDIFYING) } // Ingredient Type diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeBiCodecs.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeBiCodecs.kt index 0de91db3e..f849aeecd 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeBiCodecs.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeBiCodecs.kt @@ -24,6 +24,7 @@ import hiiragi283.ragium.common.recipe.HTMeltingRecipe import hiiragi283.ragium.common.recipe.HTMixingRecipe import hiiragi283.ragium.common.recipe.HTRefiningRecipe import hiiragi283.ragium.common.recipe.HTSimpleMixingRecipe +import hiiragi283.ragium.common.recipe.HTSolidifyingRecipe import hiiragi283.ragium.common.recipe.base.HTBasicCombineRecipe import hiiragi283.ragium.common.recipe.base.HTBasicItemWithCatalystRecipe import hiiragi283.ragium.common.recipe.base.HTBasicSimulatingRecipe @@ -83,8 +84,7 @@ object RagiumRecipeBiCodecs { @JvmField val REFINING: MapBiCodec = MapBiCodec.composite( - HTItemIngredient.UNSIZED_CODEC.optionalFieldOf("item_ingredient").forGetter(HTRefiningRecipe::itemIngredient), - HTFluidIngredient.CODEC.fieldOf("fluid_ingredient").forGetter(HTRefiningRecipe::fluidIngredient), + HTFluidIngredient.CODEC.fieldOf(RagiumConst.INGREDIENT).forGetter(HTRefiningRecipe::ingredient), RESULTS.forGetter(HTRefiningRecipe::results), ::HTRefiningRecipe, ) @@ -98,6 +98,14 @@ object RagiumRecipeBiCodecs { ::HTRockGeneratingRecipe, ) + @JvmField + val SOLIDIFYING: MapBiCodec = MapBiCodec.composite( + HTFluidIngredient.CODEC.fieldOf(RagiumConst.INGREDIENT).forGetter(HTSolidifyingRecipe::ingredient), + HTItemIngredient.UNSIZED_CODEC.optionalFieldOf(RagiumConst.CATALYST).forGetter(HTSolidifyingRecipe::catalyst), + HTItemResult.CODEC.fieldOf(RagiumConst.RESULT).forGetter(HTSolidifyingRecipe::result), + ::HTSolidifyingRecipe, + ) + @JvmStatic fun singleOutput( factory: (I, HTItemResult) -> R, diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeSerializers.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeSerializers.kt index 85c1b43e0..ee8121efe 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeSerializers.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeSerializers.kt @@ -27,6 +27,7 @@ import hiiragi283.ragium.common.recipe.HTMeltingRecipe import hiiragi283.ragium.common.recipe.HTMixingRecipe import hiiragi283.ragium.common.recipe.HTRefiningRecipe import hiiragi283.ragium.common.recipe.HTSimpleMixingRecipe +import hiiragi283.ragium.common.recipe.HTSolidifyingRecipe import hiiragi283.ragium.common.recipe.custom.HTBioExtractingRecipe import hiiragi283.ragium.common.recipe.custom.HTCopyEnchantingRecipe import hiiragi283.ragium.common.recipe.custom.HTExpExtractingRecipe @@ -190,6 +191,12 @@ object RagiumRecipeSerializers { RagiumRecipeBiCodecs.simulating(Registries.ENTITY_TYPE, ::HTEntitySimulatingRecipe), ) + @JvmField + val SOLIDIFYING: RecipeSerializer = register( + RagiumConst.SOLIDIFYING, + RagiumRecipeBiCodecs.SOLIDIFYING, + ) + private class SimpleSerializer>(private val codec: MapBiCodec) : RecipeSerializer { override fun codec(): MapCodec = codec.codec From a11fe2eb98a106b8f3cb59dfcf20edd5a3f21704 Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Thu, 11 Dec 2025 11:09:43 +0900 Subject: [PATCH 21/49] refactor: refined recipe types for Melting and Refining --- .../{single => }/HTSingleItemInputRecipe.kt | 5 +- .../ragium/api/recipe/RagiumRecipeTypes.kt | 7 +- .../recipe/extra/HTSingleExtraItemRecipe.kt | 2 +- .../api/recipe/{ => fluid}/HTFluidRecipe.kt | 7 +- .../api/recipe/fluid/HTMeltingRecipe.kt | 16 ++ .../api/recipe/fluid/HTRefiningRecipe.kt | 20 ++ .../api/recipe/multi/HTComplexRecipe.kt | 2 +- .../recipe/multi/HTFluidWithCatalystRecipe.kt | 3 + .../recipe/multi/HTItemWithCatalystRecipe.kt | 4 +- .../api/recipe/single/HTSingleFluidRecipe.kt | 15 -- .../api/data/recipe/HTRecipeProvider.kt | 14 +- .../recipe/RagiumChemistryRecipeProvider.kt | 203 +++++++++--------- .../recipe/RagiumDecorationRecipeProvider.kt | 6 +- .../server/recipe/RagiumFoodRecipeProvider.kt | 37 ++-- .../recipe/RagiumMaterialRecipeProvider.kt | 18 +- .../recipe/RagiumSimulatingRecipeProvider.kt | 10 +- .../server/recipe/RagiumToolRecipeProvider.kt | 6 +- .../recipe/compat/RagiumAARecipeProvider.kt | 25 +-- .../recipe/compat/RagiumAE2RecipeProvider.kt | 6 +- .../compat/RagiumCreateRecipeProvider.kt | 6 +- .../compat/RagiumDelightRecipeProvider.kt | 6 +- .../compat/RagiumImmersiveRecipeProvider.kt | 10 +- .../recipe/processor/HTMeltingEmiRecipe.kt | 6 +- .../recipe/processor/HTRefiningEmiRecipe.kt | 10 +- .../entity/processor/HTMelterBlockEntity.kt | 8 +- .../entity/processor/HTRefineryBlockEntity.kt | 10 +- .../processor/base/HTComplexBlockEntity.kt | 2 +- .../data/recipe/HTFluidRecipeBuilder.kt | 41 ++++ ...ipeBuilder.kt => HTMixingRecipeBuilder.kt} | 17 +- .../data/recipe/HTSingleRecipeBuilder.kt | 31 --- .../event/RagiumRuntimeRecipeHandler.kt | 6 +- .../common/recipe/HTBasicMeltingRecipe.kt | 22 ++ .../common/recipe/HTBasicRefiningRecipe.kt | 29 +++ .../ragium/common/recipe/HTMeltingRecipe.kt | 15 -- .../ragium/common/recipe/HTRefiningRecipe.kt | 26 --- .../recipe/base/HTBasicComplexOutputRecipe.kt | 2 +- .../recipe/base/HTBasicSingleFluidRecipe.kt | 21 -- .../vanilla/HTVanillaSingleItemRecipe.kt | 2 +- .../ragium/setup/RagiumRecipeBiCodecs.kt | 21 +- .../ragium/setup/RagiumRecipeSerializers.kt | 8 +- 40 files changed, 363 insertions(+), 342 deletions(-) rename src/api/kotlin/hiiragi283/ragium/api/recipe/{single => }/HTSingleItemInputRecipe.kt (76%) rename src/api/kotlin/hiiragi283/ragium/api/recipe/{ => fluid}/HTFluidRecipe.kt (62%) create mode 100644 src/api/kotlin/hiiragi283/ragium/api/recipe/fluid/HTMeltingRecipe.kt create mode 100644 src/api/kotlin/hiiragi283/ragium/api/recipe/fluid/HTRefiningRecipe.kt delete mode 100644 src/api/kotlin/hiiragi283/ragium/api/recipe/single/HTSingleFluidRecipe.kt create mode 100644 src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTFluidRecipeBuilder.kt rename src/main/kotlin/hiiragi283/ragium/common/data/recipe/{HTComplexRecipeBuilder.kt => HTMixingRecipeBuilder.kt} (69%) delete mode 100644 src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTSingleRecipeBuilder.kt create mode 100644 src/main/kotlin/hiiragi283/ragium/common/recipe/HTBasicMeltingRecipe.kt create mode 100644 src/main/kotlin/hiiragi283/ragium/common/recipe/HTBasicRefiningRecipe.kt delete mode 100644 src/main/kotlin/hiiragi283/ragium/common/recipe/HTMeltingRecipe.kt delete mode 100644 src/main/kotlin/hiiragi283/ragium/common/recipe/HTRefiningRecipe.kt delete mode 100644 src/main/kotlin/hiiragi283/ragium/common/recipe/base/HTBasicSingleFluidRecipe.kt diff --git a/src/api/kotlin/hiiragi283/ragium/api/recipe/single/HTSingleItemInputRecipe.kt b/src/api/kotlin/hiiragi283/ragium/api/recipe/HTSingleItemInputRecipe.kt similarity index 76% rename from src/api/kotlin/hiiragi283/ragium/api/recipe/single/HTSingleItemInputRecipe.kt rename to src/api/kotlin/hiiragi283/ragium/api/recipe/HTSingleItemInputRecipe.kt index 938af9869..c9e979f26 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/recipe/single/HTSingleItemInputRecipe.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/recipe/HTSingleItemInputRecipe.kt @@ -1,6 +1,5 @@ -package hiiragi283.ragium.api.recipe.single +package hiiragi283.ragium.api.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.stack.ImmutableItemStack @@ -8,7 +7,7 @@ import net.minecraft.world.level.Level import java.util.function.Predicate /** - * 単一のアイテムから単一のアイテムを生成するレシピ + * 単一のアイテムから完成品を生産するレシピ */ interface HTSingleItemInputRecipe : HTRecipe, diff --git a/src/api/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeTypes.kt b/src/api/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeTypes.kt index ff7275fa4..5bbba6d16 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeTypes.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeTypes.kt @@ -11,7 +11,8 @@ import hiiragi283.ragium.api.recipe.multi.HTFluidWithCatalystRecipe import hiiragi283.ragium.api.recipe.multi.HTItemWithCatalystRecipe import hiiragi283.ragium.api.recipe.multi.HTRockGeneratingRecipe import hiiragi283.ragium.api.recipe.multi.HTShapelessInputsRecipe -import hiiragi283.ragium.api.recipe.single.HTSingleFluidRecipe +import hiiragi283.ragium.api.recipe.fluid.HTMeltingRecipe +import hiiragi283.ragium.api.recipe.fluid.HTRefiningRecipe import hiiragi283.ragium.api.registry.impl.HTDeferredRecipeType import net.minecraft.world.item.crafting.Recipe import net.minecraft.world.item.crafting.RecipeInput @@ -36,7 +37,7 @@ object RagiumRecipeTypes { 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) @@ -45,7 +46,7 @@ object RagiumRecipeTypes { 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) 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 fccc404f0..d7b13aec1 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/recipe/extra/HTSingleExtraItemRecipe.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/recipe/extra/HTSingleExtraItemRecipe.kt @@ -1,6 +1,6 @@ package hiiragi283.ragium.api.recipe.extra -import hiiragi283.ragium.api.recipe.single.HTSingleItemInputRecipe +import hiiragi283.ragium.api.recipe.HTSingleItemInputRecipe /** * 単一のアイテムから主産物と副産物を生産するレシピ diff --git a/src/api/kotlin/hiiragi283/ragium/api/recipe/HTFluidRecipe.kt b/src/api/kotlin/hiiragi283/ragium/api/recipe/fluid/HTFluidRecipe.kt similarity index 62% rename from src/api/kotlin/hiiragi283/ragium/api/recipe/HTFluidRecipe.kt rename to src/api/kotlin/hiiragi283/ragium/api/recipe/fluid/HTFluidRecipe.kt index ed705945d..007cb45be 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/recipe/HTFluidRecipe.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/recipe/fluid/HTFluidRecipe.kt @@ -1,5 +1,6 @@ -package hiiragi283.ragium.api.recipe +package hiiragi283.ragium.api.recipe.fluid +import hiiragi283.ragium.api.recipe.HTRecipe import hiiragi283.ragium.api.recipe.input.HTRecipeInput import hiiragi283.ragium.api.stack.ImmutableFluidStack import net.minecraft.core.HolderLookup @@ -9,10 +10,10 @@ import net.minecraft.core.HolderLookup */ interface HTFluidRecipe : HTRecipe { /** - * 指定された[input]と[provider]から[ImmutableFluidStack]を返します。 + * 指定された[input]と[provider]から[hiiragi283.ragium.api.stack.ImmutableFluidStack]を返します。 * @param input レシピの入力 * @param provider レジストリのアクセス - * @return 完成品となる[ImmutableFluidStack] + * @return 完成品となる[hiiragi283.ragium.api.stack.ImmutableFluidStack] */ fun assembleFluid(input: HTRecipeInput, provider: HolderLookup.Provider): ImmutableFluidStack? } diff --git a/src/api/kotlin/hiiragi283/ragium/api/recipe/fluid/HTMeltingRecipe.kt b/src/api/kotlin/hiiragi283/ragium/api/recipe/fluid/HTMeltingRecipe.kt new file mode 100644 index 000000000..ad2605756 --- /dev/null +++ b/src/api/kotlin/hiiragi283/ragium/api/recipe/fluid/HTMeltingRecipe.kt @@ -0,0 +1,16 @@ +package hiiragi283.ragium.api.recipe.fluid + +import hiiragi283.ragium.api.recipe.RagiumRecipeTypes +import hiiragi283.ragium.api.recipe.input.HTRecipeInput +import hiiragi283.ragium.api.recipe.HTSingleItemInputRecipe +import hiiragi283.ragium.api.stack.ImmutableItemStack +import net.minecraft.core.HolderLookup +import net.minecraft.world.item.crafting.RecipeType + +interface HTMeltingRecipe : + HTFluidRecipe, + HTSingleItemInputRecipe { + override fun assembleItem(input: HTRecipeInput, provider: HolderLookup.Provider): ImmutableItemStack? = null + + override fun getType(): RecipeType<*> = RagiumRecipeTypes.MELTING.get() +} diff --git a/src/api/kotlin/hiiragi283/ragium/api/recipe/fluid/HTRefiningRecipe.kt b/src/api/kotlin/hiiragi283/ragium/api/recipe/fluid/HTRefiningRecipe.kt new file mode 100644 index 000000000..17499522a --- /dev/null +++ b/src/api/kotlin/hiiragi283/ragium/api/recipe/fluid/HTRefiningRecipe.kt @@ -0,0 +1,20 @@ +package hiiragi283.ragium.api.recipe.fluid + +import hiiragi283.ragium.api.recipe.RagiumRecipeTypes +import hiiragi283.ragium.api.recipe.ingredient.HTFluidIngredient +import hiiragi283.ragium.api.recipe.input.HTRecipeInput +import hiiragi283.ragium.api.stack.ImmutableFluidStack +import net.minecraft.world.item.crafting.RecipeType +import net.minecraft.world.level.Level +import java.util.function.Predicate + +interface HTRefiningRecipe : + HTFluidRecipe, + Predicate, + HTFluidIngredient.AmountGetter { + override fun matches(input: HTRecipeInput, level: Level): Boolean = input.testFluid(0, this::test) + + override fun test(stack: ImmutableFluidStack): Boolean + + override fun getType(): RecipeType<*> = RagiumRecipeTypes.REFINING.get() +} 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 a21a235f4..c7e5cab32 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/recipe/multi/HTComplexRecipe.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/recipe/multi/HTComplexRecipe.kt @@ -1,6 +1,6 @@ package hiiragi283.ragium.api.recipe.multi -import hiiragi283.ragium.api.recipe.HTFluidRecipe +import hiiragi283.ragium.api.recipe.fluid.HTFluidRecipe /** * 複数のインプット(アイテム,液体)から複数の完成品(アイテム,液体)を生産するレシピ diff --git a/src/api/kotlin/hiiragi283/ragium/api/recipe/multi/HTFluidWithCatalystRecipe.kt b/src/api/kotlin/hiiragi283/ragium/api/recipe/multi/HTFluidWithCatalystRecipe.kt index 16678be04..af3ba6d00 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/recipe/multi/HTFluidWithCatalystRecipe.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/recipe/multi/HTFluidWithCatalystRecipe.kt @@ -3,6 +3,9 @@ package hiiragi283.ragium.api.recipe.multi import hiiragi283.ragium.api.recipe.HTRecipe import hiiragi283.ragium.api.recipe.ingredient.HTFluidIngredient +/** + * 単一の液体と触媒から複数の完成品(アイテム,液体)を生産するレシピ + */ interface HTFluidWithCatalystRecipe : HTRecipe, HTFluidIngredient.AmountGetter 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 3d6adf275..b6812b1e4 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/recipe/multi/HTItemWithCatalystRecipe.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/recipe/multi/HTItemWithCatalystRecipe.kt @@ -1,10 +1,10 @@ package hiiragi283.ragium.api.recipe.multi -import hiiragi283.ragium.api.recipe.HTFluidRecipe +import hiiragi283.ragium.api.recipe.fluid.HTFluidRecipe import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient /** - * 単一のアイテムと触媒から複数の完成品(アイテム,液体)を生産するレシピ + * 単一のアイテムと触媒から単一のアイテムを生産するレシピ */ interface HTItemWithCatalystRecipe : HTFluidRecipe, diff --git a/src/api/kotlin/hiiragi283/ragium/api/recipe/single/HTSingleFluidRecipe.kt b/src/api/kotlin/hiiragi283/ragium/api/recipe/single/HTSingleFluidRecipe.kt deleted file mode 100644 index 84d00eec3..000000000 --- a/src/api/kotlin/hiiragi283/ragium/api/recipe/single/HTSingleFluidRecipe.kt +++ /dev/null @@ -1,15 +0,0 @@ -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 - -/** - * 単一のアイテムから単一の液体を生産するレシピ - */ -interface HTSingleFluidRecipe : - HTSingleItemInputRecipe, - HTFluidRecipe { - override fun assembleItem(input: HTRecipeInput, provider: HolderLookup.Provider): ImmutableItemStack? = null -} diff --git a/src/data/kotlin/hiiragi283/ragium/api/data/recipe/HTRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/api/data/recipe/HTRecipeProvider.kt index 645765a8b..077b5f773 100644 --- a/src/data/kotlin/hiiragi283/ragium/api/data/recipe/HTRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/api/data/recipe/HTRecipeProvider.kt @@ -19,13 +19,13 @@ import hiiragi283.ragium.api.registry.toId import hiiragi283.ragium.api.tag.RagiumModTags import hiiragi283.ragium.common.HTMoldType import hiiragi283.ragium.common.crafting.HTClearComponentRecipe -import hiiragi283.ragium.common.data.recipe.HTComplexRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTFluidRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTFluidWithCatalystRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTItemWithCatalystRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTMixingRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTPlantingRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTShapelessRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTSingleExtraItemRecipeBuilder -import hiiragi283.ragium.common.data.recipe.HTSingleRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTSmithingRecipeBuilder import hiiragi283.ragium.common.material.CommonMaterialPrefixes import hiiragi283.ragium.common.material.VanillaMaterialKeys @@ -251,8 +251,8 @@ sealed class HTRecipeProvider { .setResult(resultHelper.fluid(fluid.getFluid(), amount)) .saveSuffixed(output, "_from_${filled.getPath()}") // Mixing - HTComplexRecipeBuilder - .mixing() + HTMixingRecipeBuilder + .create() .addIngredient(itemCreator.fromItem(empty)) .addIngredient(fluidCreator.fromHolder(fluid, amount)) .setResult(resultHelper.item(filled)) @@ -267,7 +267,7 @@ sealed class HTRecipeProvider { amount: Int, ) { // Melting - HTSingleRecipeBuilder + HTFluidRecipeBuilder .melting( itemCreator.fromItem(solid), resultHelper.fluid(fluid, amount), @@ -291,7 +291,7 @@ sealed class HTRecipeProvider { ).saveModified(output, data.operator) // Melting val data1: HTRecipeData = data.swap() - HTSingleRecipeBuilder + HTFluidRecipeBuilder .melting( data1.getItemIngredients(itemCreator)[0], data1.getFluidResults()[0], @@ -300,7 +300,7 @@ sealed class HTRecipeProvider { // Mixing protected fun mixFromData(data: HTRecipeData) { - val builder: HTComplexRecipeBuilder = HTComplexRecipeBuilder.mixing() + val builder: HTMixingRecipeBuilder = HTMixingRecipeBuilder.create() // Inputs data.getItemIngredients(itemCreator).forEach(builder::addIngredient) data.getFluidIngredients(fluidCreator).forEach(builder::addIngredient) diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumChemistryRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumChemistryRecipeProvider.kt index dfdb70712..26cec4355 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumChemistryRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumChemistryRecipeProvider.kt @@ -9,15 +9,15 @@ import hiiragi283.ragium.api.registry.HTFluidHolderLike import hiiragi283.ragium.api.registry.toHolderLike import hiiragi283.ragium.api.tag.RagiumModTags import hiiragi283.ragium.common.HTMoldType -import hiiragi283.ragium.common.data.recipe.HTComplexRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTCookingRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTFluidRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTFluidWithCatalystRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTItemWithCatalystRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTMixingRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTShapedRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTShapelessInputsRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTShapelessRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTSingleExtraItemRecipeBuilder -import hiiragi283.ragium.common.data.recipe.HTSingleRecipeBuilder import hiiragi283.ragium.common.material.CommonMaterialKeys import hiiragi283.ragium.common.material.CommonMaterialPrefixes import hiiragi283.ragium.common.material.HTColorMaterial @@ -136,8 +136,8 @@ object RagiumChemistryRecipeProvider : HTRecipeProvider.Direct() { @JvmStatic private fun mixing() { // Water + Lava -> Obsidian - HTComplexRecipeBuilder - .mixing() + HTMixingRecipeBuilder + .create() .addIngredient(fluidCreator.water(1000)) .addIngredient(fluidCreator.lava(1000)) .setResult(resultHelper.item(Items.OBSIDIAN)) @@ -164,22 +164,22 @@ object RagiumChemistryRecipeProvider : HTRecipeProvider.Direct() { @JvmStatic private fun water() { // Water Bottle - HTComplexRecipeBuilder - .mixing() + HTMixingRecipeBuilder + .create() .addIngredient(itemCreator.fromItem(Items.GLASS_BOTTLE)) .addIngredient(fluidCreator.water(250)) .setResult(resultHelper.item(HTPotionHelper.createPotion(Items.POTION, Potions.WATER))) .save(output, RagiumAPI.id("water_bottle")) // Dirt -> Mud - HTComplexRecipeBuilder - .mixing() + HTMixingRecipeBuilder + .create() .addIngredient(itemCreator.fromItem(Items.DIRT, 8)) .addIngredient(fluidCreator.water(1000)) .setResult(resultHelper.item(Items.MUD, 8)) .saveSuffixed(output, "_from_dirt") // Silt -> Clay - HTComplexRecipeBuilder - .mixing() + HTMixingRecipeBuilder + .create() .addIngredient(itemCreator.fromItem(RagiumBlocks.SILT, 8)) .addIngredient(fluidCreator.water(1000)) .setResult(resultHelper.item(Items.CLAY, 8)) @@ -193,8 +193,8 @@ object RagiumChemistryRecipeProvider : HTRecipeProvider.Direct() { 1000, ) // Water + Wind Charge + Packed Ice -> Coolant - HTComplexRecipeBuilder - .mixing() + HTMixingRecipeBuilder + .create() .addIngredient(itemCreator.fromItem(Items.WIND_CHARGE, 3)) .addIngredient(itemCreator.fromItem(Items.PACKED_ICE)) .addIngredient(fluidCreator.water(1000)) @@ -203,8 +203,8 @@ object RagiumChemistryRecipeProvider : HTRecipeProvider.Direct() { // Concretes for (color: HTColorMaterial in HTColorMaterial.entries) { - HTComplexRecipeBuilder - .mixing() + HTMixingRecipeBuilder + .create() .addIngredient(itemCreator.fromItem(HTColorMaterial.getColoredItem(HTColoredVariant.CONCRETE_POWDER, color), 8)) .addIngredient(fluidCreator.water(1000)) .setResult(resultHelper.item(HTColorMaterial.getColoredItem(HTColoredVariant.CONCRETE, color), 8)) @@ -223,8 +223,8 @@ object RagiumChemistryRecipeProvider : HTRecipeProvider.Direct() { .saveSuffixed(output, "_from_berries") // Golden Apple - HTComplexRecipeBuilder - .mixing() + HTMixingRecipeBuilder + .create() .addIngredient(itemCreator.fromItem(Items.GOLDEN_APPLE)) .addIngredient(fluidCreator.fromHolder(RagiumFluidContents.EXPERIENCE, 8000)) .setResult(resultHelper.item(Items.ENCHANTED_GOLDEN_APPLE)) @@ -237,29 +237,29 @@ object RagiumChemistryRecipeProvider : HTRecipeProvider.Direct() { itemCreator.fromTagKey(CommonMaterialPrefixes.GEM, RagiumMaterialKeys.ELDRITCH_PEARL, 4), ).save(output) // Blaze Powder - HTComplexRecipeBuilder - .mixing() + HTMixingRecipeBuilder + .create() .addIngredient(itemCreator.fromTagKey(CommonMaterialPrefixes.DUST, CommonMaterialKeys.Gems.SULFUR, 2)) .addIngredient(fluidCreator.fromHolder(RagiumFluidContents.EXPERIENCE, 250)) .setResult(resultHelper.item(Items.BLAZE_POWDER)) .save(output) // Wind Charge - HTComplexRecipeBuilder - .mixing() + HTMixingRecipeBuilder + .create() .addIngredient(itemCreator.fromItem(Items.SNOWBALL, 2)) .addIngredient(fluidCreator.fromHolder(RagiumFluidContents.EXPERIENCE, 250)) .setResult(resultHelper.item(Items.WIND_CHARGE)) .save(output) // Ghast Tear - HTComplexRecipeBuilder - .mixing() + HTMixingRecipeBuilder + .create() .addIngredient(itemCreator.fromItem(Items.CHISELED_QUARTZ_BLOCK)) .addIngredient(fluidCreator.fromHolder(RagiumFluidContents.EXPERIENCE, 1000)) .setResult(resultHelper.item(Items.GHAST_TEAR)) .save(output) // Phantom Membrane - HTComplexRecipeBuilder - .mixing() + HTMixingRecipeBuilder + .create() .addIngredient(itemCreator.fromTagKey(Tags.Items.LEATHERS)) .addIngredient(fluidCreator.fromHolder(RagiumFluidContents.EXPERIENCE, 250)) .setResult(resultHelper.item(Items.PHANTOM_MEMBRANE)) @@ -269,29 +269,29 @@ object RagiumChemistryRecipeProvider : HTRecipeProvider.Direct() { @JvmStatic private fun crimson() { // Crimson Nylium - HTComplexRecipeBuilder - .mixing() + HTMixingRecipeBuilder + .create() .addIngredient(itemCreator.fromTagKey(Tags.Items.NETHERRACKS)) .addIngredient(fluidCreator.fromHolder(RagiumFluidContents.CRIMSON_BLOOD, 250)) .setResult(resultHelper.item(Items.CRIMSON_NYLIUM)) .save(output) // Crimson Fungus - HTComplexRecipeBuilder - .mixing() + HTMixingRecipeBuilder + .create() .addIngredient(itemCreator.fromItem(Items.RED_MUSHROOM)) .addIngredient(fluidCreator.fromHolder(RagiumFluidContents.CRIMSON_BLOOD, 250)) .setResult(resultHelper.item(Items.CRIMSON_FUNGUS)) .save(output) // Nether Wart - HTComplexRecipeBuilder - .mixing() + HTMixingRecipeBuilder + .create() .addIngredient(itemCreator.fromTagKey(Tags.Items.CROPS_BEETROOT)) .addIngredient(fluidCreator.fromHolder(RagiumFluidContents.CRIMSON_BLOOD, 250)) .setResult(resultHelper.item(Items.NETHER_WART)) .save(output) // Crimson Soil - HTComplexRecipeBuilder - .mixing() + HTMixingRecipeBuilder + .create() .addIngredient(itemCreator.fromItem(Items.SOUL_SOIL)) .addIngredient(fluidCreator.fromHolder(RagiumFluidContents.CRIMSON_BLOOD, 2000)) .setResult(resultHelper.item(RagiumBlocks.CRIMSON_SOIL)) @@ -301,22 +301,22 @@ object RagiumChemistryRecipeProvider : HTRecipeProvider.Direct() { @JvmStatic private fun warped() { // Warped Nylium - HTComplexRecipeBuilder - .mixing() + HTMixingRecipeBuilder + .create() .addIngredient(itemCreator.fromTagKey(Tags.Items.NETHERRACKS)) .addIngredient(fluidCreator.fromHolder(RagiumFluidContents.DEW_OF_THE_WARP, 250)) .setResult(resultHelper.item(Items.WARPED_NYLIUM)) .save(output) // Warped Fungus - HTComplexRecipeBuilder - .mixing() + HTMixingRecipeBuilder + .create() .addIngredient(itemCreator.fromItem(Items.RED_MUSHROOM)) .addIngredient(fluidCreator.fromHolder(RagiumFluidContents.DEW_OF_THE_WARP, 250)) .setResult(resultHelper.item(Items.WARPED_FUNGUS)) .save(output) // Warped Wart - HTComplexRecipeBuilder - .mixing() + HTMixingRecipeBuilder + .create() .addIngredient(itemCreator.fromTagKey(Tags.Items.CROPS_BEETROOT)) .addIngredient(fluidCreator.fromHolder(RagiumFluidContents.DEW_OF_THE_WARP, 1000)) .setResult(resultHelper.item(RagiumBlocks.WARPED_WART)) @@ -326,37 +326,37 @@ object RagiumChemistryRecipeProvider : HTRecipeProvider.Direct() { @JvmStatic private fun eldritch() { // Budding Amethyst - HTComplexRecipeBuilder - .mixing() + HTMixingRecipeBuilder + .create() .addIngredient(itemCreator.fromTagKey(CommonMaterialPrefixes.STORAGE_BLOCK, VanillaMaterialKeys.AMETHYST)) .addIngredient(fluidCreator.fromHolder(RagiumFluidContents.ELDRITCH_FLUX, 4000)) .setResult(resultHelper.item(Items.BUDDING_AMETHYST)) .save(output) // Budding Quartz - HTComplexRecipeBuilder - .mixing() + HTMixingRecipeBuilder + .create() .addIngredient(itemCreator.fromTagKey(CommonMaterialPrefixes.STORAGE_BLOCK, VanillaMaterialKeys.QUARTZ)) .addIngredient(fluidCreator.fromHolder(RagiumFluidContents.ELDRITCH_FLUX, 4000)) .setResult(resultHelper.item(RagiumBlocks.BUDDING_QUARTZ)) .save(output) // Ominous Bottle - HTComplexRecipeBuilder - .mixing() + HTMixingRecipeBuilder + .create() .addIngredient(itemCreator.fromItem(Items.GLASS_BOTTLE)) .addIngredient(fluidCreator.fromHolder(RagiumFluidContents.ELDRITCH_FLUX, 1000)) .setResult(resultHelper.item(Items.OMINOUS_BOTTLE)) .save(output) // Ominous Trial Key - HTComplexRecipeBuilder - .mixing() + HTMixingRecipeBuilder + .create() .addIngredient(itemCreator.fromItem(Items.TRIAL_KEY)) .addIngredient(fluidCreator.fromHolder(RagiumFluidContents.ELDRITCH_FLUX, 4000)) .setResult(resultHelper.item(Items.OMINOUS_TRIAL_KEY)) .save(output) // Crying Obsidian - HTComplexRecipeBuilder - .mixing() + HTMixingRecipeBuilder + .create() .addIngredient(itemCreator.fromTagKey(Tags.Items.OBSIDIANS_NORMAL)) .addIngredient(fluidCreator.fromHolder(RagiumFluidContents.ELDRITCH_FLUX, 4000)) .setResult(resultHelper.item(Items.CRYING_OBSIDIAN)) @@ -380,15 +380,15 @@ object RagiumChemistryRecipeProvider : HTRecipeProvider.Direct() { 250 * 9, ) // Gunpowder + Slime -> Gelled Explosive - HTComplexRecipeBuilder - .mixing() + HTMixingRecipeBuilder + .create() .addIngredient(itemCreator.fromTagKey(Tags.Items.GUNPOWDERS)) .addIngredient(fluidCreator.fromHolder(RagiumFluidContents.SLIME, 250)) .setResult(resultHelper.fluid(RagiumFluidContents.GELLED_EXPLOSIVE, 250)) .save(output) // Gelled Explosive -> TNT - HTComplexRecipeBuilder - .mixing() + HTMixingRecipeBuilder + .create() .addIngredient(itemCreator.fromTagKey(Tags.Items.SANDS, 4)) .addIngredient(fluidCreator.fromHolder(RagiumFluidContents.GELLED_EXPLOSIVE, 1000)) .setResult(resultHelper.item(Items.TNT, 8)) @@ -437,37 +437,36 @@ object RagiumChemistryRecipeProvider : HTRecipeProvider.Direct() { fluidResult = resultHelper.fluid(RagiumFluidContents.CREOSOTE, 250), ).saveSuffixed(output, "_from_coal") // Creosote -> Tar + Lubricant - HTComplexRecipeBuilder - .refining() - .addIngredient(fluidCreator.fromHolder(RagiumFluidContents.CREOSOTE, 1000)) - .setResult(resultHelper.item(RagiumItems.TAR, 3)) - .setResult(resultHelper.fluid(RagiumFluidContents.LUBRICANT, 250)) - .saveSuffixed(output, "_from_creosote") + HTFluidRecipeBuilder + .refining( + fluidCreator.fromHolder(RagiumFluidContents.CREOSOTE, 1000), + resultHelper.fluid(RagiumFluidContents.LUBRICANT, 250), + resultHelper.item(RagiumItems.TAR, 3), + ).saveSuffixed(output, "_from_creosote") } @JvmStatic private fun crudeOil() { // Coal -> Crude Oil - HTSingleRecipeBuilder + HTFluidRecipeBuilder .melting( itemCreator.fromTagKey(CommonMaterialPrefixes.DUST, VanillaMaterialKeys.COAL), resultHelper.fluid(RagiumFluidContents.CRUDE_OIL, 125), ).saveSuffixed(output, "_from_coal") // Soul XX -> Crude Oil - HTSingleRecipeBuilder + HTFluidRecipeBuilder .melting( itemCreator.fromTagKey(ItemTags.SOUL_FIRE_BASE_BLOCKS), resultHelper.fluid(RagiumFluidContents.CRUDE_OIL, 500), ).saveSuffixed(output, "_from_soul") // Crude Oil -> Naphtha + Tar - HTComplexRecipeBuilder - .refining() - .addIngredient(fluidCreator.fromHolder(RagiumFluidContents.CRUDE_OIL, 1000)) - .setResult(resultHelper.item(RagiumItems.TAR)) - .setResult(resultHelper.fluid(RagiumFluidContents.NAPHTHA, 750)) - .saveSuffixed(output, "_from_crude_oil") - + HTFluidRecipeBuilder + .refining( + fluidCreator.fromHolder(RagiumFluidContents.CRUDE_OIL, 1000), + resultHelper.fluid(RagiumFluidContents.NAPHTHA, 750), + resultHelper.item(RagiumItems.TAR), + ).saveSuffixed(output, "_from_crude_oil") // Naphtha + Catalyst -> 4x Polymer Resin HTFluidWithCatalystRecipeBuilder .solidifying( @@ -476,15 +475,15 @@ object RagiumChemistryRecipeProvider : HTRecipeProvider.Direct() { resultHelper.item(RagiumModTags.Items.POLYMER_RESIN, 4), ).saveSuffixed(output, "_from_naphtha") // Naphtha -> Fuel + Sulfur - HTComplexRecipeBuilder - .refining() - .addIngredient(fluidCreator.fromHolder(RagiumFluidContents.NAPHTHA, 1000)) - .setResult(resultHelper.item(CommonMaterialPrefixes.DUST, CommonMaterialKeys.Gems.SULFUR)) - .setResult(resultHelper.fluid(RagiumFluidContents.FUEL, 750)) - .saveSuffixed(output, "_from_naphtha") + HTFluidRecipeBuilder + .refining( + fluidCreator.fromHolder(RagiumFluidContents.NAPHTHA, 1000), + resultHelper.fluid(RagiumFluidContents.FUEL, 750), + resultHelper.item(CommonMaterialPrefixes.DUST, CommonMaterialKeys.Gems.SULFUR), + ).saveSuffixed(output, "_from_naphtha") // Naphtha + Raginite -> Lubricant - HTComplexRecipeBuilder - .mixing() + HTMixingRecipeBuilder + .create() .addIngredient(itemCreator.fromTagKey(CommonMaterialPrefixes.DUST, RagiumMaterialKeys.RAGINITE)) .addIngredient(fluidCreator.fromHolders(RagiumFluidContents.CREOSOTE, RagiumFluidContents.NAPHTHA, amount = 1000)) .setResult(resultHelper.fluid(RagiumFluidContents.LUBRICANT, 1000)) @@ -494,15 +493,15 @@ object RagiumChemistryRecipeProvider : HTRecipeProvider.Direct() { @JvmStatic private fun plastic() { // Slime + Salt -> Polymer Resin - HTComplexRecipeBuilder - .mixing() + HTMixingRecipeBuilder + .create() .addIngredient(itemCreator.fromTagKey(CommonMaterialPrefixes.DUST, CommonMaterialKeys.Gems.SALT)) .addIngredient(fluidCreator.fromHolder(RagiumFluidContents.SLIME, 125)) .setResult(resultHelper.item(RagiumModTags.Items.POLYMER_RESIN)) .saveSuffixed(output, "_from_slime") // Crude Oil + Clay -> Polymer Resin - HTComplexRecipeBuilder - .mixing() + HTMixingRecipeBuilder + .create() .addIngredient(itemCreator.fromItem(Items.CLAY_BALL)) .addIngredient(fluidCreator.fromHolder(RagiumFluidContents.CRUDE_OIL, 125)) .setResult(resultHelper.item(RagiumModTags.Items.POLYMER_RESIN)) @@ -550,12 +549,12 @@ object RagiumChemistryRecipeProvider : HTRecipeProvider.Direct() { .setResult(resultHelper.fluid(RagiumFluidContents.SPRUCE_RESIN, 250)) .saveSuffixed(output, "_from_log") // Resin -> Rosin - HTComplexRecipeBuilder - .refining() - .addIngredient(fluidCreator.fromHolder(RagiumFluidContents.SPRUCE_RESIN, 1000)) - .setResult(resultHelper.item(RagiumItems.ROSIN)) - .setResult(resultHelper.fluid(HTFluidHolderLike.WATER, 500)) - .saveSuffixed(output, "_from_spruce_resin") + HTFluidRecipeBuilder + .refining( + fluidCreator.fromHolder(RagiumFluidContents.SPRUCE_RESIN, 1000), + resultHelper.fluid(HTFluidHolderLike.WATER, 500), + resultHelper.item(RagiumItems.ROSIN), + ).saveSuffixed(output, "_from_spruce_resin") rubber() @@ -573,11 +572,11 @@ object RagiumChemistryRecipeProvider : HTRecipeProvider.Direct() { // Sap -> Molten val molten: HTBasicFluidContent = data.molten if (sap != null) { - HTComplexRecipeBuilder - .refining() - .addIngredient(fluidCreator.fromHolder(sap, 1000)) - .setResult(resultHelper.fluid(molten, RagiumConst.SAP_TO_MOLTEN)) - .saveSuffixed(output, "_from_${sap.getPath()}") + HTFluidRecipeBuilder + .refining( + fluidCreator.fromHolder(sap, 1000), + resultHelper.fluid(molten, RagiumConst.SAP_TO_MOLTEN), + ).saveSuffixed(output, "_from_${sap.getPath()}") } // Molten -> Gem HTFluidWithCatalystRecipeBuilder @@ -587,7 +586,7 @@ object RagiumChemistryRecipeProvider : HTRecipeProvider.Direct() { resultHelper.item(CommonMaterialPrefixes.GEM, data), ).save(output) - HTSingleRecipeBuilder + HTFluidRecipeBuilder .melting( itemCreator.fromTagKey(CommonMaterialPrefixes.GEM, data), resultHelper.fluid(molten, 1000), @@ -650,8 +649,8 @@ object RagiumChemistryRecipeProvider : HTRecipeProvider.Direct() { ).save(output) // Latex + Sulfur + Coal -> Rubber - HTComplexRecipeBuilder - .mixing() + HTMixingRecipeBuilder + .create() .addIngredient(itemCreator.fromTagKey(CommonMaterialPrefixes.DUST, VanillaMaterialKeys.COAL)) .addIngredient(itemCreator.fromTagKey(CommonMaterialPrefixes.DUST, CommonMaterialKeys.Gems.SULFUR)) .addIngredient(fluidCreator.fromHolder(RagiumFluidContents.LATEX, 1000)) @@ -663,23 +662,23 @@ object RagiumChemistryRecipeProvider : HTRecipeProvider.Direct() { private fun biomass() { save(HTBioExtractingRecipe.RECIPE_ID, HTBioExtractingRecipe) // Biomass -> Crude Bio - HTSingleRecipeBuilder + HTFluidRecipeBuilder .melting( itemCreator.fromTagKey(CommonMaterialPrefixes.FUEL, CommonMaterialKeys.BIO), resultHelper.fluid(RagiumFluidContents.CRUDE_BIO, 125), ).save(output) // Crude Bio -> Bio Fuel - HTComplexRecipeBuilder - .refining() - .addIngredient(fluidCreator.fromHolder(RagiumFluidContents.CRUDE_BIO, 1000)) - .setResult(resultHelper.item(Items.CLAY_BALL)) - .setResult(resultHelper.fluid(RagiumFluidContents.BIOFUEL, 750)) - .saveSuffixed(output, "_from_crude_bio") + HTFluidRecipeBuilder + .refining( + fluidCreator.fromHolder(RagiumFluidContents.CRUDE_BIO, 1000), + resultHelper.fluid(RagiumFluidContents.BIOFUEL, 750), + resultHelper.item(Items.CLAY_BALL), + ).saveSuffixed(output, "_from_crude_bio") // Poisonous Potato - HTComplexRecipeBuilder - .mixing() + HTMixingRecipeBuilder + .create() .addIngredient(itemCreator.fromTagKey(Tags.Items.CROPS_POTATO)) .addIngredient(fluidCreator.fromHolder(RagiumFluidContents.CRUDE_BIO, 250)) .setResult(resultHelper.item(Items.POISONOUS_POTATO)) diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumDecorationRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumDecorationRecipeProvider.kt index 76628444f..571f9a207 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumDecorationRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumDecorationRecipeProvider.kt @@ -3,8 +3,8 @@ package hiiragi283.ragium.data.server.recipe import hiiragi283.ragium.api.data.recipe.HTRecipeProvider import hiiragi283.ragium.api.material.HTMaterialKey import hiiragi283.ragium.common.HTDecorationType -import hiiragi283.ragium.common.data.recipe.HTComplexRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTCookingRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTMixingRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTShapedRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTShapelessInputsRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTSingleExtraItemRecipeBuilder @@ -103,8 +103,8 @@ object RagiumDecorationRecipeProvider : HTRecipeProvider.Direct() { .setCategory(CraftingBookCategory.BUILDING) .save(output) // Sponge Cake - HTComplexRecipeBuilder - .mixing() + HTMixingRecipeBuilder + .create() .addIngredient(itemCreator.fromTagKey(CommonMaterialPrefixes.FLOUR, FoodMaterialKeys.WHEAT, 2)) .addIngredient(itemCreator.fromTagKey(Tags.Items.EGGS)) .addIngredient(itemCreator.fromItem(Items.SUGAR)) diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumFoodRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumFoodRecipeProvider.kt index 441e1a37e..2ca966c71 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumFoodRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumFoodRecipeProvider.kt @@ -9,9 +9,10 @@ import hiiragi283.ragium.api.tag.RagiumModTags import hiiragi283.ragium.common.HTDecorationType import hiiragi283.ragium.common.HTMoldType import hiiragi283.ragium.common.crafting.HTIceCreamSodaRecipe -import hiiragi283.ragium.common.data.recipe.HTComplexRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTCookingRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTFluidRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTItemWithCatalystRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTMixingRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTShapedRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTShapelessRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTSingleExtraItemRecipeBuilder @@ -32,8 +33,8 @@ import net.neoforged.neoforge.common.Tags object RagiumFoodRecipeProvider : HTRecipeProvider.Direct() { override fun buildRecipeInternal() { // Mushroom Stew - HTComplexRecipeBuilder - .mixing() + HTMixingRecipeBuilder + .create() .addIngredient(itemCreator.fromTagKey(Tags.Items.MUSHROOMS, 2)) .addIngredient(fluidCreator.milk(250)) .setResult(resultHelper.fluid(RagiumFluidContents.MUSHROOM_STEW, 250)) @@ -50,8 +51,8 @@ object RagiumFoodRecipeProvider : HTRecipeProvider.Direct() { .save(output) // Ambrosia - HTComplexRecipeBuilder - .mixing() + HTMixingRecipeBuilder + .create() .addIngredient(itemCreator.fromTagKey(CommonMaterialPrefixes.STORAGE_BLOCK, FoodMaterialKeys.CHOCOLATE, 64)) .addIngredient(itemCreator.fromItem(Items.HONEY_BLOCK, 64)) .addIngredient(itemCreator.fromItem(RagiumItems.IRIDESCENT_POWDER)) @@ -122,8 +123,8 @@ object RagiumFoodRecipeProvider : HTRecipeProvider.Direct() { @JvmStatic private fun chocolate() { - HTComplexRecipeBuilder - .mixing() + HTMixingRecipeBuilder + .create() .addIngredient(itemCreator.fromTagKey(Tags.Items.CROPS_COCOA_BEAN)) .addIngredient(fluidCreator.milk(250)) .setResult(resultHelper.fluid(RagiumFluidContents.CHOCOLATE, 250)) @@ -149,16 +150,16 @@ object RagiumFoodRecipeProvider : HTRecipeProvider.Direct() { @JvmStatic private fun cream() { // Milk -> Cream - HTComplexRecipeBuilder - .refining() - .addIngredient(fluidCreator.fromHolder(HTFluidHolderLike.MILK, 1000)) - .setResult(resultHelper.fluid(RagiumFluidContents.CREAM, 250)) - .saveSuffixed(output, "_from_milk") + HTFluidRecipeBuilder + .refining( + fluidCreator.fromHolder(HTFluidHolderLike.MILK, 1000), + resultHelper.fluid(RagiumFluidContents.CREAM, 250), + ).saveSuffixed(output, "_from_milk") extractAndInfuse(Items.BOWL, RagiumItems.CREAM_BOWL, RagiumFluidContents.CREAM) // Cream -> Butter - HTComplexRecipeBuilder - .mixing() + HTMixingRecipeBuilder + .create() .addIngredient(itemCreator.fromTagKey(CommonMaterialPrefixes.DUST, CommonMaterialKeys.Gems.SALT)) .addIngredient(fluidCreator.fromHolder(RagiumFluidContents.CREAM, 250)) .setResult(resultHelper.item(CommonMaterialPrefixes.FOOD, FoodMaterialKeys.BUTTER)) @@ -178,8 +179,8 @@ object RagiumFoodRecipeProvider : HTRecipeProvider.Direct() { .saveSuffixed(output, "_with_sponge") // Ice Cream - HTComplexRecipeBuilder - .mixing() + HTMixingRecipeBuilder + .create() .addIngredient(itemCreator.fromItem(Items.SNOWBALL)) .addIngredient(fluidCreator.milk(250)) .setResult(resultHelper.item(RagiumItems.ICE_CREAM)) @@ -240,8 +241,8 @@ object RagiumFoodRecipeProvider : HTRecipeProvider.Direct() { .addIngredient(Tags.Items.BUCKETS_WATER) .save(output) - HTComplexRecipeBuilder - .mixing() + HTMixingRecipeBuilder + .create() .addIngredient(itemCreator.fromTagKey(CommonMaterialPrefixes.FLOUR, FoodMaterialKeys.WHEAT)) .addIngredient(fluidCreator.water(250)) .setResult(resultHelper.item(dough)) diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumMaterialRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumMaterialRecipeProvider.kt index a0d2fe173..37dd393df 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumMaterialRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumMaterialRecipeProvider.kt @@ -15,8 +15,8 @@ import hiiragi283.ragium.api.registry.impl.HTSimpleDeferredItem import hiiragi283.ragium.api.tag.RagiumCommonTags import hiiragi283.ragium.api.util.Ior import hiiragi283.ragium.common.HTMoldType -import hiiragi283.ragium.common.data.recipe.HTComplexRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTCookingRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTMixingRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTShapedRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTShapelessInputsRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTShapelessRecipeBuilder @@ -86,8 +86,8 @@ object RagiumMaterialRecipeProvider : HTRecipeProvider.Direct() { alloyFromData(RagiumMaterialRecipeData.RAGI_CRYSTAL) // Ragium Powder - HTComplexRecipeBuilder - .mixing() + HTMixingRecipeBuilder + .create() .addIngredient(itemCreator.fromTagKey(CommonMaterialPrefixes.GEM, RagiumMaterialKeys.RAGI_CRYSTAL)) .addIngredient(fluidCreator.fromHolder(RagiumFluidContents.EXPERIENCE, 1000)) .setResult(resultHelper.item(RagiumItems.RAGIUM_POWDER)) @@ -252,8 +252,8 @@ object RagiumMaterialRecipeProvider : HTRecipeProvider.Direct() { resultHelper.item(CommonMaterialPrefixes.GEM, secondary), ).saveSuffixed(output, "_from_ore") // Mixing with Lava - HTComplexRecipeBuilder - .mixing() + HTMixingRecipeBuilder + .create() .addIngredient(ore) .addIngredient(fluidCreator.lava(500)) .setResult(resultHelper.item(CommonMaterialPrefixes.DUST, primary, 12)) @@ -307,8 +307,8 @@ object RagiumMaterialRecipeProvider : HTRecipeProvider.Direct() { resultHelper.item(CommonMaterialPrefixes.GEM, material, count), ).saveSuffixed(output, "_from_ore") // Mixing with Dew of the Warp - HTComplexRecipeBuilder - .mixing() + HTMixingRecipeBuilder + .create() .addIngredient(ore) .addIngredient(fluidCreator.fromHolder(RagiumFluidContents.DEW_OF_THE_WARP, 500)) .setResult(resultHelper.item(CommonMaterialPrefixes.GEM, material, count * 2)) @@ -328,8 +328,8 @@ object RagiumMaterialRecipeProvider : HTRecipeProvider.Direct() { resultHelper.item(CommonMaterialPrefixes.SCRAP, key, 2), ).saveSuffixed(output, "_from_ore") // Mixing with Eldritch Flux - HTComplexRecipeBuilder - .mixing() + HTMixingRecipeBuilder + .create() .addIngredient(ore) .addIngredient(fluidCreator.fromHolder(RagiumFluidContents.ELDRITCH_FLUX, 500)) .setResult(resultHelper.item(CommonMaterialPrefixes.SCRAP, key, 4)) diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumSimulatingRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumSimulatingRecipeProvider.kt index 2ad5ccb87..620645944 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumSimulatingRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumSimulatingRecipeProvider.kt @@ -6,7 +6,7 @@ import hiiragi283.ragium.api.material.prefix.HTPrefixLike import hiiragi283.ragium.api.registry.HTFluidHolderLike import hiiragi283.ragium.api.stack.toImmutableOrThrow import hiiragi283.ragium.common.block.HTImitationSpawnerBlock -import hiiragi283.ragium.common.data.recipe.HTComplexRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTMixingRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTShapedRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTSimulatingRecipeBuilder import hiiragi283.ragium.common.material.CommonMaterialPrefixes @@ -111,8 +111,8 @@ object RagiumSimulatingRecipeProvider : HTRecipeProvider.Direct() { ).setResult(resultHelper.fluid(HTFluidHolderLike.MILK, 250)) .saveSuffixed(output, "_from_cow") // Heart of the Sea - HTComplexRecipeBuilder - .mixing() + HTMixingRecipeBuilder + .create() .addIngredient(itemCreator.fromItem(RagiumItems.ELDER_HEART)) .addIngredient(itemCreator.fromItem(Items.PRISMARINE_SHARD, 64)) .addIngredient(itemCreator.fromTagKey(Tags.Items.GEMS_PRISMARINE, 64)) @@ -195,8 +195,8 @@ object RagiumSimulatingRecipeProvider : HTRecipeProvider.Direct() { ).setResult(resultHelper.item(RagiumItems.WITHER_STAR)) .save(output) - HTComplexRecipeBuilder - .mixing() + HTMixingRecipeBuilder + .create() .addIngredient(itemCreator.fromItem(RagiumItems.WITHER_STAR)) .addIngredient(itemCreator.fromItem(Items.GHAST_TEAR, 16)) .addIngredient(itemCreator.fromTagKey(CommonMaterialPrefixes.SCRAP, VanillaMaterialKeys.NETHERITE, 16)) diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumToolRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumToolRecipeProvider.kt index 1cdb20348..373fd4399 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumToolRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumToolRecipeProvider.kt @@ -11,7 +11,7 @@ import hiiragi283.ragium.api.tag.RagiumCommonTags import hiiragi283.ragium.api.variant.HTToolVariant import hiiragi283.ragium.common.HTChargeType import hiiragi283.ragium.common.crafting.HTUpgradeChargeRecipe -import hiiragi283.ragium.common.data.recipe.HTComplexRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTMixingRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTShapedRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTShapelessRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTSmithingRecipeBuilder @@ -281,8 +281,8 @@ object RagiumToolRecipeProvider : HTRecipeProvider.Direct() { ) // Glycerol + Mixture Acid + Paper -> Blast Charge - HTComplexRecipeBuilder - .mixing() + HTMixingRecipeBuilder + .create() .addIngredient(itemCreator.fromItem(Items.PAPER, 4)) .addIngredient(fluidCreator.fromHolder(RagiumFluidContents.GELLED_EXPLOSIVE, 1000)) .setResult(resultHelper.item(HTChargeType.BLAST, 4)) diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumAARecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumAARecipeProvider.kt index 07cf05daa..deb5361d1 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumAARecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumAARecipeProvider.kt @@ -5,15 +5,16 @@ import de.ellpeck.actuallyadditions.mod.fluids.InitFluids import de.ellpeck.actuallyadditions.mod.items.ActuallyItems import hiiragi283.ragium.api.RagiumConst import hiiragi283.ragium.api.data.recipe.HTRecipeProvider -import hiiragi283.ragium.common.data.recipe.HTComplexRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTFluidRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTItemWithCatalystRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTMixingRecipeBuilder import hiiragi283.ragium.setup.RagiumFluidContents object RagiumAARecipeProvider : HTRecipeProvider.Integration(RagiumConst.ACTUALLY) { override fun buildRecipeInternal() { // Rice Slimeball - HTComplexRecipeBuilder - .mixing() + HTMixingRecipeBuilder + .create() .addIngredient(itemCreator.fromItem(ActuallyItems.RICE_DOUGH)) .addIngredient(fluidCreator.water(250)) .setResult(resultHelper.item(ActuallyItems.RICE_SLIMEBALL)) @@ -40,21 +41,21 @@ object RagiumAARecipeProvider : HTRecipeProvider.Integration(RagiumConst.ACTUALL .setResult(resultHelper.fluid(InitFluids.CANOLA_OIL.get(), 80)) .save(output) // Canola Oil -> Refined - HTComplexRecipeBuilder - .refining() - .addIngredient(fluidCreator.from(InitFluids.CANOLA_OIL.get(), 80)) - .setResult(resultHelper.fluid(InitFluids.REFINED_CANOLA_OIL.get(), 80)) - .save(output) + HTFluidRecipeBuilder + .refining( + fluidCreator.from(InitFluids.CANOLA_OIL.get(), 80), + resultHelper.fluid(InitFluids.REFINED_CANOLA_OIL.get(), 80), + ).save(output) // Refined -> Crystallized - HTComplexRecipeBuilder - .mixing() + HTMixingRecipeBuilder + .create() .addIngredient(itemCreator.fromItem(ActuallyItems.CRYSTALLIZED_CANOLA_SEED)) .addIngredient(fluidCreator.from(InitFluids.REFINED_CANOLA_OIL.get(), 1000)) .setResult(resultHelper.fluid(InitFluids.CRYSTALLIZED_OIL.get(), 1000)) .save(output) // Crystallized -> Empowered - HTComplexRecipeBuilder - .mixing() + HTMixingRecipeBuilder + .create() .addIngredient(itemCreator.fromItem(ActuallyItems.EMPOWERED_CANOLA_SEED)) .addIngredient(fluidCreator.from(InitFluids.CRYSTALLIZED_OIL.get(), 1000)) .setResult(resultHelper.fluid(InitFluids.EMPOWERED_OIL.get(), 1000)) diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumAE2RecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumAE2RecipeProvider.kt index 19d9bb2c8..60560b900 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumAE2RecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumAE2RecipeProvider.kt @@ -7,7 +7,7 @@ import hiiragi283.ragium.api.RagiumConst import hiiragi283.ragium.api.data.recipe.HTRecipeProvider import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient import hiiragi283.ragium.api.recipe.result.HTItemResult -import hiiragi283.ragium.common.data.recipe.HTComplexRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTMixingRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTRockGeneratingRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTShapelessInputsRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTSimulatingRecipeBuilder @@ -25,8 +25,8 @@ object RagiumAE2RecipeProvider : HTRecipeProvider.Integration(RagiumConst.AE2) { certusBudding(AEBlocks.CHIPPED_BUDDING_QUARTZ, 2) certusBudding(AEBlocks.DAMAGED_BUDDING_QUARTZ, 1) - HTComplexRecipeBuilder - .mixing() + HTMixingRecipeBuilder + .create() .addIngredient(itemCreator.fromItem(AEBlocks.QUARTZ_BLOCK)) .addIngredient(fluidCreator.fromHolder(RagiumFluidContents.ELDRITCH_FLUX, 8000)) .setResult(resultHelper.item(AEBlocks.FLAWLESS_BUDDING_QUARTZ)) diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumCreateRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumCreateRecipeProvider.kt index a1e7ffbb7..c447fab7d 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumCreateRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumCreateRecipeProvider.kt @@ -16,7 +16,7 @@ import hiiragi283.ragium.api.material.HTMaterialKey import hiiragi283.ragium.api.material.prefix.HTMaterialPrefix import hiiragi283.ragium.api.registry.HTItemHolderLike import hiiragi283.ragium.common.HTMoldType -import hiiragi283.ragium.common.data.recipe.HTComplexRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTMixingRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTShapelessRecipeBuilder import hiiragi283.ragium.common.material.CommonMaterialPrefixes import hiiragi283.ragium.common.material.RagiumMaterialKeys @@ -47,8 +47,8 @@ object RagiumCreateRecipeProvider : HTRecipeProvider.Integration(RagiumConst.CRE .setCategory(CraftingBookCategory.EQUIPMENT) .save(output) // Cardboard - HTComplexRecipeBuilder - .mixing() + HTMixingRecipeBuilder + .create() .addIngredient(itemCreator.fromTagKey(AllTags.AllItemTags.PULPIFIABLE.tag, 4)) .addIngredient(fluidCreator.water(250)) .setResult(resultHelper.item(AllItems.PULP)) diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumDelightRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumDelightRecipeProvider.kt index b9b669366..9d3665920 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumDelightRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumDelightRecipeProvider.kt @@ -9,7 +9,7 @@ import hiiragi283.ragium.api.registry.HTFluidHolderLike import hiiragi283.ragium.api.registry.HTItemHolderLike import hiiragi283.ragium.api.stack.toImmutableOrThrow import hiiragi283.ragium.api.tag.RagiumCommonTags -import hiiragi283.ragium.common.data.recipe.HTComplexRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTMixingRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTShapedRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTSingleExtraItemRecipeBuilder import hiiragi283.ragium.common.material.CommonMaterialPrefixes @@ -39,8 +39,8 @@ object RagiumDelightRecipeProvider : HTRecipeProvider.Integration(RagiumConst.FA HTFluidHolderLike.MILK, ) // Rich soil - HTComplexRecipeBuilder - .mixing() + HTMixingRecipeBuilder + .create() .addIngredient(itemCreator.fromItem(ModItems.ORGANIC_COMPOST.get())) .addIngredient(fluidCreator.fromHolder(RagiumFluidContents.CRUDE_BIO, 250)) .setResult(resultHelper.item(ModItems.RICH_SOIL.get())) diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumImmersiveRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumImmersiveRecipeProvider.kt index b1691932e..7da32ea68 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumImmersiveRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumImmersiveRecipeProvider.kt @@ -19,7 +19,7 @@ import hiiragi283.ragium.api.data.recipe.HTRecipeProvider import hiiragi283.ragium.api.registry.HTBasicFluidContent import hiiragi283.ragium.api.util.Ior import hiiragi283.ragium.common.HTMoldType -import hiiragi283.ragium.common.data.recipe.HTComplexRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTMixingRecipeBuilder import hiiragi283.ragium.common.material.CommonMaterialPrefixes import hiiragi283.ragium.common.material.RagiumMoltenCrystalData import hiiragi283.ragium.common.material.VanillaMaterialKeys @@ -40,15 +40,15 @@ import net.neoforged.neoforge.fluids.FluidStack object RagiumImmersiveRecipeProvider : HTRecipeProvider.Integration(RagiumConst.IMMERSIVE) { override fun buildRecipeInternal() { // Treated Planks - HTComplexRecipeBuilder - .mixing() + HTMixingRecipeBuilder + .create() .addIngredient(itemCreator.fromTagKey(ItemTags.PLANKS)) .addIngredient(fluidCreator.fromHolder(RagiumFluidContents.CREOSOTE, 125)) .setResult(resultHelper.item(IEBlocks.WoodenDecoration.TREATED_WOOD[TreatedWoodStyles.HORIZONTAL]!!)) .save(output) // Redstone Acid - HTComplexRecipeBuilder - .mixing() + HTMixingRecipeBuilder + .create() .addIngredient(itemCreator.fromTagKey(CommonMaterialPrefixes.DUST, VanillaMaterialKeys.REDSTONE)) .addIngredient(fluidCreator.water(1000)) .setResult(resultHelper.fluid(IEFluids.REDSTONE_ACID.still, 1000)) diff --git a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTMeltingEmiRecipe.kt b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTMeltingEmiRecipe.kt index 4a5896a83..21c6410f4 100644 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTMeltingEmiRecipe.kt +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTMeltingEmiRecipe.kt @@ -7,11 +7,11 @@ import hiiragi283.ragium.client.integration.emi.addArrow import hiiragi283.ragium.client.integration.emi.addTank import hiiragi283.ragium.client.integration.emi.category.RagiumEmiRecipeCategories import hiiragi283.ragium.client.integration.emi.recipe.HTEmiHolderRecipe -import hiiragi283.ragium.common.recipe.base.HTBasicSingleFluidRecipe +import hiiragi283.ragium.common.recipe.HTBasicMeltingRecipe import net.minecraft.world.item.crafting.RecipeHolder -class HTMeltingEmiRecipe(holder: RecipeHolder) : - HTEmiHolderRecipe(RagiumEmiRecipeCategories.MELTING, holder) { +class HTMeltingEmiRecipe(holder: RecipeHolder) : + HTEmiHolderRecipe(RagiumEmiRecipeCategories.MELTING, holder) { init { addInput(recipe.ingredient) diff --git a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTRefiningEmiRecipe.kt b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTRefiningEmiRecipe.kt index e320c1786..0d6e40c44 100644 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTRefiningEmiRecipe.kt +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTRefiningEmiRecipe.kt @@ -5,15 +5,17 @@ import hiiragi283.ragium.client.integration.emi.addArrow import hiiragi283.ragium.client.integration.emi.addTank import hiiragi283.ragium.client.integration.emi.category.RagiumEmiRecipeCategories import hiiragi283.ragium.client.integration.emi.recipe.HTEmiHolderRecipe -import hiiragi283.ragium.common.recipe.HTRefiningRecipe +import hiiragi283.ragium.common.recipe.HTBasicRefiningRecipe import net.minecraft.world.item.crafting.RecipeHolder +import kotlin.jvm.optionals.getOrNull -class HTRefiningEmiRecipe(holder: RecipeHolder) : - HTEmiHolderRecipe(RagiumEmiRecipeCategories.REFINING, holder) { +class HTRefiningEmiRecipe(holder: RecipeHolder) : + HTEmiHolderRecipe(RagiumEmiRecipeCategories.REFINING, holder) { init { addInput(recipe.ingredient) - addOutputs(recipe.results) + addOutputs(recipe.itemResult.getOrNull()) + addOutputs(recipe.fluidResult) } override fun addWidgets(widgets: WidgetHolder) { 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 8c791f56d..49fc6959e 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 @@ -3,7 +3,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.recipe.fluid.HTMeltingRecipe import hiiragi283.ragium.api.stack.ImmutableItemStack import hiiragi283.ragium.api.stack.getCraftingRemainingItem import hiiragi283.ragium.api.storage.HTStorageAccess @@ -28,7 +28,7 @@ import net.minecraft.sounds.SoundSource import net.minecraft.world.level.block.state.BlockState class HTMelterBlockEntity(pos: BlockPos, state: BlockState) : - HTSingleItemInputBlockEntity.Cached(RagiumRecipeTypes.MELTING, RagiumBlocks.MELTER, pos, state) { + HTSingleItemInputBlockEntity.Cached(RagiumRecipeTypes.MELTING, RagiumBlocks.MELTER, pos, state) { lateinit var remainderSlot: HTBasicItemSlot private set @@ -61,7 +61,7 @@ class HTMelterBlockEntity(pos: BlockPos, state: BlockState) : override fun shouldCheckRecipe(level: ServerLevel, pos: BlockPos): Boolean = outputTank.getNeeded() > 0 // アウトプットに搬出できるか判定する - override fun canProgressRecipe(level: ServerLevel, input: HTRecipeInput, recipe: HTSingleFluidRecipe): Boolean = + override fun canProgressRecipe(level: ServerLevel, input: HTRecipeInput, recipe: HTMeltingRecipe): Boolean = HTStackSlotHelper.canInsertStack(outputTank, input, level, recipe::assembleFluid) override fun completeRecipe( @@ -69,7 +69,7 @@ class HTMelterBlockEntity(pos: BlockPos, state: BlockState) : pos: BlockPos, state: BlockState, input: HTRecipeInput, - recipe: HTSingleFluidRecipe, + recipe: HTMeltingRecipe, ) { // 実際にアウトプットに搬出する outputTank.insert(recipe.assembleFluid(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 e1692d55b..af8b45dfb 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.recipe.RagiumRecipeTypes import hiiragi283.ragium.api.recipe.input.HTRecipeInput -import hiiragi283.ragium.api.recipe.multi.HTComplexRecipe +import hiiragi283.ragium.api.recipe.fluid.HTRefiningRecipe import hiiragi283.ragium.api.storage.HTStorageAccess import hiiragi283.ragium.api.storage.HTStorageAction import hiiragi283.ragium.api.storage.holder.HTSlotInfo @@ -25,7 +25,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, @@ -77,7 +77,7 @@ class HTRefineryBlockEntity(pos: BlockPos, state: BlockState) : } // アウトプットに搬出できるか判定する - override fun canProgressRecipe(level: ServerLevel, input: HTRecipeInput, recipe: HTComplexRecipe): Boolean { + override fun canProgressRecipe(level: ServerLevel, input: HTRecipeInput, recipe: HTRefiningRecipe): Boolean { val bool1: Boolean = HTStackSlotHelper.canInsertStack(outputSlot, input, level, recipe::assembleItem) val bool2: Boolean = HTStackSlotHelper.canInsertStack(outputTank, input, level, recipe::assembleFluid) return bool1 && bool2 @@ -88,14 +88,14 @@ class HTRefineryBlockEntity(pos: BlockPos, state: BlockState) : pos: BlockPos, state: BlockState, input: HTRecipeInput, - recipe: HTComplexRecipe, + recipe: HTRefiningRecipe, ) { // 実際にアウトプットに搬出する val access: RegistryAccess = level.registryAccess() outputSlot.insert(recipe.assembleItem(input, access), HTStorageAction.EXECUTE, HTStorageAccess.INTERNAL) outputTank.insert(recipe.assembleFluid(input, access), HTStorageAction.EXECUTE, HTStorageAccess.INTERNAL) // インプットを減らす - inputTank.extract(recipe.getRequiredAmount(0), HTStorageAction.EXECUTE, HTStorageAccess.INTERNAL) + inputTank.extract(recipe.getRequiredAmount(), HTStorageAction.EXECUTE, HTStorageAccess.INTERNAL) // SEを鳴らす level.playSound(null, pos, SoundEvents.BREWING_STAND_BREW, SoundSource.BLOCKS, 1f, 0.5f) } 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 35dd0d2bb..4e8317878 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 @@ -1,7 +1,7 @@ package hiiragi283.ragium.common.block.entity.processor.base import hiiragi283.ragium.api.block.attribute.getFluidAttribute -import hiiragi283.ragium.api.recipe.HTFluidRecipe +import hiiragi283.ragium.api.recipe.fluid.HTFluidRecipe import hiiragi283.ragium.api.recipe.HTRecipeCache import hiiragi283.ragium.api.recipe.HTRecipeFinder import hiiragi283.ragium.api.recipe.input.HTRecipeInput diff --git a/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTFluidRecipeBuilder.kt b/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTFluidRecipeBuilder.kt new file mode 100644 index 000000000..ea439f6ec --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTFluidRecipeBuilder.kt @@ -0,0 +1,41 @@ +package hiiragi283.ragium.common.data.recipe + +import hiiragi283.ragium.api.RagiumConst +import hiiragi283.ragium.api.data.recipe.HTRecipeBuilder +import hiiragi283.ragium.api.recipe.fluid.HTFluidRecipe +import hiiragi283.ragium.api.recipe.ingredient.HTFluidIngredient +import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient +import hiiragi283.ragium.api.recipe.result.HTFluidResult +import hiiragi283.ragium.api.recipe.result.HTItemResult +import hiiragi283.ragium.api.util.wrapOptional +import hiiragi283.ragium.common.recipe.HTBasicMeltingRecipe +import hiiragi283.ragium.common.recipe.HTBasicRefiningRecipe +import net.minecraft.resources.ResourceLocation +import java.util.function.Supplier + +class HTFluidRecipeBuilder( + prefix: String, + private val recipe: RECIPE, + private val idProvider: Supplier, +) : HTRecipeBuilder>(prefix) { + companion object { + @JvmStatic + fun melting(ingredient: HTItemIngredient, result: HTFluidResult): HTFluidRecipeBuilder = + HTFluidRecipeBuilder(RagiumConst.MELTING, HTBasicMeltingRecipe(ingredient, result), result::id) + + @JvmStatic + fun refining( + ingredient: HTFluidIngredient, + fluidResult: HTFluidResult, + itemResult: HTItemResult? = null, + ): HTFluidRecipeBuilder = HTFluidRecipeBuilder( + RagiumConst.REFINING, + HTBasicRefiningRecipe(ingredient, itemResult.wrapOptional(), fluidResult), + fluidResult::id, + ) + } + + override fun getPrimalId(): ResourceLocation = idProvider.get() + + override fun createRecipe(): RECIPE = recipe +} diff --git a/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTComplexRecipeBuilder.kt b/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTMixingRecipeBuilder.kt similarity index 69% rename from src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTComplexRecipeBuilder.kt rename to src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTMixingRecipeBuilder.kt index b94b74e27..d24b6b5a2 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTComplexRecipeBuilder.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTMixingRecipeBuilder.kt @@ -7,14 +7,13 @@ import hiiragi283.ragium.api.recipe.multi.HTComplexRecipe import hiiragi283.ragium.api.recipe.result.HTComplexResult import hiiragi283.ragium.common.data.recipe.base.HTComplexResultRecipeBuilder import hiiragi283.ragium.common.recipe.HTMixingRecipe -import hiiragi283.ragium.common.recipe.HTRefiningRecipe import hiiragi283.ragium.common.recipe.HTSimpleMixingRecipe -class HTComplexRecipeBuilder(prefix: String, private val factory: Factory<*>) : - HTComplexResultRecipeBuilder(prefix) { +class HTMixingRecipeBuilder(prefix: String, private val factory: Factory<*>) : + HTComplexResultRecipeBuilder(prefix) { companion object { @JvmStatic - fun mixing(): HTComplexRecipeBuilder = HTComplexRecipeBuilder( + fun create(): HTMixingRecipeBuilder = HTMixingRecipeBuilder( RagiumConst.MIXING, ) { itemIngredients: List, fluidIngredients: List, results: HTComplexResult -> if (itemIngredients.size == 1 && fluidIngredients.size == 1) { @@ -23,22 +22,16 @@ class HTComplexRecipeBuilder(prefix: String, private val factory: Factory<*>) : HTMixingRecipe(itemIngredients, fluidIngredients, results) } } - - @JvmStatic - fun refining(): HTComplexRecipeBuilder = - HTComplexRecipeBuilder(RagiumConst.REFINING) { _, fluidIngredients: List, results: HTComplexResult -> - HTRefiningRecipe(fluidIngredients[0], results) - } } private val itemIngredients: MutableList = mutableListOf() private val fluidIngredients: MutableList = mutableListOf() - fun addIngredient(ingredient: HTItemIngredient?): HTComplexRecipeBuilder = apply { + fun addIngredient(ingredient: HTItemIngredient?): HTMixingRecipeBuilder = apply { ingredient?.let(itemIngredients::add) } - fun addIngredient(ingredient: HTFluidIngredient): HTComplexRecipeBuilder = apply { + fun addIngredient(ingredient: HTFluidIngredient): HTMixingRecipeBuilder = apply { fluidIngredients.add(ingredient) } diff --git a/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTSingleRecipeBuilder.kt b/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTSingleRecipeBuilder.kt deleted file mode 100644 index 0cbeb395f..000000000 --- a/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTSingleRecipeBuilder.kt +++ /dev/null @@ -1,31 +0,0 @@ -package hiiragi283.ragium.common.data.recipe - -import hiiragi283.ragium.api.RagiumConst -import hiiragi283.ragium.api.data.recipe.HTRecipeBuilder -import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient -import hiiragi283.ragium.api.recipe.result.HTFluidResult -import hiiragi283.ragium.api.recipe.result.HTRecipeResult -import hiiragi283.ragium.api.recipe.single.HTSingleItemInputRecipe -import hiiragi283.ragium.common.recipe.HTMeltingRecipe -import net.minecraft.resources.ResourceLocation - -class HTSingleRecipeBuilder>( - prefix: String, - private val factory: Factory, - val ingredient: HTItemIngredient, - val result: RESULT, -) : HTRecipeBuilder>(prefix) { - companion object { - @JvmStatic - fun melting(ingredient: HTItemIngredient, result: HTFluidResult): HTSingleRecipeBuilder = - HTSingleRecipeBuilder(RagiumConst.MELTING, ::HTMeltingRecipe, ingredient, result) - } - - override fun getPrimalId(): ResourceLocation = result.id - - override fun createRecipe(): HTSingleItemInputRecipe = factory.create(ingredient, result) - - fun interface Factory, RECIPE : HTSingleItemInputRecipe> { - fun create(ingredient: HTItemIngredient, result: RESULT): RECIPE - } -} diff --git a/src/main/kotlin/hiiragi283/ragium/common/event/RagiumRuntimeRecipeHandler.kt b/src/main/kotlin/hiiragi283/ragium/common/event/RagiumRuntimeRecipeHandler.kt index c78763825..c1c001ed3 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/event/RagiumRuntimeRecipeHandler.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/event/RagiumRuntimeRecipeHandler.kt @@ -12,8 +12,8 @@ import hiiragi283.ragium.api.material.prefix.HTPrefixLike import hiiragi283.ragium.api.recipe.HTRegisterRuntimeRecipeEvent import hiiragi283.ragium.api.tag.RagiumModTags import hiiragi283.ragium.common.HTMoldType -import hiiragi283.ragium.common.data.recipe.HTComplexRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTItemWithCatalystRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTMixingRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTShapelessInputsRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTSingleExtraItemRecipeBuilder import hiiragi283.ragium.common.material.CommonMaterialPrefixes @@ -207,8 +207,8 @@ object RagiumRuntimeRecipeHandler { if (!event.isPresentTag(CommonMaterialPrefixes.ORE, key)) return if (!event.isPresentTag(CommonMaterialPrefixes.INGOT, key)) return - HTComplexRecipeBuilder - .mixing() + HTMixingRecipeBuilder + .create() .addIngredient(event.itemCreator.fromTagKey(CommonMaterialPrefixes.ORE, key)) .addIngredient(event.fluidCreator.fromHolder(RagiumFluidContents.CRIMSON_BLOOD, 250)) .setResult(event.resultHelper.item(CommonMaterialPrefixes.INGOT, key, 4)) diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/HTBasicMeltingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/HTBasicMeltingRecipe.kt new file mode 100644 index 000000000..e478385cc --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/HTBasicMeltingRecipe.kt @@ -0,0 +1,22 @@ +package hiiragi283.ragium.common.recipe + +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.fluid.HTMeltingRecipe +import hiiragi283.ragium.api.stack.ImmutableFluidStack +import hiiragi283.ragium.api.stack.ImmutableItemStack +import hiiragi283.ragium.setup.RagiumRecipeSerializers +import net.minecraft.core.HolderLookup +import net.minecraft.world.item.crafting.RecipeSerializer + +class HTBasicMeltingRecipe(val ingredient: HTItemIngredient, val result: HTFluidResult) : HTMeltingRecipe { + override fun assembleFluid(input: HTRecipeInput, provider: HolderLookup.Provider): ImmutableFluidStack? = + result.getStackOrNull(provider) + + override fun getSerializer(): RecipeSerializer<*> = RagiumRecipeSerializers.MELTING + + override fun test(stack: ImmutableItemStack): Boolean = ingredient.test(stack) + + override fun getRequiredCount(): Int = ingredient.getRequiredAmount() +} diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/HTBasicRefiningRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/HTBasicRefiningRecipe.kt new file mode 100644 index 000000000..296846930 --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/HTBasicRefiningRecipe.kt @@ -0,0 +1,29 @@ +package hiiragi283.ragium.common.recipe + +import hiiragi283.ragium.api.recipe.ingredient.HTFluidIngredient +import hiiragi283.ragium.api.recipe.input.HTRecipeInput +import hiiragi283.ragium.api.recipe.result.HTFluidResult +import hiiragi283.ragium.api.recipe.result.HTItemResult +import hiiragi283.ragium.api.recipe.fluid.HTRefiningRecipe +import hiiragi283.ragium.api.stack.ImmutableFluidStack +import hiiragi283.ragium.api.stack.ImmutableItemStack +import hiiragi283.ragium.setup.RagiumRecipeSerializers +import net.minecraft.core.HolderLookup +import net.minecraft.world.item.crafting.RecipeSerializer +import java.util.Optional +import kotlin.jvm.optionals.getOrNull + +class HTBasicRefiningRecipe(val ingredient: HTFluidIngredient, val itemResult: Optional, val fluidResult: HTFluidResult) : + HTRefiningRecipe { + override fun test(stack: ImmutableFluidStack): Boolean = ingredient.test(stack) + + override fun assembleFluid(input: HTRecipeInput, provider: HolderLookup.Provider): ImmutableFluidStack? = + fluidResult.getStackOrNull(provider) + + override fun assembleItem(input: HTRecipeInput, provider: HolderLookup.Provider): ImmutableItemStack? = + itemResult.getOrNull()?.getStackOrNull(provider) + + override fun getSerializer(): RecipeSerializer<*> = RagiumRecipeSerializers.REFINING + + override fun getRequiredAmount(): Int = ingredient.getRequiredAmount() +} diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/HTMeltingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/HTMeltingRecipe.kt deleted file mode 100644 index c56783a3f..000000000 --- a/src/main/kotlin/hiiragi283/ragium/common/recipe/HTMeltingRecipe.kt +++ /dev/null @@ -1,15 +0,0 @@ -package hiiragi283.ragium.common.recipe - -import hiiragi283.ragium.api.recipe.RagiumRecipeTypes -import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient -import hiiragi283.ragium.api.recipe.result.HTFluidResult -import hiiragi283.ragium.common.recipe.base.HTBasicSingleFluidRecipe -import hiiragi283.ragium.setup.RagiumRecipeSerializers -import net.minecraft.world.item.crafting.RecipeSerializer -import net.minecraft.world.item.crafting.RecipeType - -class HTMeltingRecipe(ingredient: HTItemIngredient, result: HTFluidResult) : HTBasicSingleFluidRecipe(ingredient, result) { - override fun getSerializer(): RecipeSerializer<*> = RagiumRecipeSerializers.MELTING - - override fun getType(): RecipeType<*> = RagiumRecipeTypes.MELTING.get() -} diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/HTRefiningRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/HTRefiningRecipe.kt deleted file mode 100644 index a1a44cb4c..000000000 --- a/src/main/kotlin/hiiragi283/ragium/common/recipe/HTRefiningRecipe.kt +++ /dev/null @@ -1,26 +0,0 @@ -package hiiragi283.ragium.common.recipe - -import hiiragi283.ragium.api.recipe.RagiumRecipeTypes -import hiiragi283.ragium.api.recipe.ingredient.HTFluidIngredient -import hiiragi283.ragium.api.recipe.input.HTRecipeInput -import hiiragi283.ragium.api.recipe.result.HTComplexResult -import hiiragi283.ragium.common.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 HTRefiningRecipe(val ingredient: HTFluidIngredient, results: HTComplexResult) : HTBasicComplexRecipe(results) { - override fun matches(input: HTRecipeInput, level: Level): Boolean = input.testFluid(0, ingredient) - - override fun getSerializer(): RecipeSerializer<*> = RagiumRecipeSerializers.REFINING - - override fun getType(): RecipeType<*> = RagiumRecipeTypes.REFINING.get() - - override fun getRequiredCount(index: Int): Int = 0 - - override fun getRequiredAmount(index: Int): Int = when (index) { - 0 -> ingredient.getRequiredAmount() - else -> 0 - } -} diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/base/HTBasicComplexOutputRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/base/HTBasicComplexOutputRecipe.kt index 7653e3455..72a565b44 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/recipe/base/HTBasicComplexOutputRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/base/HTBasicComplexOutputRecipe.kt @@ -1,6 +1,6 @@ package hiiragi283.ragium.common.recipe.base -import hiiragi283.ragium.api.recipe.HTFluidRecipe +import hiiragi283.ragium.api.recipe.fluid.HTFluidRecipe import hiiragi283.ragium.api.recipe.input.HTRecipeInput import hiiragi283.ragium.api.recipe.result.HTComplexResult import hiiragi283.ragium.api.stack.ImmutableFluidStack diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/base/HTBasicSingleFluidRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/base/HTBasicSingleFluidRecipe.kt deleted file mode 100644 index 990c8ce29..000000000 --- a/src/main/kotlin/hiiragi283/ragium/common/recipe/base/HTBasicSingleFluidRecipe.kt +++ /dev/null @@ -1,21 +0,0 @@ -package hiiragi283.ragium.common.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 - -/** - * [HTSingleFluidRecipe]の抽象クラス - */ -abstract class HTBasicSingleFluidRecipe(val ingredient: HTItemIngredient, val result: HTFluidResult) : HTSingleFluidRecipe { - final override fun test(stack: ImmutableItemStack): Boolean = ingredient.test(stack) - - final override fun getRequiredCount(): Int = ingredient.getRequiredAmount() - - final override fun assembleFluid(input: HTRecipeInput, provider: HolderLookup.Provider): ImmutableFluidStack? = - result.getStackOrNull(provider) -} diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/vanilla/HTVanillaSingleItemRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/vanilla/HTVanillaSingleItemRecipe.kt index acbbfe253..606e165c8 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/recipe/vanilla/HTVanillaSingleItemRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/vanilla/HTVanillaSingleItemRecipe.kt @@ -3,7 +3,7 @@ package hiiragi283.ragium.common.recipe.vanilla 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.HTSingleItemInputRecipe +import hiiragi283.ragium.api.recipe.HTSingleItemInputRecipe import hiiragi283.ragium.api.stack.ImmutableItemStack import hiiragi283.ragium.api.stack.toImmutable import net.minecraft.core.HolderLookup diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeBiCodecs.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeBiCodecs.kt index f849aeecd..735c375be 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeBiCodecs.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeBiCodecs.kt @@ -20,9 +20,9 @@ import hiiragi283.ragium.common.data.recipe.HTCombineRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTItemWithCatalystRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTSimulatingRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTSingleExtraItemRecipeBuilder -import hiiragi283.ragium.common.recipe.HTMeltingRecipe +import hiiragi283.ragium.common.recipe.HTBasicMeltingRecipe +import hiiragi283.ragium.common.recipe.HTBasicRefiningRecipe import hiiragi283.ragium.common.recipe.HTMixingRecipe -import hiiragi283.ragium.common.recipe.HTRefiningRecipe import hiiragi283.ragium.common.recipe.HTSimpleMixingRecipe import hiiragi283.ragium.common.recipe.HTSolidifyingRecipe import hiiragi283.ragium.common.recipe.base.HTBasicCombineRecipe @@ -42,10 +42,10 @@ object RagiumRecipeBiCodecs { ) @JvmField - val MELTING: MapBiCodec = MapBiCodec.composite( - HTItemIngredient.CODEC.fieldOf(RagiumConst.INGREDIENT).forGetter(HTMeltingRecipe::ingredient), - HTFluidResult.CODEC.fieldOf(RagiumConst.RESULT).forGetter(HTMeltingRecipe::result), - ::HTMeltingRecipe, + val MELTING: MapBiCodec = MapBiCodec.composite( + HTItemIngredient.CODEC.fieldOf(RagiumConst.INGREDIENT).forGetter(HTBasicMeltingRecipe::ingredient), + HTFluidResult.CODEC.fieldOf(RagiumConst.RESULT).forGetter(HTBasicMeltingRecipe::result), + ::HTBasicMeltingRecipe, ) @JvmField @@ -83,10 +83,11 @@ object RagiumRecipeBiCodecs { ) @JvmField - val REFINING: MapBiCodec = MapBiCodec.composite( - HTFluidIngredient.CODEC.fieldOf(RagiumConst.INGREDIENT).forGetter(HTRefiningRecipe::ingredient), - RESULTS.forGetter(HTRefiningRecipe::results), - ::HTRefiningRecipe, + val REFINING: MapBiCodec = MapBiCodec.composite( + HTFluidIngredient.CODEC.fieldOf(RagiumConst.INGREDIENT).forGetter(HTBasicRefiningRecipe::ingredient), + HTItemResult.CODEC.optionalFieldOf(RagiumConst.ITEM_RESULT).forGetter(HTBasicRefiningRecipe::itemResult), + HTFluidResult.CODEC.fieldOf(RagiumConst.FLUID_RESULT).forGetter(HTBasicRefiningRecipe::fluidResult), + ::HTBasicRefiningRecipe, ) @JvmField diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeSerializers.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeSerializers.kt index ee8121efe..dba211f2f 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeSerializers.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeSerializers.kt @@ -16,6 +16,8 @@ import hiiragi283.ragium.common.crafting.HTIceCreamSodaRecipe import hiiragi283.ragium.common.crafting.HTPotionDropRecipe import hiiragi283.ragium.common.crafting.HTUpgradeChargeRecipe import hiiragi283.ragium.common.recipe.HTAlloyingRecipe +import hiiragi283.ragium.common.recipe.HTBasicMeltingRecipe +import hiiragi283.ragium.common.recipe.HTBasicRefiningRecipe import hiiragi283.ragium.common.recipe.HTBlockSimulatingRecipe import hiiragi283.ragium.common.recipe.HTCompressingRecipe import hiiragi283.ragium.common.recipe.HTCrushingRecipe @@ -23,9 +25,7 @@ import hiiragi283.ragium.common.recipe.HTCuttingRecipe import hiiragi283.ragium.common.recipe.HTEnchantingRecipe import hiiragi283.ragium.common.recipe.HTEntitySimulatingRecipe import hiiragi283.ragium.common.recipe.HTExtractingRecipe -import hiiragi283.ragium.common.recipe.HTMeltingRecipe import hiiragi283.ragium.common.recipe.HTMixingRecipe -import hiiragi283.ragium.common.recipe.HTRefiningRecipe import hiiragi283.ragium.common.recipe.HTSimpleMixingRecipe import hiiragi283.ragium.common.recipe.HTSolidifyingRecipe import hiiragi283.ragium.common.recipe.custom.HTBioExtractingRecipe @@ -144,7 +144,7 @@ object RagiumRecipeSerializers { ) @JvmField - val MELTING: RecipeSerializer = register( + val MELTING: RecipeSerializer = register( RagiumConst.MELTING, RagiumRecipeBiCodecs.MELTING, ) @@ -168,7 +168,7 @@ object RagiumRecipeSerializers { ) @JvmField - val REFINING: RecipeSerializer = register( + val REFINING: RecipeSerializer = register( RagiumConst.REFINING, RagiumRecipeBiCodecs.REFINING, ) From 46da7be3d73c98a5ff7ad8d0635b6625599549b0 Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Thu, 11 Dec 2025 11:49:11 +0900 Subject: [PATCH 22/49] refactor: Brewing recipes are stored in recipe manager --- .../recipe/HTRegisterRuntimeRecipeEvent.kt | 6 +- .../ragium/api/recipe/RagiumRecipeTypes.kt | 7 +- .../api/recipe/fluid/HTMeltingRecipe.kt | 2 +- .../serialization/codec/VanillaBiCodecs.kt | 8 ++ .../data/client/RagiumEnglishProvider.kt | 3 +- .../data/client/RagiumJapaneseProvider.kt | 3 +- .../client/integration/emi/RagiumEmiPlugin.kt | 32 +------- .../emi/category/RagiumEmiRecipeCategories.kt | 7 +- .../emi/recipe/base/HTCombineEmiRecipe.kt | 22 ++++-- .../recipe/processor/HTBrewingEmiRecipe.kt | 19 ++--- .../recipe/processor/HTEnchantingEmiRecipe.kt | 14 ++-- .../entity/processor/HTBreweryBlockEntity.kt | 48 +----------- .../entity/processor/HTMelterBlockEntity.kt | 2 +- .../entity/processor/HTRefineryBlockEntity.kt | 2 +- .../processor/base/HTComplexBlockEntity.kt | 2 +- .../event/RagiumRuntimeRecipeHandler.kt | 71 ++++++++++++++++++ .../common/recipe/HTBasicMeltingRecipe.kt | 2 +- .../common/recipe/HTBasicRefiningRecipe.kt | 2 +- .../ragium/common/recipe/HTBrewingRecipe.kt | 73 ++++++------------- .../recipe/base/HTBasicCombineRecipe.kt | 2 + .../vanilla/HTVanillaSingleItemRecipe.kt | 2 +- .../common/text/RagiumCommonTranslation.kt | 2 - .../ragium/setup/RagiumMiscRegister.kt | 1 + .../ragium/setup/RagiumRecipeSerializers.kt | 10 +++ 24 files changed, 170 insertions(+), 172 deletions(-) diff --git a/src/api/kotlin/hiiragi283/ragium/api/recipe/HTRegisterRuntimeRecipeEvent.kt b/src/api/kotlin/hiiragi283/ragium/api/recipe/HTRegisterRuntimeRecipeEvent.kt index 2568eaf30..f54881c04 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/recipe/HTRegisterRuntimeRecipeEvent.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/recipe/HTRegisterRuntimeRecipeEvent.kt @@ -41,7 +41,7 @@ class HTRegisterRuntimeRecipeEvent( vararg conditions: ICondition?, ) { val id1: ResourceLocation = id.withPrefix("runtime/") - addRecipe(RecipeHolder(id1, recipe)) + consumer.accept(RecipeHolder(id1, recipe)) RagiumAPI.LOGGER.debug("Added runtime recipe {}", id1) } @@ -59,7 +59,7 @@ class HTRegisterRuntimeRecipeEvent( return holderSet.isPresent && holderSet.get().any() } - fun addRecipe(holder: RecipeHolder<*>) { - consumer.accept(holder) + fun save(id: ResourceLocation, recipe: Recipe<*>) { + output.accept(id, recipe, null) } } diff --git a/src/api/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeTypes.kt b/src/api/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeTypes.kt index 5bbba6d16..fff9297a3 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeTypes.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeTypes.kt @@ -4,6 +4,8 @@ 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.fluid.HTMeltingRecipe +import hiiragi283.ragium.api.recipe.fluid.HTRefiningRecipe import hiiragi283.ragium.api.recipe.input.HTRecipeInput import hiiragi283.ragium.api.recipe.multi.HTCombineRecipe import hiiragi283.ragium.api.recipe.multi.HTComplexRecipe @@ -11,8 +13,6 @@ import hiiragi283.ragium.api.recipe.multi.HTFluidWithCatalystRecipe import hiiragi283.ragium.api.recipe.multi.HTItemWithCatalystRecipe import hiiragi283.ragium.api.recipe.multi.HTRockGeneratingRecipe import hiiragi283.ragium.api.recipe.multi.HTShapelessInputsRecipe -import hiiragi283.ragium.api.recipe.fluid.HTMeltingRecipe -import hiiragi283.ragium.api.recipe.fluid.HTRefiningRecipe import hiiragi283.ragium.api.registry.impl.HTDeferredRecipeType import net.minecraft.world.item.crafting.Recipe import net.minecraft.world.item.crafting.RecipeInput @@ -21,6 +21,9 @@ object RagiumRecipeTypes { @JvmField val ALLOYING: HTDeferredRecipeType = create(RagiumConst.ALLOYING) + @JvmField + val BREWING: HTDeferredRecipeType = create(RagiumConst.BREWING) + @JvmField val COMPRESSING: HTDeferredRecipeType = create(RagiumConst.COMPRESSING) diff --git a/src/api/kotlin/hiiragi283/ragium/api/recipe/fluid/HTMeltingRecipe.kt b/src/api/kotlin/hiiragi283/ragium/api/recipe/fluid/HTMeltingRecipe.kt index ad2605756..5b3da889f 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/recipe/fluid/HTMeltingRecipe.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/recipe/fluid/HTMeltingRecipe.kt @@ -1,8 +1,8 @@ package hiiragi283.ragium.api.recipe.fluid +import hiiragi283.ragium.api.recipe.HTSingleItemInputRecipe import hiiragi283.ragium.api.recipe.RagiumRecipeTypes import hiiragi283.ragium.api.recipe.input.HTRecipeInput -import hiiragi283.ragium.api.recipe.HTSingleItemInputRecipe import hiiragi283.ragium.api.stack.ImmutableItemStack import net.minecraft.core.HolderLookup import net.minecraft.world.item.crafting.RecipeType diff --git a/src/api/kotlin/hiiragi283/ragium/api/serialization/codec/VanillaBiCodecs.kt b/src/api/kotlin/hiiragi283/ragium/api/serialization/codec/VanillaBiCodecs.kt index c1bc5c412..687f74bee 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/serialization/codec/VanillaBiCodecs.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/serialization/codec/VanillaBiCodecs.kt @@ -20,6 +20,7 @@ import net.minecraft.resources.ResourceLocation import net.minecraft.tags.TagKey import net.minecraft.world.InteractionHand import net.minecraft.world.item.DyeColor +import net.minecraft.world.item.alchemy.PotionContents import net.minecraft.world.item.crafting.Ingredient import net.neoforged.neoforge.fluids.FluidStack import java.util.UUID @@ -58,6 +59,13 @@ object VanillaBiCodecs { @JvmField val HAND: BiCodec = BiCodecs.enum(InteractionHand::values) + /** + * [PotionContents]の[BiCodec] + */ + @JvmField + val POTION: BiCodec = + BiCodec.of(PotionContents.CODEC, PotionContents.STREAM_CODEC) + /** * [Component]の[BiCodec] */ diff --git a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt index 981eddf38..6795f895c 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt @@ -346,6 +346,7 @@ class RagiumEnglishProvider(output: PackOutput) : HTLanguageProvider.English(out private fun recipeType() { add(RagiumRecipeTypes.ALLOYING, "Alloying") + add(RagiumRecipeTypes.BREWING, "Brewing") add(RagiumRecipeTypes.COMPRESSING, "Compressing") add(RagiumRecipeTypes.CRUSHING, "Crushing") add(RagiumRecipeTypes.CUTTING, "Cutting") @@ -495,8 +496,6 @@ class RagiumEnglishProvider(output: PackOutput) : HTLanguageProvider.English(out private fun emi() { add(RagiumCommonTranslation.EMI_MACHINE_UPGRADE_TITLE, "Machine Upgrades") - add(RagiumCommonTranslation.EMI_BREWING_TITLE, "Brewing") - add(RagiumCommonTranslation.EMI_BLOCK_CATALYST, "Placed below the block.") } diff --git a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt index 0008511ed..8d95aac2c 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt @@ -348,6 +348,7 @@ class RagiumJapaneseProvider(output: PackOutput) : HTLanguageProvider.Japanese(o private fun recipeType() { add(RagiumRecipeTypes.ALLOYING, "合金") + add(RagiumRecipeTypes.BREWING, "醸造") add(RagiumRecipeTypes.COMPRESSING, "圧縮") add(RagiumRecipeTypes.CRUSHING, "破砕") add(RagiumRecipeTypes.CUTTING, "裁断") @@ -500,8 +501,6 @@ class RagiumJapaneseProvider(output: PackOutput) : HTLanguageProvider.Japanese(o private fun emi() { add(RagiumCommonTranslation.EMI_MACHINE_UPGRADE_TITLE, "機械のアップグレード") - add(RagiumCommonTranslation.EMI_BREWING_TITLE, "醸造") - add(RagiumCommonTranslation.EMI_BLOCK_CATALYST, "ブロックの下に設置します。") } 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 56800004e..5480af689 100644 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/RagiumEmiPlugin.kt +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/RagiumEmiPlugin.kt @@ -12,8 +12,6 @@ import dev.emi.emi.api.recipe.VanillaEmiRecipeCategories import dev.emi.emi.api.stack.Comparison import dev.emi.emi.api.stack.EmiStack import hiiragi283.ragium.api.RagiumAPI -import hiiragi283.ragium.api.RagiumPlatform -import hiiragi283.ragium.api.data.HTBrewingRecipeData import hiiragi283.ragium.api.data.map.HTFluidCoolantData import hiiragi283.ragium.api.data.map.HTFluidFuelData import hiiragi283.ragium.api.data.map.RagiumDataMapTypes @@ -59,7 +57,6 @@ import hiiragi283.ragium.common.block.entity.HTBlockEntity import hiiragi283.ragium.common.block.entity.generator.HTCulinaryGeneratorBlockEntity import hiiragi283.ragium.common.material.CommonMaterialPrefixes import hiiragi283.ragium.common.material.FoodMaterialKeys -import hiiragi283.ragium.common.recipe.HTBrewingRecipe import hiiragi283.ragium.common.recipe.HTExtractingRecipe import hiiragi283.ragium.common.recipe.custom.HTBioExtractingRecipe import hiiragi283.ragium.common.recipe.custom.HTCopyEnchantingRecipe @@ -72,7 +69,6 @@ import hiiragi283.ragium.setup.RagiumItems import hiiragi283.ragium.setup.RagiumMenuTypes import net.minecraft.core.Holder import net.minecraft.core.HolderLookup -import net.minecraft.core.RegistryAccess import net.minecraft.core.component.DataComponents import net.minecraft.core.registries.BuiltInRegistries import net.minecraft.resources.ResourceLocation @@ -342,7 +338,7 @@ class RagiumEmiPlugin : EmiPlugin { addRegistryRecipes(registry, RagiumRecipeTypes.REFINING, ::HTRefiningEmiRecipe) addRegistryRecipes(registry, RagiumRecipeTypes.SOLIDIFYING, ::HTSolidifyingEmiRecipe) // Elite - addRecipes(registry, collectBrewingRecipes(), ::HTBrewingEmiRecipe) + addRegistryRecipes(registry, RagiumRecipeTypes.BREWING, ::HTBrewingEmiRecipe) addRegistryRecipes(registry, RagiumRecipeTypes.PLANTING, ::HTPlantingEmiRecipe) // Ultimate addRegistryRecipes(registry, RagiumRecipeTypes.ENCHANTING, ::HTEnchantingEmiRecipe) @@ -354,32 +350,6 @@ class RagiumEmiPlugin : EmiPlugin { addRegistryRecipes(registry, RagiumRecipeTypes.ROCK_GENERATING, ::HTRockGeneratingEmiRecipe) } - private fun collectBrewingRecipes(): Sequence> { - val access: RegistryAccess = RagiumPlatform.INSTANCE.getRegistryAccess() ?: return sequenceOf() - return access - .lookupOrThrow(RagiumAPI.BREWING_RECIPE_KEY) - .listElements() - .asSequence() - .flatMap { holder: Holder -> - val id: ResourceLocation = holder.idOrThrow.withPrefix("/") - val recipeData: HTBrewingRecipeData = holder.value() - buildList { - // base - this.add(id to HTBrewingRecipe.createBaseRecipe(recipeData)) - // long - HTBrewingRecipe - .createLongRecipe(recipeData) - ?.let { id.withSuffix("/long") to it } - ?.let(this::add) - // strong - HTBrewingRecipe - .createStrongRecipe(recipeData) - ?.let { id.withSuffix("/strong") to it } - ?.let(this::add) - } - } - } - private fun addInteractions(registry: EmiRegistry) { // Imitation Spawner BuiltInRegistries.ENTITY_TYPE 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 6295a8111..25ddd3882 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 @@ -103,11 +103,8 @@ object RagiumEmiRecipeCategories { // Elite @JvmField - val BREWING: HTEmiRecipeCategory = HTEmiRecipeCategory.create( - MACHINE_BOUNDS, - RagiumBlocks.BREWERY, - RagiumCommonTranslation.EMI_BREWING_TITLE::translate, - ) + val BREWING: HTEmiRecipeCategory = + machine(RagiumRecipeTypes.BREWING, RagiumBlocks.BREWERY) @JvmField val PLANTING: HTEmiRecipeCategory = diff --git a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/base/HTCombineEmiRecipe.kt b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/base/HTCombineEmiRecipe.kt index e0eff288d..c11ace69b 100644 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/base/HTCombineEmiRecipe.kt +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/base/HTCombineEmiRecipe.kt @@ -1,19 +1,31 @@ package hiiragi283.ragium.client.integration.emi.recipe.base import dev.emi.emi.api.render.EmiTexture +import dev.emi.emi.api.stack.EmiIngredient +import dev.emi.emi.api.stack.EmiStack import dev.emi.emi.api.widget.WidgetHolder +import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient import hiiragi283.ragium.client.integration.emi.addArrow import hiiragi283.ragium.client.integration.emi.addPlus import hiiragi283.ragium.client.integration.emi.category.HTEmiRecipeCategory import hiiragi283.ragium.client.integration.emi.recipe.HTEmiHolderRecipe -import net.minecraft.resources.ResourceLocation -import net.minecraft.world.item.crafting.Recipe +import hiiragi283.ragium.common.recipe.base.HTBasicCombineRecipe import net.minecraft.world.item.crafting.RecipeHolder -abstract class HTCombineEmiRecipe> : HTEmiHolderRecipe { - constructor(category: HTEmiRecipeCategory, id: ResourceLocation, recipe: RECIPE) : super(category, id, recipe) +abstract class HTCombineEmiRecipe(category: HTEmiRecipeCategory, holder: RecipeHolder) : + HTEmiHolderRecipe(category, holder) { + init { + val (left: HTItemIngredient, right: HTItemIngredient) = recipe.itemIngredients + addInput(left) + addInput(right) + addInput(getFluidIngredient(recipe)) - constructor(category: HTEmiRecipeCategory, holder: RecipeHolder) : super(category, holder) + addOutputs(getResult(recipe)) + } + + protected abstract fun getFluidIngredient(recipe: RECIPE): EmiIngredient + + protected abstract fun getResult(recipe: RECIPE): EmiStack final override fun addWidgets(widgets: WidgetHolder) { widgets.addArrow(getPosition(2.5), getPosition(1)) diff --git a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTBrewingEmiRecipe.kt b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTBrewingEmiRecipe.kt index 5022dda8f..24cfbc0d9 100644 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTBrewingEmiRecipe.kt +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTBrewingEmiRecipe.kt @@ -1,18 +1,19 @@ package hiiragi283.ragium.client.integration.emi.recipe.processor +import dev.emi.emi.api.stack.EmiIngredient +import dev.emi.emi.api.stack.EmiStack +import hiiragi283.ragium.api.item.alchemy.HTPotionHelper import hiiragi283.ragium.client.integration.emi.category.RagiumEmiRecipeCategories import hiiragi283.ragium.client.integration.emi.recipe.base.HTCombineEmiRecipe import hiiragi283.ragium.client.integration.emi.toEmi import hiiragi283.ragium.common.recipe.HTBrewingRecipe -import net.minecraft.resources.ResourceLocation +import hiiragi283.ragium.setup.RagiumItems +import net.minecraft.world.item.crafting.RecipeHolder -class HTBrewingEmiRecipe(id: ResourceLocation, recipe: HTBrewingRecipe) : - HTCombineEmiRecipe(RagiumEmiRecipeCategories.BREWING, id, recipe) { - init { - addInput(recipe.left.toEmi()) - addInput(recipe.ingredient) - addInput(HTBrewingRecipe.FLUID_INGREDIENT) +class HTBrewingEmiRecipe(holder: RecipeHolder) : + HTCombineEmiRecipe(RagiumEmiRecipeCategories.BREWING, holder) { + override fun getFluidIngredient(recipe: HTBrewingRecipe): EmiIngredient = HTBrewingRecipe.FLUID_INGREDIENT.toEmi() - addOutputs(recipe.potionDrop.toEmi()) - } + override fun getResult(recipe: HTBrewingRecipe): EmiStack = + HTPotionHelper.createPotion(RagiumItems.POTION_DROP, recipe.contents).toEmi() } diff --git a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTEnchantingEmiRecipe.kt b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTEnchantingEmiRecipe.kt index 33908ab9f..a82045216 100644 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTEnchantingEmiRecipe.kt +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTEnchantingEmiRecipe.kt @@ -1,7 +1,8 @@ package hiiragi283.ragium.client.integration.emi.recipe.processor +import dev.emi.emi.api.stack.EmiIngredient +import dev.emi.emi.api.stack.EmiStack import hiiragi283.ragium.api.item.createEnchantedBook -import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient import hiiragi283.ragium.client.integration.emi.category.RagiumEmiRecipeCategories import hiiragi283.ragium.client.integration.emi.recipe.base.HTCombineEmiRecipe import hiiragi283.ragium.client.integration.emi.toEmi @@ -12,11 +13,8 @@ import net.minecraft.world.item.crafting.RecipeHolder class HTEnchantingEmiRecipe(holder: RecipeHolder) : HTCombineEmiRecipe(RagiumEmiRecipeCategories.ENCHANTING, holder) { - init { - val (left: HTItemIngredient, right: HTItemIngredient) = recipe.itemIngredients - addInput(left) - addInput(right) - addInput(RagiumFluidContents.EXPERIENCE.toFluidEmi(recipe.getRequiredExpFluid())) - addOutputs(recipe.holder.let(::createEnchantedBook).toEmi()) - } + override fun getFluidIngredient(recipe: HTEnchantingRecipe): EmiIngredient = + RagiumFluidContents.EXPERIENCE.toFluidEmi(recipe.getRequiredExpFluid()) + + override fun getResult(recipe: HTEnchantingRecipe): EmiStack = recipe.holder.let(::createEnchantedBook).toEmi() } 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 dd24f2f5c..e6acb0e4f 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,8 +1,6 @@ package hiiragi283.ragium.common.block.entity.processor -import hiiragi283.ragium.api.RagiumAPI -import hiiragi283.ragium.api.data.HTBrewingRecipeData -import hiiragi283.ragium.api.recipe.HTRecipeFinder +import hiiragi283.ragium.api.recipe.RagiumRecipeTypes import hiiragi283.ragium.api.recipe.input.HTRecipeInput import hiiragi283.ragium.api.recipe.multi.HTCombineRecipe import hiiragi283.ragium.api.stack.ImmutableFluidStack @@ -10,53 +8,13 @@ import hiiragi283.ragium.common.block.entity.processor.base.HTAbstractCombinerBl import hiiragi283.ragium.common.recipe.HTBrewingRecipe import hiiragi283.ragium.setup.RagiumBlocks import net.minecraft.core.BlockPos -import net.minecraft.core.Holder -import net.minecraft.resources.ResourceLocation import net.minecraft.server.level.ServerLevel import net.minecraft.sounds.SoundEvents import net.minecraft.sounds.SoundSource -import net.minecraft.world.item.crafting.RecipeHolder -import net.minecraft.world.level.Level import net.minecraft.world.level.block.state.BlockState -import kotlin.streams.asSequence - -class HTBreweryBlockEntity(pos: BlockPos, state: BlockState) : HTAbstractCombinerBlockEntity(FINDER, RagiumBlocks.BREWERY, pos, state) { - companion object { - @JvmStatic - private val FAKE_ID: ResourceLocation = RagiumAPI.id("/brewing/fake") - - @JvmStatic - private val FINDER = HTRecipeFinder { _, input: HTRecipeInput, level: Level, lastRecipe: RecipeHolder? -> - if (lastRecipe != null && lastRecipe.value().matches(input, level)) { - return@HTRecipeFinder lastRecipe - } - level - .registryAccess() - .lookupOrThrow(RagiumAPI.BREWING_RECIPE_KEY) - .listElements() - .asSequence() - .forEach { holder: Holder.Reference -> - val recipeData: HTBrewingRecipeData = holder.value() - - val base: HTBrewingRecipe = HTBrewingRecipe.createBaseRecipe(recipeData) - if (base.matches(input, level)) { - return@HTRecipeFinder RecipeHolder(FAKE_ID, base) - } - HTBrewingRecipe.createLongRecipe(recipeData)?.let { long: HTBrewingRecipe -> - if (long.matches(input, level)) { - return@HTRecipeFinder RecipeHolder(FAKE_ID, long) - } - } - HTBrewingRecipe.createStrongRecipe(recipeData)?.let { strong: HTBrewingRecipe -> - if (strong.matches(input, level)) { - return@HTRecipeFinder RecipeHolder(FAKE_ID, strong) - } - } - } - null - } - } +class HTBreweryBlockEntity(pos: BlockPos, state: BlockState) : + HTAbstractCombinerBlockEntity(RagiumRecipeTypes.BREWING, RagiumBlocks.BREWERY, pos, state) { override fun filterFluid(stack: ImmutableFluidStack): Boolean = HTBrewingRecipe.FLUID_INGREDIENT.testOnlyType(stack) override fun completeRecipe( 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 49fc6959e..1eb0a6ce5 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,8 +2,8 @@ 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.fluid.HTMeltingRecipe +import hiiragi283.ragium.api.recipe.input.HTRecipeInput import hiiragi283.ragium.api.stack.ImmutableItemStack import hiiragi283.ragium.api.stack.getCraftingRemainingItem import hiiragi283.ragium.api.storage.HTStorageAccess 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 af8b45dfb..e55ad8d66 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 @@ -2,8 +2,8 @@ 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.fluid.HTRefiningRecipe +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 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 4e8317878..c06fe70a3 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 @@ -1,9 +1,9 @@ package hiiragi283.ragium.common.block.entity.processor.base import hiiragi283.ragium.api.block.attribute.getFluidAttribute -import hiiragi283.ragium.api.recipe.fluid.HTFluidRecipe import hiiragi283.ragium.api.recipe.HTRecipeCache import hiiragi283.ragium.api.recipe.HTRecipeFinder +import hiiragi283.ragium.api.recipe.fluid.HTFluidRecipe import hiiragi283.ragium.api.recipe.input.HTRecipeInput import hiiragi283.ragium.api.storage.HTStorageAccess import hiiragi283.ragium.api.storage.HTStorageAction diff --git a/src/main/kotlin/hiiragi283/ragium/common/event/RagiumRuntimeRecipeHandler.kt b/src/main/kotlin/hiiragi283/ragium/common/event/RagiumRuntimeRecipeHandler.kt index c1c001ed3..bc2d7aa0f 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/event/RagiumRuntimeRecipeHandler.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/event/RagiumRuntimeRecipeHandler.kt @@ -2,6 +2,7 @@ package hiiragi283.ragium.common.event import hiiragi283.ragium.api.RagiumAPI import hiiragi283.ragium.api.RagiumPlatform +import hiiragi283.ragium.api.data.HTBrewingRecipeData import hiiragi283.ragium.api.material.HTMaterialDefinition import hiiragi283.ragium.api.material.HTMaterialKey import hiiragi283.ragium.api.material.attribute.HTStorageBlockMaterialAttribute @@ -10,6 +11,8 @@ import hiiragi283.ragium.api.material.getDefaultPrefix import hiiragi283.ragium.api.material.prefix.HTMaterialPrefix import hiiragi283.ragium.api.material.prefix.HTPrefixLike import hiiragi283.ragium.api.recipe.HTRegisterRuntimeRecipeEvent +import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient +import hiiragi283.ragium.api.registry.idOrThrow import hiiragi283.ragium.api.tag.RagiumModTags import hiiragi283.ragium.common.HTMoldType import hiiragi283.ragium.common.data.recipe.HTItemWithCatalystRecipeBuilder @@ -17,11 +20,19 @@ import hiiragi283.ragium.common.data.recipe.HTMixingRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTShapelessInputsRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTSingleExtraItemRecipeBuilder import hiiragi283.ragium.common.material.CommonMaterialPrefixes +import hiiragi283.ragium.common.recipe.HTBrewingRecipe import hiiragi283.ragium.setup.RagiumFluidContents +import hiiragi283.ragium.setup.RagiumItems +import net.minecraft.core.Holder +import net.minecraft.core.component.DataComponents +import net.minecraft.resources.ResourceLocation import net.minecraft.tags.TagKey import net.minecraft.world.item.Item +import net.minecraft.world.item.alchemy.PotionContents import net.neoforged.bus.api.SubscribeEvent import net.neoforged.fml.common.EventBusSubscriber +import net.neoforged.neoforge.common.Tags +import net.neoforged.neoforge.common.crafting.DataComponentIngredient @EventBusSubscriber(modid = RagiumAPI.MOD_ID) object RagiumRuntimeRecipeHandler { @@ -40,6 +51,9 @@ object RagiumRuntimeRecipeHandler { // Mixing mixingMetalOre(event, key, definition) } + + // Brewing + brewing(event) } // Alloying // @@ -88,6 +102,63 @@ object RagiumRuntimeRecipeHandler { } } + // Brewing // + + @JvmStatic + private fun brewing(event: HTRegisterRuntimeRecipeEvent) { + event.registryAccess + .lookupOrThrow(RagiumAPI.BREWING_RECIPE_KEY) + .listElements() + .forEach { holder: Holder.Reference -> + val id: ResourceLocation = holder.idOrThrow + val recipeData: HTBrewingRecipeData = holder.value() + // Base + event.save( + id, + HTBrewingRecipe( + event.itemCreator.fromTagKey(Tags.Items.CROPS_NETHER_WART), + recipeData.getIngredient(), + recipeData.getBasePotion(), + ), + ) + // Long + val long: PotionContents = recipeData.getLongPotion() + if (long.allEffects.any()) { + event.save( + id.withSuffix("/long"), + HTBrewingRecipe( + event.itemCreator.fromTagKey(Tags.Items.DUSTS_REDSTONE), + createDropIngredient(recipeData), + long, + ), + ) + } + // Strong + val strong: PotionContents = recipeData.getStrongPotion() + if (strong.allEffects.any()) { + event.save( + id.withSuffix("/strong"), + HTBrewingRecipe( + event.itemCreator.fromTagKey(Tags.Items.DUSTS_GLOWSTONE), + createDropIngredient(recipeData), + strong, + ), + ) + } + } + } + + @JvmStatic + private fun createDropIngredient(recipeData: HTBrewingRecipeData): HTItemIngredient = HTItemIngredient( + DataComponentIngredient.of( + false, + DataComponents.POTION_CONTENTS, + recipeData.getBasePotion(), + RagiumItems.POTION_DROP, + ), + 1, + ) + // Compressing // @JvmStatic diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/HTBasicMeltingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/HTBasicMeltingRecipe.kt index e478385cc..b9175a680 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/recipe/HTBasicMeltingRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/HTBasicMeltingRecipe.kt @@ -1,9 +1,9 @@ package hiiragi283.ragium.common.recipe +import hiiragi283.ragium.api.recipe.fluid.HTMeltingRecipe 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.fluid.HTMeltingRecipe import hiiragi283.ragium.api.stack.ImmutableFluidStack import hiiragi283.ragium.api.stack.ImmutableItemStack import hiiragi283.ragium.setup.RagiumRecipeSerializers diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/HTBasicRefiningRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/HTBasicRefiningRecipe.kt index 296846930..4b2e2f9d9 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/recipe/HTBasicRefiningRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/HTBasicRefiningRecipe.kt @@ -1,10 +1,10 @@ package hiiragi283.ragium.common.recipe +import hiiragi283.ragium.api.recipe.fluid.HTRefiningRecipe import hiiragi283.ragium.api.recipe.ingredient.HTFluidIngredient import hiiragi283.ragium.api.recipe.input.HTRecipeInput import hiiragi283.ragium.api.recipe.result.HTFluidResult import hiiragi283.ragium.api.recipe.result.HTItemResult -import hiiragi283.ragium.api.recipe.fluid.HTRefiningRecipe import hiiragi283.ragium.api.stack.ImmutableFluidStack import hiiragi283.ragium.api.stack.ImmutableItemStack import hiiragi283.ragium.setup.RagiumRecipeSerializers diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/HTBrewingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/HTBrewingRecipe.kt index 296f96554..471bc162d 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/recipe/HTBrewingRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/HTBrewingRecipe.kt @@ -1,75 +1,46 @@ package hiiragi283.ragium.common.recipe import hiiragi283.ragium.api.RagiumPlatform -import hiiragi283.ragium.api.data.HTBrewingRecipeData import hiiragi283.ragium.api.item.alchemy.HTPotionHelper -import hiiragi283.ragium.api.recipe.HTRecipe +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.HTRecipeInput -import hiiragi283.ragium.api.recipe.multi.HTCombineRecipe import hiiragi283.ragium.api.stack.ImmutableFluidStack import hiiragi283.ragium.api.stack.ImmutableItemStack import hiiragi283.ragium.api.stack.toImmutable +import hiiragi283.ragium.common.recipe.base.HTBasicCombineRecipe import hiiragi283.ragium.setup.RagiumItems +import hiiragi283.ragium.setup.RagiumRecipeSerializers import net.minecraft.core.HolderLookup -import net.minecraft.core.component.DataComponents -import net.minecraft.tags.TagKey -import net.minecraft.world.item.Item -import net.minecraft.world.item.ItemStack import net.minecraft.world.item.alchemy.PotionContents -import net.neoforged.neoforge.common.Tags -import net.neoforged.neoforge.common.crafting.DataComponentIngredient +import net.minecraft.world.item.crafting.RecipeSerializer +import net.minecraft.world.item.crafting.RecipeType -class HTBrewingRecipe(val left: TagKey, val ingredient: HTItemIngredient, val contents: PotionContents) : - HTCombineRecipe, - HTRecipe.Fake { - companion object { - @JvmField - val FLUID_INGREDIENT: HTFluidIngredient = RagiumPlatform.INSTANCE.fluidCreator().water(1000) - - @JvmStatic - fun createBaseRecipe(recipeData: HTBrewingRecipeData): HTBrewingRecipe = - HTBrewingRecipe(Tags.Items.CROPS_NETHER_WART, recipeData.getIngredient(), recipeData.getBasePotion()) +class HTBrewingRecipe : HTBasicCombineRecipe { + val contents: PotionContents - @JvmStatic - private fun createDropIngredient(recipeData: HTBrewingRecipeData): HTItemIngredient = HTItemIngredient( - DataComponentIngredient.of( - false, - DataComponents.POTION_CONTENTS, - recipeData.getBasePotion(), - RagiumItems.POTION_DROP, - ), - 1, - ) - - @JvmStatic - fun createLongRecipe(recipeData: HTBrewingRecipeData): HTBrewingRecipe? { - val long: PotionContents = recipeData.getLongPotion().takeUnless { it.allEffects.none() } ?: return null - return HTBrewingRecipe(Tags.Items.DUSTS_REDSTONE, createDropIngredient(recipeData), long) - } - - @JvmStatic - fun createStrongRecipe(recipeData: HTBrewingRecipeData): HTBrewingRecipe? { - val strong: PotionContents = recipeData.getStrongPotion().takeUnless { it.allEffects.none() } ?: return null - return HTBrewingRecipe(Tags.Items.DUSTS_GLOWSTONE, createDropIngredient(recipeData), strong) - } + constructor(itemIngredients: Pair, contents: PotionContents) : super(itemIngredients) { + this.contents = contents } - val potionDrop: ItemStack = HTPotionHelper.createPotion(RagiumItems.POTION_DROP, contents) + constructor(left: HTItemIngredient, right: HTItemIngredient, contents: PotionContents) : super(left, right) { + this.contents = contents + } - override fun getLeftRequiredCount(): Int = 1 + companion object { + @JvmField + val FLUID_INGREDIENT: HTFluidIngredient = RagiumPlatform.INSTANCE.fluidCreator().water(1000) + } - override fun getRightRequiredCount(): Int = ingredient.getRequiredAmount() + override fun testFluid(stack: ImmutableFluidStack): Boolean = FLUID_INGREDIENT.test(stack) override fun getRequiredAmount(input: HTRecipeInput): Int = FLUID_INGREDIENT.getRequiredAmount() - override fun test(left: ImmutableItemStack, right: ImmutableItemStack, fluid: ImmutableFluidStack): Boolean { - val bool1: Boolean = left.isOf(this.left) - val bool2: Boolean = ingredient.test(right) - val bool3: Boolean = FLUID_INGREDIENT.test(fluid) - 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 assembleItem(input: HTRecipeInput, provider: HolderLookup.Provider): ImmutableItemStack? = potionDrop.toImmutable() + override fun getType(): RecipeType<*> = RagiumRecipeTypes.BREWING.get() } diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/base/HTBasicCombineRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/base/HTBasicCombineRecipe.kt index 318fbc8aa..725597d4c 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/recipe/base/HTBasicCombineRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/base/HTBasicCombineRecipe.kt @@ -6,6 +6,8 @@ import hiiragi283.ragium.api.stack.ImmutableFluidStack import hiiragi283.ragium.api.stack.ImmutableItemStack abstract class HTBasicCombineRecipe(val itemIngredients: Pair) : HTCombineRecipe { + constructor(left: HTItemIngredient, right: HTItemIngredient) : this(left to right) + final override fun getLeftRequiredCount(): Int = itemIngredients.first.getRequiredAmount() final override fun getRightRequiredCount(): Int = itemIngredients.second.getRequiredAmount() diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/vanilla/HTVanillaSingleItemRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/vanilla/HTVanillaSingleItemRecipe.kt index 606e165c8..72f914281 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/recipe/vanilla/HTVanillaSingleItemRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/vanilla/HTVanillaSingleItemRecipe.kt @@ -1,9 +1,9 @@ package hiiragi283.ragium.common.recipe.vanilla import hiiragi283.ragium.api.recipe.HTRecipe +import hiiragi283.ragium.api.recipe.HTSingleItemInputRecipe import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient import hiiragi283.ragium.api.recipe.input.HTRecipeInput -import hiiragi283.ragium.api.recipe.HTSingleItemInputRecipe import hiiragi283.ragium.api.stack.ImmutableItemStack import hiiragi283.ragium.api.stack.toImmutable import net.minecraft.core.HolderLookup diff --git a/src/main/kotlin/hiiragi283/ragium/common/text/RagiumCommonTranslation.kt b/src/main/kotlin/hiiragi283/ragium/common/text/RagiumCommonTranslation.kt index 0ff085254..b17ea83a1 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/text/RagiumCommonTranslation.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/text/RagiumCommonTranslation.kt @@ -118,8 +118,6 @@ enum class RagiumCommonTranslation(type: String, vararg path: String) : HTTransl // EMI EMI_MACHINE_UPGRADE_TITLE("emi.category", "machine_upgrade"), - EMI_BREWING_TITLE("emi.category", "brewing"), - EMI_BLOCK_CATALYST("description", "block_catalyst"), // Jade diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumMiscRegister.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumMiscRegister.kt index 9187ef7ed..d35c8e5bd 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumMiscRegister.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumMiscRegister.kt @@ -34,6 +34,7 @@ object RagiumMiscRegister { event.register(Registries.RECIPE_TYPE) { helper -> // Machine register(helper, RagiumRecipeTypes.ALLOYING) + register(helper, RagiumRecipeTypes.BREWING) register(helper, RagiumRecipeTypes.COMPRESSING) register(helper, RagiumRecipeTypes.CRUSHING) register(helper, RagiumRecipeTypes.CUTTING) diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeSerializers.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeSerializers.kt index dba211f2f..57d28cd28 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeSerializers.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeSerializers.kt @@ -19,6 +19,7 @@ import hiiragi283.ragium.common.recipe.HTAlloyingRecipe import hiiragi283.ragium.common.recipe.HTBasicMeltingRecipe import hiiragi283.ragium.common.recipe.HTBasicRefiningRecipe import hiiragi283.ragium.common.recipe.HTBlockSimulatingRecipe +import hiiragi283.ragium.common.recipe.HTBrewingRecipe import hiiragi283.ragium.common.recipe.HTCompressingRecipe import hiiragi283.ragium.common.recipe.HTCrushingRecipe import hiiragi283.ragium.common.recipe.HTCuttingRecipe @@ -110,6 +111,15 @@ object RagiumRecipeSerializers { ), ) + @JvmField + val BREWING: RecipeSerializer = register( + RagiumConst.BREWING, + RagiumRecipeBiCodecs.combine( + ::HTBrewingRecipe, + VanillaBiCodecs.POTION.fieldOf("contents").forGetter(HTBrewingRecipe::contents), + ), + ) + @JvmField val COMPRESSING: RecipeSerializer = register( RagiumConst.COMPRESSING, From b53c375b51a02593256f5da6e232a9bae7b2029a Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Thu, 11 Dec 2025 13:39:41 +0900 Subject: [PATCH 23/49] feat: Blocks with block entity stores its containment when harvested --- .../block/entity/HTUpgradableBlockEntity.kt | 58 ------- .../api/item/component/HTItemContents.kt | 54 ------- .../api/item/component/HTMachineUpgrade.kt | 6 + .../api/item/component/HTStackContents.kt | 51 ++++++ .../component/HTComponentInput.kt | 9 ++ .../component/HTComponentSerializable.kt | 9 ++ .../server/loot/RagiumBlockLootProvider.kt | 10 +- .../HTBlockMachinePropertiesProvider.kt | 9 +- .../hiiragi283/ragium/client/RagiumClient.kt | 2 +- .../gui/screen/processor/HTCrusherScreen.kt | 2 +- .../client/model/HTFuelGeneratorModel.kt | 2 +- .../ragium/common/block/HTTypedEntityBlock.kt | 14 ++ .../block/entity/ExtendedBlockEntity.kt | 6 + .../common/block/entity/HTBlockEntity.kt | 101 ++++++++---- .../block/entity/HTMachineBlockEntity.kt | 71 ++------- .../block/entity/HTMachineUpgradeComponent.kt | 149 ++++++++++++++++++ .../device/HTFluidCollectorBlockEntity.kt | 2 +- .../device/HTItemCollectorBlockEntity.kt | 4 +- .../HTSolarPanelControllerBlockEntity.kt | 3 +- .../base/HTFuelGeneratorBlockEntity.kt | 3 +- .../entity/processor/HTCrusherBlockEntity.kt | 4 +- .../processor/HTCuttingMachineBlockEntity.kt | 4 +- .../processor/HTMultiSmelterBlockEntity.kt | 2 +- .../processor/HTProcessorBlockEntity.kt | 4 +- .../base/HTAbstractCrusherBlockEntity.kt | 6 +- .../entity/storage/HTCrateBlockEntity.kt | 18 --- .../block/entity/storage/HTDrumBlockEntity.kt | 19 --- .../common/block/storage/HTCrateBlock.kt | 14 -- .../common/block/storage/HTDrumBlock.kt | 20 +-- .../common/entity/vehicle/HTMinecart.kt | 5 - .../container/HTBlockEntityContainerMenu.kt | 2 +- .../common/item/block/HTCrateBlockItem.kt | 6 +- .../common/storage/HTCapabilityCodec.kt | 46 +++++- .../energy/battery/HTMachineEnergyBattery.kt | 3 +- .../fluid/tank/HTComponentFluidTank.kt | 23 ++- .../storage/item/slot/HTComponentItemSlot.kt | 11 +- .../ragium/setup/RagiumDataComponents.kt | 13 +- .../hiiragi283/ragium/setup/RagiumItems.kt | 6 +- 38 files changed, 452 insertions(+), 319 deletions(-) delete mode 100644 src/api/kotlin/hiiragi283/ragium/api/block/entity/HTUpgradableBlockEntity.kt delete mode 100644 src/api/kotlin/hiiragi283/ragium/api/item/component/HTItemContents.kt create mode 100644 src/api/kotlin/hiiragi283/ragium/api/item/component/HTStackContents.kt create mode 100644 src/api/kotlin/hiiragi283/ragium/api/serialization/component/HTComponentInput.kt create mode 100644 src/api/kotlin/hiiragi283/ragium/api/serialization/component/HTComponentSerializable.kt create mode 100644 src/main/kotlin/hiiragi283/ragium/common/block/entity/HTMachineUpgradeComponent.kt diff --git a/src/api/kotlin/hiiragi283/ragium/api/block/entity/HTUpgradableBlockEntity.kt b/src/api/kotlin/hiiragi283/ragium/api/block/entity/HTUpgradableBlockEntity.kt deleted file mode 100644 index eed985afa..000000000 --- a/src/api/kotlin/hiiragi283/ragium/api/block/entity/HTUpgradableBlockEntity.kt +++ /dev/null @@ -1,58 +0,0 @@ -package hiiragi283.ragium.api.block.entity - -import com.mojang.datafixers.util.Either -import hiiragi283.ragium.api.function.identity -import hiiragi283.ragium.api.item.component.HTMachineUpgrade -import hiiragi283.ragium.api.math.times -import hiiragi283.ragium.api.tier.HTBaseTier -import net.minecraft.world.item.ItemStack -import net.minecraft.world.level.ItemLike -import org.apache.commons.lang3.math.Fraction -import java.util.function.UnaryOperator - -interface HTUpgradableBlockEntity { - /** - * 指定した[item]を保持しているかどうか判定します。 - */ - fun hasUpgrade(item: ItemLike): Boolean - - /** - * 現在保持しているアップグレードの一覧を返します。。 - */ - fun getMachineUpgrades(): List> - - fun canApplyUpgrade(stack: ItemStack): Boolean - - /** - * アップグレードスロットから機械の最大のティアを返します。 - * @return ティアが見つからない場合は`null` - */ - fun getMaxMachineTier(): HTBaseTier? = getMachineUpgrades() - .mapNotNull { (upgrade: HTMachineUpgrade, _) -> upgrade.getBaseTier() } - .maxOrNull() - - fun collectModifier(key: HTMachineUpgrade.Key): Fraction { - var result: Fraction = Fraction.ONE - for ((upgrade: HTMachineUpgrade, count: Int) in getMachineUpgrades()) { - if (upgrade.getBaseTier() == HTBaseTier.CREATIVE) continue - val multiplier: Fraction = upgrade.getProperty(key) ?: continue - result *= (multiplier * count) - } - return result - } - - fun calculateValue(key: HTMachineUpgrade.Key): Either { - var result: Fraction = Fraction.ONE - for ((upgrade: HTMachineUpgrade, count: Int) in getMachineUpgrades()) { - if (upgrade.getBaseTier() == HTBaseTier.CREATIVE) { - return Either.left(key.creativeValue) - } - val multiplier: Fraction = upgrade.getProperty(key) ?: continue - result *= (multiplier * count) - } - return Either.right(result) - } - - fun modifyValue(key: HTMachineUpgrade.Key, factory: UnaryOperator): Int = - calculateValue(key).map(identity()) { factory.apply(it).toInt() } -} diff --git a/src/api/kotlin/hiiragi283/ragium/api/item/component/HTItemContents.kt b/src/api/kotlin/hiiragi283/ragium/api/item/component/HTItemContents.kt deleted file mode 100644 index e0d676fa3..000000000 --- a/src/api/kotlin/hiiragi283/ragium/api/item/component/HTItemContents.kt +++ /dev/null @@ -1,54 +0,0 @@ -package hiiragi283.ragium.api.item.component - -import hiiragi283.ragium.api.serialization.codec.BiCodec -import hiiragi283.ragium.api.stack.ImmutableItemStack -import net.minecraft.network.RegistryFriendlyByteBuf -import java.util.Optional -import kotlin.jvm.optionals.getOrNull - -/** - * @see net.minecraft.world.item.component.ItemContainerContents - */ -@JvmInline -value class HTItemContents private constructor(private val items: Array) : Iterable { - companion object { - @JvmField - val CODEC: BiCodec = ImmutableItemStack.CODEC - .toOptional() - .listOf() - .xmap( - { stacks -> of(stacks.map(Optional::getOrNull).toTypedArray()) }, - { contents: HTItemContents -> contents.items.map(Optional::ofNullable) }, - ) - - val EMPTY = HTItemContents(arrayOf()) - - @JvmStatic - fun of(stack: ImmutableItemStack?): HTItemContents = of(arrayOf(stack)) - - @JvmStatic - fun of(items: Array): HTItemContents = when { - items.isEmpty() -> EMPTY - else -> HTItemContents(items) - } - - @JvmStatic - fun of(size: Int): HTItemContents = when (size) { - 0 -> EMPTY - else -> HTItemContents(Array(size) { null }) - } - } - - val size: Int get() = items.size - val indices: IntRange get() = (0.. = items.iterator() - - fun unwrap(): Array = items.copyOf() -} diff --git a/src/api/kotlin/hiiragi283/ragium/api/item/component/HTMachineUpgrade.kt b/src/api/kotlin/hiiragi283/ragium/api/item/component/HTMachineUpgrade.kt index c52189605..33f534d98 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/item/component/HTMachineUpgrade.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/item/component/HTMachineUpgrade.kt @@ -68,6 +68,8 @@ sealed interface HTMachineUpgrade { else -> null } + fun unwrap(): Either> + // Tiered // @JvmRecord @@ -90,6 +92,8 @@ sealed interface HTMachineUpgrade { else -> null } + + override fun unwrap(): Either> = Either.left(tier) } // Properties // @@ -106,6 +110,8 @@ sealed interface HTMachineUpgrade { override fun getBaseTier(): HTBaseTier? = null override fun getProperty(key: Key): Fraction? = properties[key] + + override fun unwrap(): Either> = Either.right(properties) } // Key // diff --git a/src/api/kotlin/hiiragi283/ragium/api/item/component/HTStackContents.kt b/src/api/kotlin/hiiragi283/ragium/api/item/component/HTStackContents.kt new file mode 100644 index 000000000..1ef8d1ade --- /dev/null +++ b/src/api/kotlin/hiiragi283/ragium/api/item/component/HTStackContents.kt @@ -0,0 +1,51 @@ +package hiiragi283.ragium.api.item.component + +import hiiragi283.ragium.api.serialization.codec.BiCodec +import hiiragi283.ragium.api.stack.ImmutableFluidStack +import hiiragi283.ragium.api.stack.ImmutableItemStack +import hiiragi283.ragium.api.stack.ImmutableStack +import net.minecraft.network.RegistryFriendlyByteBuf +import java.util.Optional +import kotlin.jvm.optionals.getOrNull + +typealias HTItemContents = HTStackContents +typealias HTFluidContents = HTStackContents + +/** + * @see mekanism.common.attachments.containers.item.AttachedItems + */ +data class HTStackContents>(val stacks: List>) : AbstractList() { + companion object { + @JvmStatic + fun > codec( + stackCodec: BiCodec, + ): BiCodec> = stackCodec + .toOptional() + .listOrElement() + .xmap(::HTStackContents, HTStackContents::stacks) + + @JvmStatic + fun > empty(): HTStackContents = HTStackContents(listOf()) + + @JvmStatic + fun > fromNullable(stacks: List): HTStackContents = when { + stacks.isEmpty() || stacks.filterNotNull().isEmpty() -> empty() + else -> HTStackContents(stacks.map(Optional::ofNullable)) + } + + @JvmStatic + fun > fromOptional(stacks: List>): HTStackContents = when { + stacks.isEmpty() || stacks.none(Optional::isPresent) -> empty() + else -> HTStackContents(stacks) + } + } + + override val size: Int + get() = stacks.size + + override fun get(index: Int): STACK? = stacks[index].getOrNull() + + override fun isEmpty(): Boolean = super.isEmpty() || stacks.all(Optional::isEmpty) + + fun unwrap(): MutableList> = stacks.toMutableList() +} diff --git a/src/api/kotlin/hiiragi283/ragium/api/serialization/component/HTComponentInput.kt b/src/api/kotlin/hiiragi283/ragium/api/serialization/component/HTComponentInput.kt new file mode 100644 index 000000000..a2c4a2bab --- /dev/null +++ b/src/api/kotlin/hiiragi283/ragium/api/serialization/component/HTComponentInput.kt @@ -0,0 +1,9 @@ +package hiiragi283.ragium.api.serialization.component + +import net.minecraft.core.component.DataComponentType + +interface HTComponentInput { + operator fun get(type: DataComponentType): T? + + fun use(type: DataComponentType, action: (T) -> R): R? = get(type)?.let(action) +} diff --git a/src/api/kotlin/hiiragi283/ragium/api/serialization/component/HTComponentSerializable.kt b/src/api/kotlin/hiiragi283/ragium/api/serialization/component/HTComponentSerializable.kt new file mode 100644 index 000000000..e50574b8d --- /dev/null +++ b/src/api/kotlin/hiiragi283/ragium/api/serialization/component/HTComponentSerializable.kt @@ -0,0 +1,9 @@ +package hiiragi283.ragium.api.serialization.component + +import net.minecraft.core.component.DataComponentMap + +interface HTComponentSerializable { + fun applyComponents(input: HTComponentInput) + + fun collectComponents(builder: DataComponentMap.Builder) +} diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/loot/RagiumBlockLootProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/loot/RagiumBlockLootProvider.kt index ea71c8f81..c31bb3bf0 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/loot/RagiumBlockLootProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/loot/RagiumBlockLootProvider.kt @@ -6,8 +6,6 @@ import hiiragi283.ragium.api.registry.impl.HTDeferredBlock import hiiragi283.ragium.api.registry.impl.HTDeferredOnlyBlock import hiiragi283.ragium.common.block.HTCropBlock import hiiragi283.ragium.common.block.HTImitationSpawnerBlock -import hiiragi283.ragium.common.block.storage.HTCrateBlock -import hiiragi283.ragium.common.block.storage.HTDrumBlock import hiiragi283.ragium.common.material.RagiumMaterialKeys import hiiragi283.ragium.setup.RagiumBlocks import hiiragi283.ragium.setup.RagiumDataComponents @@ -53,9 +51,13 @@ class RagiumBlockLootProvider(provider: HolderLookup.Provider) : include(DataComponents.CUSTOM_NAME) include(DataComponents.ENCHANTMENTS) include(DataComponents.HIDE_ADDITIONAL_TOOLTIP) + + include(RagiumDataComponents.MACHINE_UPGRADES) + + include(RagiumDataComponents.ENERGY) + include(RagiumDataComponents.FLUID_CONTENT) + include(RagiumDataComponents.ITEM_CONTENT) when (block) { - is HTDrumBlock -> include(RagiumDataComponents.FLUID_CONTENT) - is HTCrateBlock -> include(RagiumDataComponents.ITEM_CONTENT) is HTImitationSpawnerBlock -> include(RagiumDataComponents.SPAWNER_MOB) } } diff --git a/src/integration/kotlin/hiiragi283/ragium/client/integration/jade/provider/HTBlockMachinePropertiesProvider.kt b/src/integration/kotlin/hiiragi283/ragium/client/integration/jade/provider/HTBlockMachinePropertiesProvider.kt index 23680e012..ea7fc4cf2 100644 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/jade/provider/HTBlockMachinePropertiesProvider.kt +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/jade/provider/HTBlockMachinePropertiesProvider.kt @@ -3,6 +3,7 @@ package hiiragi283.ragium.client.integration.jade.provider import hiiragi283.ragium.api.item.component.HTMachineUpgrade import hiiragi283.ragium.client.integration.jade.provider.base.HTBasicJadeDataProvider import hiiragi283.ragium.common.block.entity.HTMachineBlockEntity +import hiiragi283.ragium.common.block.entity.HTMachineUpgradeComponent import snownee.jade.api.BlockAccessor import snownee.jade.api.ITooltip import snownee.jade.api.config.IPluginConfig @@ -11,10 +12,10 @@ object HTBlockMachinePropertiesProvider : HTBasicJadeDataProvider { val collector: HTFluidCollectorBlockEntity? = getter.getTypedBlockEntity(pos) - if (collector != null && collector.hasUpgrade(RagiumItems.EXP_COLLECTOR_UPGRADE)) { + if (collector != null && collector.machineUpgrade.hasUpgrade(RagiumItems.EXP_COLLECTOR_UPGRADE)) { 0x66ff33 } else { BiomeColors.getAverageWaterColor(getter, pos) diff --git a/src/main/kotlin/hiiragi283/ragium/client/gui/screen/processor/HTCrusherScreen.kt b/src/main/kotlin/hiiragi283/ragium/client/gui/screen/processor/HTCrusherScreen.kt index 01e999b36..d71979860 100644 --- a/src/main/kotlin/hiiragi283/ragium/client/gui/screen/processor/HTCrusherScreen.kt +++ b/src/main/kotlin/hiiragi283/ragium/client/gui/screen/processor/HTCrusherScreen.kt @@ -21,6 +21,6 @@ class HTCrusherScreen( createFluidSlot(blockEntity.inputTank, HTSlotHelper.getSlotPosX(2), HTSlotHelper.getSlotPosY(2)) override fun updateVisibility() { - fluidWidget.visible = blockEntity.hasUpgrade(RagiumItems.EFFICIENT_CRUSH_UPGRADE) + fluidWidget.visible = blockEntity.machineUpgrade.hasUpgrade(RagiumItems.EFFICIENT_CRUSH_UPGRADE) } } diff --git a/src/main/kotlin/hiiragi283/ragium/client/model/HTFuelGeneratorModel.kt b/src/main/kotlin/hiiragi283/ragium/client/model/HTFuelGeneratorModel.kt index 269c1e78a..33dfa8cc5 100644 --- a/src/main/kotlin/hiiragi283/ragium/client/model/HTFuelGeneratorModel.kt +++ b/src/main/kotlin/hiiragi283/ragium/client/model/HTFuelGeneratorModel.kt @@ -105,7 +105,7 @@ class HTFuelGeneratorModel(modelSet: EntityModelSet) : HTModel(RenderType::entit blockEntity.isActive -> blockEntity.ticks + partialTick else -> 0f } - val speed: Float = (blockEntity.collectModifier(HTMachineUpgrade.Key.ENERGY_GENERATION) / 4).toFloat() + val speed: Float = (blockEntity.machineUpgrade.collectModifier(HTMachineUpgrade.Key.ENERGY_GENERATION) / 4).toFloat() top.y = Mth.sin(time * speed + Mth.HALF_PI) * 4 - 4f bellow.y = min(Mth.sin(time * speed + Mth.HALF_PI) * 4, 0f) diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/HTTypedEntityBlock.kt b/src/main/kotlin/hiiragi283/ragium/common/block/HTTypedEntityBlock.kt index 9e12f1051..9401a740d 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/HTTypedEntityBlock.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/HTTypedEntityBlock.kt @@ -21,11 +21,13 @@ import net.minecraft.world.entity.LivingEntity import net.minecraft.world.entity.player.Player import net.minecraft.world.item.ItemStack import net.minecraft.world.level.Level +import net.minecraft.world.level.LevelReader import net.minecraft.world.level.block.BaseEntityBlock import net.minecraft.world.level.block.Block import net.minecraft.world.level.block.RenderShape import net.minecraft.world.level.block.state.BlockState import net.minecraft.world.phys.BlockHitResult +import net.minecraft.world.phys.HitResult import net.neoforged.neoforge.common.Tags import java.util.function.UnaryOperator @@ -149,4 +151,16 @@ open class HTTypedEntityBlock(type: TYPE, properties: super.neighborChanged(state, level, pos, neighborBlock, neighborPos, movedByPiston) level.getTypedBlockEntity(pos)?.neighborChanged(state, level, pos, neighborBlock, neighborPos, movedByPiston) } + + override fun getCloneItemStack( + state: BlockState, + target: HitResult, + level: LevelReader, + pos: BlockPos, + player: Player, + ): ItemStack { + val stack: ItemStack = super.getCloneItemStack(state, target, level, pos, player) + level.getBlockEntity(pos)?.collectComponents()?.let(stack::applyComponents) + return stack + } } diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/ExtendedBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/ExtendedBlockEntity.kt index 2ead2e6fa..37cc9903e 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/ExtendedBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/ExtendedBlockEntity.kt @@ -2,9 +2,11 @@ package hiiragi283.ragium.common.block.entity import hiiragi283.ragium.api.block.entity.HTAbstractBlockEntity import hiiragi283.ragium.api.registry.impl.HTDeferredBlockEntityType +import hiiragi283.ragium.api.serialization.component.HTComponentInput import hiiragi283.ragium.common.network.HTUpdateBlockEntityPacket import net.minecraft.core.BlockPos import net.minecraft.core.HolderLookup +import net.minecraft.core.component.DataComponentType import net.minecraft.nbt.CompoundTag import net.minecraft.network.Connection import net.minecraft.network.RegistryFriendlyByteBuf @@ -65,6 +67,10 @@ abstract class ExtendedBlockEntity(type: HTDeferredBlockEntityType<*>, pos: Bloc onRemove(level, blockPos) } + protected fun wrapComponentInput(input: DataComponentInput): HTComponentInput = object : HTComponentInput { + override fun get(type: DataComponentType): T? = input.get(type) + } + // HTContentListener // protected fun setOnlySave() { diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTBlockEntity.kt index 8f8b37a73..9fa834bf4 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTBlockEntity.kt @@ -4,6 +4,9 @@ import hiiragi283.ragium.api.RagiumConst import hiiragi283.ragium.api.RagiumPlatform import hiiragi283.ragium.api.block.HTBlockWithEntity import hiiragi283.ragium.api.block.entity.HTOwnedBlockEntity +import hiiragi283.ragium.api.item.component.HTFluidContents +import hiiragi283.ragium.api.item.component.HTItemContents +import hiiragi283.ragium.api.item.component.HTStackContents import hiiragi283.ragium.api.registry.impl.HTDeferredBlockEntityType import hiiragi283.ragium.api.serialization.value.HTValueInput import hiiragi283.ragium.api.serialization.value.HTValueOutput @@ -27,12 +30,10 @@ import hiiragi283.ragium.common.inventory.slot.HTIntSyncSlot import hiiragi283.ragium.common.storage.HTCapabilityCodec import hiiragi283.ragium.common.storage.energy.battery.HTBasicEnergyBattery import hiiragi283.ragium.common.storage.fluid.tank.HTBasicFluidTank +import hiiragi283.ragium.common.storage.item.slot.HTBasicItemSlot import hiiragi283.ragium.common.storage.resolver.HTEnergyStorageManager import hiiragi283.ragium.common.storage.resolver.HTFluidHandlerManager import hiiragi283.ragium.common.storage.resolver.HTItemHandlerManager -import hiiragi283.ragium.setup.RagiumFluidContents -import hiiragi283.ragium.util.HTExperienceHelper -import hiiragi283.ragium.util.HTItemDropHelper import net.minecraft.core.BlockPos import net.minecraft.core.Direction import net.minecraft.core.Holder @@ -45,18 +46,15 @@ import net.minecraft.network.chat.Component import net.minecraft.network.chat.ComponentSerialization import net.minecraft.server.level.ServerLevel import net.minecraft.world.Nameable -import net.minecraft.world.entity.ExperienceOrb import net.minecraft.world.entity.player.Player import net.minecraft.world.item.enchantment.ItemEnchantments import net.minecraft.world.level.Level import net.minecraft.world.level.block.Block import net.minecraft.world.level.block.state.BlockState -import net.minecraft.world.phys.Vec3 import net.neoforged.neoforge.energy.IEnergyStorage import net.neoforged.neoforge.fluids.capability.IFluidHandler import net.neoforged.neoforge.items.IItemHandler import java.util.UUID -import java.util.function.Consumer /** * キャパビリティやオーナーを保持する[ExtendedBlockEntity]の拡張クラス @@ -122,28 +120,7 @@ abstract class HTBlockEntity(val blockHolder: Holder, pos: BlockPos, stat protected abstract fun onUpdateServer(level: ServerLevel, pos: BlockPos, state: BlockState): Boolean - open fun onBlockRemoved(state: BlockState, level: Level, pos: BlockPos) { - // Drop remaining items - collectItemDrops { stack: ImmutableItemStack -> HTItemDropHelper.dropStackAt(level, pos, stack) } - // Drop remaining fluids - collectFluidDrops(level, Vec3.atCenterOf(pos)) - } - - open fun collectItemDrops(consumer: Consumer) { - getItemSlots(getItemSideFor()).mapNotNull(HTItemSlot::getStack).forEach(consumer) - } - - open fun collectFluidDrops(level: Level, pos: Vec3) { - if (level !is ServerLevel) return - val expAmount: Int = getFluidTanks(getFluidSideFor()) - .mapNotNull(HTFluidTank::getStack) - .filter(RagiumFluidContents.EXPERIENCE::isOf) - .sumOf(ImmutableFluidStack::amount) - .let(HTExperienceHelper::expAmountFromFluid) - if (expAmount > 0) { - ExperienceOrb.award(level, pos, expAmount) - } - } + open fun onBlockRemoved(state: BlockState, level: Level, pos: BlockPos) {} // Save & Read // @@ -157,7 +134,7 @@ abstract class HTBlockEntity(val blockHolder: Holder, pos: BlockPos, stat protected open fun writeValue(output: HTValueOutput) { // Capability - for (type: HTCapabilityCodec<*> in HTCapabilityCodec.TYPES) { + for (type: HTCapabilityCodec<*, *> in HTCapabilityCodec.TYPES) { if (type.canHandle(this)) { type.saveTo(output, this) } @@ -177,7 +154,7 @@ abstract class HTBlockEntity(val blockHolder: Holder, pos: BlockPos, stat protected open fun readValue(input: HTValueInput) { // Capability - for (type: HTCapabilityCodec<*> in HTCapabilityCodec.TYPES) { + for (type: HTCapabilityCodec<*, *> in HTCapabilityCodec.TYPES) { if (type.canHandle(this)) { type.loadFrom(input, this) } @@ -192,13 +169,29 @@ abstract class HTBlockEntity(val blockHolder: Holder, pos: BlockPos, stat override fun applyImplicitComponents(componentInput: DataComponentInput) { super.applyImplicitComponents(componentInput) + // Capability + for (type: HTCapabilityCodec<*, *> in HTCapabilityCodec.TYPES) { + if (type.canHandle(this)) { + type.copyTo(this, componentInput::get) + } + } + // Custom Name this.customName = componentInput.get(DataComponents.CUSTOM_NAME) + // Enchantments enchantment = componentInput.getOrDefault(DataComponents.ENCHANTMENTS, ItemEnchantments.EMPTY) } override fun collectImplicitComponents(components: DataComponentMap.Builder) { super.collectImplicitComponents(components) + // Capability + for (type: HTCapabilityCodec<*, *> in HTCapabilityCodec.TYPES) { + if (type.canHandle(this)) { + type.copyFrom(this, components) + } + } + // Custom Name components.set(DataComponents.CUSTOM_NAME, this.customName) + // Enchantments if (!enchantment.isEmpty) { components.set(DataComponents.ENCHANTMENTS, enchantment) } @@ -278,6 +271,24 @@ abstract class HTBlockEntity(val blockHolder: Holder, pos: BlockPos, stat final override fun getFluidHandler(direction: Direction?): IFluidHandler? = fluidHandlerManager?.resolve(direction) + /** + * @see mekanism.common.tile.base.TileEntityMekanism.applyFluidTanks + */ + fun applyFluidTanks(containers: List, contents: HTFluidContents) { + for (i: Int in contents.indices) { + val stack: ImmutableFluidStack? = contents[i] + (containers.getOrNull(i) as? HTBasicFluidTank)?.setStackUnchecked(stack, true) + } + } + + /** + * @see mekanism.common.tile.base.TileEntityMekanism.collectFluidTanks + */ + fun collectFluidTanks(containers: List): HTFluidContents? = containers + .map(HTFluidTank::getStack) + .let(HTStackContents.Companion::fromNullable) + .takeUnless(HTFluidContents::isEmpty) + // Energy /** @@ -294,6 +305,18 @@ abstract class HTBlockEntity(val blockHolder: Holder, pos: BlockPos, stat final override fun getEnergyStorage(direction: Direction?): IEnergyStorage? = energyHandlerManager?.resolve(direction) + /** + * @see mekanism.common.tile.base.TileEntityMekanism.applyEnergyContainers + */ + fun applyEnergyBattery(containers: List, value: Int) { + (containers.first() as? HTBasicEnergyBattery)?.setAmountUnchecked(value, true) + } + + /** + * @see mekanism.common.tile.base.TileEntityMekanism.collectEnergyContainers + */ + fun collectEnergyBattery(containers: List): Int? = containers.firstOrNull()?.getAmount() + // Item /** @@ -309,4 +332,22 @@ abstract class HTBlockEntity(val blockHolder: Holder, pos: BlockPos, stat final override fun getItemSlots(side: Direction?): List = itemHandlerManager?.getContainers(side) ?: listOf() final override fun getItemHandler(direction: Direction?): IItemHandler? = itemHandlerManager?.resolve(direction) + + /** + * @see mekanism.common.tile.base.TileEntityMekanism.applyInventorySlots + */ + fun applyItemSlots(containers: List, contents: HTItemContents) { + for (i: Int in contents.indices) { + val stack: ImmutableItemStack? = contents[i] + (containers.getOrNull(i) as? HTBasicItemSlot)?.setStackUnchecked(stack, true) + } + } + + /** + * @see mekanism.common.tile.base.TileEntityMekanism.collectInventorySlots + */ + fun collectItemSlots(containers: List): HTItemContents? = containers + .map(HTItemSlot::getStack) + .let(HTStackContents.Companion::fromNullable) + .takeUnless(HTItemContents::isEmpty) } diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTMachineBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTMachineBlockEntity.kt index 5d7c610aa..7e7961cf4 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTMachineBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTMachineBlockEntity.kt @@ -1,39 +1,28 @@ package hiiragi283.ragium.common.block.entity -import hiiragi283.ragium.api.RagiumPlatform -import hiiragi283.ragium.api.block.entity.HTUpgradableBlockEntity import hiiragi283.ragium.api.function.HTPredicates -import hiiragi283.ragium.api.item.component.HTMachineUpgrade -import hiiragi283.ragium.api.registry.HTKeyOrTagEntry import hiiragi283.ragium.api.serialization.value.HTValueInput import hiiragi283.ragium.api.serialization.value.HTValueOutput import hiiragi283.ragium.api.stack.ImmutableItemStack import hiiragi283.ragium.api.storage.holder.HTSlotInfo import hiiragi283.ragium.api.util.HTContentListener -import hiiragi283.ragium.api.world.sendBlockUpdated import hiiragi283.ragium.common.inventory.HTSlotHelper -import hiiragi283.ragium.common.storage.HTCapabilityCodec import hiiragi283.ragium.common.storage.holder.HTBasicItemSlotHolder import hiiragi283.ragium.common.storage.item.slot.HTBasicItemSlot import hiiragi283.ragium.common.storage.item.slot.HTOutputItemSlot -import hiiragi283.ragium.setup.RagiumDataComponents import net.minecraft.core.BlockPos import net.minecraft.core.Holder +import net.minecraft.core.component.DataComponentMap import net.minecraft.server.level.ServerLevel -import net.minecraft.world.item.ItemStack -import net.minecraft.world.level.ItemLike import net.minecraft.world.level.block.Block -import net.minecraft.world.level.block.entity.BlockEntityType import net.minecraft.world.level.block.state.BlockState -import java.util.function.Consumer import java.util.function.Predicate /** * 機械全般に使用される[HTConfigurableBlockEntity]の拡張クラス */ abstract class HTMachineBlockEntity(blockHolder: Holder, pos: BlockPos, state: BlockState) : - HTConfigurableBlockEntity(blockHolder, pos, state), - HTUpgradableBlockEntity { + HTConfigurableBlockEntity(blockHolder, pos, state) { companion object { // Slot @JvmStatic @@ -65,58 +54,30 @@ abstract class HTMachineBlockEntity(blockHolder: Holder, pos: BlockPos, s ) } - // HTUpgradableBlockEntity // - - val upgradeSlots: List = (0..3).map { i: Int -> - val filter: (ImmutableItemStack) -> Boolean = filter@{ stack: ImmutableItemStack -> - canApplyUpgrade(stack.unwrap()) && !hasUpgrade(stack.value()) - } - HTBasicItemSlot.create( - HTContentListener(::setOnlySave).andThen { level?.sendBlockUpdated(blockPos) }, - HTSlotHelper.getSlotPosX(8), - HTSlotHelper.getSlotPosY(i - 0.5), - canExtract = HTPredicates.manualOnly(), - canInsert = HTPredicates.manualOnly(), - filter = filter, - ) - } - - final override fun hasUpgrade(item: ItemLike): Boolean = upgradeSlots.any { slot: HTBasicItemSlot -> - slot.getStack()?.isOf(item.asItem()) ?: false - } - - override fun getMachineUpgrades(): List> = upgradeSlots.mapNotNull { slot: HTBasicItemSlot -> - val upgrade: HTMachineUpgrade = slot - .getStack() - ?.unwrap() - ?.let { RagiumPlatform.INSTANCE.getMachineUpgrade(getRegistryAccess(), it) } - ?: return@mapNotNull null - upgrade to slot.getAmount() - } - - override fun canApplyUpgrade(stack: ItemStack): Boolean { - if (RagiumPlatform.INSTANCE.getMachineUpgrade(getRegistryAccess(), stack) == null) return false - val filter: HTKeyOrTagEntry> = stack.get(RagiumDataComponents.MACHINE_UPGRADE_FILTER) ?: return true - return filter.isOf(getBlockEntityType(this.blockHolder)) - } - - override fun collectItemDrops(consumer: Consumer) { - super.collectItemDrops(consumer) - upgradeSlots.mapNotNull(HTBasicItemSlot::getStack).forEach(consumer) - } - // Save & Load // + val machineUpgrade = HTMachineUpgradeComponent(blockHolder, pos, this::getLevel, ::setOnlySave) + override fun writeValue(output: HTValueOutput) { super.writeValue(output) output.putBoolean("is_active", this.isActive) - HTCapabilityCodec.ITEM.saveTo(output.child("upgrades"), upgradeSlots) + machineUpgrade.serialize(output) } override fun readValue(input: HTValueInput) { super.readValue(input) this.isActive = input.getBoolean("is_active", false) - HTCapabilityCodec.ITEM.loadFrom(input.childOrEmpty("upgrades"), upgradeSlots) + machineUpgrade.deserialize(input) + } + + override fun applyImplicitComponents(componentInput: DataComponentInput) { + machineUpgrade.applyComponents(wrapComponentInput(componentInput)) + super.applyImplicitComponents(componentInput) + } + + override fun collectImplicitComponents(components: DataComponentMap.Builder) { + super.collectImplicitComponents(components) + machineUpgrade.collectComponents(components) } // Ticking // diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTMachineUpgradeComponent.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTMachineUpgradeComponent.kt new file mode 100644 index 000000000..53af3269d --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTMachineUpgradeComponent.kt @@ -0,0 +1,149 @@ +package hiiragi283.ragium.common.block.entity + +import com.mojang.datafixers.util.Either +import hiiragi283.ragium.api.RagiumPlatform +import hiiragi283.ragium.api.function.HTPredicates +import hiiragi283.ragium.api.function.identity +import hiiragi283.ragium.api.item.component.HTItemContents +import hiiragi283.ragium.api.item.component.HTMachineUpgrade +import hiiragi283.ragium.api.item.component.HTStackContents +import hiiragi283.ragium.api.math.times +import hiiragi283.ragium.api.registry.HTKeyOrTagEntry +import hiiragi283.ragium.api.serialization.component.HTComponentInput +import hiiragi283.ragium.api.serialization.component.HTComponentSerializable +import hiiragi283.ragium.api.serialization.value.HTValueInput +import hiiragi283.ragium.api.serialization.value.HTValueOutput +import hiiragi283.ragium.api.serialization.value.HTValueSerializable +import hiiragi283.ragium.api.stack.ImmutableItemStack +import hiiragi283.ragium.api.tier.HTBaseTier +import hiiragi283.ragium.api.util.HTContentListener +import hiiragi283.ragium.api.world.sendBlockUpdated +import hiiragi283.ragium.common.block.entity.HTBlockEntity.Companion.getBlockEntityType +import hiiragi283.ragium.common.inventory.HTSlotHelper +import hiiragi283.ragium.common.storage.HTCapabilityCodec +import hiiragi283.ragium.common.storage.item.slot.HTBasicItemSlot +import hiiragi283.ragium.setup.RagiumDataComponents +import net.minecraft.core.BlockPos +import net.minecraft.core.Holder +import net.minecraft.core.RegistryAccess +import net.minecraft.core.component.DataComponentMap +import net.minecraft.world.item.ItemStack +import net.minecraft.world.level.ItemLike +import net.minecraft.world.level.Level +import net.minecraft.world.level.block.Block +import net.minecraft.world.level.block.entity.BlockEntityType +import org.apache.commons.lang3.math.Fraction +import java.util.function.UnaryOperator + +class HTMachineUpgradeComponent( + private val blockHolder: Holder, + private val pos: BlockPos, + private val levelGetter: () -> Level?, + private val listener: HTContentListener, +) : HTComponentSerializable, + HTValueSerializable { + private val access: RegistryAccess? get() = levelGetter()?.registryAccess() + + val upgradeSlots: List = (0..3).map { i: Int -> + val filter: (ImmutableItemStack) -> Boolean = filter@{ stack: ImmutableItemStack -> + canApplyUpgrade(stack.unwrap()) && !hasUpgrade(stack.value()) + } + HTBasicItemSlot.create( + listener.andThen { levelGetter()?.sendBlockUpdated(pos) }, + HTSlotHelper.getSlotPosX(8), + HTSlotHelper.getSlotPosY(i - 0.5), + canExtract = HTPredicates.manualOnly(), + canInsert = HTPredicates.manualOnly(), + filter = filter, + ) + } + + /** + * 指定した[item]を保持しているかどうか判定します。 + */ + fun hasUpgrade(item: ItemLike): Boolean = upgradeSlots.any { slot: HTBasicItemSlot -> + slot.getStack()?.isOf(item.asItem()) ?: false + } + + /** + * 現在保持しているアップグレードの一覧を返します。。 + */ + fun getMachineUpgrades(): List> = upgradeSlots.mapNotNull { slot: HTBasicItemSlot -> + val upgrade: HTMachineUpgrade = slot + .getStack() + ?.unwrap() + ?.let { RagiumPlatform.INSTANCE.getMachineUpgrade(access, it) } + ?: return@mapNotNull null + upgrade to slot.getAmount() + } + + fun canApplyUpgrade(stack: ItemStack): Boolean { + if (RagiumPlatform.INSTANCE.getMachineUpgrade(access, stack) == null) return false + val filter: HTKeyOrTagEntry> = stack.get(RagiumDataComponents.MACHINE_UPGRADE_FILTER) ?: return true + return filter.isOf(getBlockEntityType(this.blockHolder)) + } + + /** + * アップグレードスロットから機械の最大のティアを返します。 + * @return ティアが見つからない場合は`null` + */ + fun getMaxMachineTier(): HTBaseTier? = getMachineUpgrades() + .mapNotNull { (upgrade: HTMachineUpgrade, _) -> upgrade.getBaseTier() } + .maxOrNull() + + fun collectModifier(key: HTMachineUpgrade.Key): Fraction { + var result: Fraction = Fraction.ONE + for ((upgrade: HTMachineUpgrade, count: Int) in getMachineUpgrades()) { + if (upgrade.getBaseTier() == HTBaseTier.CREATIVE) continue + val multiplier: Fraction = upgrade.getProperty(key) ?: continue + result *= (multiplier * count) + } + return result + } + + fun collectAllModifier(): Map = HTMachineUpgrade.Key.entries.associateWith(::collectModifier) + + fun calculateValue(key: HTMachineUpgrade.Key): Either { + var result: Fraction = Fraction.ONE + for ((upgrade: HTMachineUpgrade, count: Int) in getMachineUpgrades()) { + if (upgrade.getBaseTier() == HTBaseTier.CREATIVE) { + return Either.left(key.creativeValue) + } + val multiplier: Fraction = upgrade.getProperty(key) ?: continue + result *= (multiplier * count) + } + return Either.right(result) + } + + fun modifyValue(key: HTMachineUpgrade.Key, factory: UnaryOperator): Int = + calculateValue(key).map(identity()) { factory.apply(it).toInt() } + + // HTComponentSerializable // + + override fun applyComponents(input: HTComponentInput) { + input.use(RagiumDataComponents.MACHINE_UPGRADES) { contents: HTItemContents -> + for (i: Int in contents.indices) { + upgradeSlots.getOrNull(i)?.setStackUnchecked(contents[i]) + } + } + } + + override fun collectComponents(builder: DataComponentMap.Builder) { + builder.set( + RagiumDataComponents.MACHINE_UPGRADES, + upgradeSlots + .map(HTBasicItemSlot::getStack) + .let(HTStackContents.Companion::fromNullable), + ) + } + + // HTValueSerializable // + + override fun serialize(output: HTValueOutput) { + HTCapabilityCodec.ITEM.saveTo(output.child("upgrades"), upgradeSlots) + } + + override fun deserialize(input: HTValueInput) { + HTCapabilityCodec.ITEM.loadFrom(input.childOrEmpty("upgrades"), upgradeSlots) + } +} diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTFluidCollectorBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTFluidCollectorBlockEntity.kt index 4ace753e4..c16fb7c56 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTFluidCollectorBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTFluidCollectorBlockEntity.kt @@ -49,7 +49,7 @@ class HTFluidCollectorBlockEntity(pos: BlockPos, state: BlockState) : // Ticking // override fun actionServer(level: ServerLevel, pos: BlockPos, state: BlockState): Boolean = when { - hasUpgrade(RagiumItems.EXP_COLLECTOR_UPGRADE) -> collectExp(level, pos) + machineUpgrade.hasUpgrade(RagiumItems.EXP_COLLECTOR_UPGRADE) -> collectExp(level, pos) else -> generateWater(level, pos) } diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTItemCollectorBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTItemCollectorBlockEntity.kt index 849123bf2..3a28cc7d6 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTItemCollectorBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTItemCollectorBlockEntity.kt @@ -75,8 +75,8 @@ class HTItemCollectorBlockEntity(pos: BlockPos, state: BlockState) : // Ticking // override fun actionServer(level: ServerLevel, pos: BlockPos, state: BlockState): Boolean = when { - hasUpgrade(RagiumItems.FISHING_UPGRADE) -> collectFish(level, pos) - hasUpgrade(RagiumItems.MOB_CAPTURE_UPGRADE) -> collectMobs(level, pos) + machineUpgrade.hasUpgrade(RagiumItems.FISHING_UPGRADE) -> collectFish(level, pos) + machineUpgrade.hasUpgrade(RagiumItems.MOB_CAPTURE_UPGRADE) -> collectMobs(level, pos) else -> collectItem(level, pos) } diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/generator/HTSolarPanelControllerBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/generator/HTSolarPanelControllerBlockEntity.kt index e3735ad9e..d8590fa59 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/generator/HTSolarPanelControllerBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/generator/HTSolarPanelControllerBlockEntity.kt @@ -23,7 +23,8 @@ class HTSolarPanelControllerBlockEntity(pos: BlockPos, state: BlockState) : }.size if (panels == 0) return false - battery.currentEnergyPerTick = modifyValue(HTMachineUpgrade.Key.ENERGY_GENERATION) { battery.baseEnergyPerTick * (panels / 4) * it } + battery.currentEnergyPerTick = + machineUpgrade.modifyValue(HTMachineUpgrade.Key.ENERGY_GENERATION) { battery.baseEnergyPerTick * (panels / 4) * it } return battery.generate() > 0 } diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/generator/base/HTFuelGeneratorBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/generator/base/HTFuelGeneratorBlockEntity.kt index 5e6db066a..fa053c913 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/generator/base/HTFuelGeneratorBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/generator/base/HTFuelGeneratorBlockEntity.kt @@ -29,7 +29,8 @@ abstract class HTFuelGeneratorBlockEntity(blockHolder: Holder, pos: Block // 燃料がある場合,それを消費する if (remainingBurnTime > 0) { remainingBurnTime-- - battery.currentEnergyPerTick = modifyValue(HTMachineUpgrade.Key.ENERGY_GENERATION) { battery.baseEnergyPerTick * it } + battery.currentEnergyPerTick = + machineUpgrade.modifyValue(HTMachineUpgrade.Key.ENERGY_GENERATION) { battery.baseEnergyPerTick * it } battery.generate() return true } else { 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 51745fe6c..ee39b1e5b 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 @@ -42,7 +42,7 @@ class HTCrusherBlockEntity(pos: BlockPos, state: BlockState) : 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)) { + if (machineUpgrade.hasUpgrade(RagiumItems.PRIMARY_ONLY_UPGRADE)) { return bool1 } val bool2: Boolean = HTStackSlotHelper.canInsertStack(extraSlot, input, level, recipe::assembleExtraItem) @@ -53,7 +53,7 @@ class HTCrusherBlockEntity(pos: BlockPos, state: BlockState) : // 実際にアウトプットに搬出する val access: RegistryAccess = level.registryAccess() outputSlot.insert(recipe.assembleItem(input, access), HTStorageAction.EXECUTE, HTStorageAccess.INTERNAL) - if (!hasUpgrade(RagiumItems.PRIMARY_ONLY_UPGRADE)) { + if (!machineUpgrade.hasUpgrade(RagiumItems.PRIMARY_ONLY_UPGRADE)) { extraSlot.insert(recipe.assembleExtraItem(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 7fafbdd9b..6f3816300 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 @@ -51,7 +51,7 @@ class HTCuttingMachineBlockEntity(pos: BlockPos, state: BlockState) : 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)) { + if (machineUpgrade.hasUpgrade(RagiumItems.PRIMARY_ONLY_UPGRADE)) { return bool1 } val bool2: Boolean = HTStackSlotHelper.canInsertStack(extraSlot, input, level, recipe::assembleExtraItem) @@ -68,7 +68,7 @@ class HTCuttingMachineBlockEntity(pos: BlockPos, state: BlockState) : // 実際にアウトプットに搬出する val access: RegistryAccess = level.registryAccess() outputSlot.insert(recipe.assembleItem(input, access), HTStorageAction.EXECUTE, HTStorageAccess.INTERNAL) - if (!hasUpgrade(RagiumItems.PRIMARY_ONLY_UPGRADE)) { + if (!machineUpgrade.hasUpgrade(RagiumItems.PRIMARY_ONLY_UPGRADE)) { extraSlot.insert(recipe.assembleExtraItem(input, access), HTStorageAction.EXECUTE, HTStorageAccess.INTERNAL) } // インプットを減らす 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 ae95045e0..367cd08dc 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 @@ -48,7 +48,7 @@ class HTMultiSmelterBlockEntity(pos: BlockPos, state: BlockState) : } } - private fun getMaxParallel(): Int = when (getMaxMachineTier()) { + private fun getMaxParallel(): Int = when (machineUpgrade.getMaxMachineTier()) { HTBaseTier.BASIC -> 2 HTBaseTier.ADVANCED -> 4 HTBaseTier.ELITE -> 8 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 10263b1b5..494469af6 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 @@ -109,8 +109,8 @@ abstract class HTProcessorBlockEntity(blockHolder: Ho * 指定された[recipe]から,レシピに必要なエネルギー量を取得します。 */ protected fun getRequiredEnergy(recipe: RECIPE): Int { - battery.currentEnergyPerTick = modifyValue(HTMachineUpgrade.Key.ENERGY_EFFICIENCY) { battery.baseEnergyPerTick / it } - val time: Int = modifyValue(HTMachineUpgrade.Key.SPEED) { getRecipeTime(recipe) / it } + battery.currentEnergyPerTick = machineUpgrade.modifyValue(HTMachineUpgrade.Key.ENERGY_EFFICIENCY) { battery.baseEnergyPerTick / it } + val time: Int = machineUpgrade.modifyValue(HTMachineUpgrade.Key.SPEED) { getRecipeTime(recipe) / it } return battery.currentEnergyPerTick * time } 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 7fe5fad2c..54de75b26 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 @@ -33,14 +33,14 @@ abstract class HTAbstractCrusherBlockEntity(blockHolder: Holder, pos: Blo final override fun createTank(listener: HTContentListener): HTBasicFluidTank = HTVariableFluidTank.input( listener, blockHolder.getFluidAttribute().getInputTank(), - canInsert = { hasUpgrade(RagiumItems.EFFICIENT_CRUSH_UPGRADE) }, + canInsert = { machineUpgrade.hasUpgrade(RagiumItems.EFFICIENT_CRUSH_UPGRADE) }, filter = RagiumFluidContents.LUBRICANT::isOf, ) // Ticking // final override fun getRecipeTime(recipe: HTSingleExtraItemRecipe): Int { - val bool1: Boolean = hasUpgrade(RagiumItems.EFFICIENT_CRUSH_UPGRADE) + val bool1: Boolean = machineUpgrade.hasUpgrade(RagiumItems.EFFICIENT_CRUSH_UPGRADE) val bool2: Boolean = HTStackSlotHelper.canShrinkStack(inputTank, RagiumConst.LUBRICANT_CONSUME, true) val modifier: Fraction = when (bool1 && bool2) { true -> Fraction.THREE_QUARTERS @@ -61,7 +61,7 @@ abstract class HTAbstractCrusherBlockEntity(blockHolder: Holder, pos: Blo // インプットを減らす inputSlot.extract(recipe.getRequiredCount(), HTStorageAction.EXECUTE, HTStorageAccess.INTERNAL) // 潤滑油があれば減らす - if (hasUpgrade(RagiumItems.EFFICIENT_CRUSH_UPGRADE)) { + if (machineUpgrade.hasUpgrade(RagiumItems.EFFICIENT_CRUSH_UPGRADE)) { inputTank.extract(RagiumConst.LUBRICANT_CONSUME, HTStorageAction.EXECUTE, HTStorageAccess.INTERNAL) } // SEを鳴らす diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTCrateBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTCrateBlockEntity.kt index b63d1a156..6a6a5a5f7 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTCrateBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTCrateBlockEntity.kt @@ -1,7 +1,6 @@ package hiiragi283.ragium.common.block.entity.storage import hiiragi283.ragium.api.block.attribute.getAttributeTier -import hiiragi283.ragium.api.item.component.HTItemContents import hiiragi283.ragium.api.stack.ImmutableItemStack import hiiragi283.ragium.api.storage.holder.HTSlotInfo import hiiragi283.ragium.api.storage.item.HTItemSlot @@ -11,17 +10,14 @@ import hiiragi283.ragium.common.storage.holder.HTBasicItemSlotHolder import hiiragi283.ragium.common.storage.item.slot.HTBasicItemSlot import hiiragi283.ragium.common.storage.item.slot.HTVariableItemSlot import hiiragi283.ragium.common.tier.HTCrateTier -import hiiragi283.ragium.setup.RagiumDataComponents import hiiragi283.ragium.util.HTEnchantmentHelper import hiiragi283.ragium.util.HTStackSlotHelper import net.minecraft.core.BlockPos import net.minecraft.core.Holder -import net.minecraft.core.component.DataComponentMap import net.minecraft.server.level.ServerLevel import net.minecraft.world.level.Level import net.minecraft.world.level.block.Block import net.minecraft.world.level.block.state.BlockState -import java.util.function.Consumer class HTCrateBlockEntity(blockHolder: Holder, pos: BlockPos, state: BlockState) : HTConfigurableBlockEntity(blockHolder, pos, state) { @@ -44,21 +40,7 @@ class HTCrateBlockEntity(blockHolder: Holder, pos: BlockPos, state: Block ) } - override fun collectItemDrops(consumer: Consumer) {} - override fun getComparatorOutput(state: BlockState, level: Level, pos: BlockPos): Int = HTStackSlotHelper.calculateRedstoneLevel(slot) - // Save & Read // - - override fun applyImplicitComponents(componentInput: DataComponentInput) { - super.applyImplicitComponents(componentInput) - componentInput.get(RagiumDataComponents.ITEM_CONTENT)?.getOrNull(0)?.let(slot::setStackUnchecked) - } - - override fun collectImplicitComponents(components: DataComponentMap.Builder) { - super.collectImplicitComponents(components) - components.set(RagiumDataComponents.ITEM_CONTENT, HTItemContents.of(slot.getStack())) - } - override fun onUpdateServer(level: ServerLevel, pos: BlockPos, state: BlockState): Boolean = false } diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTDrumBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTDrumBlockEntity.kt index 6343ca2d4..ac6713076 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTDrumBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTDrumBlockEntity.kt @@ -9,16 +9,13 @@ import hiiragi283.ragium.common.storage.fluid.tank.HTBasicFluidTank import hiiragi283.ragium.common.storage.holder.HTBasicFluidTankHolder import hiiragi283.ragium.common.storage.holder.HTBasicItemSlotHolder import hiiragi283.ragium.common.storage.item.slot.HTBasicItemSlot -import hiiragi283.ragium.setup.RagiumDataComponents import hiiragi283.ragium.util.HTStackSlotHelper import net.minecraft.core.BlockPos import net.minecraft.core.Holder -import net.minecraft.core.component.DataComponentMap import net.minecraft.server.level.ServerLevel import net.minecraft.world.level.Level import net.minecraft.world.level.block.Block import net.minecraft.world.level.block.state.BlockState -import net.minecraft.world.phys.Vec3 abstract class HTDrumBlockEntity(blockHolder: Holder, pos: BlockPos, state: BlockState) : HTConfigurableBlockEntity(blockHolder, pos, state) { @@ -50,22 +47,6 @@ abstract class HTDrumBlockEntity(blockHolder: Holder, pos: BlockPos, stat override fun getComparatorOutput(state: BlockState, level: Level, pos: BlockPos): Int = HTStackSlotHelper.calculateRedstoneLevel(tank) - override fun collectFluidDrops(level: Level, pos: Vec3) {} - - // Save & Read // - - override fun applyImplicitComponents(componentInput: DataComponentInput) { - super.applyImplicitComponents(componentInput) - componentInput - .get(RagiumDataComponents.FLUID_CONTENT) - .let(tank::setStackUnchecked) - } - - override fun collectImplicitComponents(components: DataComponentMap.Builder) { - super.collectImplicitComponents(components) - components.set(RagiumDataComponents.FLUID_CONTENT, tank.getStack()) - } - // Ticking // override fun onUpdateServer(level: ServerLevel, pos: BlockPos, state: BlockState): Boolean = diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/storage/HTCrateBlock.kt b/src/main/kotlin/hiiragi283/ragium/common/block/storage/HTCrateBlock.kt index d19c561d8..713e32d6d 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/storage/HTCrateBlock.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/storage/HTCrateBlock.kt @@ -18,10 +18,8 @@ import net.minecraft.world.ItemInteractionResult import net.minecraft.world.entity.player.Player import net.minecraft.world.item.ItemStack import net.minecraft.world.level.Level -import net.minecraft.world.level.LevelReader import net.minecraft.world.level.block.state.BlockState import net.minecraft.world.phys.BlockHitResult -import net.minecraft.world.phys.HitResult class HTCrateBlock(tier: HTCrateTier, properties: Properties) : HTTypedEntityBlock(tier.getBlockType(), properties) { override fun useItemOn( @@ -51,18 +49,6 @@ class HTCrateBlock(tier: HTCrateTier, properties: Properties) : HTTypedEntityBlo return super.useItemOn(stack, state, level, pos, player, hand, hitResult) } - override fun getCloneItemStack( - state: BlockState, - target: HitResult, - level: LevelReader, - pos: BlockPos, - player: Player, - ): ItemStack { - val stack: ItemStack = super.getCloneItemStack(state, target, level, pos, player) - level.getBlockEntity(pos)?.collectComponents()?.let(stack::applyComponents) - return stack - } - override fun attack( state: BlockState, level: Level, diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/storage/HTDrumBlock.kt b/src/main/kotlin/hiiragi283/ragium/common/block/storage/HTDrumBlock.kt index e187c2c4b..a4b3427de 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/storage/HTDrumBlock.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/storage/HTDrumBlock.kt @@ -2,23 +2,5 @@ package hiiragi283.ragium.common.block.storage import hiiragi283.ragium.api.block.type.HTEntityBlockType import hiiragi283.ragium.common.block.HTTypedEntityBlock -import net.minecraft.core.BlockPos -import net.minecraft.world.entity.player.Player -import net.minecraft.world.item.ItemStack -import net.minecraft.world.level.LevelReader -import net.minecraft.world.level.block.state.BlockState -import net.minecraft.world.phys.HitResult -class HTDrumBlock(type: HTEntityBlockType, properties: Properties) : HTTypedEntityBlock(type, properties) { - override fun getCloneItemStack( - state: BlockState, - target: HitResult, - level: LevelReader, - pos: BlockPos, - player: Player, - ): ItemStack { - val stack: ItemStack = super.getCloneItemStack(state, target, level, pos, player) - level.getBlockEntity(pos)?.collectComponents()?.let(stack::applyComponents) - return stack - } -} +class HTDrumBlock(type: HTEntityBlockType, properties: Properties) : HTTypedEntityBlock(type, properties) diff --git a/src/main/kotlin/hiiragi283/ragium/common/entity/vehicle/HTMinecart.kt b/src/main/kotlin/hiiragi283/ragium/common/entity/vehicle/HTMinecart.kt index 6932a5331..f4568b49e 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/entity/vehicle/HTMinecart.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/entity/vehicle/HTMinecart.kt @@ -1,6 +1,5 @@ package hiiragi283.ragium.common.entity.vehicle -import hiiragi283.ragium.api.stack.ImmutableItemStack import hiiragi283.ragium.api.storage.HTHandlerProvider import hiiragi283.ragium.common.block.entity.HTBlockEntity import net.minecraft.core.Direction @@ -69,10 +68,6 @@ abstract class HTMinecart : result.set(DataComponents.CUSTOM_NAME, this.customName) } this.spawnAtLocation(result) - bindBlockEntity().collectItemDrops { stack: ImmutableItemStack -> - this.spawnAtLocation(stack.unwrap()) - } - bindBlockEntity().collectFluidDrops(level(), position()) } } diff --git a/src/main/kotlin/hiiragi283/ragium/common/inventory/container/HTBlockEntityContainerMenu.kt b/src/main/kotlin/hiiragi283/ragium/common/inventory/container/HTBlockEntityContainerMenu.kt index 490620906..0a6b8a3e9 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/inventory/container/HTBlockEntityContainerMenu.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/inventory/container/HTBlockEntityContainerMenu.kt @@ -23,7 +23,7 @@ open class HTBlockEntityContainerMenu( // block entity slots addSlots(context) if (context is HTMachineBlockEntity) { - addSlots(context.upgradeSlots) + addSlots(context.machineUpgrade.upgradeSlots) } // player inventory addPlayerInv(inventory) diff --git a/src/main/kotlin/hiiragi283/ragium/common/item/block/HTCrateBlockItem.kt b/src/main/kotlin/hiiragi283/ragium/common/item/block/HTCrateBlockItem.kt index 62bdeda8b..10e9d74cc 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/item/block/HTCrateBlockItem.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/item/block/HTCrateBlockItem.kt @@ -17,6 +17,10 @@ class HTCrateBlockItem(block: HTCrateBlock, properties: Properties) : HTDescript override fun onDestroyed(itemEntity: ItemEntity, damageSource: DamageSource) { val stack: ItemStack = itemEntity.item val contents: HTItemContents = stack.get(RagiumDataComponents.ITEM_CONTENT) ?: return - contents.filterNotNull().map(ImmutableItemStack::unwrap).forEach(itemEntity::spawnAtLocation) + contents + .asSequence() + .filterNotNull() + .map(ImmutableItemStack::unwrap) + .forEach(itemEntity::spawnAtLocation) } } diff --git a/src/main/kotlin/hiiragi283/ragium/common/storage/HTCapabilityCodec.kt b/src/main/kotlin/hiiragi283/ragium/common/storage/HTCapabilityCodec.kt index e46bc6296..bcbbac22c 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/storage/HTCapabilityCodec.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/storage/HTCapabilityCodec.kt @@ -2,6 +2,8 @@ package hiiragi283.ragium.common.storage import hiiragi283.ragium.api.RagiumConst import hiiragi283.ragium.api.function.andThen +import hiiragi283.ragium.api.item.component.HTFluidContents +import hiiragi283.ragium.api.item.component.HTItemContents import hiiragi283.ragium.api.serialization.value.HTValueInput import hiiragi283.ragium.api.serialization.value.HTValueOutput import hiiragi283.ragium.api.serialization.value.HTValueSerializable @@ -9,44 +11,59 @@ import hiiragi283.ragium.api.storage.energy.HTEnergyBattery import hiiragi283.ragium.api.storage.fluid.HTFluidTank import hiiragi283.ragium.api.storage.item.HTItemSlot import hiiragi283.ragium.common.block.entity.HTBlockEntity +import hiiragi283.ragium.setup.RagiumDataComponents import net.minecraft.core.Direction +import net.minecraft.core.component.DataComponentMap +import net.minecraft.core.component.DataComponentType /** * @see mekanism.common.attachments.containers.ContainerType */ -class HTCapabilityCodec( +class HTCapabilityCodec( + private val component: DataComponentType, private val containerTag: String, private val containerKey: String, private val blockEntityGetter: (HTBlockEntity, Direction?) -> List, private val canHandle: (HTBlockEntity) -> Boolean, + private val copyTo: (HTBlockEntity, List, COMPONENT) -> Unit, + private val copyFrom: (HTBlockEntity, List) -> COMPONENT?, ) { companion object { @JvmField - val ITEM: HTCapabilityCodec = HTCapabilityCodec( + val ITEM: HTCapabilityCodec = HTCapabilityCodec( + RagiumDataComponents.ITEM_CONTENT, RagiumConst.ITEMS, RagiumConst.SLOT, HTBlockEntity::getItemSlots, HTBlockEntity::hasItemHandler, + HTBlockEntity::applyItemSlots, + HTBlockEntity::collectItemSlots, ) @JvmField - val ENERGY: HTCapabilityCodec = HTCapabilityCodec( + val ENERGY: HTCapabilityCodec = HTCapabilityCodec( + RagiumDataComponents.ENERGY, RagiumConst.BATTERIES, RagiumConst.SLOT, HTBlockEntity::getEnergyBattery.andThen(::listOfNotNull), HTBlockEntity::hasEnergyStorage, + HTBlockEntity::applyEnergyBattery, + HTBlockEntity::collectEnergyBattery, ) @JvmField - val FLUID: HTCapabilityCodec = HTCapabilityCodec( + val FLUID: HTCapabilityCodec = HTCapabilityCodec( + RagiumDataComponents.FLUID_CONTENT, RagiumConst.FLUIDS, RagiumConst.TANK, HTBlockEntity::getFluidTanks, HTBlockEntity::hasFluidHandler, + HTBlockEntity::applyFluidTanks, + HTBlockEntity::collectFluidTanks, ) @JvmField - val TYPES: List> = listOf(ITEM, ENERGY, FLUID) + val TYPES: List> = listOf(ITEM, ENERGY, FLUID) } // Save & Read // @@ -89,6 +106,25 @@ class HTCapabilityCodec( } } + /** + * @see mekanism.common.attachments.containers.ContainerType.copyToTile + */ + fun copyTo(blockEntity: HTBlockEntity, getter: (DataComponentType) -> COMPONENT?) { + val component: COMPONENT = getter(this.component) ?: return + copyTo(blockEntity, getContainers(blockEntity), component) + } + + /** + * @see mekanism.common.attachments.containers.ContainerType.copyFromTile + */ + fun copyFrom(blockEntity: HTBlockEntity, builder: DataComponentMap.Builder) { + val containers: List = getContainers(blockEntity) + if (!containers.isEmpty()) { + val component: COMPONENT = copyFrom(blockEntity, containers) ?: return + builder.set(this.component, component) + } + } + fun getContainers(blockEntity: HTBlockEntity): List = blockEntityGetter(blockEntity, null) fun canHandle(blockEntity: HTBlockEntity): Boolean = canHandle.invoke(blockEntity) diff --git a/src/main/kotlin/hiiragi283/ragium/common/storage/energy/battery/HTMachineEnergyBattery.kt b/src/main/kotlin/hiiragi283/ragium/common/storage/energy/battery/HTMachineEnergyBattery.kt index 5ae4a3df7..8881b41ec 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/storage/energy/battery/HTMachineEnergyBattery.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/storage/energy/battery/HTMachineEnergyBattery.kt @@ -44,7 +44,8 @@ sealed class HTMachineEnergyBattery( var currentEnergyPerTick: Int = this.baseEnergyPerTick - override fun getCapacity(): Int = blockEntity.modifyValue(HTMachineUpgrade.Key.ENERGY_CAPACITY) { getBaseCapacity() * it } + override fun getCapacity(): Int = + blockEntity.machineUpgrade.modifyValue(HTMachineUpgrade.Key.ENERGY_CAPACITY) { getBaseCapacity() * it } fun getBaseCapacity(): Int = super.getCapacity() diff --git a/src/main/kotlin/hiiragi283/ragium/common/storage/fluid/tank/HTComponentFluidTank.kt b/src/main/kotlin/hiiragi283/ragium/common/storage/fluid/tank/HTComponentFluidTank.kt index 3de6dc1d4..abbee2ece 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/storage/fluid/tank/HTComponentFluidTank.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/storage/fluid/tank/HTComponentFluidTank.kt @@ -1,14 +1,18 @@ package hiiragi283.ragium.common.storage.fluid.tank import hiiragi283.ragium.api.function.HTPredicates +import hiiragi283.ragium.api.item.component.HTFluidContents +import hiiragi283.ragium.api.item.component.HTStackContents import hiiragi283.ragium.api.serialization.value.HTValueSerializable import hiiragi283.ragium.api.stack.ImmutableFluidStack import hiiragi283.ragium.api.storage.HTStorageAccess import hiiragi283.ragium.api.storage.fluid.HTFluidTank import hiiragi283.ragium.api.util.HTContentListener +import hiiragi283.ragium.api.util.wrapOptional import hiiragi283.ragium.setup.RagiumDataComponents import net.minecraft.core.component.DataComponentType import net.minecraft.world.item.ItemStack +import java.util.Optional import java.util.function.BiPredicate import java.util.function.Predicate @@ -17,6 +21,7 @@ import java.util.function.Predicate */ open class HTComponentFluidTank( protected val parent: ItemStack, + private val slot: Int, private val capacity: Int, private val canExtract: BiPredicate, private val canInsert: BiPredicate, @@ -28,14 +33,17 @@ open class HTComponentFluidTank( @JvmStatic fun create( parent: ItemStack, + slot: Int, capacity: Int, canExtract: BiPredicate = HTPredicates.alwaysTrueBi(), canInsert: BiPredicate = HTPredicates.alwaysTrueBi(), filter: Predicate = HTPredicates.alwaysTrue(), - ): HTComponentFluidTank = HTComponentFluidTank(parent, capacity, canExtract, canInsert, filter) + ): HTComponentFluidTank = HTComponentFluidTank(parent, slot, capacity, canExtract, canInsert, filter) } - protected val component: DataComponentType get() = RagiumDataComponents.FLUID_CONTENT + protected val component: DataComponentType get() = RagiumDataComponents.FLUID_CONTENT + + protected fun getContents(): HTFluidContents? = parent.get(component) final override fun isValid(stack: ImmutableFluidStack): Boolean = this.filter.test(stack) @@ -45,12 +53,19 @@ open class HTComponentFluidTank( final override fun canStackExtract(stack: ImmutableFluidStack, access: HTStorageAccess): Boolean = super.canStackExtract(stack, access) && this.canExtract.test(stack, access) - final override fun getStack(): ImmutableFluidStack? = parent.get(component) + final override fun getStack(): ImmutableFluidStack? = getContents()?.getOrNull(slot) override fun getCapacity(stack: ImmutableFluidStack?): Int = capacity final override fun setStack(stack: ImmutableFluidStack?) { - parent.set(component, stack) + val contents: HTFluidContents? = getContents() // TODO + if (contents.isNullOrEmpty()) { + parent.remove(component) + } else { + val items: MutableList> = contents.unwrap() + items[slot] = stack.wrapOptional() + parent.set(component, HTStackContents.fromOptional(items)) + } } override fun updateAmount(stack: ImmutableFluidStack, amount: Int) { diff --git a/src/main/kotlin/hiiragi283/ragium/common/storage/item/slot/HTComponentItemSlot.kt b/src/main/kotlin/hiiragi283/ragium/common/storage/item/slot/HTComponentItemSlot.kt index 7290aa396..7c5b454ef 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/storage/item/slot/HTComponentItemSlot.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/storage/item/slot/HTComponentItemSlot.kt @@ -4,14 +4,17 @@ import hiiragi283.ragium.api.RagiumConst import hiiragi283.ragium.api.function.HTPredicates import hiiragi283.ragium.api.function.andThen import hiiragi283.ragium.api.item.component.HTItemContents +import hiiragi283.ragium.api.item.component.HTStackContents import hiiragi283.ragium.api.serialization.value.HTValueSerializable import hiiragi283.ragium.api.stack.ImmutableItemStack import hiiragi283.ragium.api.storage.HTStorageAccess import hiiragi283.ragium.api.storage.item.HTItemSlot import hiiragi283.ragium.api.util.HTContentListener +import hiiragi283.ragium.api.util.wrapOptional import hiiragi283.ragium.setup.RagiumDataComponents import net.minecraft.core.component.DataComponentType import net.minecraft.world.item.ItemStack +import java.util.Optional import java.util.function.BiPredicate import java.util.function.Predicate @@ -56,12 +59,12 @@ open class HTComponentItemSlot( final override fun setStack(stack: ImmutableItemStack?) { val contents: HTItemContents? = getContents() // TODO - if (contents == null || contents.isEmpty()) { + if (contents.isNullOrEmpty()) { parent.remove(component) } else { - val items: Array = contents.unwrap() - items[slot] = stack - parent.set(component, HTItemContents.of(items)) + val items: MutableList> = contents.unwrap() + items[slot] = stack.wrapOptional() + parent.set(component, HTStackContents.fromOptional(items)) } } diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumDataComponents.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumDataComponents.kt index e4ddd95f1..1674d8a37 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumDataComponents.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumDataComponents.kt @@ -1,12 +1,14 @@ package hiiragi283.ragium.setup import hiiragi283.ragium.api.RagiumAPI +import hiiragi283.ragium.api.item.component.HTFluidContents import hiiragi283.ragium.api.item.component.HTIntrinsicEnchantment import hiiragi283.ragium.api.item.component.HTItemContents import hiiragi283.ragium.api.item.component.HTItemSoundEvent import hiiragi283.ragium.api.item.component.HTLootTicketTargets import hiiragi283.ragium.api.item.component.HTMachineUpgrade import hiiragi283.ragium.api.item.component.HTSpawnerMob +import hiiragi283.ragium.api.item.component.HTStackContents import hiiragi283.ragium.api.item.component.HTTeleportPos import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient import hiiragi283.ragium.api.registry.HTKeyOrTagEntry @@ -16,6 +18,7 @@ import hiiragi283.ragium.api.serialization.codec.BiCodec import hiiragi283.ragium.api.serialization.codec.BiCodecs import hiiragi283.ragium.api.serialization.codec.VanillaBiCodecs import hiiragi283.ragium.api.stack.ImmutableFluidStack +import hiiragi283.ragium.api.stack.ImmutableItemStack import hiiragi283.ragium.api.text.HTSimpleTranslation import hiiragi283.ragium.api.text.HTTranslation import net.minecraft.core.component.DataComponentType @@ -83,6 +86,10 @@ object RagiumDataComponents { @JvmField val MACHINE_UPGRADE: DataComponentType = REGISTER.registerType("machine_upgrade", HTMachineUpgrade.CODEC) + @JvmField + val MACHINE_UPGRADES: DataComponentType = + REGISTER.registerType("machine_upgrades", HTStackContents.codec(ImmutableItemStack.CODEC)) + @JvmField val MACHINE_UPGRADE_FILTER: DataComponentType>> = REGISTER.registerType("machine_upgrade/filter", HTKeyOrTagHelper.INSTANCE.codec(Registries.BLOCK_ENTITY_TYPE)) @@ -93,8 +100,10 @@ object RagiumDataComponents { val ENERGY: DataComponentType = REGISTER.registerType("energy", BiCodecs.NON_NEGATIVE_INT) @JvmField - val FLUID_CONTENT: DataComponentType = REGISTER.registerType("fluid_content", ImmutableFluidStack.CODEC) + val FLUID_CONTENT: DataComponentType = + REGISTER.registerType("fluid_content", HTStackContents.codec(ImmutableFluidStack.CODEC)) @JvmField - val ITEM_CONTENT: DataComponentType = REGISTER.registerType("item_content", HTItemContents.CODEC) + val ITEM_CONTENT: DataComponentType = + REGISTER.registerType("item_content", HTStackContents.codec(ImmutableItemStack.CODEC)) } diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumItems.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumItems.kt index 58881dddc..91e1064fb 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumItems.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumItems.kt @@ -770,7 +770,7 @@ object RagiumItems { event, { stack: ItemStack -> val capacity: Int = HTEnchantmentHelper.processStorageCapacity(null, stack, tier.getDefaultCapacity()) - HTComponentFluidTank.create(stack, capacity) + HTComponentFluidTank.create(stack, 0, capacity) }, block, ) @@ -778,7 +778,7 @@ object RagiumItems { registerFluid( event, { stack: ItemStack -> - HTComponentFluidTank.create(stack, Int.MAX_VALUE, filter = RagiumFluidContents.EXPERIENCE::isOf) + HTComponentFluidTank.create(stack, 0, Int.MAX_VALUE, filter = RagiumFluidContents.EXPERIENCE::isOf) }, RagiumBlocks.EXP_DRUM, ) @@ -787,7 +787,7 @@ object RagiumItems { event, { stack: ItemStack -> val capacity: Int = HTEnchantmentHelper.processStorageCapacity(null, stack, 8000) - HTComponentFluidTank.create(stack, capacity, filter = RagiumFluidContents.DEW_OF_THE_WARP::isOf) + HTComponentFluidTank.create(stack, 0, capacity, filter = RagiumFluidContents.DEW_OF_THE_WARP::isOf) }, TELEPORT_KEY, ) From f082c7a5f0dffd0e7c2b7894db69b6f872c5c0d0 Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Thu, 11 Dec 2025 14:38:37 +0900 Subject: [PATCH 24/49] feat: support machine upgrade for fluid capacity --- .../block/attribute/HTFluidBlockAttribute.kt | 16 +- .../block/entity/HTBlockEntityWithUpgrade.kt | 60 +++++++ .../api/item/component/HTMachineUpgrade.kt | 18 +-- .../ragium/api/tag/RagiumModTags.kt | 3 - .../data/client/RagiumEnglishProvider.kt | 5 +- .../data/client/RagiumJapaneseProvider.kt | 5 +- .../bootstrap/RagiumEnchantmentProvider.kt | 16 -- .../recipe/RagiumEnchantingRecipeProvider.kt | 2 - .../tag/RagiumEnchantmentTagsProvider.kt | 10 +- .../data/server/tag/RagiumItemTagsProvider.kt | 8 - .../HTBlockMachinePropertiesProvider.kt | 5 +- .../hiiragi283/ragium/client/RagiumClient.kt | 2 +- .../gui/screen/processor/HTCrusherScreen.kt | 2 +- .../client/model/HTFuelGeneratorModel.kt | 2 +- .../block/entity/ExtendedBlockEntity.kt | 6 - .../common/block/entity/HTBlockEntity.kt | 38 ++++- .../block/entity/HTMachineBlockEntity.kt | 17 +- .../block/entity/HTMachineUpgradeComponent.kt | 149 ------------------ .../block/entity/HTUpgradableBlockEntity.kt | 31 ++++ .../component/HTBlockEntityComponent.kt | 11 ++ .../component/HTMachineUpgradeComponent.kt | 100 ++++++++++++ .../device/HTFluidCollectorBlockEntity.kt | 2 +- .../device/HTItemCollectorBlockEntity.kt | 4 +- .../HTCombustionGeneratorBlockEntity.kt | 4 +- .../HTMagmaticGeneratorBlockEntity.kt | 2 +- .../HTSolarPanelControllerBlockEntity.kt | 2 +- .../base/HTFuelGeneratorBlockEntity.kt | 3 +- .../processor/HTAdvancedMixerBlockEntity.kt | 4 +- .../entity/processor/HTCrusherBlockEntity.kt | 4 +- .../processor/HTCuttingMachineBlockEntity.kt | 4 +- .../entity/processor/HTMelterBlockEntity.kt | 2 +- .../entity/processor/HTMixerBlockEntity.kt | 2 +- .../processor/HTMobCrusherBlockEntity.kt | 2 +- .../processor/HTMultiSmelterBlockEntity.kt | 2 +- .../processor/HTProcessorBlockEntity.kt | 4 +- .../entity/processor/HTRefineryBlockEntity.kt | 4 +- .../base/HTAbstractCombinerBlockEntity.kt | 2 +- .../base/HTAbstractCrusherBlockEntity.kt | 8 +- .../processor/base/HTComplexBlockEntity.kt | 2 +- .../entity/storage/HTCrateBlockEntity.kt | 4 +- .../block/entity/storage/HTDrumBlockEntity.kt | 4 +- .../entity/storage/HTTieredDrumBlockEntity.kt | 6 +- .../energy/battery/HTMachineEnergyBattery.kt | 3 +- .../setup/RagiumEnchantmentComponents.kt | 3 - .../ragium/setup/RagiumEnchantments.kt | 3 - .../hiiragi283/ragium/setup/RagiumItems.kt | 9 +- .../ragium/util/HTEnchantmentHelper.kt | 56 ------- 47 files changed, 300 insertions(+), 351 deletions(-) create mode 100644 src/api/kotlin/hiiragi283/ragium/api/block/entity/HTBlockEntityWithUpgrade.kt delete mode 100644 src/main/kotlin/hiiragi283/ragium/common/block/entity/HTMachineUpgradeComponent.kt create mode 100644 src/main/kotlin/hiiragi283/ragium/common/block/entity/HTUpgradableBlockEntity.kt create mode 100644 src/main/kotlin/hiiragi283/ragium/common/block/entity/component/HTBlockEntityComponent.kt create mode 100644 src/main/kotlin/hiiragi283/ragium/common/block/entity/component/HTMachineUpgradeComponent.kt diff --git a/src/api/kotlin/hiiragi283/ragium/api/block/attribute/HTFluidBlockAttribute.kt b/src/api/kotlin/hiiragi283/ragium/api/block/attribute/HTFluidBlockAttribute.kt index 78b1959c9..3ee4725f3 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/block/attribute/HTFluidBlockAttribute.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/block/attribute/HTFluidBlockAttribute.kt @@ -1,6 +1,9 @@ package hiiragi283.ragium.api.block.attribute import hiiragi283.ragium.api.RagiumAPI +import hiiragi283.ragium.api.block.entity.HTBlockEntityWithUpgrade +import hiiragi283.ragium.api.item.component.HTMachineUpgrade +import hiiragi283.ragium.api.math.times import hiiragi283.ragium.api.text.HTHasTranslationKey import net.minecraft.Util import net.minecraft.util.StringRepresentable @@ -8,15 +11,18 @@ import java.util.function.IntSupplier @JvmRecord data class HTFluidBlockAttribute(private val tankMap: Map) : HTBlockAttribute { - private fun getTankCapacity(type: TankType): IntSupplier = tankMap[type] ?: error("Undefined tank capacity for ${type.serializedName}") + private fun getTankCapacity(type: TankType, upgrade: HTBlockEntityWithUpgrade): IntSupplier { + val baseCapacity: IntSupplier = tankMap[type] ?: error("Undefined tank capacity for ${type.serializedName}") + return IntSupplier { upgrade.modifyValue(HTMachineUpgrade.Key.FLUID_CAPACITY) { baseCapacity.asInt * it } } + } - fun getInputTank(): IntSupplier = getTankCapacity(TankType.INPUT) + fun getInputTank(upgrade: HTBlockEntityWithUpgrade): IntSupplier = getTankCapacity(TankType.INPUT, upgrade) - fun getOutputTank(): IntSupplier = getTankCapacity(TankType.OUTPUT) + fun getOutputTank(upgrade: HTBlockEntityWithUpgrade): IntSupplier = getTankCapacity(TankType.OUTPUT, upgrade) - fun getFirstInputTank(): IntSupplier = getTankCapacity(TankType.FIRST_INPUT) + fun getFirstInputTank(upgrade: HTBlockEntityWithUpgrade): IntSupplier = getTankCapacity(TankType.FIRST_INPUT, upgrade) - fun getSecondInputTank(): IntSupplier = getTankCapacity(TankType.SECOND_INPUT) + fun getSecondInputTank(upgrade: HTBlockEntityWithUpgrade): IntSupplier = getTankCapacity(TankType.SECOND_INPUT, upgrade) enum class TankType : StringRepresentable, diff --git a/src/api/kotlin/hiiragi283/ragium/api/block/entity/HTBlockEntityWithUpgrade.kt b/src/api/kotlin/hiiragi283/ragium/api/block/entity/HTBlockEntityWithUpgrade.kt new file mode 100644 index 000000000..92b2e0cf2 --- /dev/null +++ b/src/api/kotlin/hiiragi283/ragium/api/block/entity/HTBlockEntityWithUpgrade.kt @@ -0,0 +1,60 @@ +package hiiragi283.ragium.api.block.entity + +import com.mojang.datafixers.util.Either +import hiiragi283.ragium.api.function.identity +import hiiragi283.ragium.api.item.component.HTMachineUpgrade +import hiiragi283.ragium.api.math.times +import hiiragi283.ragium.api.tier.HTBaseTier +import net.minecraft.world.item.ItemStack +import net.minecraft.world.level.ItemLike +import org.apache.commons.lang3.math.Fraction +import java.util.function.UnaryOperator + +interface HTBlockEntityWithUpgrade { + /** + * 指定した[item]を保持しているかどうか判定します。 + */ + fun hasUpgrade(item: ItemLike): Boolean + + /** + * 現在保持しているアップグレードの一覧を返します。。 + */ + fun getMachineUpgrades(): List> + + fun canApplyUpgrade(stack: ItemStack): Boolean + + /** + * アップグレードスロットから機械の最大のティアを返します。 + * @return ティアが見つからない場合は`null` + */ + fun getMaxMachineTier(): HTBaseTier? = getMachineUpgrades() + .mapNotNull { (upgrade: HTMachineUpgrade, _) -> upgrade.getBaseTier() } + .maxOrNull() + + fun collectAllModifier(): Map = HTMachineUpgrade.Key.entries.associateWith(::collectModifier) + + fun collectModifier(key: HTMachineUpgrade.Key): Fraction { + var result: Fraction = Fraction.ONE + for ((upgrade: HTMachineUpgrade, count: Int) in getMachineUpgrades()) { + if (upgrade.getBaseTier() == HTBaseTier.CREATIVE) continue + val multiplier: Fraction = upgrade.getProperty(key) ?: continue + result *= (multiplier * count) + } + return result + } + + fun calculateValue(key: HTMachineUpgrade.Key): Either { + var result: Fraction = Fraction.ONE + for ((upgrade: HTMachineUpgrade, count: Int) in getMachineUpgrades()) { + if (upgrade.getBaseTier() == HTBaseTier.CREATIVE) { + return Either.left(key.creativeValue) + } + val multiplier: Fraction = upgrade.getProperty(key) ?: continue + result *= (multiplier * count) + } + return Either.right(result) + } + + fun modifyValue(key: HTMachineUpgrade.Key, factory: UnaryOperator): Int = + calculateValue(key).map(identity()) { factory.apply(it).toInt() } +} diff --git a/src/api/kotlin/hiiragi283/ragium/api/item/component/HTMachineUpgrade.kt b/src/api/kotlin/hiiragi283/ragium/api/item/component/HTMachineUpgrade.kt index 33f534d98..315838aa0 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/item/component/HTMachineUpgrade.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/item/component/HTMachineUpgrade.kt @@ -81,15 +81,11 @@ sealed interface HTMachineUpgrade { override fun getBaseTier(): HTBaseTier = tier - override fun getProperty(key: Key): Fraction? = when (key) { - Key.SPEED, Key.ENERGY_CAPACITY, Key.ENERGY_GENERATION, Key.ENERGY_EFFICIENCY -> when (tier) { - HTBaseTier.BASIC -> Fraction.ONE - HTBaseTier.ADVANCED -> Fraction.getFraction(2, 1) - HTBaseTier.ELITE -> Fraction.getFraction(3, 1) - HTBaseTier.ULTIMATE -> Fraction.getFraction(4, 1) - else -> null - } - + override fun getProperty(key: Key): Fraction? = when (tier) { + HTBaseTier.BASIC -> Fraction.ONE + HTBaseTier.ADVANCED -> Fraction.getFraction(2, 1) + HTBaseTier.ELITE -> Fraction.getFraction(3, 1) + HTBaseTier.ULTIMATE -> Fraction.getFraction(4, 1) else -> null } @@ -123,10 +119,8 @@ sealed interface HTMachineUpgrade { ENERGY_CAPACITY(Int.MAX_VALUE), ENERGY_EFFICIENCY(0), ENERGY_GENERATION(Int.MAX_VALUE), + FLUID_CAPACITY(Int.MAX_VALUE), SPEED(1), - - // Processor - SUBPRODUCT_CHANCE(1), ; companion object { diff --git a/src/api/kotlin/hiiragi283/ragium/api/tag/RagiumModTags.kt b/src/api/kotlin/hiiragi283/ragium/api/tag/RagiumModTags.kt index 83048f303..73dba5e9c 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/tag/RagiumModTags.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/tag/RagiumModTags.kt @@ -139,9 +139,6 @@ object RagiumModTags { val RAW_MEAT: TagKey = create("raw_meat") // Enchantments - @JvmField - val CAPACITY_ENCHANTABLE: TagKey = create("enchantable", "capacity") - @JvmField val RANGE_ENCHANTABLE: TagKey = create("enchantable", "range") diff --git a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt index 6795f895c..9f965d150 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt @@ -181,7 +181,6 @@ class RagiumEnglishProvider(output: PackOutput) : HTLanguageProvider.English(out } private fun enchantment() { - addEnchantment(RagiumEnchantments.CAPACITY, "Capacity", "Increase the capacity of item or fluid storages.") addEnchantment(RagiumEnchantments.RANGE, "Extra Range", "Increase the range of collecting.") addEnchantment(RagiumEnchantments.NOISE_CANCELING, "Noise Canceling", "Increases damage against sculk mobs such as Warden.") @@ -333,7 +332,6 @@ class RagiumEnglishProvider(output: PackOutput) : HTLanguageProvider.English(out add(RagiumModTags.Items.POLYMER_RESIN, "Polymer Resins") add(RagiumModTags.Items.RAW_MEAT, "Raw Meats") - add(RagiumModTags.Items.CAPACITY_ENCHANTABLE, "Capacity Enchantable") add(RagiumModTags.Items.RANGE_ENCHANTABLE, "Range Enchantable") add(RagiumModTags.Items.STRIKE_ENCHANTABLE, "Strike Enchantable") @@ -375,9 +373,8 @@ class RagiumEnglishProvider(output: PackOutput) : HTLanguageProvider.English(out add(HTMachineUpgrade.Key.ENERGY_CAPACITY, $$"- Energy Capacity: %1$s") add(HTMachineUpgrade.Key.ENERGY_EFFICIENCY, $$"- Energy Efficiency: %1$s") add(HTMachineUpgrade.Key.ENERGY_GENERATION, $$"- Energy Generation: %1$s") + add(HTMachineUpgrade.Key.FLUID_CAPACITY, $$"- Fluid Capacity: %1$s") add(HTMachineUpgrade.Key.SPEED, $$"- Speed: %1$s") - - add(HTMachineUpgrade.Key.SUBPRODUCT_CHANCE, $$"- Extra Chance: %1$s") // API - Constants add(RagiumTranslation.ERROR, "Error") add(RagiumTranslation.INFINITE, "Infinite") diff --git a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt index 8d95aac2c..45287616a 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt @@ -172,7 +172,6 @@ class RagiumJapaneseProvider(output: PackOutput) : HTLanguageProvider.Japanese(o } private fun enchantment() { - addEnchantment(RagiumEnchantments.CAPACITY, "容量増加", "アイテムや液体ストレージの容量を拡張します。") addEnchantment(RagiumEnchantments.RANGE, "範囲増加", "収集の範囲を拡張します。") addEnchantment(RagiumEnchantments.NOISE_CANCELING, "ノイズキャンセリング", "ウォーデンなどのスカルク系モンスターに対してのダメージを増加させます。") @@ -335,7 +334,6 @@ class RagiumJapaneseProvider(output: PackOutput) : HTLanguageProvider.Japanese(o add(RagiumModTags.Items.POLYMER_RESIN, "高分子樹脂") add(RagiumModTags.Items.RAW_MEAT, "生肉") - add(RagiumModTags.Items.CAPACITY_ENCHANTABLE, "容量増加をエンチャント可能") add(RagiumModTags.Items.RANGE_ENCHANTABLE, "範囲増加をエンチャント可能") add(RagiumModTags.Items.STRIKE_ENCHANTABLE, "雷撃をエンチャント可能") @@ -377,9 +375,8 @@ class RagiumJapaneseProvider(output: PackOutput) : HTLanguageProvider.Japanese(o add(HTMachineUpgrade.Key.ENERGY_CAPACITY, $$"- エネルギー容量: %1$s") add(HTMachineUpgrade.Key.ENERGY_EFFICIENCY, $$"- エネルギー効率: %1$s") add(HTMachineUpgrade.Key.ENERGY_GENERATION, $$"- エネルギー生産率: %1$s") + add(HTMachineUpgrade.Key.FLUID_CAPACITY, $$"- 液体容量: %1$s") add(HTMachineUpgrade.Key.SPEED, $$"- 処理速度: %1$s") - - add(HTMachineUpgrade.Key.SUBPRODUCT_CHANCE, $$"- 追加のチャンス: %1$s") // API - Constants add(RagiumTranslation.ERROR, "エラー") add(RagiumTranslation.INFINITE, "無限") diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/bootstrap/RagiumEnchantmentProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/bootstrap/RagiumEnchantmentProvider.kt index 8d10f5db8..d0384070d 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/bootstrap/RagiumEnchantmentProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/bootstrap/RagiumEnchantmentProvider.kt @@ -34,22 +34,6 @@ object RagiumEnchantmentProvider : RegistrySetBuilder.RegistryBootstrap = context.lookup(Registries.ENCHANTMENT) val itemLookup: HolderGetter = context.lookup(Registries.ITEM) - register( - context, - RagiumEnchantments.CAPACITY, - Enchantment - .enchantment( - Enchantment.definition( - itemLookup.getOrThrow(RagiumModTags.Items.CAPACITY_ENCHANTABLE), - 2, - 3, - Enchantment.dynamicCost(15, 9), - Enchantment.dynamicCost(65, 9), - 4, - EquipmentSlotGroup.ANY, - ), - ).withSpecialEffect(RagiumEnchantmentComponents.CAPACITY, MultiplyValue(LevelBasedValue.perLevel(2f, 1f))), - ) register( context, RagiumEnchantments.RANGE, diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumEnchantingRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumEnchantingRecipeProvider.kt index 3718aff6a..0dd023e93 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumEnchantingRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumEnchantingRecipeProvider.kt @@ -57,8 +57,6 @@ object RagiumEnchantingRecipeProvider : HTRecipeProvider.Direct() { Enchantments.WIND_BURST, ) // Ragium - enchanting(itemCreator.fromTagKey(Tags.Items.CHESTS_ENDER, 8), RagiumEnchantments.CAPACITY) - enchanting( itemCreator.fromTagKey(CommonMaterialPrefixes.INGOT, RagiumMaterialKeys.DEEP_STEEL, 16), RagiumEnchantments.NOISE_CANCELING, diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/tag/RagiumEnchantmentTagsProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/tag/RagiumEnchantmentTagsProvider.kt index db3c4552b..f5ba813ed 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/tag/RagiumEnchantmentTagsProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/tag/RagiumEnchantmentTagsProvider.kt @@ -9,15 +9,9 @@ import net.minecraft.world.item.enchantment.Enchantment class RagiumEnchantmentTagsProvider(context: HTDataGenContext) : HTTagsProvider(Registries.ENCHANTMENT, context) { override fun addTagsInternal(factory: BuilderFactory) { - factory - .apply(EnchantmentTags.NON_TREASURE) - .add(RagiumEnchantments.CAPACITY) - .add(RagiumEnchantments.RANGE) + factory.apply(EnchantmentTags.NON_TREASURE).add(RagiumEnchantments.RANGE) - factory - .apply(EnchantmentTags.IN_ENCHANTING_TABLE) - .add(RagiumEnchantments.CAPACITY) - .add(RagiumEnchantments.RANGE) + factory.apply(EnchantmentTags.IN_ENCHANTING_TABLE).add(RagiumEnchantments.RANGE) factory .apply(EnchantmentTags.TREASURE) diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/tag/RagiumItemTagsProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/tag/RagiumItemTagsProvider.kt index a7b08b3f3..f2998e06c 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/tag/RagiumItemTagsProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/tag/RagiumItemTagsProvider.kt @@ -256,14 +256,6 @@ class RagiumItemTagsProvider(private val blockTags: CompletableFuture { val collector: HTFluidCollectorBlockEntity? = getter.getTypedBlockEntity(pos) - if (collector != null && collector.machineUpgrade.hasUpgrade(RagiumItems.EXP_COLLECTOR_UPGRADE)) { + if (collector != null && collector.hasUpgrade(RagiumItems.EXP_COLLECTOR_UPGRADE)) { 0x66ff33 } else { BiomeColors.getAverageWaterColor(getter, pos) diff --git a/src/main/kotlin/hiiragi283/ragium/client/gui/screen/processor/HTCrusherScreen.kt b/src/main/kotlin/hiiragi283/ragium/client/gui/screen/processor/HTCrusherScreen.kt index d71979860..01e999b36 100644 --- a/src/main/kotlin/hiiragi283/ragium/client/gui/screen/processor/HTCrusherScreen.kt +++ b/src/main/kotlin/hiiragi283/ragium/client/gui/screen/processor/HTCrusherScreen.kt @@ -21,6 +21,6 @@ class HTCrusherScreen( createFluidSlot(blockEntity.inputTank, HTSlotHelper.getSlotPosX(2), HTSlotHelper.getSlotPosY(2)) override fun updateVisibility() { - fluidWidget.visible = blockEntity.machineUpgrade.hasUpgrade(RagiumItems.EFFICIENT_CRUSH_UPGRADE) + fluidWidget.visible = blockEntity.hasUpgrade(RagiumItems.EFFICIENT_CRUSH_UPGRADE) } } diff --git a/src/main/kotlin/hiiragi283/ragium/client/model/HTFuelGeneratorModel.kt b/src/main/kotlin/hiiragi283/ragium/client/model/HTFuelGeneratorModel.kt index 33dfa8cc5..269c1e78a 100644 --- a/src/main/kotlin/hiiragi283/ragium/client/model/HTFuelGeneratorModel.kt +++ b/src/main/kotlin/hiiragi283/ragium/client/model/HTFuelGeneratorModel.kt @@ -105,7 +105,7 @@ class HTFuelGeneratorModel(modelSet: EntityModelSet) : HTModel(RenderType::entit blockEntity.isActive -> blockEntity.ticks + partialTick else -> 0f } - val speed: Float = (blockEntity.machineUpgrade.collectModifier(HTMachineUpgrade.Key.ENERGY_GENERATION) / 4).toFloat() + val speed: Float = (blockEntity.collectModifier(HTMachineUpgrade.Key.ENERGY_GENERATION) / 4).toFloat() top.y = Mth.sin(time * speed + Mth.HALF_PI) * 4 - 4f bellow.y = min(Mth.sin(time * speed + Mth.HALF_PI) * 4, 0f) diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/ExtendedBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/ExtendedBlockEntity.kt index 37cc9903e..2ead2e6fa 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/ExtendedBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/ExtendedBlockEntity.kt @@ -2,11 +2,9 @@ package hiiragi283.ragium.common.block.entity import hiiragi283.ragium.api.block.entity.HTAbstractBlockEntity import hiiragi283.ragium.api.registry.impl.HTDeferredBlockEntityType -import hiiragi283.ragium.api.serialization.component.HTComponentInput import hiiragi283.ragium.common.network.HTUpdateBlockEntityPacket import net.minecraft.core.BlockPos import net.minecraft.core.HolderLookup -import net.minecraft.core.component.DataComponentType import net.minecraft.nbt.CompoundTag import net.minecraft.network.Connection import net.minecraft.network.RegistryFriendlyByteBuf @@ -67,10 +65,6 @@ abstract class ExtendedBlockEntity(type: HTDeferredBlockEntityType<*>, pos: Bloc onRemove(level, blockPos) } - protected fun wrapComponentInput(input: DataComponentInput): HTComponentInput = object : HTComponentInput { - override fun get(type: DataComponentType): T? = input.get(type) - } - // HTContentListener // protected fun setOnlySave() { diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTBlockEntity.kt index 9fa834bf4..5da0fc383 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTBlockEntity.kt @@ -8,6 +8,7 @@ import hiiragi283.ragium.api.item.component.HTFluidContents import hiiragi283.ragium.api.item.component.HTItemContents import hiiragi283.ragium.api.item.component.HTStackContents import hiiragi283.ragium.api.registry.impl.HTDeferredBlockEntityType +import hiiragi283.ragium.api.serialization.component.HTComponentInput import hiiragi283.ragium.api.serialization.value.HTValueInput import hiiragi283.ragium.api.serialization.value.HTValueOutput import hiiragi283.ragium.api.stack.ImmutableFluidStack @@ -23,6 +24,7 @@ import hiiragi283.ragium.api.storage.holder.HTItemSlotHolder import hiiragi283.ragium.api.storage.item.HTItemHandler import hiiragi283.ragium.api.storage.item.HTItemSlot import hiiragi283.ragium.api.util.HTContentListener +import hiiragi283.ragium.common.block.entity.component.HTBlockEntityComponent import hiiragi283.ragium.common.inventory.HTMenuCallback import hiiragi283.ragium.common.inventory.container.HTContainerMenu import hiiragi283.ragium.common.inventory.slot.HTFluidSyncSlot @@ -40,6 +42,7 @@ import net.minecraft.core.Holder import net.minecraft.core.HolderLookup import net.minecraft.core.UUIDUtil import net.minecraft.core.component.DataComponentMap +import net.minecraft.core.component.DataComponentType import net.minecraft.core.component.DataComponents import net.minecraft.nbt.CompoundTag import net.minecraft.network.chat.Component @@ -124,6 +127,13 @@ abstract class HTBlockEntity(val blockHolder: Holder, pos: BlockPos, stat // Save & Read // + val components: List get() = components1 + private val components1: MutableList = mutableListOf() + + fun addComponent(component: HTBlockEntityComponent) { + components1 += component + } + var enchantment: ItemEnchantments private set @@ -133,6 +143,10 @@ abstract class HTBlockEntity(val blockHolder: Holder, pos: BlockPos, stat } protected open fun writeValue(output: HTValueOutput) { + // Components + for (component: HTBlockEntityComponent in components) { + component.serialize(output) + } // Capability for (type: HTCapabilityCodec<*, *> in HTCapabilityCodec.TYPES) { if (type.canHandle(this)) { @@ -153,6 +167,10 @@ abstract class HTBlockEntity(val blockHolder: Holder, pos: BlockPos, stat } protected open fun readValue(input: HTValueInput) { + // Components + for (component: HTBlockEntityComponent in components) { + component.deserialize(input) + } // Capability for (type: HTCapabilityCodec<*, *> in HTCapabilityCodec.TYPES) { if (type.canHandle(this)) { @@ -169,6 +187,12 @@ abstract class HTBlockEntity(val blockHolder: Holder, pos: BlockPos, stat override fun applyImplicitComponents(componentInput: DataComponentInput) { super.applyImplicitComponents(componentInput) + // Components + for (component: HTBlockEntityComponent in components) { + component.applyComponents(object : HTComponentInput { + override fun get(type: DataComponentType): T? = componentInput.get(type) + }) + } // Capability for (type: HTCapabilityCodec<*, *> in HTCapabilityCodec.TYPES) { if (type.canHandle(this)) { @@ -181,19 +205,23 @@ abstract class HTBlockEntity(val blockHolder: Holder, pos: BlockPos, stat enchantment = componentInput.getOrDefault(DataComponents.ENCHANTMENTS, ItemEnchantments.EMPTY) } - override fun collectImplicitComponents(components: DataComponentMap.Builder) { - super.collectImplicitComponents(components) + override fun collectImplicitComponents(builder: DataComponentMap.Builder) { + super.collectImplicitComponents(builder) + // Components + for (component: HTBlockEntityComponent in components) { + component.collectComponents(builder) + } // Capability for (type: HTCapabilityCodec<*, *> in HTCapabilityCodec.TYPES) { if (type.canHandle(this)) { - type.copyFrom(this, components) + type.copyFrom(this, builder) } } // Custom Name - components.set(DataComponents.CUSTOM_NAME, this.customName) + builder.set(DataComponents.CUSTOM_NAME, this.customName) // Enchantments if (!enchantment.isEmpty) { - components.set(DataComponents.ENCHANTMENTS, enchantment) + builder.set(DataComponents.ENCHANTMENTS, enchantment) } } diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTMachineBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTMachineBlockEntity.kt index 7e7961cf4..289b3e0b0 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTMachineBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTMachineBlockEntity.kt @@ -12,7 +12,6 @@ import hiiragi283.ragium.common.storage.item.slot.HTBasicItemSlot import hiiragi283.ragium.common.storage.item.slot.HTOutputItemSlot import net.minecraft.core.BlockPos import net.minecraft.core.Holder -import net.minecraft.core.component.DataComponentMap import net.minecraft.server.level.ServerLevel import net.minecraft.world.level.block.Block import net.minecraft.world.level.block.state.BlockState @@ -22,7 +21,7 @@ import java.util.function.Predicate * 機械全般に使用される[HTConfigurableBlockEntity]の拡張クラス */ abstract class HTMachineBlockEntity(blockHolder: Holder, pos: BlockPos, state: BlockState) : - HTConfigurableBlockEntity(blockHolder, pos, state) { + HTUpgradableBlockEntity(blockHolder, pos, state) { companion object { // Slot @JvmStatic @@ -56,28 +55,14 @@ abstract class HTMachineBlockEntity(blockHolder: Holder, pos: BlockPos, s // Save & Load // - val machineUpgrade = HTMachineUpgradeComponent(blockHolder, pos, this::getLevel, ::setOnlySave) - override fun writeValue(output: HTValueOutput) { super.writeValue(output) output.putBoolean("is_active", this.isActive) - machineUpgrade.serialize(output) } override fun readValue(input: HTValueInput) { super.readValue(input) this.isActive = input.getBoolean("is_active", false) - machineUpgrade.deserialize(input) - } - - override fun applyImplicitComponents(componentInput: DataComponentInput) { - machineUpgrade.applyComponents(wrapComponentInput(componentInput)) - super.applyImplicitComponents(componentInput) - } - - override fun collectImplicitComponents(components: DataComponentMap.Builder) { - super.collectImplicitComponents(components) - machineUpgrade.collectComponents(components) } // Ticking // diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTMachineUpgradeComponent.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTMachineUpgradeComponent.kt deleted file mode 100644 index 53af3269d..000000000 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTMachineUpgradeComponent.kt +++ /dev/null @@ -1,149 +0,0 @@ -package hiiragi283.ragium.common.block.entity - -import com.mojang.datafixers.util.Either -import hiiragi283.ragium.api.RagiumPlatform -import hiiragi283.ragium.api.function.HTPredicates -import hiiragi283.ragium.api.function.identity -import hiiragi283.ragium.api.item.component.HTItemContents -import hiiragi283.ragium.api.item.component.HTMachineUpgrade -import hiiragi283.ragium.api.item.component.HTStackContents -import hiiragi283.ragium.api.math.times -import hiiragi283.ragium.api.registry.HTKeyOrTagEntry -import hiiragi283.ragium.api.serialization.component.HTComponentInput -import hiiragi283.ragium.api.serialization.component.HTComponentSerializable -import hiiragi283.ragium.api.serialization.value.HTValueInput -import hiiragi283.ragium.api.serialization.value.HTValueOutput -import hiiragi283.ragium.api.serialization.value.HTValueSerializable -import hiiragi283.ragium.api.stack.ImmutableItemStack -import hiiragi283.ragium.api.tier.HTBaseTier -import hiiragi283.ragium.api.util.HTContentListener -import hiiragi283.ragium.api.world.sendBlockUpdated -import hiiragi283.ragium.common.block.entity.HTBlockEntity.Companion.getBlockEntityType -import hiiragi283.ragium.common.inventory.HTSlotHelper -import hiiragi283.ragium.common.storage.HTCapabilityCodec -import hiiragi283.ragium.common.storage.item.slot.HTBasicItemSlot -import hiiragi283.ragium.setup.RagiumDataComponents -import net.minecraft.core.BlockPos -import net.minecraft.core.Holder -import net.minecraft.core.RegistryAccess -import net.minecraft.core.component.DataComponentMap -import net.minecraft.world.item.ItemStack -import net.minecraft.world.level.ItemLike -import net.minecraft.world.level.Level -import net.minecraft.world.level.block.Block -import net.minecraft.world.level.block.entity.BlockEntityType -import org.apache.commons.lang3.math.Fraction -import java.util.function.UnaryOperator - -class HTMachineUpgradeComponent( - private val blockHolder: Holder, - private val pos: BlockPos, - private val levelGetter: () -> Level?, - private val listener: HTContentListener, -) : HTComponentSerializable, - HTValueSerializable { - private val access: RegistryAccess? get() = levelGetter()?.registryAccess() - - val upgradeSlots: List = (0..3).map { i: Int -> - val filter: (ImmutableItemStack) -> Boolean = filter@{ stack: ImmutableItemStack -> - canApplyUpgrade(stack.unwrap()) && !hasUpgrade(stack.value()) - } - HTBasicItemSlot.create( - listener.andThen { levelGetter()?.sendBlockUpdated(pos) }, - HTSlotHelper.getSlotPosX(8), - HTSlotHelper.getSlotPosY(i - 0.5), - canExtract = HTPredicates.manualOnly(), - canInsert = HTPredicates.manualOnly(), - filter = filter, - ) - } - - /** - * 指定した[item]を保持しているかどうか判定します。 - */ - fun hasUpgrade(item: ItemLike): Boolean = upgradeSlots.any { slot: HTBasicItemSlot -> - slot.getStack()?.isOf(item.asItem()) ?: false - } - - /** - * 現在保持しているアップグレードの一覧を返します。。 - */ - fun getMachineUpgrades(): List> = upgradeSlots.mapNotNull { slot: HTBasicItemSlot -> - val upgrade: HTMachineUpgrade = slot - .getStack() - ?.unwrap() - ?.let { RagiumPlatform.INSTANCE.getMachineUpgrade(access, it) } - ?: return@mapNotNull null - upgrade to slot.getAmount() - } - - fun canApplyUpgrade(stack: ItemStack): Boolean { - if (RagiumPlatform.INSTANCE.getMachineUpgrade(access, stack) == null) return false - val filter: HTKeyOrTagEntry> = stack.get(RagiumDataComponents.MACHINE_UPGRADE_FILTER) ?: return true - return filter.isOf(getBlockEntityType(this.blockHolder)) - } - - /** - * アップグレードスロットから機械の最大のティアを返します。 - * @return ティアが見つからない場合は`null` - */ - fun getMaxMachineTier(): HTBaseTier? = getMachineUpgrades() - .mapNotNull { (upgrade: HTMachineUpgrade, _) -> upgrade.getBaseTier() } - .maxOrNull() - - fun collectModifier(key: HTMachineUpgrade.Key): Fraction { - var result: Fraction = Fraction.ONE - for ((upgrade: HTMachineUpgrade, count: Int) in getMachineUpgrades()) { - if (upgrade.getBaseTier() == HTBaseTier.CREATIVE) continue - val multiplier: Fraction = upgrade.getProperty(key) ?: continue - result *= (multiplier * count) - } - return result - } - - fun collectAllModifier(): Map = HTMachineUpgrade.Key.entries.associateWith(::collectModifier) - - fun calculateValue(key: HTMachineUpgrade.Key): Either { - var result: Fraction = Fraction.ONE - for ((upgrade: HTMachineUpgrade, count: Int) in getMachineUpgrades()) { - if (upgrade.getBaseTier() == HTBaseTier.CREATIVE) { - return Either.left(key.creativeValue) - } - val multiplier: Fraction = upgrade.getProperty(key) ?: continue - result *= (multiplier * count) - } - return Either.right(result) - } - - fun modifyValue(key: HTMachineUpgrade.Key, factory: UnaryOperator): Int = - calculateValue(key).map(identity()) { factory.apply(it).toInt() } - - // HTComponentSerializable // - - override fun applyComponents(input: HTComponentInput) { - input.use(RagiumDataComponents.MACHINE_UPGRADES) { contents: HTItemContents -> - for (i: Int in contents.indices) { - upgradeSlots.getOrNull(i)?.setStackUnchecked(contents[i]) - } - } - } - - override fun collectComponents(builder: DataComponentMap.Builder) { - builder.set( - RagiumDataComponents.MACHINE_UPGRADES, - upgradeSlots - .map(HTBasicItemSlot::getStack) - .let(HTStackContents.Companion::fromNullable), - ) - } - - // HTValueSerializable // - - override fun serialize(output: HTValueOutput) { - HTCapabilityCodec.ITEM.saveTo(output.child("upgrades"), upgradeSlots) - } - - override fun deserialize(input: HTValueInput) { - HTCapabilityCodec.ITEM.loadFrom(input.childOrEmpty("upgrades"), upgradeSlots) - } -} diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTUpgradableBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTUpgradableBlockEntity.kt new file mode 100644 index 000000000..0dc1c2f52 --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTUpgradableBlockEntity.kt @@ -0,0 +1,31 @@ +package hiiragi283.ragium.common.block.entity + +import hiiragi283.ragium.api.block.entity.HTBlockEntityWithUpgrade +import hiiragi283.ragium.api.item.component.HTMachineUpgrade +import hiiragi283.ragium.common.block.entity.component.HTMachineUpgradeComponent +import net.minecraft.core.BlockPos +import net.minecraft.core.Holder +import net.minecraft.world.item.ItemStack +import net.minecraft.world.level.ItemLike +import net.minecraft.world.level.block.Block +import net.minecraft.world.level.block.state.BlockState + +abstract class HTUpgradableBlockEntity(blockHolder: Holder, pos: BlockPos, state: BlockState) : + HTConfigurableBlockEntity(blockHolder, pos, state), + HTBlockEntityWithUpgrade { + // HTBlockEntityWithUpgrade // + + override fun initializeVariables() { + super.initializeVariables() + this.machineUpgrade = HTMachineUpgradeComponent(this) + } + + lateinit var machineUpgrade: HTMachineUpgradeComponent + private set + + final override fun hasUpgrade(item: ItemLike): Boolean = machineUpgrade.hasUpgrade(item) + + final override fun getMachineUpgrades(): List> = machineUpgrade.getMachineUpgrades() + + final override fun canApplyUpgrade(stack: ItemStack): Boolean = machineUpgrade.canApplyUpgrade(stack) +} diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/component/HTBlockEntityComponent.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/component/HTBlockEntityComponent.kt new file mode 100644 index 000000000..6e92c3682 --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/component/HTBlockEntityComponent.kt @@ -0,0 +1,11 @@ +package hiiragi283.ragium.common.block.entity.component + +import hiiragi283.ragium.api.serialization.component.HTComponentSerializable +import hiiragi283.ragium.api.serialization.value.HTValueSerializable + +/** + * @see mekanism.common.tile.component.ITileComponent + */ +interface HTBlockEntityComponent : + HTValueSerializable, + HTComponentSerializable diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/component/HTMachineUpgradeComponent.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/component/HTMachineUpgradeComponent.kt new file mode 100644 index 000000000..9def0d31a --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/component/HTMachineUpgradeComponent.kt @@ -0,0 +1,100 @@ +package hiiragi283.ragium.common.block.entity.component + +import hiiragi283.ragium.api.RagiumPlatform +import hiiragi283.ragium.api.block.entity.HTBlockEntityWithUpgrade +import hiiragi283.ragium.api.function.HTPredicates +import hiiragi283.ragium.api.item.component.HTItemContents +import hiiragi283.ragium.api.item.component.HTMachineUpgrade +import hiiragi283.ragium.api.item.component.HTStackContents +import hiiragi283.ragium.api.registry.HTKeyOrTagEntry +import hiiragi283.ragium.api.serialization.component.HTComponentInput +import hiiragi283.ragium.api.serialization.value.HTValueInput +import hiiragi283.ragium.api.serialization.value.HTValueOutput +import hiiragi283.ragium.api.stack.ImmutableItemStack +import hiiragi283.ragium.api.util.HTContentListener +import hiiragi283.ragium.api.world.sendBlockUpdated +import hiiragi283.ragium.common.block.entity.HTBlockEntity +import hiiragi283.ragium.common.inventory.HTSlotHelper +import hiiragi283.ragium.common.storage.HTCapabilityCodec +import hiiragi283.ragium.common.storage.item.slot.HTBasicItemSlot +import hiiragi283.ragium.setup.RagiumDataComponents +import net.minecraft.core.component.DataComponentMap +import net.minecraft.world.item.ItemStack +import net.minecraft.world.level.ItemLike +import net.minecraft.world.level.block.entity.BlockEntityType + +class HTMachineUpgradeComponent(private val owner: HTBlockEntity) : + HTBlockEntityComponent, + HTBlockEntityWithUpgrade { + init { + owner.addComponent(this) + } + + val upgradeSlots: List = (0..3).map { i: Int -> + val filter: (ImmutableItemStack) -> Boolean = filter@{ stack: ImmutableItemStack -> + canApplyUpgrade(stack.unwrap()) && !hasUpgrade(stack.value()) + } + HTBasicItemSlot.create( + HTContentListener(owner::setChanged).andThen { owner.level?.sendBlockUpdated(owner.blockPos) }, + HTSlotHelper.getSlotPosX(8), + HTSlotHelper.getSlotPosY(i - 0.5), + canExtract = HTPredicates.manualOnly(), + canInsert = HTPredicates.manualOnly(), + filter = filter, + ) + } + + /** + * 指定した[item]を保持しているかどうか判定します。 + */ + override fun hasUpgrade(item: ItemLike): Boolean = upgradeSlots.any { slot: HTBasicItemSlot -> + slot.getStack()?.isOf(item.asItem()) ?: false + } + + /** + * 現在保持しているアップグレードの一覧を返します。。 + */ + override fun getMachineUpgrades(): List> = upgradeSlots.mapNotNull { slot: HTBasicItemSlot -> + val upgrade: HTMachineUpgrade = slot + .getStack() + ?.unwrap() + ?.let { RagiumPlatform.INSTANCE.getMachineUpgrade(owner.getRegistryAccess(), it) } + ?: return@mapNotNull null + upgrade to slot.getAmount() + } + + override fun canApplyUpgrade(stack: ItemStack): Boolean { + if (RagiumPlatform.INSTANCE.getMachineUpgrade(owner.getRegistryAccess(), stack) == null) return false + val filter: HTKeyOrTagEntry> = stack.get(RagiumDataComponents.MACHINE_UPGRADE_FILTER) ?: return true + return filter.isOf(HTBlockEntity.getBlockEntityType(owner.blockHolder)) + } + + // HTComponentSerializable // + + override fun applyComponents(input: HTComponentInput) { + input.use(RagiumDataComponents.MACHINE_UPGRADES) { contents: HTItemContents -> + for (i: Int in contents.indices) { + upgradeSlots.getOrNull(i)?.setStackUnchecked(contents[i]) + } + } + } + + override fun collectComponents(builder: DataComponentMap.Builder) { + builder.set( + RagiumDataComponents.MACHINE_UPGRADES, + upgradeSlots + .map(HTBasicItemSlot::getStack) + .let(HTStackContents.Companion::fromNullable), + ) + } + + // HTValueSerializable // + + override fun serialize(output: HTValueOutput) { + HTCapabilityCodec.ITEM.saveTo(output.child("upgrades"), upgradeSlots) + } + + override fun deserialize(input: HTValueInput) { + HTCapabilityCodec.ITEM.loadFrom(input.childOrEmpty("upgrades"), upgradeSlots) + } +} diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTFluidCollectorBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTFluidCollectorBlockEntity.kt index c16fb7c56..4ace753e4 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTFluidCollectorBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTFluidCollectorBlockEntity.kt @@ -49,7 +49,7 @@ class HTFluidCollectorBlockEntity(pos: BlockPos, state: BlockState) : // Ticking // override fun actionServer(level: ServerLevel, pos: BlockPos, state: BlockState): Boolean = when { - machineUpgrade.hasUpgrade(RagiumItems.EXP_COLLECTOR_UPGRADE) -> collectExp(level, pos) + hasUpgrade(RagiumItems.EXP_COLLECTOR_UPGRADE) -> collectExp(level, pos) else -> generateWater(level, pos) } diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTItemCollectorBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTItemCollectorBlockEntity.kt index 3a28cc7d6..849123bf2 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTItemCollectorBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTItemCollectorBlockEntity.kt @@ -75,8 +75,8 @@ class HTItemCollectorBlockEntity(pos: BlockPos, state: BlockState) : // Ticking // override fun actionServer(level: ServerLevel, pos: BlockPos, state: BlockState): Boolean = when { - machineUpgrade.hasUpgrade(RagiumItems.FISHING_UPGRADE) -> collectFish(level, pos) - machineUpgrade.hasUpgrade(RagiumItems.MOB_CAPTURE_UPGRADE) -> collectMobs(level, pos) + hasUpgrade(RagiumItems.FISHING_UPGRADE) -> collectFish(level, pos) + hasUpgrade(RagiumItems.MOB_CAPTURE_UPGRADE) -> collectMobs(level, pos) else -> collectItem(level, pos) } diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/generator/HTCombustionGeneratorBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/generator/HTCombustionGeneratorBlockEntity.kt index fb2300ff5..4e37fc634 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/generator/HTCombustionGeneratorBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/generator/HTCombustionGeneratorBlockEntity.kt @@ -32,7 +32,7 @@ class HTCombustionGeneratorBlockEntity(pos: BlockPos, state: BlockState) : HTSlotInfo.INPUT, HTVariableFluidTank.input( listener, - blockHolder.getFluidAttribute().getFirstInputTank(), + blockHolder.getFluidAttribute().getFirstInputTank(this), canInsert = RagiumDataMapTypes::getCoolantAmount.andThen { it > 0 }, ), ) @@ -40,7 +40,7 @@ class HTCombustionGeneratorBlockEntity(pos: BlockPos, state: BlockState) : HTSlotInfo.INPUT, HTVariableFluidTank.input( listener, - blockHolder.getFluidAttribute().getSecondInputTank(), + blockHolder.getFluidAttribute().getSecondInputTank(this), canInsert = RagiumDataMapTypes::getTimeFromCombustion.andThen { it > 0 }, ), ) diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/generator/HTMagmaticGeneratorBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/generator/HTMagmaticGeneratorBlockEntity.kt index 6835d5f67..fad7621ee 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/generator/HTMagmaticGeneratorBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/generator/HTMagmaticGeneratorBlockEntity.kt @@ -30,7 +30,7 @@ class HTMagmaticGeneratorBlockEntity(pos: BlockPos, state: BlockState) : HTSlotInfo.INPUT, HTVariableFluidTank.input( listener, - blockHolder.getFluidAttribute().getInputTank(), + blockHolder.getFluidAttribute().getInputTank(this), RagiumDataMapTypes::getTimeFromMagmatic.andThen { it > 0 }, ), ) diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/generator/HTSolarPanelControllerBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/generator/HTSolarPanelControllerBlockEntity.kt index d8590fa59..98f54c0aa 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/generator/HTSolarPanelControllerBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/generator/HTSolarPanelControllerBlockEntity.kt @@ -24,7 +24,7 @@ class HTSolarPanelControllerBlockEntity(pos: BlockPos, state: BlockState) : if (panels == 0) return false battery.currentEnergyPerTick = - machineUpgrade.modifyValue(HTMachineUpgrade.Key.ENERGY_GENERATION) { battery.baseEnergyPerTick * (panels / 4) * it } + modifyValue(HTMachineUpgrade.Key.ENERGY_GENERATION) { battery.baseEnergyPerTick * (panels / 4) * it } return battery.generate() > 0 } diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/generator/base/HTFuelGeneratorBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/generator/base/HTFuelGeneratorBlockEntity.kt index fa053c913..5e6db066a 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/generator/base/HTFuelGeneratorBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/generator/base/HTFuelGeneratorBlockEntity.kt @@ -29,8 +29,7 @@ abstract class HTFuelGeneratorBlockEntity(blockHolder: Holder, pos: Block // 燃料がある場合,それを消費する if (remainingBurnTime > 0) { remainingBurnTime-- - battery.currentEnergyPerTick = - machineUpgrade.modifyValue(HTMachineUpgrade.Key.ENERGY_GENERATION) { battery.baseEnergyPerTick * it } + battery.currentEnergyPerTick = modifyValue(HTMachineUpgrade.Key.ENERGY_GENERATION) { battery.baseEnergyPerTick * it } battery.generate() return true } else { 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 f31bf487d..ecaf373ab 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 @@ -34,11 +34,11 @@ class HTAdvancedMixerBlockEntity(pos: BlockPos, state: BlockState) : // input firstInputTank = builder.addSlot( HTSlotInfo.INPUT, - HTVariableFluidTank.input(listener, blockHolder.getFluidAttribute().getFirstInputTank()), + HTVariableFluidTank.input(listener, blockHolder.getFluidAttribute().getFirstInputTank(this)), ) secondInputTank = builder.addSlot( HTSlotInfo.INPUT, - HTVariableFluidTank.input(listener, blockHolder.getFluidAttribute().getSecondInputTank()), + HTVariableFluidTank.input(listener, blockHolder.getFluidAttribute().getSecondInputTank(this)), ) } 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 ee39b1e5b..51745fe6c 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 @@ -42,7 +42,7 @@ class HTCrusherBlockEntity(pos: BlockPos, state: BlockState) : override fun canProgressRecipe(level: ServerLevel, input: HTRecipeInput, recipe: HTSingleExtraItemRecipe): Boolean { // アウトプットに搬出できるか判定する val bool1: Boolean = HTStackSlotHelper.canInsertStack(outputSlot, input, level, recipe::assembleItem) - if (machineUpgrade.hasUpgrade(RagiumItems.PRIMARY_ONLY_UPGRADE)) { + if (hasUpgrade(RagiumItems.PRIMARY_ONLY_UPGRADE)) { return bool1 } val bool2: Boolean = HTStackSlotHelper.canInsertStack(extraSlot, input, level, recipe::assembleExtraItem) @@ -53,7 +53,7 @@ class HTCrusherBlockEntity(pos: BlockPos, state: BlockState) : // 実際にアウトプットに搬出する val access: RegistryAccess = level.registryAccess() outputSlot.insert(recipe.assembleItem(input, access), HTStorageAction.EXECUTE, HTStorageAccess.INTERNAL) - if (!machineUpgrade.hasUpgrade(RagiumItems.PRIMARY_ONLY_UPGRADE)) { + if (!hasUpgrade(RagiumItems.PRIMARY_ONLY_UPGRADE)) { extraSlot.insert(recipe.assembleExtraItem(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 6f3816300..7fafbdd9b 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 @@ -51,7 +51,7 @@ class HTCuttingMachineBlockEntity(pos: BlockPos, state: BlockState) : override fun canProgressRecipe(level: ServerLevel, input: HTRecipeInput, recipe: HTSingleExtraItemRecipe): Boolean { // アウトプットに搬出できるか判定する val bool1: Boolean = HTStackSlotHelper.canInsertStack(outputSlot, input, level, recipe::assembleItem) - if (machineUpgrade.hasUpgrade(RagiumItems.PRIMARY_ONLY_UPGRADE)) { + if (hasUpgrade(RagiumItems.PRIMARY_ONLY_UPGRADE)) { return bool1 } val bool2: Boolean = HTStackSlotHelper.canInsertStack(extraSlot, input, level, recipe::assembleExtraItem) @@ -68,7 +68,7 @@ class HTCuttingMachineBlockEntity(pos: BlockPos, state: BlockState) : // 実際にアウトプットに搬出する val access: RegistryAccess = level.registryAccess() outputSlot.insert(recipe.assembleItem(input, access), HTStorageAction.EXECUTE, HTStorageAccess.INTERNAL) - if (!machineUpgrade.hasUpgrade(RagiumItems.PRIMARY_ONLY_UPGRADE)) { + if (!hasUpgrade(RagiumItems.PRIMARY_ONLY_UPGRADE)) { extraSlot.insert(recipe.assembleExtraItem(input, access), HTStorageAction.EXECUTE, HTStorageAccess.INTERNAL) } // インプットを減らす 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 1eb0a6ce5..f3a56efde 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 @@ -51,7 +51,7 @@ class HTMelterBlockEntity(pos: BlockPos, state: BlockState) : HTSlotInfo.OUTPUT, HTVariableFluidTank.output( listener, - blockHolder.getFluidAttribute().getOutputTank(), + blockHolder.getFluidAttribute().getOutputTank(this), ), ) } 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 15dba9595..c36321c9d 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 @@ -33,7 +33,7 @@ class HTMixerBlockEntity(pos: BlockPos, state: BlockState) : // input inputTank = builder.addSlot( HTSlotInfo.INPUT, - HTVariableFluidTank.input(listener, blockHolder.getFluidAttribute().getInputTank()), + HTVariableFluidTank.input(listener, blockHolder.getFluidAttribute().getInputTank(this)), ) } 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 cff2a1d5f..90c57649f 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 @@ -52,7 +52,7 @@ class HTMobCrusherBlockEntity(pos: BlockPos, state: BlockState) : // output outputTank = builder.addSlot( HTSlotInfo.OUTPUT, - HTVariableFluidTank.output(listener, blockHolder.getFluidAttribute().getOutputTank()), + HTVariableFluidTank.output(listener, blockHolder.getFluidAttribute().getOutputTank(this)), ) } 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 367cd08dc..ae95045e0 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 @@ -48,7 +48,7 @@ class HTMultiSmelterBlockEntity(pos: BlockPos, state: BlockState) : } } - private fun getMaxParallel(): Int = when (machineUpgrade.getMaxMachineTier()) { + private fun getMaxParallel(): Int = when (getMaxMachineTier()) { HTBaseTier.BASIC -> 2 HTBaseTier.ADVANCED -> 4 HTBaseTier.ELITE -> 8 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 494469af6..10263b1b5 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 @@ -109,8 +109,8 @@ abstract class HTProcessorBlockEntity(blockHolder: Ho * 指定された[recipe]から,レシピに必要なエネルギー量を取得します。 */ protected fun getRequiredEnergy(recipe: RECIPE): Int { - battery.currentEnergyPerTick = machineUpgrade.modifyValue(HTMachineUpgrade.Key.ENERGY_EFFICIENCY) { battery.baseEnergyPerTick / it } - val time: Int = machineUpgrade.modifyValue(HTMachineUpgrade.Key.SPEED) { getRecipeTime(recipe) / it } + battery.currentEnergyPerTick = modifyValue(HTMachineUpgrade.Key.ENERGY_EFFICIENCY) { battery.baseEnergyPerTick / it } + val time: Int = modifyValue(HTMachineUpgrade.Key.SPEED) { getRecipeTime(recipe) / it } return battery.currentEnergyPerTick * time } 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 e55ad8d66..e1c3d67d3 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 @@ -58,12 +58,12 @@ class HTRefineryBlockEntity(pos: BlockPos, state: BlockState) : // input inputTank = builder.addSlot( HTSlotInfo.INPUT, - HTVariableFluidTank.input(listener, blockHolder.getFluidAttribute().getInputTank()), + HTVariableFluidTank.input(listener, blockHolder.getFluidAttribute().getInputTank(this)), ) // output outputTank = builder.addSlot( HTSlotInfo.OUTPUT, - HTVariableFluidTank.output(listener, blockHolder.getFluidAttribute().getOutputTank()), + HTVariableFluidTank.output(listener, blockHolder.getFluidAttribute().getOutputTank(this)), ) } 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 edf016157..7c9d7dc46 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 @@ -47,7 +47,7 @@ abstract class HTAbstractCombinerBlockEntity : HTProcessorBlockEntity.Cached, pos: Blo ) { final override fun createTank(listener: HTContentListener): HTBasicFluidTank = HTVariableFluidTank.input( listener, - blockHolder.getFluidAttribute().getInputTank(), - canInsert = { machineUpgrade.hasUpgrade(RagiumItems.EFFICIENT_CRUSH_UPGRADE) }, + blockHolder.getFluidAttribute().getInputTank(this), + canInsert = { hasUpgrade(RagiumItems.EFFICIENT_CRUSH_UPGRADE) }, filter = RagiumFluidContents.LUBRICANT::isOf, ) // Ticking // final override fun getRecipeTime(recipe: HTSingleExtraItemRecipe): Int { - val bool1: Boolean = machineUpgrade.hasUpgrade(RagiumItems.EFFICIENT_CRUSH_UPGRADE) + val bool1: Boolean = hasUpgrade(RagiumItems.EFFICIENT_CRUSH_UPGRADE) val bool2: Boolean = HTStackSlotHelper.canShrinkStack(inputTank, RagiumConst.LUBRICANT_CONSUME, true) val modifier: Fraction = when (bool1 && bool2) { true -> Fraction.THREE_QUARTERS @@ -61,7 +61,7 @@ abstract class HTAbstractCrusherBlockEntity(blockHolder: Holder, pos: Blo // インプットを減らす inputSlot.extract(recipe.getRequiredCount(), HTStorageAction.EXECUTE, HTStorageAccess.INTERNAL) // 潤滑油があれば減らす - if (machineUpgrade.hasUpgrade(RagiumItems.EFFICIENT_CRUSH_UPGRADE)) { + if (hasUpgrade(RagiumItems.EFFICIENT_CRUSH_UPGRADE)) { inputTank.extract(RagiumConst.LUBRICANT_CONSUME, HTStorageAction.EXECUTE, HTStorageAccess.INTERNAL) } // SEを鳴らす 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 c06fe70a3..e1a872fb3 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 @@ -46,7 +46,7 @@ abstract class HTComplexBlockEntity : HTProcessorBlockEn // output outputTank = builder.addSlot( HTSlotInfo.OUTPUT, - HTVariableFluidTank.output(listener, blockHolder.getFluidAttribute().getOutputTank()), + HTVariableFluidTank.output(listener, blockHolder.getFluidAttribute().getOutputTank(this)), ) } diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTCrateBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTCrateBlockEntity.kt index 6a6a5a5f7..f161287dd 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTCrateBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTCrateBlockEntity.kt @@ -10,7 +10,6 @@ import hiiragi283.ragium.common.storage.holder.HTBasicItemSlotHolder import hiiragi283.ragium.common.storage.item.slot.HTBasicItemSlot import hiiragi283.ragium.common.storage.item.slot.HTVariableItemSlot import hiiragi283.ragium.common.tier.HTCrateTier -import hiiragi283.ragium.util.HTEnchantmentHelper import hiiragi283.ragium.util.HTStackSlotHelper import net.minecraft.core.BlockPos import net.minecraft.core.Holder @@ -34,8 +33,7 @@ class HTCrateBlockEntity(blockHolder: Holder, pos: BlockPos, state: Block slot = builder.addSlot( HTSlotInfo.BOTH, HTVariableItemSlot.create(listener, { stack: ImmutableItemStack? -> - val capacity: Int = HTItemSlot.getMaxStackSize(stack) * tier.getMultiplier() - HTEnchantmentHelper.processStorageCapacity(this.getLevel()?.random, enchantment, capacity) + HTItemSlot.getMaxStackSize(stack) * tier.getMultiplier() }, 0, 0), ) } diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTDrumBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTDrumBlockEntity.kt index ac6713076..bbe8d66dc 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTDrumBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTDrumBlockEntity.kt @@ -3,7 +3,7 @@ package hiiragi283.ragium.common.block.entity.storage import hiiragi283.ragium.api.function.HTPredicates import hiiragi283.ragium.api.storage.holder.HTSlotInfo import hiiragi283.ragium.api.util.HTContentListener -import hiiragi283.ragium.common.block.entity.HTConfigurableBlockEntity +import hiiragi283.ragium.common.block.entity.HTUpgradableBlockEntity import hiiragi283.ragium.common.inventory.HTSlotHelper import hiiragi283.ragium.common.storage.fluid.tank.HTBasicFluidTank import hiiragi283.ragium.common.storage.holder.HTBasicFluidTankHolder @@ -18,7 +18,7 @@ import net.minecraft.world.level.block.Block import net.minecraft.world.level.block.state.BlockState abstract class HTDrumBlockEntity(blockHolder: Holder, pos: BlockPos, state: BlockState) : - HTConfigurableBlockEntity(blockHolder, pos, state) { + HTUpgradableBlockEntity(blockHolder, pos, state) { lateinit var tank: HTBasicFluidTank private set diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTTieredDrumBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTTieredDrumBlockEntity.kt index 1f8541c0d..a7134e849 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTTieredDrumBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTTieredDrumBlockEntity.kt @@ -2,13 +2,14 @@ package hiiragi283.ragium.common.block.entity.storage import hiiragi283.ragium.api.block.attribute.getAttributeTier import hiiragi283.ragium.api.function.HTPredicates +import hiiragi283.ragium.api.item.component.HTMachineUpgrade +import hiiragi283.ragium.api.math.times import hiiragi283.ragium.api.stack.ImmutableFluidStack import hiiragi283.ragium.api.storage.HTStorageAccess import hiiragi283.ragium.api.storage.HTStorageAction import hiiragi283.ragium.api.util.HTContentListener import hiiragi283.ragium.common.storage.fluid.tank.HTBasicFluidTank import hiiragi283.ragium.common.tier.HTDrumTier -import hiiragi283.ragium.util.HTEnchantmentHelper import net.minecraft.core.BlockPos import net.minecraft.core.Holder import net.minecraft.world.level.block.Block @@ -24,8 +25,7 @@ class HTTieredDrumBlockEntity(blockHolder: Holder, pos: BlockPos, state: override fun createTank(listener: HTContentListener): HTBasicFluidTank = DrumTank(listener) - private fun getCapacity(): Int = - HTEnchantmentHelper.processStorageCapacity(this.getLevel()?.random, enchantment, tier.getDefaultCapacity()) + private fun getCapacity(): Int = modifyValue(HTMachineUpgrade.Key.FLUID_CAPACITY) { tier.getDefaultCapacity() * it } // DrumTank // diff --git a/src/main/kotlin/hiiragi283/ragium/common/storage/energy/battery/HTMachineEnergyBattery.kt b/src/main/kotlin/hiiragi283/ragium/common/storage/energy/battery/HTMachineEnergyBattery.kt index 8881b41ec..5ae4a3df7 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/storage/energy/battery/HTMachineEnergyBattery.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/storage/energy/battery/HTMachineEnergyBattery.kt @@ -44,8 +44,7 @@ sealed class HTMachineEnergyBattery( var currentEnergyPerTick: Int = this.baseEnergyPerTick - override fun getCapacity(): Int = - blockEntity.machineUpgrade.modifyValue(HTMachineUpgrade.Key.ENERGY_CAPACITY) { getBaseCapacity() * it } + override fun getCapacity(): Int = blockEntity.modifyValue(HTMachineUpgrade.Key.ENERGY_CAPACITY) { getBaseCapacity() * it } fun getBaseCapacity(): Int = super.getCapacity() diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumEnchantmentComponents.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumEnchantmentComponents.kt index c5b46b200..4f8968d53 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumEnchantmentComponents.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumEnchantmentComponents.kt @@ -24,9 +24,6 @@ object RagiumEnchantmentComponents { null, ) - @JvmField - val CAPACITY: DataComponentType = REGISTER.registerType("capacity", EnchantmentValueEffect.CODEC, null) - @JvmField val RANGE: DataComponentType>> = registerConditional("range", EnchantmentValueEffect.CODEC) diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumEnchantments.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumEnchantments.kt index 5541baa91..3624180a7 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumEnchantments.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumEnchantments.kt @@ -7,9 +7,6 @@ import net.minecraft.resources.ResourceKey import net.minecraft.world.item.enchantment.Enchantment object RagiumEnchantments { - @JvmField - val CAPACITY: ResourceKey = create("capacity") - @JvmField val RANGE: ResourceKey = create("range") diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumItems.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumItems.kt index 91e1064fb..c675a7f47 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumItems.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumItems.kt @@ -72,7 +72,6 @@ import hiiragi283.ragium.common.variant.HTHammerToolVariant import hiiragi283.ragium.common.variant.HTUpgradeVariant import hiiragi283.ragium.common.variant.VanillaToolVariant import hiiragi283.ragium.config.RagiumConfig -import hiiragi283.ragium.util.HTEnchantmentHelper import net.minecraft.core.component.DataComponentPatch import net.minecraft.core.component.DataComponentType import net.minecraft.resources.ResourceKey @@ -769,8 +768,7 @@ object RagiumItems { registerFluid( event, { stack: ItemStack -> - val capacity: Int = HTEnchantmentHelper.processStorageCapacity(null, stack, tier.getDefaultCapacity()) - HTComponentFluidTank.create(stack, 0, capacity) + HTComponentFluidTank.create(stack, 0, tier.getDefaultCapacity()) }, block, ) @@ -786,8 +784,7 @@ object RagiumItems { registerFluid( event, { stack: ItemStack -> - val capacity: Int = HTEnchantmentHelper.processStorageCapacity(null, stack, 8000) - HTComponentFluidTank.create(stack, 0, capacity, filter = RagiumFluidContents.DEW_OF_THE_WARP::isOf) + HTComponentFluidTank.create(stack, 0, 8000, filter = RagiumFluidContents.DEW_OF_THE_WARP::isOf) }, TELEPORT_KEY, ) @@ -796,7 +793,7 @@ object RagiumItems { registerEnergy( event, { stack: ItemStack -> - HTComponentEnergyBattery.create(stack, HTEnchantmentHelper.processStorageCapacity(null, stack, 160000)) + HTComponentEnergyBattery.create(stack, 160000) }, DRILL, ) diff --git a/src/main/kotlin/hiiragi283/ragium/util/HTEnchantmentHelper.kt b/src/main/kotlin/hiiragi283/ragium/util/HTEnchantmentHelper.kt index c5e4e41d4..06cae54a2 100644 --- a/src/main/kotlin/hiiragi283/ragium/util/HTEnchantmentHelper.kt +++ b/src/main/kotlin/hiiragi283/ragium/util/HTEnchantmentHelper.kt @@ -4,34 +4,14 @@ import hiiragi283.ragium.api.RagiumPlatform import hiiragi283.ragium.setup.RagiumEnchantmentComponents import net.minecraft.core.Holder import net.minecraft.server.level.ServerLevel -import net.minecraft.util.RandomSource import net.minecraft.world.item.ItemStack import net.minecraft.world.item.enchantment.Enchantment import net.minecraft.world.item.enchantment.EnchantmentHelper -import net.minecraft.world.item.enchantment.ItemEnchantments import net.minecraft.world.level.Level import org.apache.commons.lang3.mutable.MutableFloat import kotlin.math.max object HTEnchantmentHelper { - @JvmField - val DEFAULT_RANDOM: RandomSource = RandomSource.create() - - @JvmStatic - fun modifyStorageCapacity( - enchantment: Enchantment, - random: RandomSource, - enchantmentLevel: Int, - storageCapacity: MutableFloat, - ) { - enchantment.modifyUnfilteredValue( - RagiumEnchantmentComponents.CAPACITY, - random, - enchantmentLevel, - storageCapacity, - ) - } - @JvmStatic fun modifyCollectorRange( enchantment: Enchantment, @@ -52,44 +32,8 @@ object HTEnchantmentHelper { @JvmStatic fun hasStrike(stack: ItemStack): Boolean = EnchantmentHelper.has(stack, RagiumEnchantmentComponents.STRIKE) - // Block Entity // - - @JvmStatic - fun runIterationOnComponent(enchantments: ItemEnchantments, visitor: EnchantmentHelper.EnchantmentVisitor) { - for (entry in enchantments.entrySet()) { - visitor.accept(entry.key, entry.intValue) - } - } - - @JvmStatic - fun processStorageCapacity(random: RandomSource?, enchantments: ItemEnchantments, capacity: Int): Int { - val float = MutableFloat(capacity) - runIterationOnComponent(enchantments) { holder: Holder, level: Int -> - modifyStorageCapacity(holder.value(), random ?: DEFAULT_RANDOM, level, float) - } - return max(0, float.toInt()) - } - // ItemStack // - @JvmStatic - fun processStorageCapacity(random: RandomSource?, stack: ItemStack, capacity: Int): Int { - val float = MutableFloat(capacity) - EnchantmentHelper.runIterationOnItem(stack) { holder: Holder, level: Int -> - modifyStorageCapacity(holder.value(), random ?: DEFAULT_RANDOM, level, float) - } - return max(0, float.toInt()) - } - - @JvmStatic - fun processStorageCapacity(random: RandomSource?, stack: ItemStack, capacity: Long): Long { - val float = MutableFloat(capacity) - EnchantmentHelper.runIterationOnItem(stack) { holder: Holder, level: Int -> - modifyStorageCapacity(holder.value(), random ?: DEFAULT_RANDOM, level, float) - } - return max(0, float.toLong()) - } - @JvmStatic fun processCollectorRange(serverLevel: ServerLevel, stack: ItemStack, range: Double): Double { val float = MutableFloat(range) From 9fdb570877d3aa0cd9dde1a94e56d5e490807a08 Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Thu, 11 Dec 2025 14:59:04 +0900 Subject: [PATCH 25/49] fix: items with same containment not stackable --- .../api/item/component/HTStackContents.kt | 19 +++++--- .../api/stack/ImmutableComponentStack.kt | 43 +++++++++++++++++++ 2 files changed, 56 insertions(+), 6 deletions(-) diff --git a/src/api/kotlin/hiiragi283/ragium/api/item/component/HTStackContents.kt b/src/api/kotlin/hiiragi283/ragium/api/item/component/HTStackContents.kt index 1ef8d1ade..4a353f4ae 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/item/component/HTStackContents.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/item/component/HTStackContents.kt @@ -1,9 +1,9 @@ package hiiragi283.ragium.api.item.component import hiiragi283.ragium.api.serialization.codec.BiCodec +import hiiragi283.ragium.api.stack.ImmutableComponentStack import hiiragi283.ragium.api.stack.ImmutableFluidStack import hiiragi283.ragium.api.stack.ImmutableItemStack -import hiiragi283.ragium.api.stack.ImmutableStack import net.minecraft.network.RegistryFriendlyByteBuf import java.util.Optional import kotlin.jvm.optionals.getOrNull @@ -14,10 +14,10 @@ typealias HTFluidContents = HTStackContents /** * @see mekanism.common.attachments.containers.item.AttachedItems */ -data class HTStackContents>(val stacks: List>) : AbstractList() { +data class HTStackContents>(val stacks: List>) : AbstractList() { companion object { @JvmStatic - fun > codec( + fun > codec( stackCodec: BiCodec, ): BiCodec> = stackCodec .toOptional() @@ -25,16 +25,16 @@ data class HTStackContents>(val stacks: List::stacks) @JvmStatic - fun > empty(): HTStackContents = HTStackContents(listOf()) + fun > empty(): HTStackContents = HTStackContents(listOf()) @JvmStatic - fun > fromNullable(stacks: List): HTStackContents = when { + fun > fromNullable(stacks: List): HTStackContents = when { stacks.isEmpty() || stacks.filterNotNull().isEmpty() -> empty() else -> HTStackContents(stacks.map(Optional::ofNullable)) } @JvmStatic - fun > fromOptional(stacks: List>): HTStackContents = when { + fun > fromOptional(stacks: List>): HTStackContents = when { stacks.isEmpty() || stacks.none(Optional::isPresent) -> empty() else -> HTStackContents(stacks) } @@ -48,4 +48,11 @@ data class HTStackContents>(val stacks: List::isEmpty) fun unwrap(): MutableList> = stacks.toMutableList() + + override fun equals(other: Any?): Boolean = when (other) { + !is HTStackContents -> false + else -> ImmutableComponentStack.listMatches(this, other) + } + + override fun hashCode(): Int = ImmutableComponentStack.hashStackList(this) } diff --git a/src/api/kotlin/hiiragi283/ragium/api/stack/ImmutableComponentStack.kt b/src/api/kotlin/hiiragi283/ragium/api/stack/ImmutableComponentStack.kt index 9e0b4fd29..011280db5 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/stack/ImmutableComponentStack.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/stack/ImmutableComponentStack.kt @@ -6,6 +6,49 @@ import net.minecraft.core.component.DataComponentPatch interface ImmutableComponentStack> : ImmutableStack, DataComponentHolder { + companion object { + @JvmStatic + fun hashValueAndComponents(stack: ImmutableComponentStack<*, *>?): Int = when { + stack == null -> 0 + else -> { + val i: Int = 31 + stack.value().hashCode() + 31 * i + stack.components.hashCode() + } + } + + /** + * @see net.minecraft.world.item.ItemStack.hashStackList + */ + @JvmStatic + fun hashStackList(stacks: List?>): Int { + var i = 0 + for (stack: ImmutableComponentStack<*, *>? in stacks) { + i = i * 31 + hashValueAndComponents(stack) + } + return i + } + + @JvmStatic + fun > isSameValueAndComponents(first: STACK?, second: STACK?): Boolean = when { + first == null && second == null -> true + first?.value() != second?.value() -> false + else -> first?.components == second?.components + } + + @JvmStatic + fun > matches(first: STACK?, second: STACK?): Boolean = when { + first == second -> true + first?.amount() != second?.amount() -> false + else -> isSameValueAndComponents(first, second) + } + + @JvmStatic + fun > listMatches(first: List, second: List): Boolean = when { + first.size != second.size -> false + else -> first.indices.all { i: Int -> matches(first[i], second[i]) } + } + } + /** * このスタックの[DataComponentPatch]を返します。 */ From 7674c64ca50d13f93cfb9a3e4f1ee3619f16ff5d Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Thu, 11 Dec 2025 15:30:50 +0900 Subject: [PATCH 26/49] feat: added integration recipes for Rubber line --- .../api/data/recipe/HTRecipeProvider.kt | 19 +++++++++++ .../recipe/RagiumChemistryRecipeProvider.kt | 23 ++----------- .../recipe/RagiumMaterialRecipeProvider.kt | 18 ----------- .../compat/RagiumCreateRecipeProvider.kt | 2 ++ .../recipe/compat/RagiumEIORecipeProvider.kt | 2 ++ .../compat/RagiumImmersiveRecipeProvider.kt | 4 +++ .../compat/RagiumOritechRecipeProvider.kt | 2 ++ .../material/RagiumMaterialRecipeData.kt | 32 +++++++++++++++++++ 8 files changed, 64 insertions(+), 38 deletions(-) diff --git a/src/data/kotlin/hiiragi283/ragium/api/data/recipe/HTRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/api/data/recipe/HTRecipeProvider.kt index 077b5f773..d89752c4e 100644 --- a/src/data/kotlin/hiiragi283/ragium/api/data/recipe/HTRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/api/data/recipe/HTRecipeProvider.kt @@ -17,6 +17,7 @@ import hiiragi283.ragium.api.registry.HTItemHolderLike import hiiragi283.ragium.api.registry.toHolderLike import hiiragi283.ragium.api.registry.toId import hiiragi283.ragium.api.tag.RagiumModTags +import hiiragi283.ragium.api.util.Ior import hiiragi283.ragium.common.HTMoldType import hiiragi283.ragium.common.crafting.HTClearComponentRecipe import hiiragi283.ragium.common.data.recipe.HTFluidRecipeBuilder @@ -24,6 +25,7 @@ import hiiragi283.ragium.common.data.recipe.HTFluidWithCatalystRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTItemWithCatalystRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTMixingRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTPlantingRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTShapelessInputsRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTShapelessRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTSingleExtraItemRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTSmithingRecipeBuilder @@ -35,6 +37,8 @@ import net.minecraft.core.HolderLookup import net.minecraft.core.component.DataComponentType import net.minecraft.data.recipes.RecipeOutput import net.minecraft.resources.ResourceLocation +import net.minecraft.tags.TagKey +import net.minecraft.world.item.Item import net.minecraft.world.item.Items import net.minecraft.world.item.crafting.CraftingBookCategory import net.minecraft.world.item.crafting.Ingredient @@ -180,6 +184,21 @@ sealed class HTRecipeProvider { .addIngredient(input) .addIngredient(CommonMaterialPrefixes.INGOT, VanillaMaterialKeys.NETHERITE) + // Alloying + fun alloyFromData(data: HTRecipeData, applyCondition: Boolean = false) { + HTShapelessInputsRecipeBuilder + .alloying( + data.getItemResults()[0].first, + data.getItemIngredients(itemCreator), + ).apply { + if (applyCondition) { + for ((entry: Ior>) in data.itemOutputs) { + entry.getRight()?.let(this::tagCondition) + } + } + }.saveModified(output, data.operator) + } + // Compressing protected fun compressingTo( mold: HTMoldType, diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumChemistryRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumChemistryRecipeProvider.kt index 26cec4355..7f05fb35d 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumChemistryRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumChemistryRecipeProvider.kt @@ -629,33 +629,16 @@ object RagiumChemistryRecipeProvider : HTRecipeProvider.Direct() { .addIngredient(RagiumFluidContents.LATEX.bucketTag) .saveSuffixed(output, "_from_latex") - HTFluidWithCatalystRecipeBuilder - .solidifying( - fluidCreator.fromHolder(RagiumFluidContents.LATEX, 1000), - itemCreator.fromItem(HTMoldType.PLATE), - resultHelper.item(CommonMaterialPrefixes.PLATE, CommonMaterialKeys.RAW_RUBBER, 2), - ).save(output) + meltAndFreeze(RagiumMaterialRecipeData.RAW_RUBBER_SHEET) // Raw Rubber -> Rubber HTCookingRecipeBuilder .smelting(RagiumItems.getPlate(CommonMaterialKeys.RUBBER)) .addIngredient(RagiumItems.getPlate(CommonMaterialKeys.RAW_RUBBER)) .saveSuffixed(output, "_from_raw_rubber") // Raw Rubber + Sulfur -> Rubber - HTShapelessInputsRecipeBuilder - .alloying( - resultHelper.item(CommonMaterialPrefixes.PLATE, CommonMaterialKeys.RUBBER, 2), - itemCreator.fromTagKey(CommonMaterialPrefixes.PLATE, CommonMaterialKeys.RAW_RUBBER), - itemCreator.fromTagKey(CommonMaterialPrefixes.DUST, CommonMaterialKeys.Gems.SULFUR), - ).save(output) - + alloyFromData(RagiumMaterialRecipeData.RUBBER_SHEET) // Latex + Sulfur + Coal -> Rubber - HTMixingRecipeBuilder - .create() - .addIngredient(itemCreator.fromTagKey(CommonMaterialPrefixes.DUST, VanillaMaterialKeys.COAL)) - .addIngredient(itemCreator.fromTagKey(CommonMaterialPrefixes.DUST, CommonMaterialKeys.Gems.SULFUR)) - .addIngredient(fluidCreator.fromHolder(RagiumFluidContents.LATEX, 1000)) - .setResult(resultHelper.item(CommonMaterialPrefixes.PLATE, CommonMaterialKeys.RUBBER, 4)) - .save(output) + mixFromData(RagiumMaterialRecipeData.BLACK_RUBBER_SHEET) } @JvmStatic diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumMaterialRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumMaterialRecipeProvider.kt index 37dd393df..063fd0c4c 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumMaterialRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumMaterialRecipeProvider.kt @@ -1,7 +1,6 @@ package hiiragi283.ragium.data.server.recipe import hiiragi283.ragium.api.RagiumPlatform -import hiiragi283.ragium.api.data.recipe.HTRecipeData import hiiragi283.ragium.api.data.recipe.HTRecipeProvider import hiiragi283.ragium.api.material.HTMaterialDefinition import hiiragi283.ragium.api.material.HTMaterialKey @@ -13,12 +12,10 @@ import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient import hiiragi283.ragium.api.registry.impl.HTSimpleDeferredBlock import hiiragi283.ragium.api.registry.impl.HTSimpleDeferredItem import hiiragi283.ragium.api.tag.RagiumCommonTags -import hiiragi283.ragium.api.util.Ior import hiiragi283.ragium.common.HTMoldType import hiiragi283.ragium.common.data.recipe.HTCookingRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTMixingRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTShapedRecipeBuilder -import hiiragi283.ragium.common.data.recipe.HTShapelessInputsRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTShapelessRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTSingleExtraItemRecipeBuilder import hiiragi283.ragium.common.material.CommonMaterialKeys @@ -376,19 +373,4 @@ object RagiumMaterialRecipeProvider : HTRecipeProvider.Direct() { alloyFromData(OritechMaterialRecipeData.DURATIUM, true) alloyFromData(OritechMaterialRecipeData.ENERGITE, true) } - - @JvmStatic - private fun alloyFromData(data: HTRecipeData, applyCondition: Boolean = false) { - HTShapelessInputsRecipeBuilder - .alloying( - data.getItemResults()[0].first, - data.getItemIngredients(itemCreator), - ).apply { - if (applyCondition) { - for ((entry: Ior>) in data.itemOutputs) { - entry.getRight()?.let(this::tagCondition) - } - } - }.saveModified(output, data.operator) - } } diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumCreateRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumCreateRecipeProvider.kt index c447fab7d..5094e5a93 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumCreateRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumCreateRecipeProvider.kt @@ -139,5 +139,7 @@ object RagiumCreateRecipeProvider : HTRecipeProvider.Integration(RagiumConst.CRE fromData(RagiumMaterialRecipeData.NIGHT_METAL, HeatCondition.HEATED) fromData(RagiumMaterialRecipeData.IRIDESCENT_POWDER, HeatCondition.SUPERHEATED) + + fromData(RagiumMaterialRecipeData.BLACK_RUBBER_SHEET, HeatCondition.HEATED) } } diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumEIORecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumEIORecipeProvider.kt index e389a3589..20b92140a 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumEIORecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumEIORecipeProvider.kt @@ -52,6 +52,8 @@ object RagiumEIORecipeProvider : HTRecipeProvider.Integration(RagiumConst.EIO_MA alloyFromData(RagiumMaterialRecipeData.DEEP_STEEL, 5600) alloyFromData(RagiumMaterialRecipeData.NIGHT_METAL, 4800) + + alloyFromData(RagiumMaterialRecipeData.RUBBER_SHEET, 4800) } @JvmStatic diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumImmersiveRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumImmersiveRecipeProvider.kt index 7da32ea68..84c9b4608 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumImmersiveRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumImmersiveRecipeProvider.kt @@ -76,6 +76,8 @@ object RagiumImmersiveRecipeProvider : HTRecipeProvider.Integration(RagiumConst. alloyFromData(RagiumMaterialRecipeData.DEEP_STEEL) alloyFromData(RagiumMaterialRecipeData.NIGHT_METAL) + + alloyFromData(RagiumMaterialRecipeData.RUBBER_SHEET) } @JvmStatic @@ -125,6 +127,8 @@ object RagiumImmersiveRecipeProvider : HTRecipeProvider.Integration(RagiumConst. @JvmStatic private fun misc() { + bottleFromData(RagiumMaterialRecipeData.RAW_RUBBER_SHEET) + bottleFromData(FoodMaterialRecipeData.CHOCOLATE_INGOT) } diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumOritechRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumOritechRecipeProvider.kt index 58890eb40..4a5b7dcc8 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumOritechRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumOritechRecipeProvider.kt @@ -85,6 +85,8 @@ object RagiumOritechRecipeProvider : HTRecipeProvider.Integration(RagiumConst.OR foundryFromData(RagiumMaterialRecipeData.AZURE_STEEL) foundryFromData(RagiumMaterialRecipeData.DEEP_STEEL) + + foundryFromData(RagiumMaterialRecipeData.RUBBER_SHEET) } @JvmStatic diff --git a/src/data/kotlin/hiiragi283/ragium/impl/data/recipe/material/RagiumMaterialRecipeData.kt b/src/data/kotlin/hiiragi283/ragium/impl/data/recipe/material/RagiumMaterialRecipeData.kt index bcb5e8704..2892cc16e 100644 --- a/src/data/kotlin/hiiragi283/ragium/impl/data/recipe/material/RagiumMaterialRecipeData.kt +++ b/src/data/kotlin/hiiragi283/ragium/impl/data/recipe/material/RagiumMaterialRecipeData.kt @@ -4,6 +4,8 @@ import hiiragi283.ragium.api.RagiumConst import hiiragi283.ragium.api.data.recipe.HTRecipeData import hiiragi283.ragium.api.material.HTMaterialLike import hiiragi283.ragium.api.tag.RagiumModTags +import hiiragi283.ragium.common.HTMoldType +import hiiragi283.ragium.common.material.CommonMaterialKeys import hiiragi283.ragium.common.material.CommonMaterialPrefixes import hiiragi283.ragium.common.material.RagiumMaterialKeys import hiiragi283.ragium.common.material.VanillaMaterialKeys @@ -142,6 +144,36 @@ data object RagiumMaterialRecipeData { setSuffix("_warped") } + // Rubber // + + @JvmField + val RAW_RUBBER_SHEET: HTRecipeData = HTRecipeData.create { + addInput(RagiumFluidContents.LATEX, 1000) + + setCatalyst(HTMoldType.PLATE) + + addOutput(RagiumItems.getPlate(CommonMaterialKeys.RAW_RUBBER), CommonMaterialPrefixes.PLATE, CommonMaterialKeys.RAW_RUBBER, 2) + } + + @JvmField + val RUBBER_SHEET: HTRecipeData = HTRecipeData.create { + addInput(CommonMaterialPrefixes.PLATE, CommonMaterialKeys.RAW_RUBBER) + addInput(CommonMaterialPrefixes.DUST, CommonMaterialKeys.Gems.SULFUR) + + addOutput(RagiumItems.getPlate(CommonMaterialKeys.RUBBER), CommonMaterialPrefixes.PLATE, CommonMaterialKeys.RUBBER, 2) + } + + @JvmField + val BLACK_RUBBER_SHEET: HTRecipeData = HTRecipeData.create { + addInput(CommonMaterialPrefixes.DUST, VanillaMaterialKeys.COAL) + addInput(CommonMaterialPrefixes.DUST, CommonMaterialKeys.Gems.SULFUR) + addInput(RagiumFluidContents.LATEX, 1000) + + addOutput(RagiumItems.getPlate(CommonMaterialKeys.RUBBER), CommonMaterialPrefixes.PLATE, CommonMaterialKeys.RUBBER, 4) + + setSuffix("_with_carbon") + } + // Other // @JvmField From 919a0b318deb444e5cfb96df846ac8b7e9680f84 Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Thu, 11 Dec 2025 22:44:10 +0900 Subject: [PATCH 27/49] feat!: redesigned around machine upgrades --- .../hiiragi283/ragium/api/RagiumPlatform.kt | 19 --- .../block/attribute/HTFluidBlockAttribute.kt | 16 +-- .../block/entity/HTBlockEntityWithUpgrade.kt | 60 -------- .../capability/CapabilityExtensions.kt | 2 +- .../capability/HTAmountViewCapability.kt | 2 +- .../capability/HTAmountViewProvider.kt | 2 +- .../capability/HTEnergyCapabilities.kt | 2 +- .../capability/HTFluidCapabilities.kt | 2 +- .../capability/HTItemCapabilities.kt | 2 +- .../capability/HTMultiCapability.kt | 2 +- .../api/capability/RagiumCapabilities.kt | 27 ++++ .../ragium/api/item/HTDynamicUpgradeItem.kt | 9 -- .../api/item/component/HTComponentUpgrade.kt | 33 +++++ .../api/item/component/HTMachineUpgrade.kt | 136 ------------------ .../api/serialization/codec/BiCodecs.kt | 11 ++ .../api/upgrade/HTSlotUpgradeHandler.kt | 14 ++ .../ragium/api/upgrade/HTUpgradeHandler.kt | 53 +++++++ .../ragium/api/upgrade/HTUpgradeHelper.kt | 62 ++++++++ .../ragium/api/upgrade/HTUpgradeKey.kt | 26 ++++ .../ragium/api/upgrade/HTUpgradeProvider.kt | 15 ++ .../ragium/api/upgrade/RagiumUpgradeKeys.kt | 44 ++++++ .../data/client/RagiumEnglishProvider.kt | 23 ++- .../data/client/RagiumJapaneseProvider.kt | 23 ++- .../HTBlockMachinePropertiesProvider.kt | 25 ++-- .../hiiragi283/ragium/client/RagiumClient.kt | 3 +- .../client/event/RagiumTooltipHandler.kt | 9 +- .../gui/screen/processor/HTCrusherScreen.kt | 4 +- .../client/model/HTFuelGeneratorModel.kt | 4 +- .../block/entity/HTUpgradableBlockEntity.kt | 16 +-- .../component/HTMachineUpgradeComponent.kt | 55 ++----- .../device/HTFluidCollectorBlockEntity.kt | 4 +- .../device/HTItemCollectorBlockEntity.kt | 5 +- .../HTSolarPanelControllerBlockEntity.kt | 8 +- .../base/HTFuelGeneratorBlockEntity.kt | 6 +- .../entity/processor/HTCrusherBlockEntity.kt | 6 +- .../processor/HTCuttingMachineBlockEntity.kt | 6 +- .../processor/HTMultiSmelterBlockEntity.kt | 13 +- .../processor/HTProcessorBlockEntity.kt | 8 +- .../base/HTAbstractCrusherBlockEntity.kt | 8 +- .../entity/storage/HTTieredDrumBlockEntity.kt | 4 +- .../common/entity/charge/HTNeutralCharge.kt | 2 +- .../container/HTBlockEntityContainerMenu.kt | 2 +- .../container/HTGenericItemContainerMenu.kt | 2 +- .../ragium/common/item/HTCompressedItem.kt | 2 +- .../ragium/common/item/base/HTEnergyItem.kt | 2 +- .../common/item/block/HTDrumBlockItem.kt | 2 +- .../common/item/food/HTPotionBundleItem.kt | 2 +- .../common/item/tool/HTTeleportKeyItem.kt | 2 +- .../item/upgrade/HTCreativeUpgradeItem.kt | 22 --- .../common/storage/energy/HTEnergyCache.kt | 2 +- .../energy/battery/HTMachineEnergyBattery.kt | 6 +- .../fluid/tank/HTFluidHandlerItemWrapper.kt | 2 +- .../storage/item/slot/HTEnergyItemSlot.kt | 2 +- .../ragium/impl/RagiumPlatformImpl.kt | 5 - .../ragium/setup/RagiumBlockEntityTypes.kt | 6 +- .../ragium/setup/RagiumDataComponents.kt | 6 +- .../ragium/setup/RagiumEntityTypes.kt | 6 +- .../hiiragi283/ragium/setup/RagiumItems.kt | 105 ++++++++++---- .../ragium/util/HTItemDropHelper.kt | 2 +- .../ragium/util/HTStackSlotHelper.kt | 2 +- 60 files changed, 511 insertions(+), 440 deletions(-) delete mode 100644 src/api/kotlin/hiiragi283/ragium/api/block/entity/HTBlockEntityWithUpgrade.kt rename src/api/kotlin/hiiragi283/ragium/api/{storage => }/capability/CapabilityExtensions.kt (82%) rename src/api/kotlin/hiiragi283/ragium/api/{storage => }/capability/HTAmountViewCapability.kt (98%) rename src/api/kotlin/hiiragi283/ragium/api/{storage => }/capability/HTAmountViewProvider.kt (87%) rename src/api/kotlin/hiiragi283/ragium/api/{storage => }/capability/HTEnergyCapabilities.kt (98%) rename src/api/kotlin/hiiragi283/ragium/api/{storage => }/capability/HTFluidCapabilities.kt (98%) rename src/api/kotlin/hiiragi283/ragium/api/{storage => }/capability/HTItemCapabilities.kt (99%) rename src/api/kotlin/hiiragi283/ragium/api/{storage => }/capability/HTMultiCapability.kt (98%) create mode 100644 src/api/kotlin/hiiragi283/ragium/api/capability/RagiumCapabilities.kt delete mode 100644 src/api/kotlin/hiiragi283/ragium/api/item/HTDynamicUpgradeItem.kt create mode 100644 src/api/kotlin/hiiragi283/ragium/api/item/component/HTComponentUpgrade.kt delete mode 100644 src/api/kotlin/hiiragi283/ragium/api/item/component/HTMachineUpgrade.kt create mode 100644 src/api/kotlin/hiiragi283/ragium/api/upgrade/HTSlotUpgradeHandler.kt create mode 100644 src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeHandler.kt create mode 100644 src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeHelper.kt create mode 100644 src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeKey.kt create mode 100644 src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeProvider.kt create mode 100644 src/api/kotlin/hiiragi283/ragium/api/upgrade/RagiumUpgradeKeys.kt delete mode 100644 src/main/kotlin/hiiragi283/ragium/common/item/upgrade/HTCreativeUpgradeItem.kt diff --git a/src/api/kotlin/hiiragi283/ragium/api/RagiumPlatform.kt b/src/api/kotlin/hiiragi283/ragium/api/RagiumPlatform.kt index 02680ede4..d25687291 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/RagiumPlatform.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/RagiumPlatform.kt @@ -3,8 +3,6 @@ package hiiragi283.ragium.api import com.google.gson.JsonObject import hiiragi283.ragium.api.data.recipe.ingredient.HTFluidIngredientCreator import hiiragi283.ragium.api.data.recipe.ingredient.HTItemIngredientCreator -import hiiragi283.ragium.api.item.HTDynamicUpgradeItem -import hiiragi283.ragium.api.item.component.HTMachineUpgrade import hiiragi283.ragium.api.material.HTMaterialDefinition import hiiragi283.ragium.api.material.HTMaterialKey import hiiragi283.ragium.api.material.prefix.HTMaterialPrefix @@ -19,14 +17,11 @@ import net.minecraft.client.Minecraft import net.minecraft.core.Holder import net.minecraft.core.HolderLookup import net.minecraft.core.RegistryAccess -import net.minecraft.core.component.DataComponentType import net.minecraft.nbt.CompoundTag import net.minecraft.resources.ResourceKey import net.minecraft.server.MinecraftServer import net.minecraft.server.level.ServerLevel import net.minecraft.world.item.DyeColor -import net.minecraft.world.item.Item -import net.minecraft.world.item.ItemStack import net.minecraft.world.item.crafting.RecipeSerializer import net.minecraft.world.level.Level import net.neoforged.fml.loading.FMLEnvironment @@ -38,20 +33,6 @@ interface RagiumPlatform { val INSTANCE: RagiumPlatform = RagiumAPI.getService() } - /** - * [HTMachineUpgrade]の[DataComponentType]を返します。 - */ - fun getUpgradeDataType(): DataComponentType - - fun getMachineUpgrade(provider: HolderLookup.Provider?, stack: ItemStack): HTMachineUpgrade? { - val item: Item = stack.item - if (item is HTDynamicUpgradeItem) { - val upgrade: HTMachineUpgrade? = item.getUpgrade(provider, stack) - if (upgrade != null) return upgrade - } - return stack.get(getUpgradeDataType()) - } - // Material // fun getMaterialDefinitions(): Map diff --git a/src/api/kotlin/hiiragi283/ragium/api/block/attribute/HTFluidBlockAttribute.kt b/src/api/kotlin/hiiragi283/ragium/api/block/attribute/HTFluidBlockAttribute.kt index 3ee4725f3..973b0a0e6 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/block/attribute/HTFluidBlockAttribute.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/block/attribute/HTFluidBlockAttribute.kt @@ -1,28 +1,28 @@ package hiiragi283.ragium.api.block.attribute import hiiragi283.ragium.api.RagiumAPI -import hiiragi283.ragium.api.block.entity.HTBlockEntityWithUpgrade -import hiiragi283.ragium.api.item.component.HTMachineUpgrade import hiiragi283.ragium.api.math.times import hiiragi283.ragium.api.text.HTHasTranslationKey +import hiiragi283.ragium.api.upgrade.HTUpgradeHandler +import hiiragi283.ragium.api.upgrade.RagiumUpgradeKeys import net.minecraft.Util import net.minecraft.util.StringRepresentable import java.util.function.IntSupplier @JvmRecord data class HTFluidBlockAttribute(private val tankMap: Map) : HTBlockAttribute { - private fun getTankCapacity(type: TankType, upgrade: HTBlockEntityWithUpgrade): IntSupplier { + private fun getTankCapacity(type: TankType, handler: HTUpgradeHandler): IntSupplier { val baseCapacity: IntSupplier = tankMap[type] ?: error("Undefined tank capacity for ${type.serializedName}") - return IntSupplier { upgrade.modifyValue(HTMachineUpgrade.Key.FLUID_CAPACITY) { baseCapacity.asInt * it } } + return IntSupplier { handler.modifyValue(RagiumUpgradeKeys.FLUID_CAPACITY) { baseCapacity.asInt * it } } } - fun getInputTank(upgrade: HTBlockEntityWithUpgrade): IntSupplier = getTankCapacity(TankType.INPUT, upgrade) + fun getInputTank(handler: HTUpgradeHandler): IntSupplier = getTankCapacity(TankType.INPUT, handler) - fun getOutputTank(upgrade: HTBlockEntityWithUpgrade): IntSupplier = getTankCapacity(TankType.OUTPUT, upgrade) + fun getOutputTank(handler: HTUpgradeHandler): IntSupplier = getTankCapacity(TankType.OUTPUT, handler) - fun getFirstInputTank(upgrade: HTBlockEntityWithUpgrade): IntSupplier = getTankCapacity(TankType.FIRST_INPUT, upgrade) + fun getFirstInputTank(handler: HTUpgradeHandler): IntSupplier = getTankCapacity(TankType.FIRST_INPUT, handler) - fun getSecondInputTank(upgrade: HTBlockEntityWithUpgrade): IntSupplier = getTankCapacity(TankType.SECOND_INPUT, upgrade) + fun getSecondInputTank(handler: HTUpgradeHandler): IntSupplier = getTankCapacity(TankType.SECOND_INPUT, handler) enum class TankType : StringRepresentable, diff --git a/src/api/kotlin/hiiragi283/ragium/api/block/entity/HTBlockEntityWithUpgrade.kt b/src/api/kotlin/hiiragi283/ragium/api/block/entity/HTBlockEntityWithUpgrade.kt deleted file mode 100644 index 92b2e0cf2..000000000 --- a/src/api/kotlin/hiiragi283/ragium/api/block/entity/HTBlockEntityWithUpgrade.kt +++ /dev/null @@ -1,60 +0,0 @@ -package hiiragi283.ragium.api.block.entity - -import com.mojang.datafixers.util.Either -import hiiragi283.ragium.api.function.identity -import hiiragi283.ragium.api.item.component.HTMachineUpgrade -import hiiragi283.ragium.api.math.times -import hiiragi283.ragium.api.tier.HTBaseTier -import net.minecraft.world.item.ItemStack -import net.minecraft.world.level.ItemLike -import org.apache.commons.lang3.math.Fraction -import java.util.function.UnaryOperator - -interface HTBlockEntityWithUpgrade { - /** - * 指定した[item]を保持しているかどうか判定します。 - */ - fun hasUpgrade(item: ItemLike): Boolean - - /** - * 現在保持しているアップグレードの一覧を返します。。 - */ - fun getMachineUpgrades(): List> - - fun canApplyUpgrade(stack: ItemStack): Boolean - - /** - * アップグレードスロットから機械の最大のティアを返します。 - * @return ティアが見つからない場合は`null` - */ - fun getMaxMachineTier(): HTBaseTier? = getMachineUpgrades() - .mapNotNull { (upgrade: HTMachineUpgrade, _) -> upgrade.getBaseTier() } - .maxOrNull() - - fun collectAllModifier(): Map = HTMachineUpgrade.Key.entries.associateWith(::collectModifier) - - fun collectModifier(key: HTMachineUpgrade.Key): Fraction { - var result: Fraction = Fraction.ONE - for ((upgrade: HTMachineUpgrade, count: Int) in getMachineUpgrades()) { - if (upgrade.getBaseTier() == HTBaseTier.CREATIVE) continue - val multiplier: Fraction = upgrade.getProperty(key) ?: continue - result *= (multiplier * count) - } - return result - } - - fun calculateValue(key: HTMachineUpgrade.Key): Either { - var result: Fraction = Fraction.ONE - for ((upgrade: HTMachineUpgrade, count: Int) in getMachineUpgrades()) { - if (upgrade.getBaseTier() == HTBaseTier.CREATIVE) { - return Either.left(key.creativeValue) - } - val multiplier: Fraction = upgrade.getProperty(key) ?: continue - result *= (multiplier * count) - } - return Either.right(result) - } - - fun modifyValue(key: HTMachineUpgrade.Key, factory: UnaryOperator): Int = - calculateValue(key).map(identity()) { factory.apply(it).toInt() } -} diff --git a/src/api/kotlin/hiiragi283/ragium/api/storage/capability/CapabilityExtensions.kt b/src/api/kotlin/hiiragi283/ragium/api/capability/CapabilityExtensions.kt similarity index 82% rename from src/api/kotlin/hiiragi283/ragium/api/storage/capability/CapabilityExtensions.kt rename to src/api/kotlin/hiiragi283/ragium/api/capability/CapabilityExtensions.kt index bac47d643..da3545278 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/storage/capability/CapabilityExtensions.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/capability/CapabilityExtensions.kt @@ -1,4 +1,4 @@ -package hiiragi283.ragium.api.storage.capability +package hiiragi283.ragium.api.capability import net.neoforged.neoforge.fluids.capability.IFluidHandler import net.neoforged.neoforge.items.IItemHandler diff --git a/src/api/kotlin/hiiragi283/ragium/api/storage/capability/HTAmountViewCapability.kt b/src/api/kotlin/hiiragi283/ragium/api/capability/HTAmountViewCapability.kt similarity index 98% rename from src/api/kotlin/hiiragi283/ragium/api/storage/capability/HTAmountViewCapability.kt rename to src/api/kotlin/hiiragi283/ragium/api/capability/HTAmountViewCapability.kt index 065e9c2d4..8d783742f 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/storage/capability/HTAmountViewCapability.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/capability/HTAmountViewCapability.kt @@ -1,4 +1,4 @@ -package hiiragi283.ragium.api.storage.capability +package hiiragi283.ragium.api.capability import hiiragi283.ragium.api.stack.ImmutableItemStack import hiiragi283.ragium.api.storage.HTAmountView diff --git a/src/api/kotlin/hiiragi283/ragium/api/storage/capability/HTAmountViewProvider.kt b/src/api/kotlin/hiiragi283/ragium/api/capability/HTAmountViewProvider.kt similarity index 87% rename from src/api/kotlin/hiiragi283/ragium/api/storage/capability/HTAmountViewProvider.kt rename to src/api/kotlin/hiiragi283/ragium/api/capability/HTAmountViewProvider.kt index 43d09835a..7c21cf4e6 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/storage/capability/HTAmountViewProvider.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/capability/HTAmountViewProvider.kt @@ -1,4 +1,4 @@ -package hiiragi283.ragium.api.storage.capability +package hiiragi283.ragium.api.capability import hiiragi283.ragium.api.storage.HTAmountView import java.util.function.BiFunction diff --git a/src/api/kotlin/hiiragi283/ragium/api/storage/capability/HTEnergyCapabilities.kt b/src/api/kotlin/hiiragi283/ragium/api/capability/HTEnergyCapabilities.kt similarity index 98% rename from src/api/kotlin/hiiragi283/ragium/api/storage/capability/HTEnergyCapabilities.kt rename to src/api/kotlin/hiiragi283/ragium/api/capability/HTEnergyCapabilities.kt index d28f806ff..9d84e0316 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/storage/capability/HTEnergyCapabilities.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/capability/HTEnergyCapabilities.kt @@ -1,4 +1,4 @@ -package hiiragi283.ragium.api.storage.capability +package hiiragi283.ragium.api.capability import hiiragi283.ragium.api.serialization.value.HTValueSerializable import hiiragi283.ragium.api.stack.ImmutableItemStack diff --git a/src/api/kotlin/hiiragi283/ragium/api/storage/capability/HTFluidCapabilities.kt b/src/api/kotlin/hiiragi283/ragium/api/capability/HTFluidCapabilities.kt similarity index 98% rename from src/api/kotlin/hiiragi283/ragium/api/storage/capability/HTFluidCapabilities.kt rename to src/api/kotlin/hiiragi283/ragium/api/capability/HTFluidCapabilities.kt index 5cd0b6965..d7186861c 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/storage/capability/HTFluidCapabilities.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/capability/HTFluidCapabilities.kt @@ -1,4 +1,4 @@ -package hiiragi283.ragium.api.storage.capability +package hiiragi283.ragium.api.capability import hiiragi283.ragium.api.stack.ImmutableFluidStack import hiiragi283.ragium.api.stack.ImmutableItemStack diff --git a/src/api/kotlin/hiiragi283/ragium/api/storage/capability/HTItemCapabilities.kt b/src/api/kotlin/hiiragi283/ragium/api/capability/HTItemCapabilities.kt similarity index 99% rename from src/api/kotlin/hiiragi283/ragium/api/storage/capability/HTItemCapabilities.kt rename to src/api/kotlin/hiiragi283/ragium/api/capability/HTItemCapabilities.kt index 1251b5e30..f51e216de 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/storage/capability/HTItemCapabilities.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/capability/HTItemCapabilities.kt @@ -1,4 +1,4 @@ -package hiiragi283.ragium.api.storage.capability +package hiiragi283.ragium.api.capability import hiiragi283.ragium.api.serialization.value.HTValueSerializable import hiiragi283.ragium.api.stack.ImmutableItemStack diff --git a/src/api/kotlin/hiiragi283/ragium/api/storage/capability/HTMultiCapability.kt b/src/api/kotlin/hiiragi283/ragium/api/capability/HTMultiCapability.kt similarity index 98% rename from src/api/kotlin/hiiragi283/ragium/api/storage/capability/HTMultiCapability.kt rename to src/api/kotlin/hiiragi283/ragium/api/capability/HTMultiCapability.kt index d1e13c797..2f882221f 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/storage/capability/HTMultiCapability.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/capability/HTMultiCapability.kt @@ -1,4 +1,4 @@ -package hiiragi283.ragium.api.storage.capability +package hiiragi283.ragium.api.capability import com.google.common.util.concurrent.Runnables import hiiragi283.ragium.api.stack.ImmutableItemStack diff --git a/src/api/kotlin/hiiragi283/ragium/api/capability/RagiumCapabilities.kt b/src/api/kotlin/hiiragi283/ragium/api/capability/RagiumCapabilities.kt new file mode 100644 index 000000000..33cb32034 --- /dev/null +++ b/src/api/kotlin/hiiragi283/ragium/api/capability/RagiumCapabilities.kt @@ -0,0 +1,27 @@ +package hiiragi283.ragium.api.capability + +import hiiragi283.ragium.api.RagiumAPI +import hiiragi283.ragium.api.upgrade.HTUpgradeHandler +import hiiragi283.ragium.api.upgrade.HTUpgradeProvider +import net.neoforged.neoforge.capabilities.BlockCapability +import net.neoforged.neoforge.capabilities.ItemCapability + +object RagiumCapabilities { + @JvmField + val UPGRADABLE_BLOCK: BlockCapability = BlockCapability.createVoid( + RagiumAPI.id("upgradable"), + HTUpgradeHandler::class.java, + ) + + @JvmField + val UPGRADABLE_ITEM: ItemCapability = ItemCapability.createVoid( + RagiumAPI.id("upgradable"), + HTUpgradeHandler::class.java, + ) + + @JvmField + val UPGRADE_ITEM: ItemCapability = ItemCapability.createVoid( + RagiumAPI.id("upgrade"), + HTUpgradeProvider::class.java, + ) +} diff --git a/src/api/kotlin/hiiragi283/ragium/api/item/HTDynamicUpgradeItem.kt b/src/api/kotlin/hiiragi283/ragium/api/item/HTDynamicUpgradeItem.kt deleted file mode 100644 index a8582df75..000000000 --- a/src/api/kotlin/hiiragi283/ragium/api/item/HTDynamicUpgradeItem.kt +++ /dev/null @@ -1,9 +0,0 @@ -package hiiragi283.ragium.api.item - -import hiiragi283.ragium.api.item.component.HTMachineUpgrade -import net.minecraft.core.HolderLookup -import net.minecraft.world.item.ItemStack - -fun interface HTDynamicUpgradeItem { - fun getUpgrade(provider: HolderLookup.Provider?, stack: ItemStack): HTMachineUpgrade? -} diff --git a/src/api/kotlin/hiiragi283/ragium/api/item/component/HTComponentUpgrade.kt b/src/api/kotlin/hiiragi283/ragium/api/item/component/HTComponentUpgrade.kt new file mode 100644 index 000000000..49f171a58 --- /dev/null +++ b/src/api/kotlin/hiiragi283/ragium/api/item/component/HTComponentUpgrade.kt @@ -0,0 +1,33 @@ +package hiiragi283.ragium.api.item.component + +import hiiragi283.ragium.api.serialization.codec.BiCodec +import hiiragi283.ragium.api.serialization.codec.BiCodecs +import hiiragi283.ragium.api.upgrade.HTUpgradeKey +import io.netty.buffer.ByteBuf +import org.apache.commons.lang3.math.Fraction + +@JvmInline +value class HTComponentUpgrade private constructor(val map: Map) : Map by map { + companion object { + @JvmField + val CODEC: BiCodec = BiCodecs + .mapOf(HTUpgradeKey.CODEC, BiCodecs.NON_NEGATIVE_FRACTION) + .xmap(::HTComponentUpgrade, HTComponentUpgrade::map) + + @JvmStatic + val EMPTY = HTComponentUpgrade(mapOf()) + + @JvmStatic + fun create(vararg pairs: Pair): HTComponentUpgrade = create(mapOf(*pairs)) + + @JvmStatic + inline fun create(builderAction: MutableMap.() -> Unit): HTComponentUpgrade = + create(buildMap(builderAction)) + + @JvmStatic + fun create(map: Map): HTComponentUpgrade = when { + map.isEmpty() -> EMPTY + else -> HTComponentUpgrade(map) + } + } +} diff --git a/src/api/kotlin/hiiragi283/ragium/api/item/component/HTMachineUpgrade.kt b/src/api/kotlin/hiiragi283/ragium/api/item/component/HTMachineUpgrade.kt deleted file mode 100644 index 315838aa0..000000000 --- a/src/api/kotlin/hiiragi283/ragium/api/item/component/HTMachineUpgrade.kt +++ /dev/null @@ -1,136 +0,0 @@ -package hiiragi283.ragium.api.item.component - -import com.mojang.datafixers.util.Either -import hiiragi283.ragium.api.RagiumAPI -import hiiragi283.ragium.api.serialization.codec.BiCodec -import hiiragi283.ragium.api.serialization.codec.BiCodecs -import hiiragi283.ragium.api.text.HTTranslation -import hiiragi283.ragium.api.tier.HTBaseTier -import hiiragi283.ragium.api.tier.HTTierProvider -import hiiragi283.ragium.api.util.unwrapEither -import io.netty.buffer.ByteBuf -import net.minecraft.ChatFormatting -import net.minecraft.Util -import net.minecraft.network.chat.Component -import net.minecraft.util.StringRepresentable -import org.apache.commons.lang3.math.Fraction -import java.util.function.Consumer - -sealed interface HTMachineUpgrade { - companion object { - @JvmField - val CODEC: BiCodec = BiCodecs - .xor(Tiered.CODEC, Properties.CODEC) - .xmap(::unwrapEither) { upgrade: HTMachineUpgrade -> - when (upgrade) { - is Properties -> Either.right(upgrade) - is Tiered -> Either.left(upgrade) - } - } - - @JvmStatic - fun create(tier: HTTierProvider): HTMachineUpgrade = Tiered(tier.getBaseTier()) - - @JvmStatic - fun create(vararg pairs: Pair): HTMachineUpgrade = create(mapOf(*pairs)) - - @JvmStatic - fun create(properties: Map): HTMachineUpgrade = Properties(properties) - } - - fun getBaseTier(): HTBaseTier? - - fun getProperty(key: Key): Fraction? - - fun forEachProperties(action: (Key, Fraction) -> Unit) { - for (key: Key in Key.entries) { - val property: Fraction = getProperty(key) ?: continue - action(key, property) - } - } - - fun addToTooltip(tooltipAdder: Consumer) { - forEachProperties { key: Key, property: Fraction -> - val color: ChatFormatting = getPropertyColor(key, property) ?: return@forEachProperties - tooltipAdder.accept(key.translateColored(ChatFormatting.GRAY, color, property)) - } - } - - fun addToTooltip(key: Key, tooltipAdder: Consumer) { - val property: Fraction = getProperty(key) ?: return - val color: ChatFormatting = getPropertyColor(key, property) ?: return - tooltipAdder.accept(key.translateColored(ChatFormatting.GRAY, color, property)) - } - - private fun getPropertyColor(key: Key, property: Fraction): ChatFormatting? = when { - property > Fraction.ONE -> ChatFormatting.GREEN - property < Fraction.ONE -> ChatFormatting.RED - else -> null - } - - fun unwrap(): Either> - - // Tiered // - - @JvmRecord - private data class Tiered(private val tier: HTBaseTier) : HTMachineUpgrade { - companion object { - @JvmField - val CODEC: BiCodec = HTBaseTier.CODEC.xmap(::Tiered, Tiered::tier) - } - - override fun getBaseTier(): HTBaseTier = tier - - override fun getProperty(key: Key): Fraction? = when (tier) { - HTBaseTier.BASIC -> Fraction.ONE - HTBaseTier.ADVANCED -> Fraction.getFraction(2, 1) - HTBaseTier.ELITE -> Fraction.getFraction(3, 1) - HTBaseTier.ULTIMATE -> Fraction.getFraction(4, 1) - else -> null - } - - override fun unwrap(): Either> = Either.left(tier) - } - - // Properties // - - @JvmRecord - private data class Properties(private val properties: Map) : HTMachineUpgrade { - companion object { - @JvmField - val CODEC: BiCodec = BiCodecs - .mapOf(Key.CODEC, BiCodecs.FRACTION) - .xmap(::Properties, Properties::properties) - } - - override fun getBaseTier(): HTBaseTier? = null - - override fun getProperty(key: Key): Fraction? = properties[key] - - override fun unwrap(): Either> = Either.right(properties) - } - - // Key // - - enum class Key(val creativeValue: Int) : - StringRepresentable, - HTTranslation { - // Default - ENERGY_CAPACITY(Int.MAX_VALUE), - ENERGY_EFFICIENCY(0), - ENERGY_GENERATION(Int.MAX_VALUE), - FLUID_CAPACITY(Int.MAX_VALUE), - SPEED(1), - ; - - companion object { - @JvmField - val CODEC: BiCodec = BiCodecs.stringEnum(Key::getSerializedName) - } - - override val translationKey: String = - Util.makeDescriptionId("gui", RagiumAPI.id("machine.upgrade.$serializedName")) - - override fun getSerializedName(): String = name.lowercase() - } -} diff --git a/src/api/kotlin/hiiragi283/ragium/api/serialization/codec/BiCodecs.kt b/src/api/kotlin/hiiragi283/ragium/api/serialization/codec/BiCodecs.kt index 23e2f2a4f..4b12b7545 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/serialization/codec/BiCodecs.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/serialization/codec/BiCodecs.kt @@ -47,6 +47,7 @@ object BiCodecs { /** * `0`以上の値を対象とする[Int]の[BiCodec] + * @see net.minecraft.util.ExtraCodecs.NON_NEGATIVE_INT */ @JvmField val NON_NEGATIVE_INT: BiCodec = intRange(0, Int.MAX_VALUE) @@ -60,6 +61,7 @@ object BiCodecs { /** * `1`以上の値を対象とする[Int]の[BiCodec] + * @see net.minecraft.util.ExtraCodecs.POSITIVE_INT */ @JvmField val POSITIVE_INT: BiCodec = intRange(1, Int.MAX_VALUE) @@ -74,6 +76,15 @@ object BiCodecs { @JvmField val FRACTION: BiCodec = BiCodec.STRING.flatXmap(Fraction::getFraction, Fraction::toString) + /** + * `0`以上の値を対象とする[Fraction]の[BiCodec] + */ + @JvmField + val NON_NEGATIVE_FRACTION: BiCodec = FRACTION.validate { fraction: Fraction -> + check(fraction > Fraction.ZERO) { "Value must be non-negative: $fraction" } + fraction + } + /** * 指定された[keyCodec], [valueCodec]に基づいて,[Map]の[BiCodec]を返します。 * @param K [Map]のキーとなるクラス diff --git a/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTSlotUpgradeHandler.kt b/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTSlotUpgradeHandler.kt new file mode 100644 index 000000000..835e87d25 --- /dev/null +++ b/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTSlotUpgradeHandler.kt @@ -0,0 +1,14 @@ +package hiiragi283.ragium.api.upgrade + +import hiiragi283.ragium.api.stack.ImmutableComponentStack +import hiiragi283.ragium.api.stack.ImmutableItemStack +import hiiragi283.ragium.api.storage.item.HTItemSlot + +interface HTSlotUpgradeHandler : HTUpgradeHandler { + fun getUpgradeSlots(): List + + override fun getUpgrades(): List = getUpgradeSlots().mapNotNull(HTItemSlot::getStack) + + override fun isValidUpgrade(upgrade: ImmutableItemStack, existing: List): Boolean = + existing.none { stack: ImmutableItemStack -> ImmutableComponentStack.matches(stack, upgrade) } +} diff --git a/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeHandler.kt b/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeHandler.kt new file mode 100644 index 000000000..0a89344dd --- /dev/null +++ b/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeHandler.kt @@ -0,0 +1,53 @@ +package hiiragi283.ragium.api.upgrade + +import hiiragi283.ragium.api.math.fraction +import hiiragi283.ragium.api.math.times +import hiiragi283.ragium.api.stack.ImmutableItemStack +import org.apache.commons.lang3.math.Fraction +import java.util.function.UnaryOperator + +/** + * アップグレードを保持するインターフェース + */ +interface HTUpgradeHandler { + fun getUpgrades(): List + + fun isValidUpgrade(upgrade: ImmutableItemStack, existing: List): Boolean + + // Extensions // + + fun getMaxMultiplier(key: HTUpgradeKey): Fraction? = getUpgrades().maxOfOrNull { HTUpgradeHelper.getUpgrade(it, key) } + + fun hasUpgrade(key: HTUpgradeKey): Boolean { + for (stack: ImmutableItemStack in getUpgrades()) { + val fraction: Fraction = HTUpgradeHelper.getUpgrade(stack, key) + if (fraction > Fraction.ZERO) { + return true + } + } + return false + } + + fun collectMultiplier(key: HTUpgradeKey, base: Fraction = fraction(1)): Fraction { + var isEmpty = true + var sum: Fraction = base + for (stack: ImmutableItemStack in getUpgrades()) { + val fraction: Fraction = HTUpgradeHelper.getUpgrade(stack, key) + if (fraction > Fraction.ZERO) { + sum *= fraction + isEmpty = false + } + } + return when (isEmpty) { + true -> Fraction.ZERO + false -> sum + } + } + + fun modifyValue(key: HTUpgradeKey, base: Fraction = fraction(1), operator: UnaryOperator): Int = + collectMultiplier(key, base).let(operator::apply).toInt() + + fun getBaseMultiplier(): Fraction = getMaxMultiplier(RagiumUpgradeKeys.BASE_MULTIPLIER) ?: Fraction.ONE + + fun isCreative(): Boolean = hasUpgrade(RagiumUpgradeKeys.IS_CREATIVE) +} diff --git a/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeHelper.kt b/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeHelper.kt new file mode 100644 index 000000000..d635fa580 --- /dev/null +++ b/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeHelper.kt @@ -0,0 +1,62 @@ +package hiiragi283.ragium.api.upgrade + +import hiiragi283.ragium.api.capability.RagiumCapabilities +import hiiragi283.ragium.api.item.component.HTComponentUpgrade +import hiiragi283.ragium.api.stack.ImmutableItemStack +import hiiragi283.ragium.api.stack.toImmutable +import net.minecraft.ChatFormatting +import net.minecraft.network.chat.Component +import net.minecraft.world.item.ItemStack +import org.apache.commons.lang3.math.Fraction +import java.util.function.Consumer + +data object HTUpgradeHelper { + // HTUpgradeProvider // + + @JvmStatic + fun getUpgrade(stack: ItemStack, key: HTUpgradeKey): Fraction? { + val immutable: ImmutableItemStack = stack.toImmutable() ?: return Fraction.ZERO + return getUpgrade(immutable, key) + } + + @JvmStatic + fun getUpgrade(stack: ImmutableItemStack, key: HTUpgradeKey): Fraction = + stack.getCapability(RagiumCapabilities.UPGRADE_ITEM)?.getUpgradeData(key) ?: Fraction.ZERO + + @JvmStatic + fun appendTooltips(stack: ItemStack, consumer: Consumer) { + for (key: HTUpgradeKey in HTUpgradeKey.getAll()) { + val property: Fraction = getUpgrade(stack, key) ?: continue + if (property <= Fraction.ZERO) continue + consumer.accept(key.translateColored(ChatFormatting.GRAY, getPropertyColor(key, property), property)) + } + } + + @JvmStatic + fun appendTooltips(component: HTComponentUpgrade, consumer: Consumer) { + component.forEach { (key: HTUpgradeKey, property: Fraction) -> + consumer.accept(key.translateColored(ChatFormatting.GRAY, getPropertyColor(key, property), property)) + } + } + + @JvmStatic + private fun getPropertyColor(key: HTUpgradeKey, property: Fraction): ChatFormatting = when { + property > Fraction.ONE -> ChatFormatting.GREEN + property < Fraction.ONE -> ChatFormatting.RED + else -> ChatFormatting.WHITE + } + + // HTUpgradableHandler // + + @JvmStatic + fun getHandler(stack: ItemStack): HTUpgradeHandler? = stack.toImmutable()?.let(::getHandler) + + @JvmStatic + fun getMultiplier(stack: ItemStack, key: HTUpgradeKey): Fraction = getHandler(stack)?.collectMultiplier(key) ?: Fraction.ZERO + + @JvmStatic + fun getHandler(stack: ImmutableItemStack): HTUpgradeHandler? = stack.getCapability(RagiumCapabilities.UPGRADABLE_ITEM) + + @JvmStatic + fun getMultiplier(stack: ImmutableItemStack, key: HTUpgradeKey): Fraction = getHandler(stack)?.collectMultiplier(key) ?: Fraction.ZERO +} diff --git a/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeKey.kt b/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeKey.kt new file mode 100644 index 000000000..f0e948ad7 --- /dev/null +++ b/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeKey.kt @@ -0,0 +1,26 @@ +package hiiragi283.ragium.api.upgrade + +import hiiragi283.ragium.api.RagiumAPI +import hiiragi283.ragium.api.serialization.codec.BiCodec +import hiiragi283.ragium.api.text.HTTranslation +import io.netty.buffer.ByteBuf +import net.minecraft.Util + +@ConsistentCopyVisibility +data class HTUpgradeKey private constructor(val name: String) : HTTranslation { + companion object { + @JvmStatic + private val instances: MutableMap = mutableMapOf() + + @JvmField + val CODEC: BiCodec = BiCodec.STRING.xmap(HTUpgradeKey::get, HTUpgradeKey::name) + + @JvmStatic + fun get(name: String): HTUpgradeKey = instances.computeIfAbsent(name, ::HTUpgradeKey) + + @JvmStatic + fun getAll(): Collection = instances.values + } + + override val translationKey: String = Util.makeDescriptionId("gui", RagiumAPI.id("machine.upgrade.$name")) +} diff --git a/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeProvider.kt b/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeProvider.kt new file mode 100644 index 000000000..55f6b6b3b --- /dev/null +++ b/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeProvider.kt @@ -0,0 +1,15 @@ +package hiiragi283.ragium.api.upgrade + +import org.apache.commons.lang3.math.Fraction + +/** + * アップグレードを提供するインターフェース + */ +fun interface HTUpgradeProvider { + /** + * 指定された引数から,アップグレードの倍率を返します。 + * @param key 対象の倍率に紐づいた[HTUpgradeKey] + * @return [key]に紐づいたアップグレードの倍率 + */ + fun getUpgradeData(key: HTUpgradeKey): Fraction +} diff --git a/src/api/kotlin/hiiragi283/ragium/api/upgrade/RagiumUpgradeKeys.kt b/src/api/kotlin/hiiragi283/ragium/api/upgrade/RagiumUpgradeKeys.kt new file mode 100644 index 000000000..4e3eef7fa --- /dev/null +++ b/src/api/kotlin/hiiragi283/ragium/api/upgrade/RagiumUpgradeKeys.kt @@ -0,0 +1,44 @@ +package hiiragi283.ragium.api.upgrade + +object RagiumUpgradeKeys { + // Common + @JvmField + val BASE_MULTIPLIER: HTUpgradeKey = HTUpgradeKey.get("base_multiplier") + + @JvmField + val IS_CREATIVE: HTUpgradeKey = HTUpgradeKey.get("is_creative") + + // Energy + @JvmField + val ENERGY_CAPACITY: HTUpgradeKey = HTUpgradeKey.get("energy_capacity") + + @JvmField + val ENERGY_EFFICIENCY: HTUpgradeKey = HTUpgradeKey.get("energy_efficiency") + + @JvmField + val ENERGY_GENERATION: HTUpgradeKey = HTUpgradeKey.get("energy_generation") + + // Fluid + @JvmField + val FLUID_CAPACITY: HTUpgradeKey = HTUpgradeKey.get("fluid_capacity") + + // Processor + @JvmField + val SPEED: HTUpgradeKey = HTUpgradeKey.get("speed") + + @JvmField + val USE_LUBRICANT: HTUpgradeKey = HTUpgradeKey.get("use_lubricant") + + @JvmField + val DISABLE_EXTRA: HTUpgradeKey = HTUpgradeKey.get("disable_extra") + + // Device + @JvmField + val EXP_COLLECTING: HTUpgradeKey = HTUpgradeKey.get("exp_collecting") + + @JvmField + val FISHING: HTUpgradeKey = HTUpgradeKey.get("fishing") + + @JvmField + val MOB_CAPTURE: HTUpgradeKey = HTUpgradeKey.get("mob_capture") +} diff --git a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt index 9f965d150..d86e4336e 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt @@ -2,10 +2,10 @@ package hiiragi283.ragium.data.client import hiiragi283.ragium.api.block.attribute.HTFluidBlockAttribute import hiiragi283.ragium.api.data.lang.HTLanguageProvider -import hiiragi283.ragium.api.item.component.HTMachineUpgrade import hiiragi283.ragium.api.recipe.RagiumRecipeTypes import hiiragi283.ragium.api.tag.RagiumModTags import hiiragi283.ragium.api.text.RagiumTranslation +import hiiragi283.ragium.api.upgrade.RagiumUpgradeKeys import hiiragi283.ragium.api.util.access.HTAccessConfig import hiiragi283.ragium.client.integration.jade.provider.HTBlockConfigurationDataProvider import hiiragi283.ragium.client.integration.jade.provider.HTBlockMachinePropertiesProvider @@ -370,11 +370,22 @@ class RagiumEnglishProvider(output: PackOutput) : HTLanguageProvider.English(out add(HTFluidBlockAttribute.TankType.FIRST_INPUT, "First Input Tank Capacity") add(HTFluidBlockAttribute.TankType.SECOND_INPUT, "Second Input Tank Capacity") - add(HTMachineUpgrade.Key.ENERGY_CAPACITY, $$"- Energy Capacity: %1$s") - add(HTMachineUpgrade.Key.ENERGY_EFFICIENCY, $$"- Energy Efficiency: %1$s") - add(HTMachineUpgrade.Key.ENERGY_GENERATION, $$"- Energy Generation: %1$s") - add(HTMachineUpgrade.Key.FLUID_CAPACITY, $$"- Fluid Capacity: %1$s") - add(HTMachineUpgrade.Key.SPEED, $$"- Speed: %1$s") + add(RagiumUpgradeKeys.BASE_MULTIPLIER, $$"- Base Multiplier: %1$s") + add(RagiumUpgradeKeys.IS_CREATIVE, "- Creative") + + add(RagiumUpgradeKeys.ENERGY_CAPACITY, $$"- Energy Capacity: %1$s") + add(RagiumUpgradeKeys.ENERGY_EFFICIENCY, $$"- Energy Efficiency: %1$s") + add(RagiumUpgradeKeys.ENERGY_GENERATION, $$"- Energy Generation: %1$s") + + add(RagiumUpgradeKeys.FLUID_CAPACITY, $$"- Fluid Capacity: %1$s") + + add(RagiumUpgradeKeys.SPEED, $$"- Speed: %1$s") + add(RagiumUpgradeKeys.USE_LUBRICANT, "- Use lubricant per operation") + add(RagiumUpgradeKeys.DISABLE_EXTRA, "- Extra output disabled") + + add(RagiumUpgradeKeys.EXP_COLLECTING, "- Collect Experience Orb instead of Water") + add(RagiumUpgradeKeys.FISHING, "- Do fishing instead of collecting items") + add(RagiumUpgradeKeys.MOB_CAPTURE, "- Capture mobs instead of collecting items") // API - Constants add(RagiumTranslation.ERROR, "Error") add(RagiumTranslation.INFINITE, "Infinite") diff --git a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt index 45287616a..755a59acc 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt @@ -2,10 +2,10 @@ package hiiragi283.ragium.data.client import hiiragi283.ragium.api.block.attribute.HTFluidBlockAttribute import hiiragi283.ragium.api.data.lang.HTLanguageProvider -import hiiragi283.ragium.api.item.component.HTMachineUpgrade import hiiragi283.ragium.api.recipe.RagiumRecipeTypes import hiiragi283.ragium.api.tag.RagiumModTags import hiiragi283.ragium.api.text.RagiumTranslation +import hiiragi283.ragium.api.upgrade.RagiumUpgradeKeys import hiiragi283.ragium.api.util.access.HTAccessConfig import hiiragi283.ragium.client.integration.jade.provider.HTBlockConfigurationDataProvider import hiiragi283.ragium.client.integration.jade.provider.HTBlockMachinePropertiesProvider @@ -372,11 +372,22 @@ class RagiumJapaneseProvider(output: PackOutput) : HTLanguageProvider.Japanese(o add(HTFluidBlockAttribute.TankType.FIRST_INPUT, "1番目の搬入タンクの容量") add(HTFluidBlockAttribute.TankType.SECOND_INPUT, "2番目の搬入タンクの容量") - add(HTMachineUpgrade.Key.ENERGY_CAPACITY, $$"- エネルギー容量: %1$s") - add(HTMachineUpgrade.Key.ENERGY_EFFICIENCY, $$"- エネルギー効率: %1$s") - add(HTMachineUpgrade.Key.ENERGY_GENERATION, $$"- エネルギー生産率: %1$s") - add(HTMachineUpgrade.Key.FLUID_CAPACITY, $$"- 液体容量: %1$s") - add(HTMachineUpgrade.Key.SPEED, $$"- 処理速度: %1$s") + add(RagiumUpgradeKeys.BASE_MULTIPLIER, $$"- 基本倍率: %1$s") + add(RagiumUpgradeKeys.IS_CREATIVE, "- クリエイティブ") + + add(RagiumUpgradeKeys.ENERGY_CAPACITY, $$"- エネルギー容量: %1$s") + add(RagiumUpgradeKeys.ENERGY_EFFICIENCY, $$"- エネルギー効率: %1$s") + add(RagiumUpgradeKeys.ENERGY_GENERATION, $$"- エネルギー生産率: %1$s") + + add(RagiumUpgradeKeys.FLUID_CAPACITY, $$"- 液体容量: %1$s") + + add(RagiumUpgradeKeys.SPEED, $$"- 処理速度: %1$s") + add(RagiumUpgradeKeys.USE_LUBRICANT, "- 処理ごとに潤滑油を消費") + add(RagiumUpgradeKeys.DISABLE_EXTRA, "- 追加の生産物を無効化") + + add(RagiumUpgradeKeys.EXP_COLLECTING, "- 水の代わりに経験値オーブを収集") + add(RagiumUpgradeKeys.FISHING, "- アイテム収集の代わりに釣りを実行") + add(RagiumUpgradeKeys.MOB_CAPTURE, "- アイテム収集の代わりにモブを捕獲") // API - Constants add(RagiumTranslation.ERROR, "エラー") add(RagiumTranslation.INFINITE, "無限") diff --git a/src/integration/kotlin/hiiragi283/ragium/client/integration/jade/provider/HTBlockMachinePropertiesProvider.kt b/src/integration/kotlin/hiiragi283/ragium/client/integration/jade/provider/HTBlockMachinePropertiesProvider.kt index 2e7282390..ee1339d56 100644 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/jade/provider/HTBlockMachinePropertiesProvider.kt +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/jade/provider/HTBlockMachinePropertiesProvider.kt @@ -1,27 +1,32 @@ package hiiragi283.ragium.client.integration.jade.provider -import hiiragi283.ragium.api.block.entity.HTBlockEntityWithUpgrade -import hiiragi283.ragium.api.item.component.HTMachineUpgrade +import hiiragi283.ragium.api.item.component.HTComponentUpgrade +import hiiragi283.ragium.api.upgrade.HTUpgradeHelper +import hiiragi283.ragium.api.upgrade.HTUpgradeKey import hiiragi283.ragium.client.integration.jade.provider.base.HTBasicJadeDataProvider -import hiiragi283.ragium.common.block.entity.HTMachineBlockEntity +import hiiragi283.ragium.common.block.entity.HTUpgradableBlockEntity +import hiiragi283.ragium.common.block.entity.component.HTMachineUpgradeComponent +import org.apache.commons.lang3.math.Fraction import snownee.jade.api.BlockAccessor import snownee.jade.api.ITooltip import snownee.jade.api.config.IPluginConfig -object HTBlockMachinePropertiesProvider : HTBasicJadeDataProvider( +object HTBlockMachinePropertiesProvider : HTBasicJadeDataProvider( "block_machine_properties", - HTMachineUpgrade.CODEC.streamCodec.cast(), + HTComponentUpgrade.CODEC.streamCodec.cast(), ) { - override fun streamData(accessor: BlockAccessor): HTMachineUpgrade? = (accessor.blockEntity as? HTMachineBlockEntity) - ?.let(HTBlockEntityWithUpgrade::collectAllModifier) - ?.let(HTMachineUpgrade::create) + override fun streamData(accessor: BlockAccessor): HTComponentUpgrade? = (accessor.blockEntity as? HTUpgradableBlockEntity) + ?.machineUpgrade + ?.let { component: HTMachineUpgradeComponent -> HTUpgradeKey.getAll().associateWith(component::collectMultiplier) } + ?.let { map: Map -> map.filter { (_, value: Fraction) -> value > Fraction.ZERO } } + ?.let(HTComponentUpgrade.Companion::create) override fun appendTooltip( tooltip: ITooltip, accessor: BlockAccessor, config: IPluginConfig, - data: HTMachineUpgrade, + data: HTComponentUpgrade, ) { - data.addToTooltip(tooltip::add) + HTUpgradeHelper.appendTooltips(data, tooltip::add) } } diff --git a/src/main/kotlin/hiiragi283/ragium/client/RagiumClient.kt b/src/main/kotlin/hiiragi283/ragium/client/RagiumClient.kt index ecfe9766f..5e566f38c 100644 --- a/src/main/kotlin/hiiragi283/ragium/client/RagiumClient.kt +++ b/src/main/kotlin/hiiragi283/ragium/client/RagiumClient.kt @@ -9,6 +9,7 @@ import hiiragi283.ragium.api.registry.impl.HTDeferredMenuType import hiiragi283.ragium.api.registry.impl.HTSimpleDeferredBlock import hiiragi283.ragium.api.registry.toId import hiiragi283.ragium.api.registry.vanillaId +import hiiragi283.ragium.api.upgrade.RagiumUpgradeKeys import hiiragi283.ragium.api.world.getTypedBlockEntity import hiiragi283.ragium.client.event.HTClientItemTooltipComponent import hiiragi283.ragium.client.event.HTItemTooltipContent @@ -117,7 +118,7 @@ class RagiumClient(eventBus: IEventBus, container: ModContainer) { getter != null && pos != null -> { val collector: HTFluidCollectorBlockEntity? = getter.getTypedBlockEntity(pos) - if (collector != null && collector.hasUpgrade(RagiumItems.EXP_COLLECTOR_UPGRADE)) { + if (collector != null && collector.hasUpgrade(RagiumUpgradeKeys.EXP_COLLECTING)) { 0x66ff33 } else { BiomeColors.getAverageWaterColor(getter, pos) diff --git a/src/main/kotlin/hiiragi283/ragium/client/event/RagiumTooltipHandler.kt b/src/main/kotlin/hiiragi283/ragium/client/event/RagiumTooltipHandler.kt index 4c58fbf1e..9ea5601f1 100644 --- a/src/main/kotlin/hiiragi283/ragium/client/event/RagiumTooltipHandler.kt +++ b/src/main/kotlin/hiiragi283/ragium/client/event/RagiumTooltipHandler.kt @@ -2,10 +2,10 @@ package hiiragi283.ragium.client.event import com.mojang.datafixers.util.Either import hiiragi283.ragium.api.RagiumAPI -import hiiragi283.ragium.api.RagiumPlatform import hiiragi283.ragium.api.item.component.HTItemContents import hiiragi283.ragium.api.text.HTTranslation import hiiragi283.ragium.api.text.RagiumTranslation +import hiiragi283.ragium.api.upgrade.HTUpgradeHelper import hiiragi283.ragium.config.RagiumConfig import hiiragi283.ragium.setup.RagiumDataComponents import net.minecraft.ChatFormatting @@ -37,7 +37,7 @@ object RagiumTooltipHandler { if (RagiumConfig.COMMON.showFoodEffect.asBoolean) { food(stack, consumer, event.context.tickRate()) } - machineUpgrade(stack, consumer1, context) + HTUpgradeHelper.appendTooltips(stack, consumer) RagiumDataComponents.REGISTER .asSequence() @@ -70,11 +70,6 @@ object RagiumTooltipHandler { } } - @JvmStatic - private fun machineUpgrade(stack: ItemStack, consumer: Consumer, context: Item.TooltipContext) { - RagiumPlatform.INSTANCE.getMachineUpgrade(context.registries(), stack)?.addToTooltip(consumer) - } - @SubscribeEvent fun gatherClientComponents(event: RenderTooltipEvent.GatherComponents) { val stack: ItemStack = event.itemStack diff --git a/src/main/kotlin/hiiragi283/ragium/client/gui/screen/processor/HTCrusherScreen.kt b/src/main/kotlin/hiiragi283/ragium/client/gui/screen/processor/HTCrusherScreen.kt index 01e999b36..c68d5b218 100644 --- a/src/main/kotlin/hiiragi283/ragium/client/gui/screen/processor/HTCrusherScreen.kt +++ b/src/main/kotlin/hiiragi283/ragium/client/gui/screen/processor/HTCrusherScreen.kt @@ -1,10 +1,10 @@ package hiiragi283.ragium.client.gui.screen.processor +import hiiragi283.ragium.api.upgrade.RagiumUpgradeKeys import hiiragi283.ragium.client.gui.component.HTFluidTankWidget import hiiragi283.ragium.common.block.entity.processor.base.HTSingleItemInputBlockEntity import hiiragi283.ragium.common.inventory.HTSlotHelper import hiiragi283.ragium.common.inventory.container.HTBlockEntityContainerMenu -import hiiragi283.ragium.setup.RagiumItems import net.minecraft.network.chat.Component import net.minecraft.world.entity.player.Inventory @@ -21,6 +21,6 @@ class HTCrusherScreen( createFluidSlot(blockEntity.inputTank, HTSlotHelper.getSlotPosX(2), HTSlotHelper.getSlotPosY(2)) override fun updateVisibility() { - fluidWidget.visible = blockEntity.hasUpgrade(RagiumItems.EFFICIENT_CRUSH_UPGRADE) + fluidWidget.visible = blockEntity.hasUpgrade(RagiumUpgradeKeys.USE_LUBRICANT) } } diff --git a/src/main/kotlin/hiiragi283/ragium/client/model/HTFuelGeneratorModel.kt b/src/main/kotlin/hiiragi283/ragium/client/model/HTFuelGeneratorModel.kt index 269c1e78a..c96ddf5c7 100644 --- a/src/main/kotlin/hiiragi283/ragium/client/model/HTFuelGeneratorModel.kt +++ b/src/main/kotlin/hiiragi283/ragium/client/model/HTFuelGeneratorModel.kt @@ -3,9 +3,9 @@ package hiiragi283.ragium.client.model import com.mojang.blaze3d.vertex.PoseStack import com.mojang.blaze3d.vertex.VertexConsumer import hiiragi283.ragium.api.RagiumAPI -import hiiragi283.ragium.api.item.component.HTMachineUpgrade import hiiragi283.ragium.api.math.div import hiiragi283.ragium.api.registry.HTHolderLike +import hiiragi283.ragium.api.upgrade.RagiumUpgradeKeys import hiiragi283.ragium.client.renderer.RagiumModelLayers import hiiragi283.ragium.common.block.entity.generator.HTGeneratorBlockEntity import net.minecraft.client.model.geom.EntityModelSet @@ -105,7 +105,7 @@ class HTFuelGeneratorModel(modelSet: EntityModelSet) : HTModel(RenderType::entit blockEntity.isActive -> blockEntity.ticks + partialTick else -> 0f } - val speed: Float = (blockEntity.collectModifier(HTMachineUpgrade.Key.ENERGY_GENERATION) / 4).toFloat() + val speed: Float = (blockEntity.collectMultiplier(RagiumUpgradeKeys.ENERGY_GENERATION) / 8).toFloat() top.y = Mth.sin(time * speed + Mth.HALF_PI) * 4 - 4f bellow.y = min(Mth.sin(time * speed + Mth.HALF_PI) * 4, 0f) diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTUpgradableBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTUpgradableBlockEntity.kt index 0dc1c2f52..0173287f8 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTUpgradableBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTUpgradableBlockEntity.kt @@ -1,19 +1,17 @@ package hiiragi283.ragium.common.block.entity -import hiiragi283.ragium.api.block.entity.HTBlockEntityWithUpgrade -import hiiragi283.ragium.api.item.component.HTMachineUpgrade +import hiiragi283.ragium.api.storage.item.HTItemSlot +import hiiragi283.ragium.api.upgrade.HTSlotUpgradeHandler import hiiragi283.ragium.common.block.entity.component.HTMachineUpgradeComponent import net.minecraft.core.BlockPos import net.minecraft.core.Holder -import net.minecraft.world.item.ItemStack -import net.minecraft.world.level.ItemLike import net.minecraft.world.level.block.Block import net.minecraft.world.level.block.state.BlockState abstract class HTUpgradableBlockEntity(blockHolder: Holder, pos: BlockPos, state: BlockState) : HTConfigurableBlockEntity(blockHolder, pos, state), - HTBlockEntityWithUpgrade { - // HTBlockEntityWithUpgrade // + HTSlotUpgradeHandler { + // HTSlotUpgradeHandler // override fun initializeVariables() { super.initializeVariables() @@ -23,9 +21,5 @@ abstract class HTUpgradableBlockEntity(blockHolder: Holder, pos: BlockPos lateinit var machineUpgrade: HTMachineUpgradeComponent private set - final override fun hasUpgrade(item: ItemLike): Boolean = machineUpgrade.hasUpgrade(item) - - final override fun getMachineUpgrades(): List> = machineUpgrade.getMachineUpgrades() - - final override fun canApplyUpgrade(stack: ItemStack): Boolean = machineUpgrade.canApplyUpgrade(stack) + final override fun getUpgradeSlots(): List = machineUpgrade.getUpgradeSlots() } diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/component/HTMachineUpgradeComponent.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/component/HTMachineUpgradeComponent.kt index 9def0d31a..6f392ab47 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/component/HTMachineUpgradeComponent.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/component/HTMachineUpgradeComponent.kt @@ -1,16 +1,14 @@ package hiiragi283.ragium.common.block.entity.component -import hiiragi283.ragium.api.RagiumPlatform -import hiiragi283.ragium.api.block.entity.HTBlockEntityWithUpgrade import hiiragi283.ragium.api.function.HTPredicates import hiiragi283.ragium.api.item.component.HTItemContents -import hiiragi283.ragium.api.item.component.HTMachineUpgrade import hiiragi283.ragium.api.item.component.HTStackContents -import hiiragi283.ragium.api.registry.HTKeyOrTagEntry import hiiragi283.ragium.api.serialization.component.HTComponentInput import hiiragi283.ragium.api.serialization.value.HTValueInput import hiiragi283.ragium.api.serialization.value.HTValueOutput import hiiragi283.ragium.api.stack.ImmutableItemStack +import hiiragi283.ragium.api.storage.item.HTItemSlot +import hiiragi283.ragium.api.upgrade.HTSlotUpgradeHandler import hiiragi283.ragium.api.util.HTContentListener import hiiragi283.ragium.api.world.sendBlockUpdated import hiiragi283.ragium.common.block.entity.HTBlockEntity @@ -19,21 +17,16 @@ import hiiragi283.ragium.common.storage.HTCapabilityCodec import hiiragi283.ragium.common.storage.item.slot.HTBasicItemSlot import hiiragi283.ragium.setup.RagiumDataComponents import net.minecraft.core.component.DataComponentMap -import net.minecraft.world.item.ItemStack -import net.minecraft.world.level.ItemLike -import net.minecraft.world.level.block.entity.BlockEntityType class HTMachineUpgradeComponent(private val owner: HTBlockEntity) : HTBlockEntityComponent, - HTBlockEntityWithUpgrade { + HTSlotUpgradeHandler { init { owner.addComponent(this) } - val upgradeSlots: List = (0..3).map { i: Int -> - val filter: (ImmutableItemStack) -> Boolean = filter@{ stack: ImmutableItemStack -> - canApplyUpgrade(stack.unwrap()) && !hasUpgrade(stack.value()) - } + private val upgradeSlots: List = (0..3).map { i: Int -> + val filter: (ImmutableItemStack) -> Boolean = { isValidUpgrade(it, getUpgrades()) } HTBasicItemSlot.create( HTContentListener(owner::setChanged).andThen { owner.level?.sendBlockUpdated(owner.blockPos) }, HTSlotHelper.getSlotPosX(8), @@ -44,33 +37,16 @@ class HTMachineUpgradeComponent(private val owner: HTBlockEntity) : ) } - /** - * 指定した[item]を保持しているかどうか判定します。 - */ - override fun hasUpgrade(item: ItemLike): Boolean = upgradeSlots.any { slot: HTBasicItemSlot -> - slot.getStack()?.isOf(item.asItem()) ?: false - } + // HTBlockEntityComponent // - /** - * 現在保持しているアップグレードの一覧を返します。。 - */ - override fun getMachineUpgrades(): List> = upgradeSlots.mapNotNull { slot: HTBasicItemSlot -> - val upgrade: HTMachineUpgrade = slot - .getStack() - ?.unwrap() - ?.let { RagiumPlatform.INSTANCE.getMachineUpgrade(owner.getRegistryAccess(), it) } - ?: return@mapNotNull null - upgrade to slot.getAmount() + override fun serialize(output: HTValueOutput) { + HTCapabilityCodec.ITEM.saveTo(output.child("upgrades"), upgradeSlots) } - override fun canApplyUpgrade(stack: ItemStack): Boolean { - if (RagiumPlatform.INSTANCE.getMachineUpgrade(owner.getRegistryAccess(), stack) == null) return false - val filter: HTKeyOrTagEntry> = stack.get(RagiumDataComponents.MACHINE_UPGRADE_FILTER) ?: return true - return filter.isOf(HTBlockEntity.getBlockEntityType(owner.blockHolder)) + override fun deserialize(input: HTValueInput) { + HTCapabilityCodec.ITEM.loadFrom(input.childOrEmpty("upgrades"), upgradeSlots) } - // HTComponentSerializable // - override fun applyComponents(input: HTComponentInput) { input.use(RagiumDataComponents.MACHINE_UPGRADES) { contents: HTItemContents -> for (i: Int in contents.indices) { @@ -87,14 +63,7 @@ class HTMachineUpgradeComponent(private val owner: HTBlockEntity) : .let(HTStackContents.Companion::fromNullable), ) } + // HTSlotUpgradeHandler // - // HTValueSerializable // - - override fun serialize(output: HTValueOutput) { - HTCapabilityCodec.ITEM.saveTo(output.child("upgrades"), upgradeSlots) - } - - override fun deserialize(input: HTValueInput) { - HTCapabilityCodec.ITEM.loadFrom(input.childOrEmpty("upgrades"), upgradeSlots) - } + override fun getUpgradeSlots(): List = upgradeSlots } diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTFluidCollectorBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTFluidCollectorBlockEntity.kt index 4ace753e4..6a685097e 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTFluidCollectorBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTFluidCollectorBlockEntity.kt @@ -5,6 +5,7 @@ import hiiragi283.ragium.api.stack.ImmutableFluidStack import hiiragi283.ragium.api.storage.HTStorageAccess import hiiragi283.ragium.api.storage.HTStorageAction import hiiragi283.ragium.api.storage.holder.HTSlotInfo +import hiiragi283.ragium.api.upgrade.RagiumUpgradeKeys import hiiragi283.ragium.api.util.HTContentListener import hiiragi283.ragium.api.world.getRangedAABB import hiiragi283.ragium.common.storage.fluid.tank.HTBasicFluidTank @@ -13,7 +14,6 @@ import hiiragi283.ragium.common.storage.fluid.tank.HTVariableFluidTank import hiiragi283.ragium.common.storage.holder.HTBasicFluidTankHolder import hiiragi283.ragium.config.RagiumConfig import hiiragi283.ragium.setup.RagiumBlocks -import hiiragi283.ragium.setup.RagiumItems import hiiragi283.ragium.util.HTStackSlotHelper import net.minecraft.core.BlockPos import net.minecraft.core.Direction @@ -49,7 +49,7 @@ class HTFluidCollectorBlockEntity(pos: BlockPos, state: BlockState) : // Ticking // override fun actionServer(level: ServerLevel, pos: BlockPos, state: BlockState): Boolean = when { - hasUpgrade(RagiumItems.EXP_COLLECTOR_UPGRADE) -> collectExp(level, pos) + hasUpgrade(RagiumUpgradeKeys.EXP_COLLECTING) -> collectExp(level, pos) else -> generateWater(level, pos) } diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTItemCollectorBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTItemCollectorBlockEntity.kt index 849123bf2..a84693e8e 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTItemCollectorBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTItemCollectorBlockEntity.kt @@ -7,6 +7,7 @@ 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.HTItemSlot +import hiiragi283.ragium.api.upgrade.RagiumUpgradeKeys import hiiragi283.ragium.api.util.HTContentListener import hiiragi283.ragium.api.world.getRangedAABB import hiiragi283.ragium.common.entity.HTThrownCaptureEgg @@ -75,8 +76,8 @@ class HTItemCollectorBlockEntity(pos: BlockPos, state: BlockState) : // Ticking // override fun actionServer(level: ServerLevel, pos: BlockPos, state: BlockState): Boolean = when { - hasUpgrade(RagiumItems.FISHING_UPGRADE) -> collectFish(level, pos) - hasUpgrade(RagiumItems.MOB_CAPTURE_UPGRADE) -> collectMobs(level, pos) + hasUpgrade(RagiumUpgradeKeys.FISHING) -> collectFish(level, pos) + hasUpgrade(RagiumUpgradeKeys.MOB_CAPTURE) -> collectMobs(level, pos) else -> collectItem(level, pos) } diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/generator/HTSolarPanelControllerBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/generator/HTSolarPanelControllerBlockEntity.kt index 98f54c0aa..6851805c5 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/generator/HTSolarPanelControllerBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/generator/HTSolarPanelControllerBlockEntity.kt @@ -1,7 +1,7 @@ package hiiragi283.ragium.common.block.entity.generator -import hiiragi283.ragium.api.item.component.HTMachineUpgrade import hiiragi283.ragium.api.math.times +import hiiragi283.ragium.api.upgrade.RagiumUpgradeKeys import hiiragi283.ragium.api.util.HTContentListener import hiiragi283.ragium.common.storage.holder.HTBasicItemSlotHolder import hiiragi283.ragium.setup.RagiumBlocks @@ -22,9 +22,9 @@ class HTSolarPanelControllerBlockEntity(pos: BlockPos, state: BlockState) : checkSolarPanel(level, posIn, stateIn) }.size if (panels == 0) return false - - battery.currentEnergyPerTick = - modifyValue(HTMachineUpgrade.Key.ENERGY_GENERATION) { battery.baseEnergyPerTick * (panels / 4) * it } + battery.currentEnergyPerTick = modifyValue(RagiumUpgradeKeys.ENERGY_GENERATION) { + battery.baseEnergyPerTick * (panels / 4) * it * getBaseMultiplier() + } return battery.generate() > 0 } diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/generator/base/HTFuelGeneratorBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/generator/base/HTFuelGeneratorBlockEntity.kt index 5e6db066a..669d4a98d 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/generator/base/HTFuelGeneratorBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/generator/base/HTFuelGeneratorBlockEntity.kt @@ -1,9 +1,9 @@ package hiiragi283.ragium.common.block.entity.generator.base import hiiragi283.ragium.api.block.attribute.getAttributeFront -import hiiragi283.ragium.api.item.component.HTMachineUpgrade import hiiragi283.ragium.api.math.times import hiiragi283.ragium.api.storage.energy.HTEnergyBattery +import hiiragi283.ragium.api.upgrade.RagiumUpgradeKeys import hiiragi283.ragium.common.block.entity.generator.HTGeneratorBlockEntity import hiiragi283.ragium.util.HTEnergyHelper import net.minecraft.core.BlockPos @@ -29,7 +29,9 @@ abstract class HTFuelGeneratorBlockEntity(blockHolder: Holder, pos: Block // 燃料がある場合,それを消費する if (remainingBurnTime > 0) { remainingBurnTime-- - battery.currentEnergyPerTick = modifyValue(HTMachineUpgrade.Key.ENERGY_GENERATION) { battery.baseEnergyPerTick * it } + battery.currentEnergyPerTick = modifyValue(RagiumUpgradeKeys.ENERGY_GENERATION) { + battery.baseEnergyPerTick * it * getBaseMultiplier() + } battery.generate() return true } else { 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 51745fe6c..7e8d6f2c5 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 @@ -4,12 +4,12 @@ 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.upgrade.RagiumUpgradeKeys import hiiragi283.ragium.api.util.HTContentListener import hiiragi283.ragium.common.block.entity.processor.base.HTAbstractCrusherBlockEntity import hiiragi283.ragium.common.storage.holder.HTBasicItemSlotHolder import hiiragi283.ragium.common.storage.item.slot.HTBasicItemSlot import hiiragi283.ragium.setup.RagiumBlocks -import hiiragi283.ragium.setup.RagiumItems import hiiragi283.ragium.util.HTStackSlotHelper import net.minecraft.core.BlockPos import net.minecraft.core.RegistryAccess @@ -42,7 +42,7 @@ class HTCrusherBlockEntity(pos: BlockPos, state: BlockState) : 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)) { + if (!hasUpgrade(RagiumUpgradeKeys.DISABLE_EXTRA)) { return bool1 } val bool2: Boolean = HTStackSlotHelper.canInsertStack(extraSlot, input, level, recipe::assembleExtraItem) @@ -53,7 +53,7 @@ class HTCrusherBlockEntity(pos: BlockPos, state: BlockState) : // 実際にアウトプットに搬出する val access: RegistryAccess = level.registryAccess() outputSlot.insert(recipe.assembleItem(input, access), HTStorageAction.EXECUTE, HTStorageAccess.INTERNAL) - if (!hasUpgrade(RagiumItems.PRIMARY_ONLY_UPGRADE)) { + if (!hasUpgrade(RagiumUpgradeKeys.DISABLE_EXTRA)) { extraSlot.insert(recipe.assembleExtraItem(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 7fafbdd9b..9489f656c 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 @@ -5,11 +5,11 @@ 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.upgrade.RagiumUpgradeKeys import hiiragi283.ragium.api.util.HTContentListener import hiiragi283.ragium.common.storage.holder.HTBasicItemSlotHolder import hiiragi283.ragium.common.storage.item.slot.HTBasicItemSlot import hiiragi283.ragium.setup.RagiumBlocks -import hiiragi283.ragium.setup.RagiumItems import hiiragi283.ragium.util.HTStackSlotHelper import net.minecraft.core.BlockPos import net.minecraft.core.RegistryAccess @@ -51,7 +51,7 @@ class HTCuttingMachineBlockEntity(pos: BlockPos, state: BlockState) : 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)) { + if (hasUpgrade(RagiumUpgradeKeys.DISABLE_EXTRA)) { return bool1 } val bool2: Boolean = HTStackSlotHelper.canInsertStack(extraSlot, input, level, recipe::assembleExtraItem) @@ -68,7 +68,7 @@ class HTCuttingMachineBlockEntity(pos: BlockPos, state: BlockState) : // 実際にアウトプットに搬出する val access: RegistryAccess = level.registryAccess() outputSlot.insert(recipe.assembleItem(input, access), HTStorageAction.EXECUTE, HTStorageAccess.INTERNAL) - if (!hasUpgrade(RagiumItems.PRIMARY_ONLY_UPGRADE)) { + if (!hasUpgrade(RagiumUpgradeKeys.DISABLE_EXTRA)) { extraSlot.insert(recipe.assembleExtraItem(input, access), HTStorageAction.EXECUTE, HTStorageAccess.INTERNAL) } // インプットを減らす 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 ae95045e0..f8f2d4a21 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,10 +1,10 @@ package hiiragi283.ragium.common.block.entity.processor +import hiiragi283.ragium.api.math.minus 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.vanilla.HTVanillaCookingRecipe import hiiragi283.ragium.setup.RagiumBlocks @@ -16,6 +16,7 @@ import net.minecraft.world.item.crafting.AbstractCookingRecipe import net.minecraft.world.item.crafting.SingleRecipeInput import net.minecraft.world.level.block.state.BlockState import kotlin.math.min +import kotlin.math.pow class HTMultiSmelterBlockEntity(pos: BlockPos, state: BlockState) : HTAbstractSmelterBlockEntity( @@ -48,12 +49,8 @@ class HTMultiSmelterBlockEntity(pos: BlockPos, state: BlockState) : } } - private fun getMaxParallel(): Int = when (getMaxMachineTier()) { - HTBaseTier.BASIC -> 2 - HTBaseTier.ADVANCED -> 4 - HTBaseTier.ELITE -> 8 - HTBaseTier.ULTIMATE -> 16 - HTBaseTier.CREATIVE -> inputSlot.getStack()?.maxStackSize() ?: -1 - null -> 1 + private fun getMaxParallel(): Int = when { + isCreative() -> inputSlot.getStack()?.maxStackSize() ?: -1 + else -> 2.0.pow((getBaseMultiplier() - 1).toDouble()).toInt() } } 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 10263b1b5..6b34ff7bf 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 @@ -1,15 +1,16 @@ 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.math.minus +import hiiragi283.ragium.api.math.times 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.recipe.input.HTRecipeInput.Builder import hiiragi283.ragium.api.storage.holder.HTSlotInfo +import hiiragi283.ragium.api.upgrade.RagiumUpgradeKeys import hiiragi283.ragium.api.util.HTContentListener import hiiragi283.ragium.common.block.entity.HTMachineBlockEntity import hiiragi283.ragium.common.inventory.container.HTContainerMenu @@ -109,8 +110,9 @@ abstract class HTProcessorBlockEntity(blockHolder: Ho * 指定された[recipe]から,レシピに必要なエネルギー量を取得します。 */ protected fun getRequiredEnergy(recipe: RECIPE): Int { - battery.currentEnergyPerTick = modifyValue(HTMachineUpgrade.Key.ENERGY_EFFICIENCY) { battery.baseEnergyPerTick / it } - val time: Int = modifyValue(HTMachineUpgrade.Key.SPEED) { getRecipeTime(recipe) / it } + if (isCreative()) return 0 + battery.currentEnergyPerTick = modifyValue(RagiumUpgradeKeys.ENERGY_EFFICIENCY) { battery.baseEnergyPerTick / it } + val time: Int = modifyValue(RagiumUpgradeKeys.SPEED) { getRecipeTime(recipe) / (it * getBaseMultiplier()) } return battery.currentEnergyPerTick * time } 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 74e94cfa3..081f2e465 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 @@ -8,11 +8,11 @@ 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.upgrade.RagiumUpgradeKeys import hiiragi283.ragium.api.util.HTContentListener import hiiragi283.ragium.common.storage.fluid.tank.HTBasicFluidTank import hiiragi283.ragium.common.storage.fluid.tank.HTVariableFluidTank import hiiragi283.ragium.setup.RagiumFluidContents -import hiiragi283.ragium.setup.RagiumItems import hiiragi283.ragium.util.HTStackSlotHelper import net.minecraft.core.BlockPos import net.minecraft.core.Holder @@ -33,14 +33,14 @@ abstract class HTAbstractCrusherBlockEntity(blockHolder: Holder, pos: Blo final override fun createTank(listener: HTContentListener): HTBasicFluidTank = HTVariableFluidTank.input( listener, blockHolder.getFluidAttribute().getInputTank(this), - canInsert = { hasUpgrade(RagiumItems.EFFICIENT_CRUSH_UPGRADE) }, + canInsert = { hasUpgrade(RagiumUpgradeKeys.USE_LUBRICANT) }, filter = RagiumFluidContents.LUBRICANT::isOf, ) // Ticking // final override fun getRecipeTime(recipe: HTSingleExtraItemRecipe): Int { - val bool1: Boolean = hasUpgrade(RagiumItems.EFFICIENT_CRUSH_UPGRADE) + val bool1: Boolean = hasUpgrade(RagiumUpgradeKeys.USE_LUBRICANT) val bool2: Boolean = HTStackSlotHelper.canShrinkStack(inputTank, RagiumConst.LUBRICANT_CONSUME, true) val modifier: Fraction = when (bool1 && bool2) { true -> Fraction.THREE_QUARTERS @@ -61,7 +61,7 @@ abstract class HTAbstractCrusherBlockEntity(blockHolder: Holder, pos: Blo // インプットを減らす inputSlot.extract(recipe.getRequiredCount(), HTStorageAction.EXECUTE, HTStorageAccess.INTERNAL) // 潤滑油があれば減らす - if (hasUpgrade(RagiumItems.EFFICIENT_CRUSH_UPGRADE)) { + if (hasUpgrade(RagiumUpgradeKeys.USE_LUBRICANT) && !isCreative()) { inputTank.extract(RagiumConst.LUBRICANT_CONSUME, HTStorageAction.EXECUTE, HTStorageAccess.INTERNAL) } // SEを鳴らす diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTTieredDrumBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTTieredDrumBlockEntity.kt index a7134e849..0aa86227b 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTTieredDrumBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTTieredDrumBlockEntity.kt @@ -2,11 +2,11 @@ package hiiragi283.ragium.common.block.entity.storage import hiiragi283.ragium.api.block.attribute.getAttributeTier import hiiragi283.ragium.api.function.HTPredicates -import hiiragi283.ragium.api.item.component.HTMachineUpgrade import hiiragi283.ragium.api.math.times import hiiragi283.ragium.api.stack.ImmutableFluidStack import hiiragi283.ragium.api.storage.HTStorageAccess import hiiragi283.ragium.api.storage.HTStorageAction +import hiiragi283.ragium.api.upgrade.RagiumUpgradeKeys import hiiragi283.ragium.api.util.HTContentListener import hiiragi283.ragium.common.storage.fluid.tank.HTBasicFluidTank import hiiragi283.ragium.common.tier.HTDrumTier @@ -25,7 +25,7 @@ class HTTieredDrumBlockEntity(blockHolder: Holder, pos: BlockPos, state: override fun createTank(listener: HTContentListener): HTBasicFluidTank = DrumTank(listener) - private fun getCapacity(): Int = modifyValue(HTMachineUpgrade.Key.FLUID_CAPACITY) { tier.getDefaultCapacity() * it } + private fun getCapacity(): Int = modifyValue(RagiumUpgradeKeys.FLUID_CAPACITY) { tier.getDefaultCapacity() * it } // DrumTank // diff --git a/src/main/kotlin/hiiragi283/ragium/common/entity/charge/HTNeutralCharge.kt b/src/main/kotlin/hiiragi283/ragium/common/entity/charge/HTNeutralCharge.kt index 0a230622f..813626d35 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/entity/charge/HTNeutralCharge.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/entity/charge/HTNeutralCharge.kt @@ -1,10 +1,10 @@ package hiiragi283.ragium.common.entity.charge import com.mojang.datafixers.util.Either +import hiiragi283.ragium.api.capability.HTItemCapabilities import hiiragi283.ragium.api.stack.ImmutableItemStack import hiiragi283.ragium.api.storage.HTStorageAccess import hiiragi283.ragium.api.storage.HTStorageAction -import hiiragi283.ragium.api.storage.capability.HTItemCapabilities import hiiragi283.ragium.api.storage.item.HTItemSlot import hiiragi283.ragium.common.HTChargeType import hiiragi283.ragium.util.HTItemDropHelper diff --git a/src/main/kotlin/hiiragi283/ragium/common/inventory/container/HTBlockEntityContainerMenu.kt b/src/main/kotlin/hiiragi283/ragium/common/inventory/container/HTBlockEntityContainerMenu.kt index 0a6b8a3e9..fedbc6c68 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/inventory/container/HTBlockEntityContainerMenu.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/inventory/container/HTBlockEntityContainerMenu.kt @@ -23,7 +23,7 @@ open class HTBlockEntityContainerMenu( // block entity slots addSlots(context) if (context is HTMachineBlockEntity) { - addSlots(context.machineUpgrade.upgradeSlots) + addSlots(context.getUpgradeSlots()) } // player inventory addPlayerInv(inventory) diff --git a/src/main/kotlin/hiiragi283/ragium/common/inventory/container/HTGenericItemContainerMenu.kt b/src/main/kotlin/hiiragi283/ragium/common/inventory/container/HTGenericItemContainerMenu.kt index 6d653bb0c..a1d722c19 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/inventory/container/HTGenericItemContainerMenu.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/inventory/container/HTGenericItemContainerMenu.kt @@ -1,8 +1,8 @@ package hiiragi283.ragium.common.inventory.container +import hiiragi283.ragium.api.capability.HTItemCapabilities import hiiragi283.ragium.api.inventory.container.HTItemContainerContext import hiiragi283.ragium.api.registry.impl.HTDeferredMenuType -import hiiragi283.ragium.api.storage.capability.HTItemCapabilities import hiiragi283.ragium.api.storage.item.HTItemHandler import hiiragi283.ragium.common.inventory.HTMenuCallback import net.minecraft.world.entity.player.Inventory diff --git a/src/main/kotlin/hiiragi283/ragium/common/item/HTCompressedItem.kt b/src/main/kotlin/hiiragi283/ragium/common/item/HTCompressedItem.kt index 0e40271dd..ac1121a20 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/item/HTCompressedItem.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/item/HTCompressedItem.kt @@ -1,7 +1,7 @@ package hiiragi283.ragium.common.item +import hiiragi283.ragium.api.capability.HTItemCapabilities import hiiragi283.ragium.api.stack.ImmutableItemStack -import hiiragi283.ragium.api.storage.capability.HTItemCapabilities import hiiragi283.ragium.api.storage.item.HTItemSlot import net.minecraft.world.damagesource.DamageSource import net.minecraft.world.entity.item.ItemEntity diff --git a/src/main/kotlin/hiiragi283/ragium/common/item/base/HTEnergyItem.kt b/src/main/kotlin/hiiragi283/ragium/common/item/base/HTEnergyItem.kt index bca15cc8a..93de3b31e 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/item/base/HTEnergyItem.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/item/base/HTEnergyItem.kt @@ -1,6 +1,6 @@ package hiiragi283.ragium.common.item.base -import hiiragi283.ragium.api.storage.capability.HTEnergyCapabilities +import hiiragi283.ragium.api.capability.HTEnergyCapabilities import hiiragi283.ragium.api.storage.energy.HTEnergyBattery import hiiragi283.ragium.api.text.HTTextUtil import net.minecraft.network.chat.Component diff --git a/src/main/kotlin/hiiragi283/ragium/common/item/block/HTDrumBlockItem.kt b/src/main/kotlin/hiiragi283/ragium/common/item/block/HTDrumBlockItem.kt index cfdc58f1b..c386239b8 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/item/block/HTDrumBlockItem.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/item/block/HTDrumBlockItem.kt @@ -1,9 +1,9 @@ package hiiragi283.ragium.common.item.block import hiiragi283.ragium.api.block.attribute.getAttributeTier +import hiiragi283.ragium.api.capability.HTFluidCapabilities import hiiragi283.ragium.api.item.HTDescriptionBlockItem import hiiragi283.ragium.api.stack.ImmutableFluidStack -import hiiragi283.ragium.api.storage.capability.HTFluidCapabilities import hiiragi283.ragium.api.storage.fluid.HTFluidView import hiiragi283.ragium.api.text.RagiumTranslation import hiiragi283.ragium.common.block.storage.HTDrumBlock diff --git a/src/main/kotlin/hiiragi283/ragium/common/item/food/HTPotionBundleItem.kt b/src/main/kotlin/hiiragi283/ragium/common/item/food/HTPotionBundleItem.kt index 237730879..3589ac99c 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/item/food/HTPotionBundleItem.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/item/food/HTPotionBundleItem.kt @@ -1,8 +1,8 @@ package hiiragi283.ragium.common.item.food +import hiiragi283.ragium.api.capability.HTItemCapabilities import hiiragi283.ragium.api.storage.HTStorageAccess import hiiragi283.ragium.api.storage.HTStorageAction -import hiiragi283.ragium.api.storage.capability.HTItemCapabilities import hiiragi283.ragium.api.storage.item.HTItemSlot import hiiragi283.ragium.api.storage.item.getItemStack import hiiragi283.ragium.setup.RagiumMenuTypes diff --git a/src/main/kotlin/hiiragi283/ragium/common/item/tool/HTTeleportKeyItem.kt b/src/main/kotlin/hiiragi283/ragium/common/item/tool/HTTeleportKeyItem.kt index 5677d5dcc..27d0aaff3 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/item/tool/HTTeleportKeyItem.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/item/tool/HTTeleportKeyItem.kt @@ -1,10 +1,10 @@ package hiiragi283.ragium.common.item.tool +import hiiragi283.ragium.api.capability.HTFluidCapabilities import hiiragi283.ragium.api.item.component.HTTeleportPos import hiiragi283.ragium.api.stack.ImmutableFluidStack import hiiragi283.ragium.api.storage.HTStorageAccess import hiiragi283.ragium.api.storage.HTStorageAction -import hiiragi283.ragium.api.storage.capability.HTFluidCapabilities import hiiragi283.ragium.api.storage.fluid.HTFluidTank import hiiragi283.ragium.api.storage.fluid.HTFluidView import hiiragi283.ragium.api.text.HTTextResult diff --git a/src/main/kotlin/hiiragi283/ragium/common/item/upgrade/HTCreativeUpgradeItem.kt b/src/main/kotlin/hiiragi283/ragium/common/item/upgrade/HTCreativeUpgradeItem.kt deleted file mode 100644 index 722fd53e5..000000000 --- a/src/main/kotlin/hiiragi283/ragium/common/item/upgrade/HTCreativeUpgradeItem.kt +++ /dev/null @@ -1,22 +0,0 @@ -package hiiragi283.ragium.common.item.upgrade - -import hiiragi283.ragium.api.item.component.HTMachineUpgrade -import hiiragi283.ragium.api.tier.HTBaseTier -import hiiragi283.ragium.common.item.HTTierBasedItem -import net.minecraft.ChatFormatting -import net.minecraft.network.chat.Component -import net.minecraft.world.item.ItemStack -import net.minecraft.world.item.TooltipFlag - -class HTCreativeUpgradeItem(properties: Properties) : HTTierBasedItem(HTBaseTier.CREATIVE, properties) { - override fun appendHoverText( - stack: ItemStack, - context: TooltipContext, - tooltips: MutableList, - flag: TooltipFlag, - ) { - for (key: HTMachineUpgrade.Key in HTMachineUpgrade.Key.entries) { - tooltips.add(key.translateColored(ChatFormatting.LIGHT_PURPLE, key.creativeValue)) - } - } -} diff --git a/src/main/kotlin/hiiragi283/ragium/common/storage/energy/HTEnergyCache.kt b/src/main/kotlin/hiiragi283/ragium/common/storage/energy/HTEnergyCache.kt index 932afffc3..accd614d9 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/storage/energy/HTEnergyCache.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/storage/energy/HTEnergyCache.kt @@ -1,6 +1,6 @@ package hiiragi283.ragium.common.storage.energy -import hiiragi283.ragium.api.storage.capability.HTEnergyCapabilities +import hiiragi283.ragium.api.capability.HTEnergyCapabilities import hiiragi283.ragium.api.storage.energy.HTEnergyBattery import net.minecraft.core.BlockPos import net.minecraft.core.Direction diff --git a/src/main/kotlin/hiiragi283/ragium/common/storage/energy/battery/HTMachineEnergyBattery.kt b/src/main/kotlin/hiiragi283/ragium/common/storage/energy/battery/HTMachineEnergyBattery.kt index 5ae4a3df7..3686a9500 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/storage/energy/battery/HTMachineEnergyBattery.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/storage/energy/battery/HTMachineEnergyBattery.kt @@ -3,10 +3,10 @@ package hiiragi283.ragium.common.storage.energy.battery import hiiragi283.ragium.api.block.attribute.HTEnergyBlockAttribute import hiiragi283.ragium.api.block.attribute.getAttributeOrThrow import hiiragi283.ragium.api.function.HTPredicates -import hiiragi283.ragium.api.item.component.HTMachineUpgrade import hiiragi283.ragium.api.math.times import hiiragi283.ragium.api.storage.HTStorageAccess import hiiragi283.ragium.api.storage.HTStorageAction +import hiiragi283.ragium.api.upgrade.RagiumUpgradeKeys import hiiragi283.ragium.api.util.HTContentListener import hiiragi283.ragium.common.block.entity.HTMachineBlockEntity import hiiragi283.ragium.common.block.entity.generator.HTGeneratorBlockEntity @@ -44,7 +44,9 @@ sealed class HTMachineEnergyBattery( var currentEnergyPerTick: Int = this.baseEnergyPerTick - override fun getCapacity(): Int = blockEntity.modifyValue(HTMachineUpgrade.Key.ENERGY_CAPACITY) { getBaseCapacity() * it } + override fun getCapacity(): Int = blockEntity.modifyValue(RagiumUpgradeKeys.ENERGY_CAPACITY) { + getBaseCapacity() * it * blockEntity.getBaseMultiplier() + } fun getBaseCapacity(): Int = super.getCapacity() diff --git a/src/main/kotlin/hiiragi283/ragium/common/storage/fluid/tank/HTFluidHandlerItemWrapper.kt b/src/main/kotlin/hiiragi283/ragium/common/storage/fluid/tank/HTFluidHandlerItemWrapper.kt index c7048c007..b781a1b1f 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/storage/fluid/tank/HTFluidHandlerItemWrapper.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/storage/fluid/tank/HTFluidHandlerItemWrapper.kt @@ -1,12 +1,12 @@ package hiiragi283.ragium.common.storage.fluid.tank +import hiiragi283.ragium.api.capability.HTFluidCapabilities import hiiragi283.ragium.api.serialization.value.HTValueSerializable import hiiragi283.ragium.api.stack.ImmutableFluidStack import hiiragi283.ragium.api.stack.ImmutableItemStack import hiiragi283.ragium.api.stack.toImmutable import hiiragi283.ragium.api.storage.HTStorageAccess import hiiragi283.ragium.api.storage.HTStorageAction -import hiiragi283.ragium.api.storage.capability.HTFluidCapabilities import hiiragi283.ragium.api.storage.fluid.HTFluidTank import hiiragi283.ragium.api.util.HTContentListener import net.minecraft.world.item.ItemStack diff --git a/src/main/kotlin/hiiragi283/ragium/common/storage/item/slot/HTEnergyItemSlot.kt b/src/main/kotlin/hiiragi283/ragium/common/storage/item/slot/HTEnergyItemSlot.kt index dd465e619..1c531f961 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/storage/item/slot/HTEnergyItemSlot.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/storage/item/slot/HTEnergyItemSlot.kt @@ -1,11 +1,11 @@ package hiiragi283.ragium.common.storage.item.slot import hiiragi283.ragium.api.RagiumConst +import hiiragi283.ragium.api.capability.HTEnergyCapabilities import hiiragi283.ragium.api.function.negate import hiiragi283.ragium.api.stack.ImmutableItemStack import hiiragi283.ragium.api.storage.HTStorageAccess import hiiragi283.ragium.api.storage.HTStorageAction -import hiiragi283.ragium.api.storage.capability.HTEnergyCapabilities import hiiragi283.ragium.api.storage.energy.HTEnergyBattery import hiiragi283.ragium.api.util.HTContentListener import hiiragi283.ragium.common.inventory.HTContainerItemSlot diff --git a/src/main/kotlin/hiiragi283/ragium/impl/RagiumPlatformImpl.kt b/src/main/kotlin/hiiragi283/ragium/impl/RagiumPlatformImpl.kt index 676eb8255..634206225 100644 --- a/src/main/kotlin/hiiragi283/ragium/impl/RagiumPlatformImpl.kt +++ b/src/main/kotlin/hiiragi283/ragium/impl/RagiumPlatformImpl.kt @@ -4,7 +4,6 @@ import com.google.gson.JsonObject import hiiragi283.ragium.api.RagiumPlatform import hiiragi283.ragium.api.data.recipe.ingredient.HTFluidIngredientCreator import hiiragi283.ragium.api.data.recipe.ingredient.HTItemIngredientCreator -import hiiragi283.ragium.api.item.component.HTMachineUpgrade import hiiragi283.ragium.api.material.HTMaterialDefinition import hiiragi283.ragium.api.material.HTMaterialKey import hiiragi283.ragium.api.material.prefix.HTMaterialPrefix @@ -25,10 +24,8 @@ import hiiragi283.ragium.impl.value.HTJsonValueOutput import hiiragi283.ragium.impl.value.HTTagValueInput import hiiragi283.ragium.impl.value.HTTagValueOutput import hiiragi283.ragium.setup.RagiumAttachmentTypes -import hiiragi283.ragium.setup.RagiumDataComponents import hiiragi283.ragium.setup.RagiumRecipeSerializers import net.minecraft.core.HolderLookup -import net.minecraft.core.component.DataComponentType import net.minecraft.nbt.CompoundTag import net.minecraft.server.MinecraftServer import net.minecraft.server.level.ServerLevel @@ -40,8 +37,6 @@ import net.neoforged.neoforge.server.ServerLifecycleHooks import java.util.function.Consumer class RagiumPlatformImpl : RagiumPlatform { - override fun getUpgradeDataType(): DataComponentType = RagiumDataComponents.MACHINE_UPGRADE - // Material // override fun getMaterialDefinitions(): Map = RagiumMaterialManager.definitions diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlockEntityTypes.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlockEntityTypes.kt index fced57d3f..4b842185b 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlockEntityTypes.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlockEntityTypes.kt @@ -3,13 +3,13 @@ package hiiragi283.ragium.setup import hiiragi283.ragium.api.RagiumAPI import hiiragi283.ragium.api.block.HTBlockWithEntity import hiiragi283.ragium.api.block.entity.HTBlockEntityFactory +import hiiragi283.ragium.api.capability.HTEnergyCapabilities +import hiiragi283.ragium.api.capability.HTFluidCapabilities +import hiiragi283.ragium.api.capability.HTItemCapabilities import hiiragi283.ragium.api.registry.impl.HTDeferredBlockEntityType import hiiragi283.ragium.api.registry.impl.HTDeferredBlockEntityTypeRegister import hiiragi283.ragium.api.registry.impl.HTDeferredOnlyBlock import hiiragi283.ragium.api.storage.HTHandlerProvider -import hiiragi283.ragium.api.storage.capability.HTEnergyCapabilities -import hiiragi283.ragium.api.storage.capability.HTFluidCapabilities -import hiiragi283.ragium.api.storage.capability.HTItemCapabilities import hiiragi283.ragium.common.block.entity.HTBlockEntity import hiiragi283.ragium.common.block.entity.HTImitationSpawnerBlockEntity import hiiragi283.ragium.common.block.entity.device.HTDimensionalAnchorBlockEntity diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumDataComponents.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumDataComponents.kt index 1674d8a37..761e1f44c 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumDataComponents.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumDataComponents.kt @@ -1,12 +1,12 @@ package hiiragi283.ragium.setup import hiiragi283.ragium.api.RagiumAPI +import hiiragi283.ragium.api.item.component.HTComponentUpgrade import hiiragi283.ragium.api.item.component.HTFluidContents import hiiragi283.ragium.api.item.component.HTIntrinsicEnchantment import hiiragi283.ragium.api.item.component.HTItemContents import hiiragi283.ragium.api.item.component.HTItemSoundEvent import hiiragi283.ragium.api.item.component.HTLootTicketTargets -import hiiragi283.ragium.api.item.component.HTMachineUpgrade import hiiragi283.ragium.api.item.component.HTSpawnerMob import hiiragi283.ragium.api.item.component.HTStackContents import hiiragi283.ragium.api.item.component.HTTeleportPos @@ -44,7 +44,7 @@ object RagiumDataComponents { val ANTI_GRAVITY: DataComponentType = REGISTER.registerType("anti_gravity", BiCodec.BOOL) @JvmField - val CHARGE_POWER: DataComponentType = REGISTER.registerType("charge_power", BiCodecs.FRACTION) + val CHARGE_POWER: DataComponentType = REGISTER.registerType("charge_power", BiCodecs.NON_NEGATIVE_FRACTION) @JvmField val COLOR: DataComponentType = REGISTER.registerType("color", VanillaBiCodecs.COLOR) @@ -84,7 +84,7 @@ object RagiumDataComponents { // Machine // @JvmField - val MACHINE_UPGRADE: DataComponentType = REGISTER.registerType("machine_upgrade", HTMachineUpgrade.CODEC) + val MACHINE_UPGRADE: DataComponentType = REGISTER.registerType("machine_upgrade", HTComponentUpgrade.CODEC) @JvmField val MACHINE_UPGRADES: DataComponentType = diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumEntityTypes.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumEntityTypes.kt index a24394e04..2f6a2ffc1 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumEntityTypes.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumEntityTypes.kt @@ -1,12 +1,12 @@ package hiiragi283.ragium.setup import hiiragi283.ragium.api.RagiumAPI +import hiiragi283.ragium.api.capability.HTEnergyCapabilities +import hiiragi283.ragium.api.capability.HTFluidCapabilities +import hiiragi283.ragium.api.capability.HTItemCapabilities import hiiragi283.ragium.api.registry.impl.HTDeferredEntityType import hiiragi283.ragium.api.registry.impl.HTDeferredEntityTypeRegister import hiiragi283.ragium.api.storage.HTHandlerProvider -import hiiragi283.ragium.api.storage.capability.HTEnergyCapabilities -import hiiragi283.ragium.api.storage.capability.HTFluidCapabilities -import hiiragi283.ragium.api.storage.capability.HTItemCapabilities import hiiragi283.ragium.common.HTChargeType import hiiragi283.ragium.common.entity.HTThrownCaptureEgg import hiiragi283.ragium.common.entity.charge.HTAbstractCharge diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumItems.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumItems.kt index c675a7f47..88ce664b9 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumItems.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumItems.kt @@ -1,11 +1,15 @@ package hiiragi283.ragium.setup import hiiragi283.ragium.api.RagiumAPI +import hiiragi283.ragium.api.capability.HTEnergyCapabilities +import hiiragi283.ragium.api.capability.HTFluidCapabilities +import hiiragi283.ragium.api.capability.HTItemCapabilities +import hiiragi283.ragium.api.capability.RagiumCapabilities import hiiragi283.ragium.api.collection.ImmutableTable import hiiragi283.ragium.api.collection.buildTable +import hiiragi283.ragium.api.item.component.HTComponentUpgrade import hiiragi283.ragium.api.item.component.HTIntrinsicEnchantment import hiiragi283.ragium.api.item.component.HTItemSoundEvent -import hiiragi283.ragium.api.item.component.HTMachineUpgrade import hiiragi283.ragium.api.material.HTMaterialKey import hiiragi283.ragium.api.material.HTMaterialLike import hiiragi283.ragium.api.material.prefix.HTMaterialPrefix @@ -17,15 +21,15 @@ import hiiragi283.ragium.api.registry.impl.HTDeferredItem import hiiragi283.ragium.api.registry.impl.HTDeferredItemRegister import hiiragi283.ragium.api.registry.impl.HTSimpleDeferredItem import hiiragi283.ragium.api.registry.vanillaId -import hiiragi283.ragium.api.storage.capability.HTEnergyCapabilities -import hiiragi283.ragium.api.storage.capability.HTFluidCapabilities -import hiiragi283.ragium.api.storage.capability.HTItemCapabilities import hiiragi283.ragium.api.storage.energy.HTEnergyBattery import hiiragi283.ragium.api.storage.fluid.HTFluidTank import hiiragi283.ragium.api.storage.item.HTItemSlot import hiiragi283.ragium.api.tag.RagiumModTags import hiiragi283.ragium.api.text.HTTranslation import hiiragi283.ragium.api.tier.HTBaseTier +import hiiragi283.ragium.api.upgrade.HTUpgradeKey +import hiiragi283.ragium.api.upgrade.HTUpgradeProvider +import hiiragi283.ragium.api.upgrade.RagiumUpgradeKeys import hiiragi283.ragium.api.variant.HTEquipmentMaterial import hiiragi283.ragium.api.variant.HTToolVariant import hiiragi283.ragium.common.HTChargeType @@ -51,7 +55,6 @@ import hiiragi283.ragium.common.item.tool.HTMagnetItem import hiiragi283.ragium.common.item.tool.HTTeleportKeyItem import hiiragi283.ragium.common.item.tool.HTTraderCatalogItem import hiiragi283.ragium.common.item.tool.HTUniversalBundleItem -import hiiragi283.ragium.common.item.upgrade.HTCreativeUpgradeItem import hiiragi283.ragium.common.material.CommonMaterialKeys import hiiragi283.ragium.common.material.CommonMaterialPrefixes import hiiragi283.ragium.common.material.FoodMaterialKeys @@ -74,6 +77,7 @@ import hiiragi283.ragium.common.variant.VanillaToolVariant import hiiragi283.ragium.config.RagiumConfig import net.minecraft.core.component.DataComponentPatch import net.minecraft.core.component.DataComponentType +import net.minecraft.core.registries.BuiltInRegistries import net.minecraft.resources.ResourceKey import net.minecraft.sounds.SoundEvent import net.minecraft.sounds.SoundEvents @@ -632,9 +636,7 @@ object RagiumItems { @JvmField val COMPONENTS: Map = HTComponentTier.entries.associateWith { tier: HTComponentTier -> - REGISTER.registerItemWith("${tier.asMaterialName()}_component", tier, ::HTTierBasedItem) { - it.stacksTo(1).component(RagiumDataComponents.MACHINE_UPGRADE, HTMachineUpgrade.create(tier)) - } + REGISTER.registerItemWith("${tier.asMaterialName()}_component", tier, ::HTTierBasedItem) { it.stacksTo(1) } } @JvmStatic @@ -650,11 +652,11 @@ object RagiumItems { // Machine @JvmStatic val MACHINE_UPGRADES: ImmutableTable = buildTable { - fun register(variant: HTUpgradeVariant, tier: HTBaseTier, vararg pairs: Pair) { + fun register(variant: HTUpgradeVariant, tier: HTBaseTier, vararg pairs: Pair) { this[variant, tier] = REGISTER.registerSimpleItem("${tier.serializedName}_${variant.variantName()}_upgrade") { it .stacksTo(1) - .component(RagiumDataComponents.MACHINE_UPGRADE, HTMachineUpgrade.create(mapOf(*pairs))) + .component(RagiumDataComponents.MACHINE_UPGRADE, HTComponentUpgrade.create(*pairs)) .component( RagiumDataComponents.MACHINE_UPGRADE_FILTER, HTKeyOrTagHelper.INSTANCE.create(RagiumModTags.BlockEntityTypes.MACHINES_ELECTRIC), @@ -666,38 +668,38 @@ object RagiumItems { register( HTUpgradeVariant.EFFICIENCY, HTBaseTier.BASIC, - HTMachineUpgrade.Key.ENERGY_EFFICIENCY to fraction(5, 4), + RagiumUpgradeKeys.ENERGY_EFFICIENCY to fraction(5, 4), ) register( HTUpgradeVariant.EFFICIENCY, HTBaseTier.ADVANCED, - HTMachineUpgrade.Key.ENERGY_EFFICIENCY to fraction(3, 2), + RagiumUpgradeKeys.ENERGY_EFFICIENCY to fraction(3, 2), ) // Energy Capacity register( HTUpgradeVariant.ENERGY_CAPACITY, HTBaseTier.BASIC, - HTMachineUpgrade.Key.ENERGY_CAPACITY to fraction(4), + RagiumUpgradeKeys.ENERGY_CAPACITY to fraction(4), ) register( HTUpgradeVariant.ENERGY_CAPACITY, HTBaseTier.ADVANCED, - HTMachineUpgrade.Key.ENERGY_CAPACITY to fraction(8), + RagiumUpgradeKeys.ENERGY_CAPACITY to fraction(8), ) // Speed register( HTUpgradeVariant.SPEED, HTBaseTier.BASIC, - HTMachineUpgrade.Key.ENERGY_EFFICIENCY to fraction(4, 5), - HTMachineUpgrade.Key.ENERGY_GENERATION to fraction(5, 4), - HTMachineUpgrade.Key.SPEED to fraction(5, 4), + RagiumUpgradeKeys.ENERGY_EFFICIENCY to fraction(4, 5), + RagiumUpgradeKeys.ENERGY_GENERATION to fraction(5, 4), + RagiumUpgradeKeys.SPEED to fraction(5, 4), ) register( HTUpgradeVariant.SPEED, HTBaseTier.ADVANCED, - HTMachineUpgrade.Key.ENERGY_EFFICIENCY to fraction(2, 3), - HTMachineUpgrade.Key.ENERGY_GENERATION to fraction(3, 2), - HTMachineUpgrade.Key.SPEED to fraction(3, 2), + RagiumUpgradeKeys.ENERGY_EFFICIENCY to fraction(2, 3), + RagiumUpgradeKeys.ENERGY_GENERATION to fraction(3, 2), + RagiumUpgradeKeys.SPEED to fraction(3, 2), ) } @@ -708,37 +710,43 @@ object RagiumItems { // Processor @JvmField val EFFICIENT_CRUSH_UPGRADE: HTSimpleDeferredItem = - registerUpgrade("efficient_crush", RagiumCommonTranslation.EFFICIENT_CRUSH_UPGRADE) + registerUpgrade("efficient_crush", RagiumUpgradeKeys.USE_LUBRICANT, RagiumCommonTranslation.EFFICIENT_CRUSH_UPGRADE) @JvmField val PRIMARY_ONLY_UPGRADE: HTSimpleDeferredItem = - registerUpgrade("primary_only", RagiumCommonTranslation.PRIMARY_ONLY_UPGRADE) + registerUpgrade("primary_only", RagiumUpgradeKeys.DISABLE_EXTRA, RagiumCommonTranslation.PRIMARY_ONLY_UPGRADE) // Device @JvmField val EXP_COLLECTOR_UPGRADE: HTSimpleDeferredItem = - registerUpgrade("exp_collector", RagiumCommonTranslation.EXP_COLLECTOR_UPGRADE) + registerUpgrade("exp_collector", RagiumUpgradeKeys.EXP_COLLECTING, RagiumCommonTranslation.EXP_COLLECTOR_UPGRADE) @JvmField val FISHING_UPGRADE: HTSimpleDeferredItem = - registerUpgrade("fishing", RagiumCommonTranslation.FISHING_UPGRADE) + registerUpgrade("fishing", RagiumUpgradeKeys.FISHING, RagiumCommonTranslation.FISHING_UPGRADE) @JvmField val MOB_CAPTURE_UPGRADE: HTSimpleDeferredItem = - registerUpgrade("mob_capture", RagiumCommonTranslation.MOB_CAPTURE_UPGRADE) + registerUpgrade("mob_capture", RagiumUpgradeKeys.MOB_CAPTURE, RagiumCommonTranslation.MOB_CAPTURE_UPGRADE) @JvmStatic - private fun registerUpgrade(name: String, translation: HTTranslation): HTSimpleDeferredItem = + private fun registerUpgrade(name: String, key: HTUpgradeKey, translation: HTTranslation): HTSimpleDeferredItem = REGISTER.registerSimpleItem("${name}_upgrade") { it .stacksTo(1) .description(translation) - .component(RagiumDataComponents.MACHINE_UPGRADE, HTMachineUpgrade.create()) + .component( + RagiumDataComponents.MACHINE_UPGRADE, + HTComponentUpgrade.create(key to fraction(1)), + ) } @JvmField - val CREATIVE_UPGRADE: HTSimpleDeferredItem = REGISTER.registerItem("creative_upgrade", ::HTCreativeUpgradeItem) { - it.stacksTo(1).component(RagiumDataComponents.MACHINE_UPGRADE, HTMachineUpgrade.create(HTBaseTier.CREATIVE)) + val CREATIVE_UPGRADE: HTSimpleDeferredItem = REGISTER.registerItemWith("creative_upgrade", HTBaseTier.CREATIVE, ::HTTierBasedItem) { + it.stacksTo(1).component( + RagiumDataComponents.MACHINE_UPGRADE, + HTComponentUpgrade.create(RagiumUpgradeKeys.IS_CREATIVE to fraction(1)), + ) } // Event // @@ -798,6 +806,36 @@ object RagiumItems { DRILL, ) + // Upgrade + for (item: Item in BuiltInRegistries.ITEM) { + // Component-Based for all items + registerUpgrade( + event, + { stack: ItemStack -> + HTUpgradeProvider { key: HTUpgradeKey -> + stack.get(RagiumDataComponents.MACHINE_UPGRADE)?.get(key) ?: Fraction.ZERO + } + }, + item, + ) + + for ((tier: HTComponentTier, item: ItemLike) in COMPONENTS) { + registerUpgrade( + event, + { _ -> + HTUpgradeProvider { key: HTUpgradeKey -> + if (key == RagiumUpgradeKeys.BASE_MULTIPLIER) { + fraction(tier.ordinal + 2) + } else { + Fraction.ZERO + } + } + }, + item, + ) + } + } + RagiumAPI.LOGGER.info("Registered item capabilities!") } @@ -828,6 +866,15 @@ object RagiumItems { ) } + @JvmStatic + fun registerUpgrade(event: RegisterCapabilitiesEvent, getter: (ItemStack) -> HTUpgradeProvider, vararg items: ItemLike) { + event.registerItem( + RagiumCapabilities.UPGRADE_ITEM, + { stack: ItemStack, _: Void? -> getter(stack) }, + *items, + ) + } + @JvmStatic private fun modifyComponents(event: ModifyDefaultComponentsEvent) { fun modify(item: ItemLike, type: DataComponentType, value: T) { diff --git a/src/main/kotlin/hiiragi283/ragium/util/HTItemDropHelper.kt b/src/main/kotlin/hiiragi283/ragium/util/HTItemDropHelper.kt index 271a093aa..32d3c9a1e 100644 --- a/src/main/kotlin/hiiragi283/ragium/util/HTItemDropHelper.kt +++ b/src/main/kotlin/hiiragi283/ragium/util/HTItemDropHelper.kt @@ -1,7 +1,7 @@ package hiiragi283.ragium.util +import hiiragi283.ragium.api.capability.HTItemCapabilities import hiiragi283.ragium.api.stack.ImmutableItemStack -import hiiragi283.ragium.api.storage.capability.HTItemCapabilities import net.minecraft.core.BlockPos import net.minecraft.world.Containers import net.minecraft.world.entity.Entity diff --git a/src/main/kotlin/hiiragi283/ragium/util/HTStackSlotHelper.kt b/src/main/kotlin/hiiragi283/ragium/util/HTStackSlotHelper.kt index e05bceaf0..9beb446c0 100644 --- a/src/main/kotlin/hiiragi283/ragium/util/HTStackSlotHelper.kt +++ b/src/main/kotlin/hiiragi283/ragium/util/HTStackSlotHelper.kt @@ -1,6 +1,7 @@ package hiiragi283.ragium.util import hiiragi283.ragium.api.RagiumAPI +import hiiragi283.ragium.api.capability.HTFluidCapabilities import hiiragi283.ragium.api.stack.ImmutableFluidStack import hiiragi283.ragium.api.stack.ImmutableItemStack import hiiragi283.ragium.api.stack.ImmutableStack @@ -10,7 +11,6 @@ import hiiragi283.ragium.api.storage.HTStackSlot import hiiragi283.ragium.api.storage.HTStackView import hiiragi283.ragium.api.storage.HTStorageAccess import hiiragi283.ragium.api.storage.HTStorageAction -import hiiragi283.ragium.api.storage.capability.HTFluidCapabilities import hiiragi283.ragium.api.storage.fluid.HTFluidTank import hiiragi283.ragium.api.storage.item.HTItemSlot import hiiragi283.ragium.common.storage.fluid.tank.HTFluidHandlerItemWrapper From 2e5c40b3e237e3f862874f88a7e6021968aa788a Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Thu, 11 Dec 2025 23:09:29 +0900 Subject: [PATCH 28/49] refactor: refine around upgrade multiplier --- .../api/item/component/HTComponentUpgrade.kt | 6 +++++- .../ragium/api/upgrade/HTUpgradeHandler.kt | 16 ++++++++-------- .../ragium/api/upgrade/HTUpgradeHelper.kt | 6 ------ .../HTBlockMachinePropertiesProvider.kt | 7 +++---- .../processor/HTMultiSmelterBlockEntity.kt | 12 +++++++++--- .../entity/storage/HTTieredDrumBlockEntity.kt | 1 + .../container/HTBlockEntityContainerMenu.kt | 4 ++-- .../common/upgrade/HTComponentUpgradeHandler.kt | 16 ++++++++++++++++ .../block/ragi_alloy_coil_block_top.png | Bin 209 -> 201 bytes .../assets/ragium/textures/block/refinery.png | Bin 248 -> 307 bytes 10 files changed, 44 insertions(+), 24 deletions(-) create mode 100644 src/main/kotlin/hiiragi283/ragium/common/upgrade/HTComponentUpgradeHandler.kt diff --git a/src/api/kotlin/hiiragi283/ragium/api/item/component/HTComponentUpgrade.kt b/src/api/kotlin/hiiragi283/ragium/api/item/component/HTComponentUpgrade.kt index 49f171a58..311138dc1 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/item/component/HTComponentUpgrade.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/item/component/HTComponentUpgrade.kt @@ -25,7 +25,11 @@ value class HTComponentUpgrade private constructor(val map: Map): HTComponentUpgrade = when { + fun create(map: Map): HTComponentUpgrade = + createInternal(map.filter { (_, value: Fraction) -> value > Fraction.ZERO }) + + @JvmStatic + private fun createInternal(map: Map): HTComponentUpgrade = when { map.isEmpty() -> EMPTY else -> HTComponentUpgrade(map) } diff --git a/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeHandler.kt b/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeHandler.kt index 0a89344dd..6f9ab0fc6 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeHandler.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeHandler.kt @@ -28,9 +28,9 @@ interface HTUpgradeHandler { return false } - fun collectMultiplier(key: HTUpgradeKey, base: Fraction = fraction(1)): Fraction { + fun collectMultiplier(key: HTUpgradeKey, ignoreEmpty: Boolean = false): Fraction { var isEmpty = true - var sum: Fraction = base + var sum: Fraction = Fraction.ONE for (stack: ImmutableItemStack in getUpgrades()) { val fraction: Fraction = HTUpgradeHelper.getUpgrade(stack, key) if (fraction > Fraction.ZERO) { @@ -38,16 +38,16 @@ interface HTUpgradeHandler { isEmpty = false } } - return when (isEmpty) { - true -> Fraction.ZERO - false -> sum + return when { + isEmpty && ignoreEmpty -> Fraction.ZERO + else -> sum } } - fun modifyValue(key: HTUpgradeKey, base: Fraction = fraction(1), operator: UnaryOperator): Int = - collectMultiplier(key, base).let(operator::apply).toInt() + fun modifyValue(key: HTUpgradeKey, ignoreEmpty: Boolean = false, operator: UnaryOperator): Int = + collectMultiplier(key, ignoreEmpty).let(operator::apply).toInt() - fun getBaseMultiplier(): Fraction = getMaxMultiplier(RagiumUpgradeKeys.BASE_MULTIPLIER) ?: Fraction.ONE + fun getBaseMultiplier(): Fraction = collectMultiplier(RagiumUpgradeKeys.BASE_MULTIPLIER) fun isCreative(): Boolean = hasUpgrade(RagiumUpgradeKeys.IS_CREATIVE) } diff --git a/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeHelper.kt b/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeHelper.kt index d635fa580..d9faf5939 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeHelper.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeHelper.kt @@ -51,12 +51,6 @@ data object HTUpgradeHelper { @JvmStatic fun getHandler(stack: ItemStack): HTUpgradeHandler? = stack.toImmutable()?.let(::getHandler) - @JvmStatic - fun getMultiplier(stack: ItemStack, key: HTUpgradeKey): Fraction = getHandler(stack)?.collectMultiplier(key) ?: Fraction.ZERO - @JvmStatic fun getHandler(stack: ImmutableItemStack): HTUpgradeHandler? = stack.getCapability(RagiumCapabilities.UPGRADABLE_ITEM) - - @JvmStatic - fun getMultiplier(stack: ImmutableItemStack, key: HTUpgradeKey): Fraction = getHandler(stack)?.collectMultiplier(key) ?: Fraction.ZERO } diff --git a/src/integration/kotlin/hiiragi283/ragium/client/integration/jade/provider/HTBlockMachinePropertiesProvider.kt b/src/integration/kotlin/hiiragi283/ragium/client/integration/jade/provider/HTBlockMachinePropertiesProvider.kt index ee1339d56..9460e8590 100644 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/jade/provider/HTBlockMachinePropertiesProvider.kt +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/jade/provider/HTBlockMachinePropertiesProvider.kt @@ -6,7 +6,6 @@ import hiiragi283.ragium.api.upgrade.HTUpgradeKey import hiiragi283.ragium.client.integration.jade.provider.base.HTBasicJadeDataProvider import hiiragi283.ragium.common.block.entity.HTUpgradableBlockEntity import hiiragi283.ragium.common.block.entity.component.HTMachineUpgradeComponent -import org.apache.commons.lang3.math.Fraction import snownee.jade.api.BlockAccessor import snownee.jade.api.ITooltip import snownee.jade.api.config.IPluginConfig @@ -17,9 +16,9 @@ object HTBlockMachinePropertiesProvider : HTBasicJadeDataProvider HTUpgradeKey.getAll().associateWith(component::collectMultiplier) } - ?.let { map: Map -> map.filter { (_, value: Fraction) -> value > Fraction.ZERO } } - ?.let(HTComponentUpgrade.Companion::create) + ?.let { component: HTMachineUpgradeComponent -> + HTUpgradeKey.getAll().associateWith { component.collectMultiplier(it, true) } + }?.let(HTComponentUpgrade.Companion::create) override fun appendTooltip( tooltip: ITooltip, 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 f8f2d4a21..88d39535c 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 @@ -5,6 +5,7 @@ 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.upgrade.RagiumUpgradeKeys import hiiragi283.ragium.common.block.entity.processor.base.HTAbstractSmelterBlockEntity import hiiragi283.ragium.common.recipe.vanilla.HTVanillaCookingRecipe import hiiragi283.ragium.setup.RagiumBlocks @@ -15,6 +16,7 @@ import net.minecraft.world.item.ItemStack import net.minecraft.world.item.crafting.AbstractCookingRecipe import net.minecraft.world.item.crafting.SingleRecipeInput import net.minecraft.world.level.block.state.BlockState +import org.apache.commons.lang3.math.Fraction import kotlin.math.min import kotlin.math.pow @@ -49,8 +51,12 @@ class HTMultiSmelterBlockEntity(pos: BlockPos, state: BlockState) : } } - private fun getMaxParallel(): Int = when { - isCreative() -> inputSlot.getStack()?.maxStackSize() ?: -1 - else -> 2.0.pow((getBaseMultiplier() - 1).toDouble()).toInt() + private fun getMaxParallel(): Int { + val maxTier: Fraction? = getMaxMultiplier(RagiumUpgradeKeys.BASE_MULTIPLIER) + return when { + isCreative() -> inputSlot.getStack()?.maxStackSize() ?: -1 + maxTier != null -> 2.0.pow((maxTier - 1).toDouble()).toInt() + else -> 1 + } } } diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTTieredDrumBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTTieredDrumBlockEntity.kt index 0aa86227b..f4e642708 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTTieredDrumBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTTieredDrumBlockEntity.kt @@ -20,6 +20,7 @@ class HTTieredDrumBlockEntity(blockHolder: Holder, pos: BlockPos, state: private lateinit var tier: HTDrumTier override fun initializeVariables() { + super.initializeVariables() tier = blockHolder.getAttributeTier() } diff --git a/src/main/kotlin/hiiragi283/ragium/common/inventory/container/HTBlockEntityContainerMenu.kt b/src/main/kotlin/hiiragi283/ragium/common/inventory/container/HTBlockEntityContainerMenu.kt index fedbc6c68..ce266d8d4 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/inventory/container/HTBlockEntityContainerMenu.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/inventory/container/HTBlockEntityContainerMenu.kt @@ -2,7 +2,7 @@ package hiiragi283.ragium.common.inventory.container import hiiragi283.ragium.api.registry.impl.HTDeferredMenuType import hiiragi283.ragium.common.block.entity.HTBlockEntity -import hiiragi283.ragium.common.block.entity.HTMachineBlockEntity +import hiiragi283.ragium.common.block.entity.HTUpgradableBlockEntity import net.minecraft.world.entity.player.Inventory import net.minecraft.world.entity.player.Player @@ -22,7 +22,7 @@ open class HTBlockEntityContainerMenu( context.addMenuTrackers(this) // block entity slots addSlots(context) - if (context is HTMachineBlockEntity) { + if (context is HTUpgradableBlockEntity) { addSlots(context.getUpgradeSlots()) } // player inventory diff --git a/src/main/kotlin/hiiragi283/ragium/common/upgrade/HTComponentUpgradeHandler.kt b/src/main/kotlin/hiiragi283/ragium/common/upgrade/HTComponentUpgradeHandler.kt new file mode 100644 index 000000000..17e2091f8 --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/upgrade/HTComponentUpgradeHandler.kt @@ -0,0 +1,16 @@ +package hiiragi283.ragium.common.upgrade + +import hiiragi283.ragium.api.stack.ImmutableItemStack +import hiiragi283.ragium.api.upgrade.HTUpgradeHandler +import hiiragi283.ragium.setup.RagiumDataComponents +import net.minecraft.world.item.ItemStack + +class HTComponentUpgradeHandler(private val parent: ItemStack) : HTUpgradeHandler { + private fun getComponent(): List = parent.get(RagiumDataComponents.MACHINE_UPGRADES) ?: listOf() + + override fun getUpgrades(): List = getComponent().filterNotNull() + + override fun isValidUpgrade(upgrade: ImmutableItemStack, existing: List): Boolean { + TODO("Not yet implemented") + } +} diff --git a/src/main/resources/assets/ragium/textures/block/ragi_alloy_coil_block_top.png b/src/main/resources/assets/ragium/textures/block/ragi_alloy_coil_block_top.png index 975a0c60392bc7c2665a49e5e0b544f651e200d0..5e2349fc389819a1d9308e200d0ada8e26cb6f31 100644 GIT binary patch delta 173 zcmV;e08;E~OMg0HFCK=NwJ`&L#3N3$BQgxo_z0Vvvs+w4**r9_@-rclq<} z8c2>x{eilG|DEH#Gn(OxG>~tUQut5}T>WG5qDb$7BAUcD044wc|Np|IRjL3000v1! bK~w_(C9xnt21>efP|B0_Fg4QSX2W~|9pP=q%QA(Y%HuL;R^r&|Nll- j0;T`}00v1!K~w_(9$Ol|`nm4I00000NkvXXu0mjf_)tgr diff --git a/src/main/resources/assets/ragium/textures/block/refinery.png b/src/main/resources/assets/ragium/textures/block/refinery.png index 8196189b79c1898b2531b406437b49023c191884..169091f355507839e10855ed4fa1d4b32d338e75 100644 GIT binary patch delta 280 zcmV+z0q6es0kZ;-B!B2hL_t(|oTO7b3c^4Xe9;_1L@Y!}Z*8Zxw&DdW6zuIihlLjq zTdRNu6s#-+u@ZxYh2#z~vmwFVykr+L5cXweclLc)d)1(@-zFBGAFt2{U0FNcV%<9Q zC>&nM;tZf+Ez&EbfqJv5*;EoDgK!q7`VWrFHL%v%8aa-Gwtob4yGYX-U{vUK-WY`e z>Qz$)hfS_CB^Sh9ajr(6W7vbyWK4_YJk=0`1B}M_dIr+J?*}PoWYBSHlF5F%OJi*h zk_^6|w}?;YjkM3G2RK}BwupmK2{@c&kTFQ+%!%STN27XNJ<7um00960WYdpj00006 eNklM&mJ)_FfcG2IXVwT9Z_NM>e(X(F)2B$t|KZPh)K!8U4RZCULcUAub(@JQw{*I W6IY~8iZ)yT0000 Date: Fri, 12 Dec 2025 00:35:03 +0900 Subject: [PATCH 29/49] feat!: removed Drums feat: added new block Variable Tank --- .../block/attribute/HTFluidBlockAttribute.kt | 5 +- .../ragium/api/registry/HTItemHolderLike.kt | 10 +- .../ragium/api/upgrade/HTUpgradeHandler.kt | 1 - .../ragium/api/upgrade/HTUpgradeHelper.kt | 23 ++++ .../api/data/lang/HTLanguageProvider.kt | 6 -- .../data/client/RagiumBlockStateProvider.kt | 9 +- .../data/client/RagiumEnglishProvider.kt | 7 +- .../data/client/RagiumJapaneseProvider.kt | 7 +- .../recipe/RagiumMachineRecipeProvider.kt | 66 +++--------- .../server/tag/RagiumBlockTagsProvider.kt | 3 +- .../hiiragi283/ragium/client/RagiumClient.kt | 19 +--- .../{HTDrumScreen.kt => HTTankScreen.kt} | 6 +- .../client/renderer/RagiumModelLayers.kt | 5 +- .../block/entity/storage/HTDrumBlockEntity.kt | 54 ---------- .../entity/storage/HTExpDrumBlockEntity.kt | 13 --- .../block/entity/storage/HTTankBlockEntity.kt | 94 ++++++++++++++++ .../entity/storage/HTTieredDrumBlockEntity.kt | 64 ----------- .../common/block/storage/HTDrumBlock.kt | 6 -- .../common/block/storage/HTTankBlock.kt | 7 ++ .../common/entity/vehicle/HTDrumMinecart.kt | 99 ----------------- .../common/entity/vehicle/HTTankMinecart.kt | 52 +++++++++ .../common/item/HTDrumWithMinecartItem.kt | 12 --- .../ragium/common/item/HTLootTicketItem.kt | 5 +- .../ragium/common/item/HTTankMinecartItem.kt | 6 ++ .../ragium/common/item/base/HTMinecartItem.kt | 3 + .../item/block/HTImitationSpawnerBlockItem.kt | 15 ++- ...{HTDrumBlockItem.kt => HTTankBlockItem.kt} | 38 +++++-- .../energy/battery/HTMachineEnergyBattery.kt | 7 +- .../fluid/tank/HTComponentFluidTank.kt | 11 +- .../common/text/RagiumCommonTranslation.kt | 3 +- .../ragium/common/tier/HTDrumTier.kt | 74 ------------- .../upgrade/HTComponentUpgradeHandler.kt | 6 +- .../ragium/config/RagiumCommonConfig.kt | 100 ++++++------------ .../ragium/setup/RagiumBlockEntityTypes.kt | 26 ++--- .../ragium/setup/RagiumBlockTypes.kt | 18 +--- .../hiiragi283/ragium/setup/RagiumBlocks.kt | 38 +++---- .../ragium/setup/RagiumEntityTypes.kt | 33 +++--- .../hiiragi283/ragium/setup/RagiumItems.kt | 98 +++++++++-------- .../ragium/setup/RagiumMenuTypes.kt | 4 +- .../assets/ragium/models/block/tank.json | 56 ++++++++++ .../textures/block/creative_drum_side.png | Bin 177 -> 0 bytes .../textures/block/creative_drum_top.png | Bin 227 -> 0 bytes .../textures/block/experience_drum_side.png | Bin 185 -> 0 bytes .../textures/block/experience_drum_top.png | Bin 226 -> 0 bytes .../block/experience_machine_casing.png | Bin 202 -> 0 bytes .../ragium/textures/block/huge_drum_side.png | Bin 175 -> 0 bytes .../ragium/textures/block/huge_drum_top.png | Bin 231 -> 0 bytes .../ragium/textures/block/large_drum_side.png | Bin 160 -> 0 bytes .../ragium/textures/block/large_drum_top.png | Bin 220 -> 0 bytes .../textures/block/medium_drum_side.png | Bin 166 -> 0 bytes .../ragium/textures/block/medium_drum_top.png | Bin 230 -> 0 bytes .../assets/ragium/textures/block/refinery.png | Bin 307 -> 301 bytes .../ragium/textures/block/small_drum_side.png | Bin 167 -> 0 bytes .../ragium/textures/block/small_drum_top.png | Bin 227 -> 0 bytes .../ragium/textures/block/tank_side.png | Bin 0 -> 192 bytes .../assets/ragium/textures/block/tank_top.png | Bin 0 -> 199 bytes .../gui/container/{drum.png => tank.png} | Bin .../textures/item/creative_drum_minecart.png | Bin 466 -> 0 bytes .../textures/item/huge_drum_minecart.png | Bin 458 -> 0 bytes .../textures/item/large_drum_minecart.png | Bin 468 -> 0 bytes .../textures/item/medium_drum_minecart.png | Bin 472 -> 0 bytes .../textures/item/small_drum_minecart.png | Bin 477 -> 0 bytes .../ragium/textures/item/tank_minecart.png | Bin 0 -> 479 bytes 63 files changed, 460 insertions(+), 649 deletions(-) rename src/main/kotlin/hiiragi283/ragium/client/gui/screen/{HTDrumScreen.kt => HTTankScreen.kt} (77%) delete mode 100644 src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTDrumBlockEntity.kt delete mode 100644 src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTExpDrumBlockEntity.kt create mode 100644 src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTTankBlockEntity.kt delete mode 100644 src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTTieredDrumBlockEntity.kt delete mode 100644 src/main/kotlin/hiiragi283/ragium/common/block/storage/HTDrumBlock.kt create mode 100644 src/main/kotlin/hiiragi283/ragium/common/block/storage/HTTankBlock.kt delete mode 100644 src/main/kotlin/hiiragi283/ragium/common/entity/vehicle/HTDrumMinecart.kt create mode 100644 src/main/kotlin/hiiragi283/ragium/common/entity/vehicle/HTTankMinecart.kt delete mode 100644 src/main/kotlin/hiiragi283/ragium/common/item/HTDrumWithMinecartItem.kt create mode 100644 src/main/kotlin/hiiragi283/ragium/common/item/HTTankMinecartItem.kt rename src/main/kotlin/hiiragi283/ragium/common/item/block/{HTDrumBlockItem.kt => HTTankBlockItem.kt} (55%) delete mode 100644 src/main/kotlin/hiiragi283/ragium/common/tier/HTDrumTier.kt create mode 100644 src/main/resources/assets/ragium/models/block/tank.json delete mode 100644 src/main/resources/assets/ragium/textures/block/creative_drum_side.png delete mode 100644 src/main/resources/assets/ragium/textures/block/creative_drum_top.png delete mode 100644 src/main/resources/assets/ragium/textures/block/experience_drum_side.png delete mode 100644 src/main/resources/assets/ragium/textures/block/experience_drum_top.png delete mode 100644 src/main/resources/assets/ragium/textures/block/experience_machine_casing.png delete mode 100644 src/main/resources/assets/ragium/textures/block/huge_drum_side.png delete mode 100644 src/main/resources/assets/ragium/textures/block/huge_drum_top.png delete mode 100644 src/main/resources/assets/ragium/textures/block/large_drum_side.png delete mode 100644 src/main/resources/assets/ragium/textures/block/large_drum_top.png delete mode 100644 src/main/resources/assets/ragium/textures/block/medium_drum_side.png delete mode 100644 src/main/resources/assets/ragium/textures/block/medium_drum_top.png delete mode 100644 src/main/resources/assets/ragium/textures/block/small_drum_side.png delete mode 100644 src/main/resources/assets/ragium/textures/block/small_drum_top.png create mode 100644 src/main/resources/assets/ragium/textures/block/tank_side.png create mode 100644 src/main/resources/assets/ragium/textures/block/tank_top.png rename src/main/resources/assets/ragium/textures/gui/container/{drum.png => tank.png} (100%) delete mode 100644 src/main/resources/assets/ragium/textures/item/creative_drum_minecart.png delete mode 100644 src/main/resources/assets/ragium/textures/item/huge_drum_minecart.png delete mode 100644 src/main/resources/assets/ragium/textures/item/large_drum_minecart.png delete mode 100644 src/main/resources/assets/ragium/textures/item/medium_drum_minecart.png delete mode 100644 src/main/resources/assets/ragium/textures/item/small_drum_minecart.png create mode 100644 src/main/resources/assets/ragium/textures/item/tank_minecart.png diff --git a/src/api/kotlin/hiiragi283/ragium/api/block/attribute/HTFluidBlockAttribute.kt b/src/api/kotlin/hiiragi283/ragium/api/block/attribute/HTFluidBlockAttribute.kt index 973b0a0e6..218017de3 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/block/attribute/HTFluidBlockAttribute.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/block/attribute/HTFluidBlockAttribute.kt @@ -1,10 +1,9 @@ package hiiragi283.ragium.api.block.attribute import hiiragi283.ragium.api.RagiumAPI -import hiiragi283.ragium.api.math.times import hiiragi283.ragium.api.text.HTHasTranslationKey import hiiragi283.ragium.api.upgrade.HTUpgradeHandler -import hiiragi283.ragium.api.upgrade.RagiumUpgradeKeys +import hiiragi283.ragium.api.upgrade.HTUpgradeHelper import net.minecraft.Util import net.minecraft.util.StringRepresentable import java.util.function.IntSupplier @@ -13,7 +12,7 @@ import java.util.function.IntSupplier data class HTFluidBlockAttribute(private val tankMap: Map) : HTBlockAttribute { private fun getTankCapacity(type: TankType, handler: HTUpgradeHandler): IntSupplier { val baseCapacity: IntSupplier = tankMap[type] ?: error("Undefined tank capacity for ${type.serializedName}") - return IntSupplier { handler.modifyValue(RagiumUpgradeKeys.FLUID_CAPACITY) { baseCapacity.asInt * it } } + return IntSupplier { HTUpgradeHelper.getTankCapacity(handler, baseCapacity.asInt) } } fun getInputTank(handler: HTUpgradeHandler): IntSupplier = getTankCapacity(TankType.INPUT, handler) diff --git a/src/api/kotlin/hiiragi283/ragium/api/registry/HTItemHolderLike.kt b/src/api/kotlin/hiiragi283/ragium/api/registry/HTItemHolderLike.kt index 435875e92..fdb61d53a 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/registry/HTItemHolderLike.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/registry/HTItemHolderLike.kt @@ -1,8 +1,8 @@ package hiiragi283.ragium.api.registry import hiiragi283.ragium.api.stack.ImmutableItemStack +import hiiragi283.ragium.api.stack.toImmutable import net.minecraft.core.Holder -import net.minecraft.core.component.DataComponentPatch import net.minecraft.core.registries.BuiltInRegistries import net.minecraft.core.registries.Registries import net.minecraft.resources.ResourceKey @@ -92,11 +92,7 @@ interface HTItemHolderLike : } /** - * 指定した[count]と[components]から[ItemStack]を返します。 + * 指定した[count]から[ImmutableItemStack]を返します。 */ - fun toStack(count: Int = 1, components: DataComponentPatch): ItemStack { - val stack: ItemStack = toStack(count) - stack.applyComponents(components) - return stack - } + fun toImmutableStack(count: Int = 1): ImmutableItemStack? = toStack(count).toImmutable() } diff --git a/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeHandler.kt b/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeHandler.kt index 6f9ab0fc6..b2087bd92 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeHandler.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeHandler.kt @@ -1,6 +1,5 @@ package hiiragi283.ragium.api.upgrade -import hiiragi283.ragium.api.math.fraction import hiiragi283.ragium.api.math.times import hiiragi283.ragium.api.stack.ImmutableItemStack import org.apache.commons.lang3.math.Fraction diff --git a/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeHelper.kt b/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeHelper.kt index d9faf5939..b0d22caaf 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeHelper.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeHelper.kt @@ -2,6 +2,7 @@ package hiiragi283.ragium.api.upgrade import hiiragi283.ragium.api.capability.RagiumCapabilities import hiiragi283.ragium.api.item.component.HTComponentUpgrade +import hiiragi283.ragium.api.math.times import hiiragi283.ragium.api.stack.ImmutableItemStack import hiiragi283.ragium.api.stack.toImmutable import net.minecraft.ChatFormatting @@ -53,4 +54,26 @@ data object HTUpgradeHelper { @JvmStatic fun getHandler(stack: ImmutableItemStack): HTUpgradeHandler? = stack.getCapability(RagiumCapabilities.UPGRADABLE_ITEM) + + @JvmStatic + fun getTankCapacity(handler: HTUpgradeHandler, base: Int): Int = handler.modifyValue(RagiumUpgradeKeys.FLUID_CAPACITY) { + base * it * handler.getBaseMultiplier() + } + + @JvmStatic + fun getTankCapacity(stack: ItemStack, base: Int): Int { + val handler: HTUpgradeHandler = getHandler(stack) ?: return base + return getTankCapacity(handler, base) + } + + @JvmStatic + fun getEnergyCapacity(handler: HTUpgradeHandler, base: Int): Int = handler.modifyValue(RagiumUpgradeKeys.ENERGY_CAPACITY) { + base * it * handler.getBaseMultiplier() + } + + @JvmStatic + fun getEnergyCapacity(stack: ItemStack, base: Int): Int { + val handler: HTUpgradeHandler = getHandler(stack) ?: return base + return getEnergyCapacity(handler, base) + } } diff --git a/src/data/kotlin/hiiragi283/ragium/api/data/lang/HTLanguageProvider.kt b/src/data/kotlin/hiiragi283/ragium/api/data/lang/HTLanguageProvider.kt index 65d1f1a88..e6e96f87c 100644 --- a/src/data/kotlin/hiiragi283/ragium/api/data/lang/HTLanguageProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/api/data/lang/HTLanguageProvider.kt @@ -23,7 +23,6 @@ import hiiragi283.ragium.common.material.RagiumMoltenCrystalData import hiiragi283.ragium.common.material.VanillaMaterialKeys import hiiragi283.ragium.common.text.HTSmithingTranslation import hiiragi283.ragium.common.tier.HTCrateTier -import hiiragi283.ragium.common.tier.HTDrumTier import hiiragi283.ragium.setup.RagiumBlocks import hiiragi283.ragium.setup.RagiumChemicals import hiiragi283.ragium.setup.RagiumEntityTypes @@ -84,11 +83,6 @@ abstract class HTLanguageProvider(output: PackOutput, val type: HTLanguageType) addTranslations(HTBaseTier.entries, identity()) addTranslations(HTCrateTier.entries, HTCrateTier::getBlock) - addTranslations(HTDrumTier.entries, HTDrumTier::getBlock) - - val minecart = LangPattern("Minecart with %s", "%s付きトロッコ") - fromLangMap(minecart, RagiumItems.DRUM_MINECARTS) - fromLangMap(minecart, RagiumEntityTypes.DRUMS) translations() diff --git a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumBlockStateProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumBlockStateProvider.kt index c2208d070..f3e484b16 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumBlockStateProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumBlockStateProvider.kt @@ -235,14 +235,7 @@ class RagiumBlockStateProvider(context: HTDataGenContext) : BlockStateProvider(c models().cubeBottomTop(id.path, id, id.withSuffix("_bottom"), id) }*/ - val drums: List> = buildList { - addAll(RagiumBlocks.DRUMS.values) - add(RagiumBlocks.EXP_DRUM) - } - for (drum: HTDeferredBlock<*, *> in drums) { - val id: ResourceLocation = drum.blockId - simpleBlockAndItem(drum, models().cubeColumn(id.path, id.withSuffix("_side"), id.withSuffix("_top"))) - } + altModelBlock(RagiumBlocks.TANK) // Fluids for (content: HTFluidContent<*, *, *, *, *> in RagiumFluidContents.REGISTER.contents) { diff --git a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt index d86e4336e..ca7896fbb 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt @@ -177,7 +177,7 @@ class RagiumEnglishProvider(output: PackOutput) : HTLanguageProvider.English(out // Storage add(RagiumBlocks.OPEN_CRATE, "Open Crate") - add(RagiumBlocks.EXP_DRUM, "Experience Drum") + add(RagiumBlocks.TANK, "Variable Tank") } private fun enchantment() { @@ -298,6 +298,8 @@ class RagiumEnglishProvider(output: PackOutput) : HTLanguageProvider.English(out add(RagiumItems.SOLAR_PANEL, "Solar Panel") add(RagiumItems.SYNTHETIC_FIBER, "Synthetic Fiber") add(RagiumItems.SYNTHETIC_LEATHER, "Synthetic Leather") + // Vehicles + add(RagiumItems.TANK_MINECART, "Tank with Minecart") // Upgrades add(RagiumItems.ETERNAL_COMPONENT, "Eternal Component") @@ -460,8 +462,7 @@ class RagiumEnglishProvider(output: PackOutput) : HTLanguageProvider.English(out add(RagiumCommonTranslation.CRATE, "A storage which stores one type of item.") add(RagiumCommonTranslation.OPEN_CRATE, "A storage which drops inserted items below.") - add(RagiumCommonTranslation.DRUM, "A storage which stores one type of fluid.") - add(RagiumCommonTranslation.EXP_DRUM, "A storage which stores only Experience Liquid.") + add(RagiumCommonTranslation.TANK, "A fluid storage which capacity is extendable by upgrade.") add(RagiumCommonTranslation.CONFIG_ENERGY_CAPACITY, "Energy Capacity") add(RagiumCommonTranslation.CONFIG_ENERGY_RATE, "Energy Rate") diff --git a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt index 755a59acc..4eb000c7b 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt @@ -168,7 +168,7 @@ class RagiumJapaneseProvider(output: PackOutput) : HTLanguageProvider.Japanese(o // Storage add(RagiumBlocks.OPEN_CRATE, "オープンクレート") - add(RagiumBlocks.EXP_DRUM, "経験値ドラム") + add(RagiumBlocks.TANK, "可変タンク") } private fun enchantment() { @@ -299,6 +299,8 @@ class RagiumJapaneseProvider(output: PackOutput) : HTLanguageProvider.Japanese(o add(RagiumItems.SOLAR_PANEL, "太陽光パネル") add(RagiumItems.SYNTHETIC_FIBER, "合成繊維") add(RagiumItems.SYNTHETIC_LEATHER, "合成革") + // Vehicles + add(RagiumItems.TANK_MINECART, "タンク付きトロッコ") // Upgrades add(RagiumItems.ETERNAL_COMPONENT, "永久構造体") @@ -462,8 +464,7 @@ class RagiumJapaneseProvider(output: PackOutput) : HTLanguageProvider.Japanese(o add(RagiumCommonTranslation.CRATE, "1種類のアイテムを保管するストレージです。") add(RagiumCommonTranslation.OPEN_CRATE, "搬入されたアイテムを真下に落とすストレージです。") - add(RagiumCommonTranslation.DRUM, "1種類の液体を保管するストレージです。") - add(RagiumCommonTranslation.EXP_DRUM, "液体経験値だけを保管するストレージです。") + add(RagiumCommonTranslation.TANK, "アップグレードで容量を拡張可能な液体ストレージです。") add(RagiumCommonTranslation.CONFIG_ENERGY_CAPACITY, "エネルギー容量") add(RagiumCommonTranslation.CONFIG_ENERGY_RATE, "エネルギー使用速度") diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumMachineRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumMachineRecipeProvider.kt index e2f86a23d..8563ad37e 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumMachineRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumMachineRecipeProvider.kt @@ -16,7 +16,6 @@ import hiiragi283.ragium.common.material.RagiumMaterialKeys import hiiragi283.ragium.common.material.VanillaMaterialKeys import hiiragi283.ragium.common.tier.HTComponentTier import hiiragi283.ragium.common.tier.HTCrateTier -import hiiragi283.ragium.common.tier.HTDrumTier import hiiragi283.ragium.common.variant.HTUpgradeVariant import hiiragi283.ragium.common.variant.VanillaToolVariant import hiiragi283.ragium.setup.RagiumBlocks @@ -36,7 +35,23 @@ object RagiumMachineRecipeProvider : HTRecipeProvider.Direct() { upgrades() crate() - drums() + + // Tank + resetComponent(RagiumBlocks.TANK, RagiumDataComponents.FLUID_CONTENT) + HTShapedRecipeBuilder + .create(RagiumBlocks.TANK) + .crossLayered() + .define('A', CommonMaterialPrefixes.INGOT, RagiumMaterialKeys.RAGI_ALLOY) + .define('B', CommonMaterialPrefixes.PLATE, CommonMaterialKeys.RUBBER) + .define('C', Tags.Items.GLASS_BLOCKS) + .define('D', Tags.Items.BUCKETS_EMPTY) + .save(output) + + HTShapelessRecipeBuilder + .create(RagiumItems.TANK_MINECART) + .addIngredient(RagiumBlocks.TANK) + .addIngredient(Items.MINECART) + .save(output) } // Generators // @@ -430,51 +445,4 @@ object RagiumMachineRecipeProvider : HTRecipeProvider.Direct() { .define('B', Items.HOPPER) .save(output) } - - @JvmStatic - private fun drums() { - for ((tier: HTDrumTier, drum: HTItemHolderLike) in RagiumBlocks.DRUMS) { - resetComponent(drum, RagiumDataComponents.FLUID_CONTENT) - - val key: HTMaterialKey = when (tier) { - HTDrumTier.SMALL -> VanillaMaterialKeys.COPPER - HTDrumTier.MEDIUM -> VanillaMaterialKeys.GOLD - HTDrumTier.LARGE -> VanillaMaterialKeys.DIAMOND - else -> continue - } - val prefix: HTMaterialPrefix = getDefaultPrefix(key) ?: continue - HTShapedRecipeBuilder - .create(drum) - .pattern( - "ABA", - "ACA", - "ABA", - ).define('A', prefix, key) - .define('B', CommonMaterialPrefixes.PLATE, CommonMaterialKeys.RUBBER) - .define('C', Tags.Items.BUCKETS_EMPTY) - .save(output) - } - // Huge - createNetheriteUpgrade(HTDrumTier.HUGE.getBlock(), HTDrumTier.LARGE.getBlock()).save(output) - // Exp - HTShapedRecipeBuilder - .create(RagiumBlocks.EXP_DRUM) - .pattern( - "ABA", - "ACA", - "ABA", - ).define('A', CommonMaterialPrefixes.GEM, VanillaMaterialKeys.EMERALD) - .define('B', CommonMaterialPrefixes.PLATE, CommonMaterialKeys.RUBBER) - .define('C', Tags.Items.BUCKETS_EMPTY) - .save(output) - - // Minecarts - for (tier: HTDrumTier in HTDrumTier.entries) { - HTShapelessRecipeBuilder - .create(tier.getMinecartItem()) - .addIngredient(tier.getBlock()) - .addIngredient(Items.MINECART) - .save(output) - } - } } diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/tag/RagiumBlockTagsProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/tag/RagiumBlockTagsProvider.kt index eceb7a337..27cf96a84 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/tag/RagiumBlockTagsProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/tag/RagiumBlockTagsProvider.kt @@ -122,7 +122,7 @@ class RagiumBlockTagsProvider(context: HTDataGenContext) : HTTagsProvider // Storage add(RagiumBlocks.OPEN_CRATE) - add(RagiumBlocks.EXP_DRUM) + add(RagiumBlocks.TANK) }.forEach(pickaxe::add) pickaxe @@ -144,7 +144,6 @@ class RagiumBlockTagsProvider(context: HTDataGenContext) : HTTagsProvider pickaxe.addBlocks(RagiumBlocks.COILS) pickaxe.addBlocks(RagiumBlocks.CRATES) pickaxe.addBlocks(RagiumBlocks.DECORATION_MAP) - pickaxe.addBlocks(RagiumBlocks.DRUMS) pickaxe.addBlocks(RagiumBlocks.GLASSES.values) pickaxe.addBlocks(RagiumBlocks.METAL_BARS) pickaxe.addBlocks(RagiumBlocks.ORES.values) diff --git a/src/main/kotlin/hiiragi283/ragium/client/RagiumClient.kt b/src/main/kotlin/hiiragi283/ragium/client/RagiumClient.kt index 5e566f38c..c4751a0b6 100644 --- a/src/main/kotlin/hiiragi283/ragium/client/RagiumClient.kt +++ b/src/main/kotlin/hiiragi283/ragium/client/RagiumClient.kt @@ -16,10 +16,10 @@ import hiiragi283.ragium.client.event.HTItemTooltipContent import hiiragi283.ragium.client.gui.screen.HTAccessConfigurationScreen import hiiragi283.ragium.client.gui.screen.HTBlockEntityContainerScreen import hiiragi283.ragium.client.gui.screen.HTBlockEntityScreenFactory -import hiiragi283.ragium.client.gui.screen.HTDrumScreen import hiiragi283.ragium.client.gui.screen.HTEnergyNetworkAccessScreen import hiiragi283.ragium.client.gui.screen.HTFluidCollectorScreen import hiiragi283.ragium.client.gui.screen.HTGenericScreen +import hiiragi283.ragium.client.gui.screen.HTTankScreen import hiiragi283.ragium.client.gui.screen.HTTelepadScreen import hiiragi283.ragium.client.gui.screen.generator.HTCombustionGeneratorScreen import hiiragi283.ragium.client.gui.screen.generator.HTGeneratorScreen @@ -47,7 +47,6 @@ import hiiragi283.ragium.common.inventory.container.HTBlockEntityContainerMenu import hiiragi283.ragium.common.material.HTColorMaterial import hiiragi283.ragium.common.material.RagiumMoltenCrystalData import hiiragi283.ragium.common.tier.HTCrateTier -import hiiragi283.ragium.common.tier.HTDrumTier import hiiragi283.ragium.setup.RagiumBlockEntityTypes import hiiragi283.ragium.setup.RagiumBlocks import hiiragi283.ragium.setup.RagiumDataComponents @@ -56,7 +55,6 @@ import hiiragi283.ragium.setup.RagiumFluidContents import hiiragi283.ragium.setup.RagiumItems import hiiragi283.ragium.setup.RagiumMenuTypes import net.minecraft.client.model.MinecartModel -import net.minecraft.client.model.geom.ModelLayerLocation import net.minecraft.client.renderer.BiomeColors import net.minecraft.client.renderer.entity.EntityRendererProvider import net.minecraft.client.renderer.entity.MinecartRenderer @@ -271,7 +269,7 @@ class RagiumClient(eventBus: IEventBus, container: ModContainer) { event.register(RagiumMenuTypes.COMBUSTION_GENERATOR, ::HTCombustionGeneratorScreen) event.register(RagiumMenuTypes.COMPRESSOR, HTSingleFluidProcessorScreen.Companion::itemWithCatalyst) event.register(RagiumMenuTypes.CUTTING_MACHINE, ::HTProcessorScreen) - event.register(RagiumMenuTypes.DRUM, ::HTDrumScreen) + event.register(RagiumMenuTypes.TANK, ::HTTankScreen) event.register(RagiumMenuTypes.ENCHANTER, HTSingleFluidProcessorScreen.Companion::combine) event.register(RagiumMenuTypes.ENERGY_NETWORK_ACCESS, ::HTEnergyNetworkAccessScreen) event.register(RagiumMenuTypes.EXTRACTOR, HTSingleFluidProcessorScreen.Companion::itemWithCatalyst) @@ -294,10 +292,7 @@ class RagiumClient(eventBus: IEventBus, container: ModContainer) { private fun registerLayerDefinitions(event: EntityRenderersEvent.RegisterLayerDefinitions) { event.registerLayerDefinition(RagiumModelLayers.FUEL_GENERATOR, HTFuelGeneratorModel::createLayer) - - for (location: ModelLayerLocation in RagiumModelLayers.DRUM_MINECARTS.values) { - event.registerLayerDefinition(location, MinecartModel<*>::createBodyLayer) - } + event.registerLayerDefinition(RagiumModelLayers.TANK_MINECART, MinecartModel<*>::createBodyLayer) RagiumAPI.LOGGER.info("Registered Layer Definitions!") } @@ -331,12 +326,8 @@ class RagiumClient(eventBus: IEventBus, container: ModContainer) { event.registerEntityRenderer(type.get(), ::ThrownItemRenderer) } event.registerEntityRenderer(RagiumEntityTypes.ELDRITCH_EGG.get(), ::ThrownItemRenderer) - - for (tier: HTDrumTier in HTDrumTier.entries) { - val layerDefinition: ModelLayerLocation = RagiumModelLayers.DRUM_MINECARTS[tier] ?: continue - event.registerEntityRenderer( - tier.getEntityType().get(), - ) { context: EntityRendererProvider.Context -> MinecartRenderer(context, layerDefinition) } + event.registerEntityRenderer(RagiumEntityTypes.TANK_MINECART.get()) { context: EntityRendererProvider.Context -> + MinecartRenderer(context, RagiumModelLayers.TANK_MINECART) } RagiumAPI.LOGGER.info("Registered Entity Renderers!") diff --git a/src/main/kotlin/hiiragi283/ragium/client/gui/screen/HTDrumScreen.kt b/src/main/kotlin/hiiragi283/ragium/client/gui/screen/HTTankScreen.kt similarity index 77% rename from src/main/kotlin/hiiragi283/ragium/client/gui/screen/HTDrumScreen.kt rename to src/main/kotlin/hiiragi283/ragium/client/gui/screen/HTTankScreen.kt index 6792fe3e9..2b75ef75f 100644 --- a/src/main/kotlin/hiiragi283/ragium/client/gui/screen/HTDrumScreen.kt +++ b/src/main/kotlin/hiiragi283/ragium/client/gui/screen/HTTankScreen.kt @@ -1,7 +1,7 @@ package hiiragi283.ragium.client.gui.screen import hiiragi283.ragium.api.gui.component.HTFluidWidget -import hiiragi283.ragium.common.block.entity.storage.HTDrumBlockEntity +import hiiragi283.ragium.common.block.entity.storage.HTTankBlockEntity import hiiragi283.ragium.common.inventory.HTSlotHelper import hiiragi283.ragium.common.inventory.container.HTBlockEntityContainerMenu import net.minecraft.network.chat.Component @@ -10,8 +10,8 @@ import net.neoforged.api.distmarker.Dist import net.neoforged.api.distmarker.OnlyIn @OnlyIn(Dist.CLIENT) -class HTDrumScreen(menu: HTBlockEntityContainerMenu, inventory: Inventory, title: Component) : - HTBlockEntityContainerScreen(createTexture("drum"), menu, inventory, title) { +class HTTankScreen(menu: HTBlockEntityContainerMenu, inventory: Inventory, title: Component) : + HTBlockEntityContainerScreen(createTexture("tank"), menu, inventory, title) { private lateinit var fluidWidget: HTFluidWidget override fun init() { diff --git a/src/main/kotlin/hiiragi283/ragium/client/renderer/RagiumModelLayers.kt b/src/main/kotlin/hiiragi283/ragium/client/renderer/RagiumModelLayers.kt index 5d4718d3f..1708d6714 100644 --- a/src/main/kotlin/hiiragi283/ragium/client/renderer/RagiumModelLayers.kt +++ b/src/main/kotlin/hiiragi283/ragium/client/renderer/RagiumModelLayers.kt @@ -1,7 +1,6 @@ package hiiragi283.ragium.client.renderer import hiiragi283.ragium.api.RagiumAPI -import hiiragi283.ragium.common.tier.HTDrumTier import net.minecraft.client.model.geom.ModelLayerLocation import net.minecraft.resources.ResourceLocation import net.neoforged.api.distmarker.Dist @@ -16,9 +15,7 @@ object RagiumModelLayers { val FUEL_GENERATOR: ModelLayerLocation = create("generator") @JvmField - val DRUM_MINECARTS: Map = HTDrumTier.entries.associateWith { tier: HTDrumTier -> - create(tier.getEntityType().id) - } + val TANK_MINECART: ModelLayerLocation = create("tank_with_minecart") @JvmStatic private fun create(path: String): ModelLayerLocation = create(RagiumAPI.id(path)) diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTDrumBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTDrumBlockEntity.kt deleted file mode 100644 index bbe8d66dc..000000000 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTDrumBlockEntity.kt +++ /dev/null @@ -1,54 +0,0 @@ -package hiiragi283.ragium.common.block.entity.storage - -import hiiragi283.ragium.api.function.HTPredicates -import hiiragi283.ragium.api.storage.holder.HTSlotInfo -import hiiragi283.ragium.api.util.HTContentListener -import hiiragi283.ragium.common.block.entity.HTUpgradableBlockEntity -import hiiragi283.ragium.common.inventory.HTSlotHelper -import hiiragi283.ragium.common.storage.fluid.tank.HTBasicFluidTank -import hiiragi283.ragium.common.storage.holder.HTBasicFluidTankHolder -import hiiragi283.ragium.common.storage.holder.HTBasicItemSlotHolder -import hiiragi283.ragium.common.storage.item.slot.HTBasicItemSlot -import hiiragi283.ragium.util.HTStackSlotHelper -import net.minecraft.core.BlockPos -import net.minecraft.core.Holder -import net.minecraft.server.level.ServerLevel -import net.minecraft.world.level.Level -import net.minecraft.world.level.block.Block -import net.minecraft.world.level.block.state.BlockState - -abstract class HTDrumBlockEntity(blockHolder: Holder, pos: BlockPos, state: BlockState) : - HTUpgradableBlockEntity(blockHolder, pos, state) { - lateinit var tank: HTBasicFluidTank - private set - - final override fun initializeFluidTanks(builder: HTBasicFluidTankHolder.Builder, listener: HTContentListener) { - tank = builder.addSlot(HTSlotInfo.BOTH, createTank(listener)) - } - - protected abstract fun createTank(listener: HTContentListener): HTBasicFluidTank - - lateinit var slot: HTBasicItemSlot - private set - - final override fun initializeItemSlots(builder: HTBasicItemSlotHolder.Builder, listener: HTContentListener) { - // input - slot = builder.addSlot( - HTSlotInfo.CATALYST, - HTBasicItemSlot.create( - listener, - HTSlotHelper.getSlotPosX(2), - HTSlotHelper.getSlotPosY(1), - canExtract = HTPredicates.manualOnly(), - canInsert = HTPredicates.manualOnly(), - ), - ) - } - - override fun getComparatorOutput(state: BlockState, level: Level, pos: BlockPos): Int = HTStackSlotHelper.calculateRedstoneLevel(tank) - - // Ticking // - - override fun onUpdateServer(level: ServerLevel, pos: BlockPos, state: BlockState): Boolean = - HTStackSlotHelper.moveFluid(slot, slot::setStackUnchecked, tank) -} diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTExpDrumBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTExpDrumBlockEntity.kt deleted file mode 100644 index 01dc43fdf..000000000 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTExpDrumBlockEntity.kt +++ /dev/null @@ -1,13 +0,0 @@ -package hiiragi283.ragium.common.block.entity.storage - -import hiiragi283.ragium.api.util.HTContentListener -import hiiragi283.ragium.common.storage.fluid.tank.HTBasicFluidTank -import hiiragi283.ragium.setup.RagiumBlocks -import hiiragi283.ragium.setup.RagiumFluidContents -import net.minecraft.core.BlockPos -import net.minecraft.world.level.block.state.BlockState - -class HTExpDrumBlockEntity(pos: BlockPos, state: BlockState) : HTDrumBlockEntity(RagiumBlocks.EXP_DRUM, pos, state) { - override fun createTank(listener: HTContentListener): HTBasicFluidTank = - HTBasicFluidTank.create(listener, Int.MAX_VALUE, filter = RagiumFluidContents.EXPERIENCE::isOf) -} diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTTankBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTTankBlockEntity.kt new file mode 100644 index 000000000..39bb7aebc --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTTankBlockEntity.kt @@ -0,0 +1,94 @@ +package hiiragi283.ragium.common.block.entity.storage + +import hiiragi283.ragium.api.function.HTPredicates +import hiiragi283.ragium.api.stack.ImmutableFluidStack +import hiiragi283.ragium.api.storage.HTStorageAccess +import hiiragi283.ragium.api.storage.HTStorageAction +import hiiragi283.ragium.api.storage.holder.HTSlotInfo +import hiiragi283.ragium.api.upgrade.HTUpgradeHelper +import hiiragi283.ragium.api.util.HTContentListener +import hiiragi283.ragium.common.block.entity.HTUpgradableBlockEntity +import hiiragi283.ragium.common.inventory.HTSlotHelper +import hiiragi283.ragium.common.storage.fluid.tank.HTBasicFluidTank +import hiiragi283.ragium.common.storage.holder.HTBasicFluidTankHolder +import hiiragi283.ragium.common.storage.holder.HTBasicItemSlotHolder +import hiiragi283.ragium.common.storage.item.slot.HTBasicItemSlot +import hiiragi283.ragium.config.RagiumConfig +import hiiragi283.ragium.setup.RagiumBlocks +import hiiragi283.ragium.util.HTStackSlotHelper +import net.minecraft.core.BlockPos +import net.minecraft.core.Holder +import net.minecraft.server.level.ServerLevel +import net.minecraft.world.level.Level +import net.minecraft.world.level.block.Block +import net.minecraft.world.level.block.state.BlockState + +open class HTTankBlockEntity(blockHolder: Holder, pos: BlockPos, state: BlockState) : + HTUpgradableBlockEntity(blockHolder, pos, state) { + constructor(pos: BlockPos, state: BlockState) : this(RagiumBlocks.TANK, pos, state) + + lateinit var tank: HTBasicFluidTank + private set + + override fun initializeFluidTanks(builder: HTBasicFluidTankHolder.Builder, listener: HTContentListener) { + tank = builder.addSlot(HTSlotInfo.BOTH, TankFluidTank(listener)) + } + + protected fun getCapacity(): Int = HTUpgradeHelper.getTankCapacity(this, RagiumConfig.COMMON.tankCapacity.asInt) + + lateinit var slot: HTBasicItemSlot + private set + + override fun initializeItemSlots(builder: HTBasicItemSlotHolder.Builder, listener: HTContentListener) { + // input + slot = builder.addSlot( + HTSlotInfo.CATALYST, + HTBasicItemSlot.create( + listener, + HTSlotHelper.getSlotPosX(2), + HTSlotHelper.getSlotPosY(1), + canExtract = HTPredicates.manualOnly(), + canInsert = HTPredicates.manualOnly(), + ), + ) + } + + final override fun getComparatorOutput(state: BlockState, level: Level, pos: BlockPos): Int = + HTStackSlotHelper.calculateRedstoneLevel(tank) + + // Ticking // + + override fun onUpdateServer(level: ServerLevel, pos: BlockPos, state: BlockState): Boolean = + HTStackSlotHelper.moveFluid(slot, slot::setStackUnchecked, tank) + + // TankFluidTank // + + protected inner class TankFluidTank(listener: HTContentListener) : + HTBasicFluidTank( + getCapacity(), + HTPredicates.alwaysTrueBi(), + HTPredicates.alwaysTrueBi(), + HTPredicates.alwaysTrue(), + listener, + ) { + val isCreative: Boolean get() = this@HTTankBlockEntity.isCreative() + + override fun insert(stack: ImmutableFluidStack?, action: HTStorageAction, access: HTStorageAccess): ImmutableFluidStack? { + val remainder: ImmutableFluidStack? + if (isCreative && this.getStack() == null && action.execute && access != HTStorageAccess.EXTERNAL) { + remainder = super.insert(stack, HTStorageAction.SIMULATE, access) + if (remainder == null) { + setStackUnchecked(stack?.copyWithAmount(getCapacity())) + } + } else { + remainder = super.insert(stack, action.combine(!isCreative), access) + } + return remainder + } + + override fun extract(amount: Int, action: HTStorageAction, access: HTStorageAccess): ImmutableFluidStack? = + super.extract(amount, action.combine(!isCreative), access) + + override fun getCapacity(stack: ImmutableFluidStack?): Int = this@HTTankBlockEntity.getCapacity() + } +} diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTTieredDrumBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTTieredDrumBlockEntity.kt deleted file mode 100644 index f4e642708..000000000 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTTieredDrumBlockEntity.kt +++ /dev/null @@ -1,64 +0,0 @@ -package hiiragi283.ragium.common.block.entity.storage - -import hiiragi283.ragium.api.block.attribute.getAttributeTier -import hiiragi283.ragium.api.function.HTPredicates -import hiiragi283.ragium.api.math.times -import hiiragi283.ragium.api.stack.ImmutableFluidStack -import hiiragi283.ragium.api.storage.HTStorageAccess -import hiiragi283.ragium.api.storage.HTStorageAction -import hiiragi283.ragium.api.upgrade.RagiumUpgradeKeys -import hiiragi283.ragium.api.util.HTContentListener -import hiiragi283.ragium.common.storage.fluid.tank.HTBasicFluidTank -import hiiragi283.ragium.common.tier.HTDrumTier -import net.minecraft.core.BlockPos -import net.minecraft.core.Holder -import net.minecraft.world.level.block.Block -import net.minecraft.world.level.block.state.BlockState - -class HTTieredDrumBlockEntity(blockHolder: Holder, pos: BlockPos, state: BlockState) : - HTDrumBlockEntity(blockHolder, pos, state) { - private lateinit var tier: HTDrumTier - - override fun initializeVariables() { - super.initializeVariables() - tier = blockHolder.getAttributeTier() - } - - override fun createTank(listener: HTContentListener): HTBasicFluidTank = DrumTank(listener) - - private fun getCapacity(): Int = modifyValue(RagiumUpgradeKeys.FLUID_CAPACITY) { tier.getDefaultCapacity() * it } - - // DrumTank // - - /** - * @see mekanism.common.capabilities.fluid.FluidTankFluidTank - */ - private inner class DrumTank(listener: HTContentListener) : - HTBasicFluidTank( - getCapacity(), - HTPredicates.alwaysTrueBi(), - HTPredicates.alwaysTrueBi(), - HTPredicates.alwaysTrue(), - listener, - ) { - val isCreative: Boolean = tier == HTDrumTier.CREATIVE - - override fun insert(stack: ImmutableFluidStack?, action: HTStorageAction, access: HTStorageAccess): ImmutableFluidStack? { - val remainder: ImmutableFluidStack? - if (isCreative && this.getStack() == null && action.execute && access != HTStorageAccess.EXTERNAL) { - remainder = super.insert(stack, HTStorageAction.SIMULATE, access) - if (remainder == null) { - setStackUnchecked(stack?.copyWithAmount(getCapacity())) - } - } else { - remainder = super.insert(stack, action.combine(!isCreative), access) - } - return remainder - } - - override fun extract(amount: Int, action: HTStorageAction, access: HTStorageAccess): ImmutableFluidStack? = - super.extract(amount, action.combine(!isCreative), access) - - override fun getCapacity(stack: ImmutableFluidStack?): Int = this@HTTieredDrumBlockEntity.getCapacity() - } -} diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/storage/HTDrumBlock.kt b/src/main/kotlin/hiiragi283/ragium/common/block/storage/HTDrumBlock.kt deleted file mode 100644 index a4b3427de..000000000 --- a/src/main/kotlin/hiiragi283/ragium/common/block/storage/HTDrumBlock.kt +++ /dev/null @@ -1,6 +0,0 @@ -package hiiragi283.ragium.common.block.storage - -import hiiragi283.ragium.api.block.type.HTEntityBlockType -import hiiragi283.ragium.common.block.HTTypedEntityBlock - -class HTDrumBlock(type: HTEntityBlockType, properties: Properties) : HTTypedEntityBlock(type, properties) diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/storage/HTTankBlock.kt b/src/main/kotlin/hiiragi283/ragium/common/block/storage/HTTankBlock.kt new file mode 100644 index 000000000..fe5fd10e2 --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/block/storage/HTTankBlock.kt @@ -0,0 +1,7 @@ +package hiiragi283.ragium.common.block.storage + +import hiiragi283.ragium.api.block.type.HTEntityBlockType +import hiiragi283.ragium.common.block.HTTypedEntityBlock +import hiiragi283.ragium.setup.RagiumBlockTypes + +class HTTankBlock(properties: Properties) : HTTypedEntityBlock(RagiumBlockTypes.TANK, properties) diff --git a/src/main/kotlin/hiiragi283/ragium/common/entity/vehicle/HTDrumMinecart.kt b/src/main/kotlin/hiiragi283/ragium/common/entity/vehicle/HTDrumMinecart.kt deleted file mode 100644 index b069565ae..000000000 --- a/src/main/kotlin/hiiragi283/ragium/common/entity/vehicle/HTDrumMinecart.kt +++ /dev/null @@ -1,99 +0,0 @@ -package hiiragi283.ragium.common.entity.vehicle - -import hiiragi283.ragium.common.block.entity.storage.HTDrumBlockEntity -import hiiragi283.ragium.common.tier.HTDrumTier -import hiiragi283.ragium.util.HTStackSlotHelper -import net.minecraft.core.BlockPos -import net.minecraft.world.InteractionHand -import net.minecraft.world.InteractionResult -import net.minecraft.world.entity.EntityType -import net.minecraft.world.entity.OwnableEntity -import net.minecraft.world.entity.player.Player -import net.minecraft.world.item.ItemStack -import net.minecraft.world.level.Level -import net.minecraft.world.level.block.state.BlockState -import java.util.UUID - -sealed class HTDrumMinecart : - HTMinecart, - OwnableEntity { - constructor(entityType: EntityType<*>, level: Level) : super(entityType, level) - - constructor(tier: HTDrumTier, level: Level, x: Double, y: Double, z: Double) : super( - tier.getEntityType().get(), - level, - x, - y, - z, - ) - - protected abstract fun getDrumTier(): HTDrumTier - - /*override fun tick() { - super.tick() - getDrumBlockEntityType() - .getTicker(this.level().isClientSide) - ?.tick(this.level(), this.blockPosition(), this.displayBlockState, bindBlockEntity()) - }*/ - - override fun createBlockEntity(): HTDrumBlockEntity = getDrumTier().getBlockEntityType().create(BlockPos.ZERO, defaultDisplayBlockState) - - // HTMinecart // - - override fun extraInteract(player: Player, hand: InteractionHand): InteractionResult = - if (HTStackSlotHelper.interact(player, hand, player.getItemInHand(hand), bindBlockEntity().tank)) { - InteractionResult.sidedSuccess(player.level().isClientSide) - } else { - InteractionResult.PASS - } - - override fun getPickResult(): ItemStack = getDrumTier().getMinecartItem().toStack() - - override fun getDefaultDisplayBlockState(): BlockState = getDrumTier().getBlock().get().defaultBlockState() - - // OwnableEntity // - - override fun getOwnerUUID(): UUID? = bindBlockEntity().getOwner() - - // Impl // - - class Small : HTDrumMinecart { - constructor(entityType: EntityType<*>, level: Level) : super(entityType, level) - - constructor(level: Level, x: Double, y: Double, z: Double) : super(HTDrumTier.SMALL, level, x, y, z) - - override fun getDrumTier(): HTDrumTier = HTDrumTier.SMALL - } - - class Medium : HTDrumMinecart { - constructor(entityType: EntityType<*>, level: Level) : super(entityType, level) - - constructor(level: Level, x: Double, y: Double, z: Double) : super(HTDrumTier.MEDIUM, level, x, y, z) - - override fun getDrumTier(): HTDrumTier = HTDrumTier.MEDIUM - } - - class Large : HTDrumMinecart { - constructor(entityType: EntityType<*>, level: Level) : super(entityType, level) - - constructor(level: Level, x: Double, y: Double, z: Double) : super(HTDrumTier.LARGE, level, x, y, z) - - override fun getDrumTier(): HTDrumTier = HTDrumTier.LARGE - } - - class Huge : HTDrumMinecart { - constructor(entityType: EntityType<*>, level: Level) : super(entityType, level) - - constructor(level: Level, x: Double, y: Double, z: Double) : super(HTDrumTier.HUGE, level, x, y, z) - - override fun getDrumTier(): HTDrumTier = HTDrumTier.HUGE - } - - class Creative : HTDrumMinecart { - constructor(entityType: EntityType<*>, level: Level) : super(entityType, level) - - constructor(level: Level, x: Double, y: Double, z: Double) : super(HTDrumTier.CREATIVE, level, x, y, z) - - override fun getDrumTier(): HTDrumTier = HTDrumTier.CREATIVE - } -} diff --git a/src/main/kotlin/hiiragi283/ragium/common/entity/vehicle/HTTankMinecart.kt b/src/main/kotlin/hiiragi283/ragium/common/entity/vehicle/HTTankMinecart.kt new file mode 100644 index 000000000..c4a603b06 --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/entity/vehicle/HTTankMinecart.kt @@ -0,0 +1,52 @@ +package hiiragi283.ragium.common.entity.vehicle + +import hiiragi283.ragium.common.block.entity.storage.HTTankBlockEntity +import hiiragi283.ragium.setup.RagiumBlockEntityTypes +import hiiragi283.ragium.setup.RagiumBlocks +import hiiragi283.ragium.setup.RagiumEntityTypes +import hiiragi283.ragium.util.HTStackSlotHelper +import net.minecraft.core.BlockPos +import net.minecraft.world.InteractionHand +import net.minecraft.world.InteractionResult +import net.minecraft.world.entity.EntityType +import net.minecraft.world.entity.OwnableEntity +import net.minecraft.world.entity.player.Player +import net.minecraft.world.item.ItemStack +import net.minecraft.world.level.Level +import net.minecraft.world.level.block.state.BlockState +import java.util.UUID + +class HTTankMinecart : + HTMinecart, + OwnableEntity { + constructor(entityType: EntityType<*>, level: Level) : super(entityType, level) + + constructor(level: Level, x: Double, y: Double, z: Double) : super( + RagiumEntityTypes.TANK_MINECART.get(), + level, + x, + y, + z, + ) + + override fun createBlockEntity(): HTTankBlockEntity = RagiumBlockEntityTypes.TANK.create(BlockPos.ZERO, defaultDisplayBlockState) + + // HTMinecart // + + override fun extraInteract(player: Player, hand: InteractionHand): InteractionResult = + if (HTStackSlotHelper.interact(player, hand, player.getItemInHand(hand), bindBlockEntity().tank)) { + InteractionResult.sidedSuccess(player.level().isClientSide) + } else { + InteractionResult.PASS + } + + override fun getPickResult(): ItemStack { + TODO("Not yet implemented") + } + + override fun getDefaultDisplayBlockState(): BlockState = RagiumBlocks.TANK.get().defaultBlockState() + + // OwnableEntity // + + override fun getOwnerUUID(): UUID? = bindBlockEntity().getOwner() +} diff --git a/src/main/kotlin/hiiragi283/ragium/common/item/HTDrumWithMinecartItem.kt b/src/main/kotlin/hiiragi283/ragium/common/item/HTDrumWithMinecartItem.kt deleted file mode 100644 index 5da84902e..000000000 --- a/src/main/kotlin/hiiragi283/ragium/common/item/HTDrumWithMinecartItem.kt +++ /dev/null @@ -1,12 +0,0 @@ -package hiiragi283.ragium.common.item - -import hiiragi283.ragium.api.text.translatableText -import hiiragi283.ragium.common.item.base.HTMinecartItem -import hiiragi283.ragium.common.tier.HTDrumTier -import net.minecraft.network.chat.Component -import net.minecraft.world.item.ItemStack - -class HTDrumWithMinecartItem(private val tier: HTDrumTier, properties: Properties) : - HTMinecartItem(tier.getMinecartFactory(), properties) { - override fun getName(stack: ItemStack): Component = translatableText(getDescriptionId(stack)).withStyle(tier.getBaseTier().color) -} diff --git a/src/main/kotlin/hiiragi283/ragium/common/item/HTLootTicketItem.kt b/src/main/kotlin/hiiragi283/ragium/common/item/HTLootTicketItem.kt index 356c9df59..3195a92df 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/item/HTLootTicketItem.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/item/HTLootTicketItem.kt @@ -1,6 +1,7 @@ package hiiragi283.ragium.common.item import hiiragi283.ragium.api.item.HTSubCreativeTabContents +import hiiragi283.ragium.api.item.createItemStack import hiiragi283.ragium.api.registry.HTItemHolderLike import hiiragi283.ragium.setup.RagiumDataComponents import hiiragi283.ragium.util.HTDefaultLootTickets @@ -64,9 +65,7 @@ class HTLootTicketItem(properties: Properties) : override fun addItems(baseItem: HTItemHolderLike, parameters: CreativeModeTab.ItemDisplayParameters, consumer: Consumer) { for (tickets: HTDefaultLootTickets in HTDefaultLootTickets.entries) { - val stack: ItemStack = baseItem.toStack() - stack.set(RagiumDataComponents.LOOT_TICKET, tickets.targets) - consumer.accept(stack) + createItemStack(baseItem, RagiumDataComponents.LOOT_TICKET, tickets.targets).let(consumer::accept) } } } diff --git a/src/main/kotlin/hiiragi283/ragium/common/item/HTTankMinecartItem.kt b/src/main/kotlin/hiiragi283/ragium/common/item/HTTankMinecartItem.kt new file mode 100644 index 000000000..e0f12c912 --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/item/HTTankMinecartItem.kt @@ -0,0 +1,6 @@ +package hiiragi283.ragium.common.item + +import hiiragi283.ragium.common.entity.vehicle.HTTankMinecart +import hiiragi283.ragium.common.item.base.HTMinecartItem + +class HTTankMinecartItem(properties: Properties) : HTMinecartItem(::HTTankMinecart, properties) diff --git a/src/main/kotlin/hiiragi283/ragium/common/item/base/HTMinecartItem.kt b/src/main/kotlin/hiiragi283/ragium/common/item/base/HTMinecartItem.kt index 87a98e024..81a728e0f 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/item/base/HTMinecartItem.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/item/base/HTMinecartItem.kt @@ -13,6 +13,9 @@ import net.minecraft.world.level.block.BaseRailBlock import net.minecraft.world.level.block.state.BlockState import net.minecraft.world.level.block.state.properties.RailShape +/** + * @see net.minecraft.world.item.MinecartItem + */ open class HTMinecartItem(private val factory: HTMinecart.Factory, properties: Properties) : Item(properties.stacksTo(1)) { override fun useOn(context: UseOnContext): InteractionResult { val level: Level = context.level diff --git a/src/main/kotlin/hiiragi283/ragium/common/item/block/HTImitationSpawnerBlockItem.kt b/src/main/kotlin/hiiragi283/ragium/common/item/block/HTImitationSpawnerBlockItem.kt index 7d31b65aa..d2aabaf11 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/item/block/HTImitationSpawnerBlockItem.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/item/block/HTImitationSpawnerBlockItem.kt @@ -3,12 +3,12 @@ package hiiragi283.ragium.common.item.block import hiiragi283.ragium.api.item.HTBlockItem import hiiragi283.ragium.api.item.HTSubCreativeTabContents import hiiragi283.ragium.api.item.component.HTSpawnerMob +import hiiragi283.ragium.api.item.createItemStack import hiiragi283.ragium.api.registry.HTItemHolderLike import hiiragi283.ragium.common.block.HTImitationSpawnerBlock import hiiragi283.ragium.setup.RagiumDataComponents import net.minecraft.ChatFormatting import net.minecraft.core.Holder -import net.minecraft.core.component.DataComponentPatch import net.minecraft.core.registries.Registries import net.minecraft.network.chat.Component import net.minecraft.world.entity.EntityType @@ -43,14 +43,11 @@ class HTImitationSpawnerBlockItem(block: HTImitationSpawnerBlock, properties: Pr .filterElements(HTImitationSpawnerBlock::filterEntityType) .listElements() .forEach { holder: Holder> -> - consumer.accept( - baseItem.toStack( - components = DataComponentPatch - .builder() - .set(RagiumDataComponents.SPAWNER_MOB, HTSpawnerMob(holder)) - .build(), - ), - ) + createItemStack( + baseItem, + RagiumDataComponents.SPAWNER_MOB, + HTSpawnerMob(holder), + ).let(consumer::accept) } } } diff --git a/src/main/kotlin/hiiragi283/ragium/common/item/block/HTDrumBlockItem.kt b/src/main/kotlin/hiiragi283/ragium/common/item/block/HTTankBlockItem.kt similarity index 55% rename from src/main/kotlin/hiiragi283/ragium/common/item/block/HTDrumBlockItem.kt rename to src/main/kotlin/hiiragi283/ragium/common/item/block/HTTankBlockItem.kt index c386239b8..d5c006e5b 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/item/block/HTDrumBlockItem.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/item/block/HTTankBlockItem.kt @@ -1,21 +1,28 @@ package hiiragi283.ragium.common.item.block -import hiiragi283.ragium.api.block.attribute.getAttributeTier import hiiragi283.ragium.api.capability.HTFluidCapabilities import hiiragi283.ragium.api.item.HTDescriptionBlockItem +import hiiragi283.ragium.api.item.HTSubCreativeTabContents +import hiiragi283.ragium.api.item.component.HTItemContents +import hiiragi283.ragium.api.item.createItemStack +import hiiragi283.ragium.api.registry.HTItemHolderLike import hiiragi283.ragium.api.stack.ImmutableFluidStack import hiiragi283.ragium.api.storage.fluid.HTFluidView import hiiragi283.ragium.api.text.RagiumTranslation -import hiiragi283.ragium.common.block.storage.HTDrumBlock -import hiiragi283.ragium.common.tier.HTDrumTier +import hiiragi283.ragium.api.upgrade.HTUpgradeHelper +import hiiragi283.ragium.common.block.storage.HTTankBlock +import hiiragi283.ragium.setup.RagiumDataComponents +import hiiragi283.ragium.setup.RagiumItems import net.minecraft.ChatFormatting import net.minecraft.network.chat.Component +import net.minecraft.world.item.CreativeModeTab import net.minecraft.world.item.ItemStack import net.minecraft.world.item.TooltipFlag +import java.util.function.Consumer -class HTDrumBlockItem(block: HTDrumBlock, properties: Properties) : HTDescriptionBlockItem(block, properties) { - override fun getTier(): HTDrumTier? = block.getAttributeTier() - +class HTTankBlockItem(block: HTTankBlock, properties: Properties) : + HTDescriptionBlockItem(block, properties), + HTSubCreativeTabContents { /** * @see mekanism.common.item.block.machine.ItemBlockFluidTank.addStats */ @@ -25,13 +32,13 @@ class HTDrumBlockItem(block: HTDrumBlock, properties: Properties) : HTDescriptio tooltips: MutableList, flag: TooltipFlag, ) { - val tier: HTDrumTier? = getTier() + val isCreative: Boolean = HTUpgradeHelper.getHandler(stack)?.isCreative() ?: false val view: HTFluidView = HTFluidCapabilities.getFluidView(stack, 0) ?: return // Fluid Name val stack: ImmutableFluidStack? = view.getStack() when { stack == null -> RagiumTranslation.EMPTY.translateColored(ChatFormatting.DARK_RED) - tier == HTDrumTier.CREATIVE -> RagiumTranslation.STORED.translateColored( + isCreative -> RagiumTranslation.STORED.translateColored( ChatFormatting.LIGHT_PURPLE, stack, ChatFormatting.GRAY, @@ -45,17 +52,26 @@ class HTDrumBlockItem(block: HTDrumBlock, properties: Properties) : HTDescriptio ) }.let(tooltips::add) // Tank Capacity - when (tier) { - HTDrumTier.CREATIVE -> RagiumTranslation.CAPACITY.translateColored( + when (isCreative) { + true -> RagiumTranslation.CAPACITY.translateColored( ChatFormatting.BLUE, ChatFormatting.GRAY, RagiumTranslation.INFINITE, ) - else -> RagiumTranslation.CAPACITY_MB.translateColored( + false -> RagiumTranslation.CAPACITY_MB.translateColored( ChatFormatting.BLUE, ChatFormatting.GRAY, view.getCapacity(), ) }.let(tooltips::add) } + + override fun addItems(baseItem: HTItemHolderLike, parameters: CreativeModeTab.ItemDisplayParameters, consumer: Consumer) { + // Creative Tank + createItemStack( + baseItem, + RagiumDataComponents.MACHINE_UPGRADES, + HTItemContents.fromNullable(listOf(RagiumItems.CREATIVE_UPGRADE.toImmutableStack(1))), + ).let(consumer::accept) + } } diff --git a/src/main/kotlin/hiiragi283/ragium/common/storage/energy/battery/HTMachineEnergyBattery.kt b/src/main/kotlin/hiiragi283/ragium/common/storage/energy/battery/HTMachineEnergyBattery.kt index 3686a9500..28043d79d 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/storage/energy/battery/HTMachineEnergyBattery.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/storage/energy/battery/HTMachineEnergyBattery.kt @@ -3,10 +3,9 @@ package hiiragi283.ragium.common.storage.energy.battery import hiiragi283.ragium.api.block.attribute.HTEnergyBlockAttribute import hiiragi283.ragium.api.block.attribute.getAttributeOrThrow import hiiragi283.ragium.api.function.HTPredicates -import hiiragi283.ragium.api.math.times import hiiragi283.ragium.api.storage.HTStorageAccess import hiiragi283.ragium.api.storage.HTStorageAction -import hiiragi283.ragium.api.upgrade.RagiumUpgradeKeys +import hiiragi283.ragium.api.upgrade.HTUpgradeHelper import hiiragi283.ragium.api.util.HTContentListener import hiiragi283.ragium.common.block.entity.HTMachineBlockEntity import hiiragi283.ragium.common.block.entity.generator.HTGeneratorBlockEntity @@ -44,9 +43,7 @@ sealed class HTMachineEnergyBattery( var currentEnergyPerTick: Int = this.baseEnergyPerTick - override fun getCapacity(): Int = blockEntity.modifyValue(RagiumUpgradeKeys.ENERGY_CAPACITY) { - getBaseCapacity() * it * blockEntity.getBaseMultiplier() - } + override fun getCapacity(): Int = HTUpgradeHelper.getEnergyCapacity(blockEntity, getBaseCapacity()) fun getBaseCapacity(): Int = super.getCapacity() diff --git a/src/main/kotlin/hiiragi283/ragium/common/storage/fluid/tank/HTComponentFluidTank.kt b/src/main/kotlin/hiiragi283/ragium/common/storage/fluid/tank/HTComponentFluidTank.kt index abbee2ece..8a3a19b2c 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/storage/fluid/tank/HTComponentFluidTank.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/storage/fluid/tank/HTComponentFluidTank.kt @@ -58,13 +58,18 @@ open class HTComponentFluidTank( override fun getCapacity(stack: ImmutableFluidStack?): Int = capacity final override fun setStack(stack: ImmutableFluidStack?) { - val contents: HTFluidContents? = getContents() // TODO - if (contents.isNullOrEmpty()) { + var contents: HTFluidContents? = getContents() + if (contents == null) { parent.remove(component) } else { val items: MutableList> = contents.unwrap() items[slot] = stack.wrapOptional() - parent.set(component, HTStackContents.fromOptional(items)) + contents = HTStackContents.fromOptional(items) + if (contents.isEmpty()) { + parent.remove(component) + } else { + parent.set(component, contents) + } } } diff --git a/src/main/kotlin/hiiragi283/ragium/common/text/RagiumCommonTranslation.kt b/src/main/kotlin/hiiragi283/ragium/common/text/RagiumCommonTranslation.kt index b17ea83a1..7312a3186 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/text/RagiumCommonTranslation.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/text/RagiumCommonTranslation.kt @@ -63,8 +63,7 @@ enum class RagiumCommonTranslation(type: String, vararg path: String) : HTTransl CRATE("description", "crate"), OPEN_CRATE("description", "open_crate"), - DRUM("description", "drum"), - EXP_DRUM("description", "experience_drum"), + TANK("description", "tank"), // Config CONFIG_ENERGY_CAPACITY("config", "energy_capacity"), diff --git a/src/main/kotlin/hiiragi283/ragium/common/tier/HTDrumTier.kt b/src/main/kotlin/hiiragi283/ragium/common/tier/HTDrumTier.kt deleted file mode 100644 index 3d639c15a..000000000 --- a/src/main/kotlin/hiiragi283/ragium/common/tier/HTDrumTier.kt +++ /dev/null @@ -1,74 +0,0 @@ -package hiiragi283.ragium.common.tier - -import hiiragi283.ragium.api.block.type.HTEntityBlockType -import hiiragi283.ragium.api.data.lang.HTLangName -import hiiragi283.ragium.api.data.lang.HTLanguageType -import hiiragi283.ragium.api.registry.impl.HTDeferredBlock -import hiiragi283.ragium.api.registry.impl.HTDeferredBlockEntityType -import hiiragi283.ragium.api.registry.impl.HTDeferredEntityType -import hiiragi283.ragium.api.registry.impl.HTSimpleDeferredItem -import hiiragi283.ragium.api.tier.HTBaseTier -import hiiragi283.ragium.api.tier.HTTierProvider -import hiiragi283.ragium.common.block.entity.storage.HTDrumBlockEntity -import hiiragi283.ragium.common.block.storage.HTDrumBlock -import hiiragi283.ragium.common.entity.vehicle.HTDrumMinecart -import hiiragi283.ragium.common.entity.vehicle.HTMinecart -import hiiragi283.ragium.common.item.block.HTDrumBlockItem -import hiiragi283.ragium.config.RagiumConfig -import hiiragi283.ragium.setup.RagiumBlockEntityTypes -import hiiragi283.ragium.setup.RagiumBlockTypes -import hiiragi283.ragium.setup.RagiumBlocks -import hiiragi283.ragium.setup.RagiumEntityTypes -import hiiragi283.ragium.setup.RagiumItems - -enum class HTDrumTier(private val enPattern: String, private val jaPattern: String) : - HTTierProvider, - HTLangName { - SMALL("Small Drum", "小型ドラム"), - MEDIUM("Medium Drum", "中型ドラム"), - LARGE("Large Drum", "大型ドラム"), - HUGE("Huge Drum", "特大型ドラム"), - CREATIVE("Creative Drum", "クリエイティブ用ドラム"), - ; - - val path = "${name.lowercase()}_drum" - val entityPath = "${name.lowercase()}_drum_minecart" - val capacity: Int get() = RagiumConfig.COMMON.drumCapacity[this]!!.asInt - - fun getDefaultCapacity(): Int = RagiumConfig.COMMON.drumCapacity[this]!!.asInt - - fun getBlock(): HTDeferredBlock = RagiumBlocks.DRUMS[this]!! - - fun getBlockType(): HTEntityBlockType = RagiumBlockTypes.DRUMS[this]!! - - fun getBlockEntityType(): HTDeferredBlockEntityType = RagiumBlockEntityTypes.DRUMS[this]!! - - fun getEntityType(): HTDeferredEntityType = RagiumEntityTypes.DRUMS[this]!! - - fun getMinecartFactory(): HTMinecart.Factory = when (this) { - SMALL -> HTMinecart.Factory(HTDrumMinecart::Small) - MEDIUM -> HTMinecart.Factory(HTDrumMinecart::Medium) - LARGE -> HTMinecart.Factory(HTDrumMinecart::Large) - HUGE -> HTMinecart.Factory(HTDrumMinecart::Huge) - CREATIVE -> HTMinecart.Factory(HTDrumMinecart::Creative) - } - - fun getMinecartItem(): HTSimpleDeferredItem = RagiumItems.DRUM_MINECARTS[this]!! - - // HTTierProvider // - - override fun getBaseTier(): HTBaseTier = when (this) { - SMALL -> HTBaseTier.BASIC - MEDIUM -> HTBaseTier.ADVANCED - LARGE -> HTBaseTier.ELITE - HUGE -> HTBaseTier.ULTIMATE - CREATIVE -> HTBaseTier.CREATIVE - } - - // HTLangName // - - override fun getTranslatedName(type: HTLanguageType): String = when (type) { - HTLanguageType.EN_US -> enPattern - HTLanguageType.JA_JP -> jaPattern - } -} diff --git a/src/main/kotlin/hiiragi283/ragium/common/upgrade/HTComponentUpgradeHandler.kt b/src/main/kotlin/hiiragi283/ragium/common/upgrade/HTComponentUpgradeHandler.kt index 17e2091f8..c814dba14 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/upgrade/HTComponentUpgradeHandler.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/upgrade/HTComponentUpgradeHandler.kt @@ -1,5 +1,6 @@ package hiiragi283.ragium.common.upgrade +import hiiragi283.ragium.api.stack.ImmutableComponentStack import hiiragi283.ragium.api.stack.ImmutableItemStack import hiiragi283.ragium.api.upgrade.HTUpgradeHandler import hiiragi283.ragium.setup.RagiumDataComponents @@ -10,7 +11,6 @@ class HTComponentUpgradeHandler(private val parent: ItemStack) : HTUpgradeHandle override fun getUpgrades(): List = getComponent().filterNotNull() - override fun isValidUpgrade(upgrade: ImmutableItemStack, existing: List): Boolean { - TODO("Not yet implemented") - } + override fun isValidUpgrade(upgrade: ImmutableItemStack, existing: List): Boolean = + existing.none { stack: ImmutableItemStack -> ImmutableComponentStack.matches(stack, upgrade) } } diff --git a/src/main/kotlin/hiiragi283/ragium/config/RagiumCommonConfig.kt b/src/main/kotlin/hiiragi283/ragium/config/RagiumCommonConfig.kt index 529169a59..dbf4127b3 100644 --- a/src/main/kotlin/hiiragi283/ragium/config/RagiumCommonConfig.kt +++ b/src/main/kotlin/hiiragi283/ragium/config/RagiumCommonConfig.kt @@ -10,10 +10,35 @@ import hiiragi283.ragium.api.config.HTListConfigValue import hiiragi283.ragium.api.config.definePositiveDouble import hiiragi283.ragium.api.config.definePositiveInt import hiiragi283.ragium.common.tier.HTCrateTier -import hiiragi283.ragium.common.tier.HTDrumTier import net.neoforged.neoforge.common.ModConfigSpec class RagiumCommonConfig(builder: ModConfigSpec.Builder) { + @JvmField + val disableMilkCure: HTBoolConfigValue = HTBoolConfigValue(builder.define("disableMilkCure", false)) + + @JvmField + val expConversionRatio: HTIntConfigValue = builder.definePositiveInt("expConversionRatio", 20) + + @JvmField + val showFoodEffect: HTBoolConfigValue = HTBoolConfigValue(builder.define("showFoodEffect", true)) + + @JvmField + val tagOutputPriority: HTListConfigValue = + builder + .worldRestart() + .defineList( + "tagOutputModIds", + listOf( + RagiumAPI.MOD_ID, + RagiumConst.MINECRAFT, + "alltheores", + RagiumConst.MEKANISM, + RagiumConst.IMMERSIVE, + ), + { "" }, + { obj: Any -> obj is String }, + ).let(::HTListConfigValue) + // Generator @JvmField val generator: Generator @@ -32,16 +57,12 @@ class RagiumCommonConfig(builder: ModConfigSpec.Builder) { @JvmField val milkCollectorMultiplier: HTIntConfigValue - // Crate + // Storage @JvmField val crateCapacity: Map - // Drum @JvmField - val drumCapacity: Map - - @JvmField - val expConversionRatio: HTIntConfigValue + val tankCapacity: HTIntConfigValue // Block @JvmField @@ -63,19 +84,8 @@ class RagiumCommonConfig(builder: ModConfigSpec.Builder) { @JvmField val teleportKeyCost: HTIntConfigValue - // Recipe - @JvmField - val tagOutputPriority: HTListConfigValue - - // Tooltip - @JvmField - val showFoodEffect: HTBoolConfigValue - - // World - @JvmField - val disableMilkCure: HTBoolConfigValue - init { + builder.push("generator") builder.comment("Configurations for Generator Machines") generator = Generator(builder) @@ -97,8 +107,8 @@ class RagiumCommonConfig(builder: ModConfigSpec.Builder) { builder.pop() builder.pop() - // Crate - builder.push("crate") + // Storage + builder.push("storage") crateCapacity = HTCrateTier.entries.associateWith { tier: HTCrateTier -> val name: String = tier.name.lowercase() builder.push(name) @@ -115,27 +125,7 @@ class RagiumCommonConfig(builder: ModConfigSpec.Builder) { builder.pop() value } - builder.pop() - // Drum - builder.push("drum") - drumCapacity = HTDrumTier.entries.associateWith { variant: HTDrumTier -> - val name: String = variant.name.lowercase() - builder.push(name) - // Capacity - val value: HTIntConfigValue = builder.definePositiveInt( - "capacity", - when (variant) { - HTDrumTier.SMALL -> 16_000 - HTDrumTier.MEDIUM -> 32_000 - HTDrumTier.LARGE -> 64_000 - HTDrumTier.HUGE -> 256_000 - HTDrumTier.CREATIVE -> 1_000 - }, - ) - builder.pop() - value - } - expConversionRatio = builder.definePositiveInt("expConversionRatio", 20) + tankCapacity = builder.definePositiveInt("tank_capacity", 8000) builder.pop() // Block builder.push("block") @@ -149,32 +139,6 @@ class RagiumCommonConfig(builder: ModConfigSpec.Builder) { expBerriesValue = builder.definePositiveInt("expBerriesValue", 8) teleportKeyCost = builder.definePositiveInt("teleportKeyCost", 10) builder.pop() - // Recipe - builder.push("recipe") - tagOutputPriority = - builder - .worldRestart() - .defineList( - "tagOutputModIds", - listOf( - RagiumAPI.MOD_ID, - RagiumConst.MINECRAFT, - "alltheores", - RagiumConst.MEKANISM, - RagiumConst.IMMERSIVE, - ), - { "" }, - { obj: Any -> obj is String }, - ).let(::HTListConfigValue) - builder.pop() - // Tooltip - builder.push("world") - showFoodEffect = HTBoolConfigValue(builder.define("showFoodEffect", true)) - builder.pop() - // World - builder.push("world") - disableMilkCure = HTBoolConfigValue(builder.define("disableMilkCure", false)) - builder.pop() } class Generator(builder: ModConfigSpec.Builder) { diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlockEntityTypes.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlockEntityTypes.kt index 4b842185b..ed8e07b81 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlockEntityTypes.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlockEntityTypes.kt @@ -41,12 +41,9 @@ import hiiragi283.ragium.common.block.entity.processor.HTPulverizerBlockEntity import hiiragi283.ragium.common.block.entity.processor.HTRefineryBlockEntity import hiiragi283.ragium.common.block.entity.processor.HTSimulatorBlockEntity import hiiragi283.ragium.common.block.entity.storage.HTCrateBlockEntity -import hiiragi283.ragium.common.block.entity.storage.HTDrumBlockEntity -import hiiragi283.ragium.common.block.entity.storage.HTExpDrumBlockEntity import hiiragi283.ragium.common.block.entity.storage.HTOpenCrateBlockEntity -import hiiragi283.ragium.common.block.entity.storage.HTTieredDrumBlockEntity +import hiiragi283.ragium.common.block.entity.storage.HTTankBlockEntity import hiiragi283.ragium.common.tier.HTCrateTier -import hiiragi283.ragium.common.tier.HTDrumTier import net.minecraft.core.BlockPos import net.minecraft.world.level.block.Block import net.minecraft.world.level.block.entity.BlockEntityType @@ -68,6 +65,13 @@ object RagiumBlockEntityTypes { REGISTER.addAlias("item_buffer", "item_collector") REGISTER.addAlias("mob_capturer", "item_collector") + listOf( + "small", + "medium", + "large", + "huge", + ).forEach { REGISTER.addAlias("${it}_drum", "tank") } + REGISTER.register(eventBus) eventBus.addListener(::addSupportedBlocks) @@ -245,13 +249,7 @@ object RagiumBlockEntityTypes { val OPEN_CRATE: HTDeferredBlockEntityType = REGISTER.registerType("open_crate", ::HTOpenCrateBlockEntity) @JvmField - val DRUMS: Map> = - HTDrumTier.entries.associateWith { tier: HTDrumTier -> - registerTick(tier.path) { pos: BlockPos, state: BlockState -> HTTieredDrumBlockEntity(tier.getBlock(), pos, state) } - } - - @JvmField - val EXP_DRUM: HTDeferredBlockEntityType = registerTick("experience_drum", ::HTExpDrumBlockEntity) + val TANK: HTDeferredBlockEntityType = registerTick("tank", ::HTTankBlockEntity) // Event // @@ -320,10 +318,8 @@ object RagiumBlockEntityTypes { registerHandler(event, type.get()) } registerHandler(event, OPEN_CRATE.get()) - for (type: HTDeferredBlockEntityType in DRUMS.values) { - registerHandler(event, type.get()) - } - registerHandler(event, EXP_DRUM.get()) + + registerHandler(event, TANK.get()) RagiumAPI.LOGGER.info("Registered Block Capabilities!") } diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlockTypes.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlockTypes.kt index 7f2af9055..7696aa7c9 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlockTypes.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlockTypes.kt @@ -6,7 +6,6 @@ import hiiragi283.ragium.api.block.type.HTEntityBlockType import hiiragi283.ragium.common.block.type.HTMachineBlockType import hiiragi283.ragium.common.text.RagiumCommonTranslation import hiiragi283.ragium.common.tier.HTCrateTier -import hiiragi283.ragium.common.tier.HTDrumTier import hiiragi283.ragium.common.tier.HTMachineTier import hiiragi283.ragium.config.RagiumConfig import net.minecraft.world.level.block.Block @@ -298,17 +297,8 @@ object RagiumBlockTypes { .build(RagiumCommonTranslation.OPEN_CRATE) @JvmField - val DRUMS: Map = HTDrumTier.entries.associateWith { tier: HTDrumTier -> - HTEntityBlockType - .builder { tier.getBlockEntityType() } - .addMenu { RagiumMenuTypes.DRUM } - .addTier(tier) - .build(RagiumCommonTranslation.DRUM) - } - - @JvmField - val EXP_DRUM: HTEntityBlockType = HTEntityBlockType - .builder { RagiumBlockEntityTypes.EXP_DRUM } - .addMenu { RagiumMenuTypes.DRUM } - .build(RagiumCommonTranslation.EXP_DRUM) + val TANK: HTEntityBlockType = HTEntityBlockType + .builder { RagiumBlockEntityTypes.TANK } + .addMenu { RagiumMenuTypes.TANK } + .build(RagiumCommonTranslation.TANK) } diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlocks.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlocks.kt index 33ccd61a9..32bb31631 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlocks.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlocks.kt @@ -34,12 +34,12 @@ import hiiragi283.ragium.common.block.glass.HTObsidianGlass import hiiragi283.ragium.common.block.glass.HTQuartzGlassBlock import hiiragi283.ragium.common.block.glass.HTWarpedGlassBlock import hiiragi283.ragium.common.block.storage.HTCrateBlock -import hiiragi283.ragium.common.block.storage.HTDrumBlock +import hiiragi283.ragium.common.block.storage.HTTankBlock import hiiragi283.ragium.common.item.block.HTCrateBlockItem -import hiiragi283.ragium.common.item.block.HTDrumBlockItem import hiiragi283.ragium.common.item.block.HTExpBerriesItem import hiiragi283.ragium.common.item.block.HTImitationSpawnerBlockItem import hiiragi283.ragium.common.item.block.HTMachineBlockItem +import hiiragi283.ragium.common.item.block.HTTankBlockItem import hiiragi283.ragium.common.item.block.HTWarpedWartItem import hiiragi283.ragium.common.material.CommonMaterialKeys import hiiragi283.ragium.common.material.CommonMaterialPrefixes @@ -48,7 +48,6 @@ import hiiragi283.ragium.common.material.HTColorMaterial import hiiragi283.ragium.common.material.RagiumMaterialKeys import hiiragi283.ragium.common.material.VanillaMaterialKeys import hiiragi283.ragium.common.tier.HTCrateTier -import hiiragi283.ragium.common.tier.HTDrumTier import hiiragi283.ragium.common.variant.HTGlassVariant import hiiragi283.ragium.common.variant.HTOreVariant import net.minecraft.world.item.Item @@ -93,6 +92,13 @@ object RagiumBlocks { // Collector REGISTER.addAlias("water_collector", "fluid_collector") REGISTER.addAlias("exp_collector", "fluid_collector") + // Drum + listOf( + "small", + "medium", + "large", + "huge", + ).forEach { REGISTER.addAlias("${it}_drum", "tank") } REGISTER.addAlias("fisher", "item_collector") REGISTER.addAlias("item_buffer", "item_collector") @@ -626,26 +632,10 @@ object RagiumBlocks { ) @JvmField - val DRUMS: Map> = - HTDrumTier.entries.associateWith { tier: HTDrumTier -> - REGISTER.register( - tier.path, - when (tier) { - HTDrumTier.MEDIUM -> Blocks.GOLD_BLOCK - HTDrumTier.LARGE -> Blocks.DIAMOND_BLOCK - HTDrumTier.HUGE -> Blocks.NETHERITE_BLOCK - else -> Blocks.IRON_BLOCK - }.let(::copyOf), - { HTDrumBlock(tier.getBlockType(), it) }, - ::HTDrumBlockItem, - ) - } - - @JvmField - val EXP_DRUM: HTDeferredBlock = REGISTER.register( - "experience_drum", - copyOf(Blocks.IRON_BLOCK), - { HTDrumBlock(RagiumBlockTypes.EXP_DRUM, it) }, - ::HTDrumBlockItem, + val TANK: HTDeferredBlock = REGISTER.register( + "tank", + copyOf(Blocks.COPPER_BLOCK).noOcclusion(), + ::HTTankBlock, + ::HTTankBlockItem, ) } diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumEntityTypes.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumEntityTypes.kt index 2f6a2ffc1..a0ab0df1f 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumEntityTypes.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumEntityTypes.kt @@ -16,8 +16,7 @@ import hiiragi283.ragium.common.entity.charge.HTFishingCharge import hiiragi283.ragium.common.entity.charge.HTNeutralCharge import hiiragi283.ragium.common.entity.charge.HTStrikeCharge import hiiragi283.ragium.common.entity.charge.HTTeleportCharge -import hiiragi283.ragium.common.entity.vehicle.HTDrumMinecart -import hiiragi283.ragium.common.tier.HTDrumTier +import hiiragi283.ragium.common.entity.vehicle.HTTankMinecart import net.minecraft.SharedConstants import net.minecraft.world.entity.Entity import net.minecraft.world.entity.EntityType @@ -32,6 +31,13 @@ object RagiumEntityTypes { @JvmStatic fun init(eventBus: IEventBus) { + listOf( + "small", + "medium", + "large", + "huge", + ).forEach { REGISTER.addAlias("${it}_drum_minecart", "tank_minecart") } + REGISTER.register(eventBus) eventBus.addListener(::registerEntityCapabilities) @@ -79,29 +85,18 @@ object RagiumEntityTypes { // Minecart // @JvmField - val DRUMS: Map> = HTDrumTier.entries.associateWith { tier: HTDrumTier -> - val factory: (EntityType<*>, Level) -> HTDrumMinecart = when (tier) { - HTDrumTier.SMALL -> HTDrumMinecart::Small - HTDrumTier.MEDIUM -> HTDrumMinecart::Medium - HTDrumTier.LARGE -> HTDrumMinecart::Large - HTDrumTier.HUGE -> HTDrumMinecart::Huge - HTDrumTier.CREATIVE -> HTDrumMinecart::Creative - } - REGISTER.registerType( - tier.entityPath, - factory, - MobCategory.MISC, - ) { builder: EntityType.Builder -> builder.sized(0.98f, 0.7f) } - } + val TANK_MINECART: HTDeferredEntityType = REGISTER.registerType( + "tank_minecart", + ::HTTankMinecart, + MobCategory.MISC, + ) { builder: EntityType.Builder -> builder.sized(0.98f, 0.7f) } // Event // // Capabilities @JvmStatic private fun registerEntityCapabilities(event: RegisterCapabilitiesEvent) { - for (type: HTDeferredEntityType in DRUMS.values) { - registerCapability(event, type) - } + registerCapability(event, TANK_MINECART) } @JvmStatic diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumItems.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumItems.kt index 88ce664b9..9738d41dc 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumItems.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumItems.kt @@ -27,6 +27,7 @@ import hiiragi283.ragium.api.storage.item.HTItemSlot import hiiragi283.ragium.api.tag.RagiumModTags import hiiragi283.ragium.api.text.HTTranslation import hiiragi283.ragium.api.tier.HTBaseTier +import hiiragi283.ragium.api.upgrade.HTUpgradeHelper import hiiragi283.ragium.api.upgrade.HTUpgradeKey import hiiragi283.ragium.api.upgrade.HTUpgradeProvider import hiiragi283.ragium.api.upgrade.RagiumUpgradeKeys @@ -35,10 +36,10 @@ import hiiragi283.ragium.api.variant.HTToolVariant import hiiragi283.ragium.common.HTChargeType import hiiragi283.ragium.common.HTMoldType import hiiragi283.ragium.common.inventory.container.HTPotionBundleContainerMenu -import hiiragi283.ragium.common.item.HTDrumWithMinecartItem import hiiragi283.ragium.common.item.HTIridescentPowderItem import hiiragi283.ragium.common.item.HTLootTicketItem import hiiragi283.ragium.common.item.HTPotionDropItem +import hiiragi283.ragium.common.item.HTTankMinecartItem import hiiragi283.ragium.common.item.HTTierBasedItem import hiiragi283.ragium.common.item.base.HTSmithingTemplateItem import hiiragi283.ragium.common.item.food.HTAmbrosiaItem @@ -69,7 +70,7 @@ import hiiragi283.ragium.common.storage.item.slot.HTComponentItemSlot import hiiragi283.ragium.common.text.HTSmithingTranslation import hiiragi283.ragium.common.text.RagiumCommonTranslation import hiiragi283.ragium.common.tier.HTComponentTier -import hiiragi283.ragium.common.tier.HTDrumTier +import hiiragi283.ragium.common.upgrade.HTComponentUpgradeHandler import hiiragi283.ragium.common.variant.HTArmorVariant import hiiragi283.ragium.common.variant.HTHammerToolVariant import hiiragi283.ragium.common.variant.HTUpgradeVariant @@ -143,6 +144,13 @@ object RagiumItems { REGISTER.addAlias("confusing_charge", "confusion_charge") REGISTER.addAlias("ragi_coke", "coal_coke") + listOf( + "small", + "medium", + "large", + "huge", + ).forEach { REGISTER.addAlias("${it}_drum_minecart", "tank_minecart") } + REGISTER.register(eventBus) eventBus.addListener(::registerItemCapabilities) @@ -628,9 +636,7 @@ object RagiumItems { // Vehicles // @JvmField - val DRUM_MINECARTS: Map = HTDrumTier.entries.associateWith { tier: HTDrumTier -> - REGISTER.registerItemWith(tier.entityPath, tier, ::HTDrumWithMinecartItem) - } + val TANK_MINECART: HTSimpleDeferredItem = REGISTER.registerItem("tank_minecart", ::HTTankMinecartItem) // Upgrades // @@ -772,27 +778,20 @@ object RagiumItems { ) // Fluid - for ((tier: HTDrumTier, block: ItemLike) in RagiumBlocks.DRUMS) { - registerFluid( - event, - { stack: ItemStack -> - HTComponentFluidTank.create(stack, 0, tier.getDefaultCapacity()) - }, - block, - ) - } registerFluid( event, { stack: ItemStack -> - HTComponentFluidTank.create(stack, 0, Int.MAX_VALUE, filter = RagiumFluidContents.EXPERIENCE::isOf) + val capacity: Int = HTUpgradeHelper.getTankCapacity(stack, RagiumConfig.COMMON.tankCapacity.asInt) + HTComponentFluidTank.create(stack, 0, capacity) }, - RagiumBlocks.EXP_DRUM, + RagiumBlocks.TANK, ) registerFluid( event, { stack: ItemStack -> - HTComponentFluidTank.create(stack, 0, 8000, filter = RagiumFluidContents.DEW_OF_THE_WARP::isOf) + val capacity: Int = HTUpgradeHelper.getTankCapacity(stack, 8000) + HTComponentFluidTank.create(stack, 0, capacity, filter = RagiumFluidContents.DEW_OF_THE_WARP::isOf) }, TELEPORT_KEY, ) @@ -801,7 +800,7 @@ object RagiumItems { registerEnergy( event, { stack: ItemStack -> - HTComponentEnergyBattery.create(stack, 160000) + HTComponentEnergyBattery.create(stack, HTUpgradeHelper.getEnergyCapacity(stack, 160000)) }, DRILL, ) @@ -809,31 +808,47 @@ object RagiumItems { // Upgrade for (item: Item in BuiltInRegistries.ITEM) { // Component-Based for all items - registerUpgrade( - event, - { stack: ItemStack -> - HTUpgradeProvider { key: HTUpgradeKey -> - stack.get(RagiumDataComponents.MACHINE_UPGRADE)?.get(key) ?: Fraction.ZERO + event.registerItem( + RagiumCapabilities.UPGRADE_ITEM, + { stack: ItemStack, _: Void? -> + if (stack.has(RagiumDataComponents.MACHINE_UPGRADE)) { + HTUpgradeProvider { key: HTUpgradeKey -> + stack.get(RagiumDataComponents.MACHINE_UPGRADE)?.get(key) ?: Fraction.ZERO + } + } else { + null } }, item, ) - for ((tier: HTComponentTier, item: ItemLike) in COMPONENTS) { - registerUpgrade( - event, - { _ -> - HTUpgradeProvider { key: HTUpgradeKey -> - if (key == RagiumUpgradeKeys.BASE_MULTIPLIER) { - fraction(tier.ordinal + 2) - } else { - Fraction.ZERO - } + event.registerItem( + RagiumCapabilities.UPGRADABLE_ITEM, + { stack: ItemStack, _: Void? -> + if (stack.has(RagiumDataComponents.MACHINE_UPGRADES)) { + HTComponentUpgradeHandler(stack) + } else { + null + } + }, + item, + ) + } + + for ((tier: HTComponentTier, item: ItemLike) in COMPONENTS) { + event.registerItem( + RagiumCapabilities.UPGRADE_ITEM, + { _: ItemStack, _: Void? -> + HTUpgradeProvider { key: HTUpgradeKey -> + if (key == RagiumUpgradeKeys.BASE_MULTIPLIER) { + fraction(tier.ordinal + 2) + } else { + Fraction.ZERO } - }, - item, - ) - } + } + }, + item, + ) } RagiumAPI.LOGGER.info("Registered item capabilities!") @@ -866,15 +881,6 @@ object RagiumItems { ) } - @JvmStatic - fun registerUpgrade(event: RegisterCapabilitiesEvent, getter: (ItemStack) -> HTUpgradeProvider, vararg items: ItemLike) { - event.registerItem( - RagiumCapabilities.UPGRADE_ITEM, - { stack: ItemStack, _: Void? -> getter(stack) }, - *items, - ) - } - @JvmStatic private fun modifyComponents(event: ModifyDefaultComponentsEvent) { fun modify(item: ItemLike, type: DataComponentType, value: T) { diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumMenuTypes.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumMenuTypes.kt index 8c76d5b60..7d2d0bae9 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumMenuTypes.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumMenuTypes.kt @@ -28,7 +28,7 @@ import hiiragi283.ragium.common.block.entity.processor.HTRefineryBlockEntity import hiiragi283.ragium.common.block.entity.processor.HTSimulatorBlockEntity import hiiragi283.ragium.common.block.entity.processor.base.HTAbstractSmelterBlockEntity import hiiragi283.ragium.common.block.entity.processor.base.HTSingleItemInputBlockEntity -import hiiragi283.ragium.common.block.entity.storage.HTDrumBlockEntity +import hiiragi283.ragium.common.block.entity.storage.HTTankBlockEntity import hiiragi283.ragium.common.inventory.container.HTAccessConfigurationMenu import hiiragi283.ragium.common.inventory.container.HTBlockEntityContainerMenu import hiiragi283.ragium.common.inventory.container.HTGenericContainerMenu @@ -49,7 +49,7 @@ object RagiumMenuTypes { val REGISTER = HTDeferredMenuTypeRegister(RagiumAPI.MOD_ID) @JvmField - val DRUM: DeferredBEMenu = registerBE("drum") + val TANK: DeferredBEMenu = registerBE("tank") @JvmField val ACCESS_CONFIG: HTDeferredMenuType.WithContext = diff --git a/src/main/resources/assets/ragium/models/block/tank.json b/src/main/resources/assets/ragium/models/block/tank.json new file mode 100644 index 000000000..183a9cc45 --- /dev/null +++ b/src/main/resources/assets/ragium/models/block/tank.json @@ -0,0 +1,56 @@ +{ + "format_version": "1.9.0", + "credit": "Made by Hiiragi Russell Tsubasa", + "render_type": "minecraft:cutout", + "textures": { + "0": "ragium:block/tank_side", + "1": "ragium:block/tank_top", + "particle": "ragium:block/tank_side" + }, + "elements": [ + { + "from": [2, 0, 2], + "to": [14, 16, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [2, 0, 2]}, + "faces": { + "north": {"uv": [2, 0, 14, 16], "texture": "#0"}, + "east": {"uv": [2, 0, 14, 16], "texture": "#0"}, + "south": {"uv": [2, 0, 14, 16], "texture": "#0"}, + "west": {"uv": [2, 0, 14, 16], "texture": "#0"}, + "up": {"uv": [2, 2, 14, 14], "texture": "#1"}, + "down": {"uv": [2, 2, 14, 14], "texture": "#1"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, -135, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, -135, 0], + "scale": [0.625, 0.625, 0.625] + }, + "fixed": { + "scale": [0.5, 0.5, 0.5] + } + } +} diff --git a/src/main/resources/assets/ragium/textures/block/creative_drum_side.png b/src/main/resources/assets/ragium/textures/block/creative_drum_side.png deleted file mode 100644 index a9253b40596e36ebc0d4c2bf582a9551fb5e7967..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 177 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|jKx9jP7LeL$-D$|vOQfKLo9le zMa0COJ$R6iknrH)!^8u;`)Yn3I&k2_H2ZEDWHIweOL+R; ZV{o#}RDHJS+H;__44$rjF6*2UngH?HL+=0p diff --git a/src/main/resources/assets/ragium/textures/block/creative_drum_top.png b/src/main/resources/assets/ragium/textures/block/creative_drum_top.png deleted file mode 100644 index a91c5ed9722abdecd557fbf79cd6b0a9f7797866..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 227 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|jKx9jP7LeL$-D$|=6bp~hFJ8T zooL8+$biSyKCsO`<@CJGUzXW2R97*#$u+DL%H|gc6$?^jQ`QcMI&^IQoENpftu2pA zcrtM)Cd4llVNiNBB~Qe2`PIVTQXj%%&reTPXt3No`_i=qOSZ30eK3b}f&BFeacr-c zw657O3QeG_kGVRIYy1p;%Z1M81zTY#|NRh8pP>oH_XP(nh)0-$X ak-g)iak}}0>I*=JGI+ZBxvX%$G%Ld|!dUH_R_*X-z1*YNaEYpdxF4l~;=_uCp{)4okrd_KpJtzoO!dts-5)U;K{ z_Pz9&zEDr8G4u1P*EJXRJ!yz>m*-p&8hSQl+o#ro{gYiBlx&1I?f+`W$iVRb|BO5q gf1u55Ae)&PW~C?pxqQbk0w}`Z>FVdQ&MBb@0P~|qAOHXW diff --git a/src/main/resources/assets/ragium/textures/block/experience_drum_top.png b/src/main/resources/assets/ragium/textures/block/experience_drum_top.png deleted file mode 100644 index 43d14afb66d5ecda287e9e0ff361994d9c28756e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 226 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|(>+}rLn`K+nY5Ry#Xz7%{G=n_ zrKflIOy4to!^Ta*g4!Fe9#eAV;&u;93g{7(Ud}Q3!`ZaY%3H1lc_{^XUEJAYD6w{H z(@PIVzZW7oi~sv+U-QXZhTh%D4W19DIWV_op32;=D4%e*F)xdIflbz7p0CfP zMLoFRsW@C-Jnf$3hxflt4os*%(J;g3&q>w2EFY3JqZ-nIF8lv~ZGl`DkiiCWA~VCz X#}<{&zY3oKMHoC?{an^LB{Ts5ljd8C diff --git a/src/main/resources/assets/ragium/textures/block/experience_machine_casing.png b/src/main/resources/assets/ragium/textures/block/experience_machine_casing.png deleted file mode 100644 index 6f419a05018eb7be97c59c2cb914e55863e15fa2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 202 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|^`0({Ar*7p1TExkFc4T%VZ+3> zLWv{o1zRlRaWxLN1evrI3ZWJ}92XRJEX!^?~clTEk3)*&__CP%iVd? z-6zC`EV-J=l3;GcUBx{wYwM-IPXrG{7i<=&?u`GS$(ZCeP41qNnvWG@RO`GOPvjNv xvcK*P+sN_YJSzjk|Nq9(51#>@!Ul2*GsE+Ets-x)@YvcI$|9+(-s{@-@RI(IrNY*q2zc)Cm7L~23x?sv9+2=A3_KN4m znS?T4DU}r5wT`_n4cIUo?z|dvg7^U`45@+ Xcp}ek|1G%;XeooItDnm{r-UW|H7Gv% diff --git a/src/main/resources/assets/ragium/textures/block/huge_drum_top.png b/src/main/resources/assets/ragium/textures/block/huge_drum_top.png deleted file mode 100644 index 37f8b18a2c57e8bf0b243b65504b64fe0b57a398..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 231 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|jKx9jP7LeL$-D$|7J9lkhFJ8T zooL8+$biSyK9G%nqQI%OGb|az-!b00I&l)$u@#>#bsf|QSWP)_qXz*5BG!x z8J^3$I%UZ$Ah@_>dB=&2t9kp`b5^dKZd}YH;3ReI<>duSbi>bRwy-oj{$my(9x(GC z>%56xqE3%2m^-%rzBoUt?Rrb%oN2kS+qOFX7kbIhTULK#fBDq~0Y6W)O);6fmpj4b fNp_EtU?oG&UWdl}0s?b@j%Dz4^>bP0l+XkKrny@| diff --git a/src/main/resources/assets/ragium/textures/block/large_drum_side.png b/src/main/resources/assets/ragium/textures/block/large_drum_side.png deleted file mode 100644 index 171ca935c9addd13db4360408449bb52e3a45176..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|jKx9jP7LeL$-D$|qC8z3Lo9le zMa0COJ$R6iknrH)!^8u;`)Yn3I&k2_Y; diff --git a/src/main/resources/assets/ragium/textures/block/large_drum_top.png b/src/main/resources/assets/ragium/textures/block/large_drum_top.png deleted file mode 100644 index c333e67b0afe6b178e7dd2e6f6872615a9dc20f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 220 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|jKx9jP7LeL$-D$|rg^$JhFJ8T zow$(iuz`T{{Y4E88xCx$3;3V1=YK@zB@a`9Yw;EZTv9tUyUn)twxyMH=FFcP6Xd1H zqHyeloeN7qX!;w!7J)gw$G_h0d>zH8Q?& S{e~gXg$$mqelF{r5}E)Z)mDxG diff --git a/src/main/resources/assets/ragium/textures/block/medium_drum_side.png b/src/main/resources/assets/ragium/textures/block/medium_drum_side.png deleted file mode 100644 index cb98248093406f854a6ce993dc43f98e7f73e4b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 166 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|jKx9jP7LeL$-D$|5o{>rDwt>haLDjC(Je z-1DLGu1(qwef7rj*0sLBwXzq?V~sw%Z`P;F{!LwPg!CSIaQwgbn|rB9@J?6ON+Fh{vYBt-Pe1>P+eoL%i z6bX@ku=kSJ@zgwPhU45HG^A!pEIzC2dVc-CxXgC8>GGex>q&*A$nRtf4NA=yp3w0p d=CFd2KK~w*)Ph>(sX(_fc)I$ztaD0e0susZRlxuN diff --git a/src/main/resources/assets/ragium/textures/block/refinery.png b/src/main/resources/assets/ragium/textures/block/refinery.png index 169091f355507839e10855ed4fa1d4b32d338e75..9ea9a9c512db985d02cf51a8619dd2a26e8e27bc 100644 GIT binary patch delta 274 zcmV+t0qy>?0<8j&B!A*bL_t(|oTO8s4#F@Hy^-l9IOKi+42EEUUqK+SI4~$25(EN^ zLQgUb0WkqM)V_dy!r*mTL%ZwRglBrY*L%CWm-@>V<%5t|oYUe2KkTSn{3v+u)T4ZK zC65yThqI1vkOlgmbMXSHyaz+7fSDlf|aj=enZGYEsRsmRrZJTTq0+?5C z897{vf*D0`R50p+;||92DQ%7m$stA#aI!JEWa@X4$()lwx8GDm_N%Rotve_?NS~>Q zZ?Cm-&uIrJ4%;Dda2f%{Wd{|3(r1no&-rWBJwA{L9{>OV|NkGW^acO`00v1!K~w_( Y&}3W@qgI2V01E&B07*qoM6N<$f|LbyiU0rr delta 280 zcmV+z0q6d$0&nM;tZf+Ez&EbfqJv5*;EoDgK!q7`VWrFHL%v%8aa-Gwtob4yGYX-U{vUK-WY`e z>Qz$)hfS_CB^Sh9ajr(6W7vbyWK4_YJk=0`1B}M_dIr+J?*}PoWYBSHlF5F%OJi*h zk_^6|w}?;YjkM3G2RK}BwupmK2{@c&kTFQ+%!%STN27XNJ<7um00960WYdpj00006 eNklkqKVKe!0uu(7oPxf@<^7YQUY-`No;?Us8Wky&}=NofYoDY3^xcl=BRTE^h% L>gTe~DWM4fpG-Zg diff --git a/src/main/resources/assets/ragium/textures/block/small_drum_top.png b/src/main/resources/assets/ragium/textures/block/small_drum_top.png deleted file mode 100644 index 147ddd4fb67d650fbe579ea16e91119414fb7077..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 227 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|jKx9jP7LeL$-D$|=6bp~hFJ8T zooL8)*nr2izE@Lf&(E@#x>bi|7EaLPlW;!qWTCT7#+wCUGsM)F1^-u>{e7wa?nR8EMcC}dVXi}D_?|3BG>24$cl3U=GlivKs05+$eO>9@Q0(b3g?VH7}^W19j z@g+@7+INydDgxVY*=`ZvQS7L{v*3(#-GYf)um0wD?0nFs;(A58pupi!io6{E(eNpe upDa4tcQ7(A{Qoa~qjLq&9c&Jxgf- literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ragium/textures/gui/container/drum.png b/src/main/resources/assets/ragium/textures/gui/container/tank.png similarity index 100% rename from src/main/resources/assets/ragium/textures/gui/container/drum.png rename to src/main/resources/assets/ragium/textures/gui/container/tank.png diff --git a/src/main/resources/assets/ragium/textures/item/creative_drum_minecart.png b/src/main/resources/assets/ragium/textures/item/creative_drum_minecart.png deleted file mode 100644 index 1e86565480a3458ddbbb72fd8d51b2acc9283975..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 466 zcmV;@0WJQCP)?e*y#fVfb(_!?03hC<(V$3(zuqsbhE{A(-`?d(&8yj~wIE-#7Vkx{BQ8zP``cY{yDrV0oW z0Zj(hnO#5(aXx=SO0h_tjw%T)^g_^1CYxbm=a=0pr9_!rmgT)w$~5WrAYYt;8G?Y= zT=6H5Yb+0w@spS;{{1xmCq4lH0RR61r?htf000I_L_t&o0H99TEc!I@RR91007*qo IM6N<$f+hsYnE(I) diff --git a/src/main/resources/assets/ragium/textures/item/huge_drum_minecart.png b/src/main/resources/assets/ragium/textures/item/huge_drum_minecart.png deleted file mode 100644 index 380b7360f293cb1d47ba111fc8c81ae5593b8914..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 458 zcmV;*0X6=KP)I+D&UCTA?9i4}!u}=pVQaYA602>BoeRULZ&Rv5zBZ%Hj z-TVe;@V+8H7-sIw`M&R*b7x%i2STBcu4x*%-ELA4@QaCljW;1_Zt224QC zWKM*Di!YvDTU00(>7rDk_(TNY4IE5;K-`SS=;rFyn!(malwO+eOaz&L3^xqyadP$g zj{N?hQ9$YSSq2Dz2+9F5kx0_%**V+eWO*q--G0wlLi_mhfl($ z3J8RNrq3cgnhJ)Xx6i-{ zLBQtW(Qi6i6RPvd{$8vp?R|FzV+O8@`>21!IgR09B~_SqDjx9^((0000< KMNUMnLSTaZLehQ! diff --git a/src/main/resources/assets/ragium/textures/item/medium_drum_minecart.png b/src/main/resources/assets/ragium/textures/item/medium_drum_minecart.png deleted file mode 100644 index d5ddea4bddbd224b17b48c56d6ff251b44e48ae9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 472 zcmV;}0Vn>6P)^Aqh937G<;%#mF!!S{43-pa+nawH99>U!Y~19zfc)=mo-ml^{q3QIRO_ zv_KR$lDeAayEHdPN2vqDy?5^S{m!{(=2|c%TrQW|@AqM~TG41U6f=!7$;i=Wv!UDV z%Fzs>OfoXcg-xLL1mE$DSerp+^oiYWH<(3eW>h+I$vr*ESOw~(LtQzYH3Ce6Rj@DZ zc3Y7Z1S3%u-g(r|20}2+%xIk}aQg$Q1TaF$Rp2m+`t_U?4v&1e$0VUt0AoFf#bO8@ zwE*{)gs@a;)E*|GIUGKa0E<3(DOV9sBs9nc@>hhgfdg$v%b4^D4UKE-UfkvH#{nBY z58mG@zmSuTES2xLM|1YJfF1-Jnz~qSyOU3`ZD-@HpvAT9}<$xsRm>q_Y{J`>0j1?DkM^ z?7=96LGx(FAD#4=UMBq~8Oiwf+xVaO1^@v6|655mxBvhE21!IgR09A*`P04w8r-!2 O0000 zMOK)zC?(y*%YqR{=qAKyu~?{H zuk+E!MCc|2GE#sFk59Cf|6p??lRovuX0vI;0K~=j8lPiNEuu@XzwA|Z?mjgJMnDSm zMV4iOCkTd@6t~?a3p*gCZxkk9e?$A_w12()B=+ zB#K1eKH(ppm+2q6HWcfv!bnKQkC zf6Ptyw*_vp)?edMv4%Z}Qzz#%Y#-7d;ki;}2|xf5$AQ@A3()$;rdB-Ypx0_eo1k=a zg-^n|8V=4gB21%;3oP!`%rqCL)5ny{W~tHm5;R9>H^Ffd$pjPITXFNbOG>1YjQ3J1 zlGEh|U)zID69D4QioZOrF}zIbPtsBG@3-+k_yGU_|NjWm(pvxk00v1!K~w_(r>E4; TBVq2F00000NkvXXu0mjfp10O} diff --git a/src/main/resources/assets/ragium/textures/item/tank_minecart.png b/src/main/resources/assets/ragium/textures/item/tank_minecart.png new file mode 100644 index 0000000000000000000000000000000000000000..c037a145348d40e12a359b0df43168cecffbf87b GIT binary patch literal 479 zcmV<50U-W~P)xH+I`7z+wv{DwrvEd1rNv40=L* zZV3bQ{`uXY=ZV;a6>kml**im518f&7%7qLT`xqR@3K|nWf?rsr%F&dh5i@LWj>BQL zALQd0nV5;zeLd8!8dx0zVHzCbCcTU>Z0>_N6x*4do5;;D$1zN?+cwt;wYqAAP$&dn zf|FN7!M@mlfTvC&)vC~}eh?=ZTm#J++&|?Y9EngTNXB4r*hVN&h@5iyO=~bS<%Y+H zXCfdO5r=omaSg@Oo=HfZUxC$XQyRRKD%1fI&;-Xp;l#lP?CkE*8WY!~_5fT6Z002ovPDHLkV1jLk$eREF literal 0 HcmV?d00001 From d3e9b0a9c50a5ea1a05dea3ca04c17d7760c238a Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Fri, 12 Dec 2025 02:31:08 +0900 Subject: [PATCH 30/49] refactor: refine around component handlers --- .../api/item/component/HTStackContents.kt | 58 -------------- .../api/stack/ImmutableComponentStack.kt | 43 ----------- .../attachments/HTAttachedContainers.kt | 32 ++++++++ .../storage/attachments/HTAttachedEnergy.kt | 26 +++++++ .../storage/attachments/HTAttachedFluids.kt | 67 ++++++++++++++++ .../storage/attachments/HTAttachedItems.kt | 67 ++++++++++++++++ .../api/upgrade/HTSlotUpgradeHandler.kt | 4 +- .../server/loot/RagiumBlockLootProvider.kt | 4 +- .../recipe/RagiumMachineRecipeProvider.kt | 4 +- .../server/recipe/RagiumToolRecipeProvider.kt | 2 +- .../client/event/RagiumTooltipHandler.kt | 4 +- .../common/block/entity/HTBlockEntity.kt | 34 ++++---- .../component/HTMachineUpgradeComponent.kt | 7 +- .../common/event/RagiumRuntimeHandler.kt | 2 +- .../common/item/block/HTCrateBlockItem.kt | 4 +- .../common/item/block/HTTankBlockItem.kt | 4 +- .../common/storage/HTCapabilityCodec.kt | 47 +++++++---- .../storage/attachments/HTComponentHandler.kt | 77 +++++++++++++++++++ .../storage/attachments/HTComponentSlot.kt | 48 ++++++++++++ .../energy/HTComponentEnergyHandler.kt | 14 +++- .../battery/HTComponentEnergyBattery.kt | 24 +++--- .../storage/fluid/HTComponentFluidHandler.kt | 24 ++++-- .../fluid/tank/HTComponentFluidTank.kt | 74 +++++------------- .../storage/item/HTComponentItemHandler.kt | 19 ++++- .../storage/item/slot/HTComponentItemSlot.kt | 70 +++++------------ .../upgrade/HTComponentUpgradeHandler.kt | 5 +- .../ragium/setup/RagiumDataComponents.kt | 22 +++--- .../hiiragi283/ragium/setup/RagiumItems.kt | 55 ++++++++----- 28 files changed, 530 insertions(+), 311 deletions(-) delete mode 100644 src/api/kotlin/hiiragi283/ragium/api/item/component/HTStackContents.kt create mode 100644 src/api/kotlin/hiiragi283/ragium/api/storage/attachments/HTAttachedContainers.kt create mode 100644 src/api/kotlin/hiiragi283/ragium/api/storage/attachments/HTAttachedEnergy.kt create mode 100644 src/api/kotlin/hiiragi283/ragium/api/storage/attachments/HTAttachedFluids.kt create mode 100644 src/api/kotlin/hiiragi283/ragium/api/storage/attachments/HTAttachedItems.kt create mode 100644 src/main/kotlin/hiiragi283/ragium/common/storage/attachments/HTComponentHandler.kt create mode 100644 src/main/kotlin/hiiragi283/ragium/common/storage/attachments/HTComponentSlot.kt diff --git a/src/api/kotlin/hiiragi283/ragium/api/item/component/HTStackContents.kt b/src/api/kotlin/hiiragi283/ragium/api/item/component/HTStackContents.kt deleted file mode 100644 index 4a353f4ae..000000000 --- a/src/api/kotlin/hiiragi283/ragium/api/item/component/HTStackContents.kt +++ /dev/null @@ -1,58 +0,0 @@ -package hiiragi283.ragium.api.item.component - -import hiiragi283.ragium.api.serialization.codec.BiCodec -import hiiragi283.ragium.api.stack.ImmutableComponentStack -import hiiragi283.ragium.api.stack.ImmutableFluidStack -import hiiragi283.ragium.api.stack.ImmutableItemStack -import net.minecraft.network.RegistryFriendlyByteBuf -import java.util.Optional -import kotlin.jvm.optionals.getOrNull - -typealias HTItemContents = HTStackContents -typealias HTFluidContents = HTStackContents - -/** - * @see mekanism.common.attachments.containers.item.AttachedItems - */ -data class HTStackContents>(val stacks: List>) : AbstractList() { - companion object { - @JvmStatic - fun > codec( - stackCodec: BiCodec, - ): BiCodec> = stackCodec - .toOptional() - .listOrElement() - .xmap(::HTStackContents, HTStackContents::stacks) - - @JvmStatic - fun > empty(): HTStackContents = HTStackContents(listOf()) - - @JvmStatic - fun > fromNullable(stacks: List): HTStackContents = when { - stacks.isEmpty() || stacks.filterNotNull().isEmpty() -> empty() - else -> HTStackContents(stacks.map(Optional::ofNullable)) - } - - @JvmStatic - fun > fromOptional(stacks: List>): HTStackContents = when { - stacks.isEmpty() || stacks.none(Optional::isPresent) -> empty() - else -> HTStackContents(stacks) - } - } - - override val size: Int - get() = stacks.size - - override fun get(index: Int): STACK? = stacks[index].getOrNull() - - override fun isEmpty(): Boolean = super.isEmpty() || stacks.all(Optional::isEmpty) - - fun unwrap(): MutableList> = stacks.toMutableList() - - override fun equals(other: Any?): Boolean = when (other) { - !is HTStackContents -> false - else -> ImmutableComponentStack.listMatches(this, other) - } - - override fun hashCode(): Int = ImmutableComponentStack.hashStackList(this) -} diff --git a/src/api/kotlin/hiiragi283/ragium/api/stack/ImmutableComponentStack.kt b/src/api/kotlin/hiiragi283/ragium/api/stack/ImmutableComponentStack.kt index 011280db5..9e0b4fd29 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/stack/ImmutableComponentStack.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/stack/ImmutableComponentStack.kt @@ -6,49 +6,6 @@ import net.minecraft.core.component.DataComponentPatch interface ImmutableComponentStack> : ImmutableStack, DataComponentHolder { - companion object { - @JvmStatic - fun hashValueAndComponents(stack: ImmutableComponentStack<*, *>?): Int = when { - stack == null -> 0 - else -> { - val i: Int = 31 + stack.value().hashCode() - 31 * i + stack.components.hashCode() - } - } - - /** - * @see net.minecraft.world.item.ItemStack.hashStackList - */ - @JvmStatic - fun hashStackList(stacks: List?>): Int { - var i = 0 - for (stack: ImmutableComponentStack<*, *>? in stacks) { - i = i * 31 + hashValueAndComponents(stack) - } - return i - } - - @JvmStatic - fun > isSameValueAndComponents(first: STACK?, second: STACK?): Boolean = when { - first == null && second == null -> true - first?.value() != second?.value() -> false - else -> first?.components == second?.components - } - - @JvmStatic - fun > matches(first: STACK?, second: STACK?): Boolean = when { - first == second -> true - first?.amount() != second?.amount() -> false - else -> isSameValueAndComponents(first, second) - } - - @JvmStatic - fun > listMatches(first: List, second: List): Boolean = when { - first.size != second.size -> false - else -> first.indices.all { i: Int -> matches(first[i], second[i]) } - } - } - /** * このスタックの[DataComponentPatch]を返します。 */ diff --git a/src/api/kotlin/hiiragi283/ragium/api/storage/attachments/HTAttachedContainers.kt b/src/api/kotlin/hiiragi283/ragium/api/storage/attachments/HTAttachedContainers.kt new file mode 100644 index 000000000..6d4438275 --- /dev/null +++ b/src/api/kotlin/hiiragi283/ragium/api/storage/attachments/HTAttachedContainers.kt @@ -0,0 +1,32 @@ +package hiiragi283.ragium.api.storage.attachments + +/** + * @see mekanism.common.attachments.containers.IAttachedContainers + */ +interface HTAttachedContainers> : Collection { + val containers: List + + operator fun get(index: Int): TYPE = containers[index] + + fun getOrNull(index: Int): TYPE? = containers.getOrNull(index) + + fun create(containers: List): ATTACHED + + fun with(index: Int, element: TYPE): ATTACHED { + val copy: MutableList = containers.toMutableList() + copy[index] = element + return create(copy) + } + + // Collection // + + override val size: Int get() = containers.size + + override fun isEmpty(): Boolean = containers.isEmpty() + + override fun contains(element: TYPE): Boolean = element in containers + + override fun iterator(): Iterator = containers.iterator() + + override fun containsAll(elements: Collection): Boolean = elements.all { it in containers } +} diff --git a/src/api/kotlin/hiiragi283/ragium/api/storage/attachments/HTAttachedEnergy.kt b/src/api/kotlin/hiiragi283/ragium/api/storage/attachments/HTAttachedEnergy.kt new file mode 100644 index 000000000..a2b604f19 --- /dev/null +++ b/src/api/kotlin/hiiragi283/ragium/api/storage/attachments/HTAttachedEnergy.kt @@ -0,0 +1,26 @@ +package hiiragi283.ragium.api.storage.attachments + +import hiiragi283.ragium.api.serialization.codec.BiCodec +import hiiragi283.ragium.api.serialization.codec.BiCodecs +import io.netty.buffer.ByteBuf + +/** + * @see mekanism.common.attachments.containers.energy.AttachedEnergy + */ +@JvmRecord +data class HTAttachedEnergy(override val containers: List) : HTAttachedContainers { + companion object { + @JvmField + val CODEC: BiCodec = BiCodecs.POSITIVE_INT + .listOf() + .xmap(::HTAttachedEnergy, HTAttachedEnergy::containers) + + @JvmField + val EMPTY = HTAttachedEnergy(listOf()) + + @JvmStatic + fun create(size: Int): HTAttachedEnergy = HTAttachedEnergy(List(size) { 0 }) + } + + override fun create(containers: List): HTAttachedEnergy = HTAttachedEnergy(containers) +} diff --git a/src/api/kotlin/hiiragi283/ragium/api/storage/attachments/HTAttachedFluids.kt b/src/api/kotlin/hiiragi283/ragium/api/storage/attachments/HTAttachedFluids.kt new file mode 100644 index 000000000..9a4202e29 --- /dev/null +++ b/src/api/kotlin/hiiragi283/ragium/api/storage/attachments/HTAttachedFluids.kt @@ -0,0 +1,67 @@ +package hiiragi283.ragium.api.storage.attachments + +import hiiragi283.ragium.api.serialization.codec.BiCodec +import hiiragi283.ragium.api.stack.ImmutableFluidStack +import net.minecraft.network.RegistryFriendlyByteBuf +import net.neoforged.neoforge.fluids.FluidStack +import java.util.Optional +import kotlin.jvm.optionals.getOrNull + +/** + * @see mekanism.common.attachments.containers.fluid.AttachedFluids + */ +@JvmRecord +data class HTAttachedFluids(override val containers: List) : + HTAttachedContainers { + companion object { + @JvmField + val CODEC: BiCodec = ImmutableFluidStack.CODEC + .toOptional() + .listOf() + .xmap( + { stacks: List> -> HTAttachedFluids(stacks.map(Optional::getOrNull)) }, + { attached: HTAttachedFluids -> attached.containers.map(Optional::ofNullable) }, + ) + + @JvmField + val EMPTY = HTAttachedFluids(listOf()) + + @JvmStatic + fun create(size: Int): HTAttachedFluids = HTAttachedFluids(List(size) { null }) + } + + override fun create(containers: List): HTAttachedFluids = HTAttachedFluids(containers) + + override fun equals(other: Any?): Boolean { + when { + this === other -> return true + other !is HTAttachedFluids -> return false + else -> { + val otherContainers: List = other.containers + return when { + containers.size != otherContainers.size -> { + false + } + else -> { + for (i: Int in containers.indices) { + val matches: Boolean = FluidStack.matches( + containers[i]?.unwrap() ?: FluidStack.EMPTY, + otherContainers[i]?.unwrap() ?: FluidStack.EMPTY, + ) + if (!matches) return false + } + true + } + } + } + } + } + + override fun hashCode(): Int { + var hash = 0 + for (stack: ImmutableFluidStack? in containers) { + hash = hash * 31 + (stack?.hashCode() ?: 0) + } + return hash + } +} diff --git a/src/api/kotlin/hiiragi283/ragium/api/storage/attachments/HTAttachedItems.kt b/src/api/kotlin/hiiragi283/ragium/api/storage/attachments/HTAttachedItems.kt new file mode 100644 index 000000000..31e0c682a --- /dev/null +++ b/src/api/kotlin/hiiragi283/ragium/api/storage/attachments/HTAttachedItems.kt @@ -0,0 +1,67 @@ +package hiiragi283.ragium.api.storage.attachments + +import hiiragi283.ragium.api.serialization.codec.BiCodec +import hiiragi283.ragium.api.stack.ImmutableItemStack +import net.minecraft.network.RegistryFriendlyByteBuf +import net.minecraft.world.item.ItemStack +import java.util.Optional +import kotlin.jvm.optionals.getOrNull + +/** + * @see mekanism.common.attachments.containers.item.AttachedItems + */ +@JvmRecord +data class HTAttachedItems(override val containers: List) : + HTAttachedContainers { + companion object { + @JvmField + val CODEC: BiCodec = ImmutableItemStack.CODEC + .toOptional() + .listOf() + .xmap( + { stacks: List> -> HTAttachedItems(stacks.map(Optional::getOrNull)) }, + { attached: HTAttachedItems -> attached.containers.map(Optional::ofNullable) }, + ) + + @JvmField + val EMPTY = HTAttachedItems(listOf()) + + @JvmStatic + fun create(size: Int): HTAttachedItems = HTAttachedItems(List(size) { null }) + } + + override fun create(containers: List): HTAttachedItems = HTAttachedItems(containers) + + override fun equals(other: Any?): Boolean { + when { + this === other -> return true + other !is HTAttachedItems -> return false + else -> { + val otherContainers: List = other.containers + return when { + containers.size != otherContainers.size -> { + false + } + else -> { + for (i: Int in containers.indices) { + val matches: Boolean = ItemStack.matches( + containers[i]?.unwrap() ?: ItemStack.EMPTY, + otherContainers[i]?.unwrap() ?: ItemStack.EMPTY, + ) + if (!matches) return false + } + true + } + } + } + } + } + + override fun hashCode(): Int { + var hash = 0 + for (stack: ImmutableItemStack? in containers) { + hash = hash * 31 + (stack?.hashCode() ?: 0) + } + return hash + } +} diff --git a/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTSlotUpgradeHandler.kt b/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTSlotUpgradeHandler.kt index 835e87d25..5de189184 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTSlotUpgradeHandler.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTSlotUpgradeHandler.kt @@ -1,8 +1,8 @@ package hiiragi283.ragium.api.upgrade -import hiiragi283.ragium.api.stack.ImmutableComponentStack import hiiragi283.ragium.api.stack.ImmutableItemStack import hiiragi283.ragium.api.storage.item.HTItemSlot +import net.minecraft.world.item.ItemStack interface HTSlotUpgradeHandler : HTUpgradeHandler { fun getUpgradeSlots(): List @@ -10,5 +10,5 @@ interface HTSlotUpgradeHandler : HTUpgradeHandler { override fun getUpgrades(): List = getUpgradeSlots().mapNotNull(HTItemSlot::getStack) override fun isValidUpgrade(upgrade: ImmutableItemStack, existing: List): Boolean = - existing.none { stack: ImmutableItemStack -> ImmutableComponentStack.matches(stack, upgrade) } + existing.none { stack: ImmutableItemStack -> ItemStack.isSameItemSameComponents(stack.unwrap(), upgrade.unwrap()) } } diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/loot/RagiumBlockLootProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/loot/RagiumBlockLootProvider.kt index c31bb3bf0..21e3e403e 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/loot/RagiumBlockLootProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/loot/RagiumBlockLootProvider.kt @@ -55,8 +55,8 @@ class RagiumBlockLootProvider(provider: HolderLookup.Provider) : include(RagiumDataComponents.MACHINE_UPGRADES) include(RagiumDataComponents.ENERGY) - include(RagiumDataComponents.FLUID_CONTENT) - include(RagiumDataComponents.ITEM_CONTENT) + include(RagiumDataComponents.FLUID) + include(RagiumDataComponents.ITEM) when (block) { is HTImitationSpawnerBlock -> include(RagiumDataComponents.SPAWNER_MOB) } diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumMachineRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumMachineRecipeProvider.kt index 8563ad37e..ce050c5e6 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumMachineRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumMachineRecipeProvider.kt @@ -37,7 +37,7 @@ object RagiumMachineRecipeProvider : HTRecipeProvider.Direct() { crate() // Tank - resetComponent(RagiumBlocks.TANK, RagiumDataComponents.FLUID_CONTENT) + resetComponent(RagiumBlocks.TANK, RagiumDataComponents.FLUID) HTShapedRecipeBuilder .create(RagiumBlocks.TANK) .crossLayered() @@ -412,7 +412,7 @@ object RagiumMachineRecipeProvider : HTRecipeProvider.Direct() { @JvmStatic private fun crate() { for ((tier: HTCrateTier, crate: HTItemHolderLike) in RagiumBlocks.CRATES) { - resetComponent(crate, RagiumDataComponents.ITEM_CONTENT) + resetComponent(crate, RagiumDataComponents.ITEM) val key: HTMaterialKey = when (tier) { HTCrateTier.SMALL -> VanillaMaterialKeys.IRON diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumToolRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumToolRecipeProvider.kt index 373fd4399..aa4a45c30 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumToolRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumToolRecipeProvider.kt @@ -239,7 +239,7 @@ object RagiumToolRecipeProvider : HTRecipeProvider.Direct() { setCategory(CraftingBookCategory.EQUIPMENT) } - resetComponent(RagiumItems.TELEPORT_KEY, RagiumDataComponents.FLUID_CONTENT, RagiumDataComponents.TELEPORT_POS) + resetComponent(RagiumItems.TELEPORT_KEY, RagiumDataComponents.FLUID, RagiumDataComponents.TELEPORT_POS) // Eldritch HTShapedRecipeBuilder .create(RagiumItems.ELDRITCH_EGG, 4) diff --git a/src/main/kotlin/hiiragi283/ragium/client/event/RagiumTooltipHandler.kt b/src/main/kotlin/hiiragi283/ragium/client/event/RagiumTooltipHandler.kt index 9ea5601f1..2fb361dca 100644 --- a/src/main/kotlin/hiiragi283/ragium/client/event/RagiumTooltipHandler.kt +++ b/src/main/kotlin/hiiragi283/ragium/client/event/RagiumTooltipHandler.kt @@ -2,7 +2,7 @@ package hiiragi283.ragium.client.event import com.mojang.datafixers.util.Either import hiiragi283.ragium.api.RagiumAPI -import hiiragi283.ragium.api.item.component.HTItemContents +import hiiragi283.ragium.api.storage.attachments.HTAttachedItems import hiiragi283.ragium.api.text.HTTranslation import hiiragi283.ragium.api.text.RagiumTranslation import hiiragi283.ragium.api.upgrade.HTUpgradeHelper @@ -73,7 +73,7 @@ object RagiumTooltipHandler { @SubscribeEvent fun gatherClientComponents(event: RenderTooltipEvent.GatherComponents) { val stack: ItemStack = event.itemStack - val contents: HTItemContents = stack.get(RagiumDataComponents.ITEM_CONTENT) ?: return + val contents: HTAttachedItems = stack.get(RagiumDataComponents.ITEM) ?: return contents.indices .mapNotNull(contents::get) .map(::HTItemTooltipContent) diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTBlockEntity.kt index 5da0fc383..47de978b6 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTBlockEntity.kt @@ -4,9 +4,6 @@ import hiiragi283.ragium.api.RagiumConst import hiiragi283.ragium.api.RagiumPlatform import hiiragi283.ragium.api.block.HTBlockWithEntity import hiiragi283.ragium.api.block.entity.HTOwnedBlockEntity -import hiiragi283.ragium.api.item.component.HTFluidContents -import hiiragi283.ragium.api.item.component.HTItemContents -import hiiragi283.ragium.api.item.component.HTStackContents import hiiragi283.ragium.api.registry.impl.HTDeferredBlockEntityType import hiiragi283.ragium.api.serialization.component.HTComponentInput import hiiragi283.ragium.api.serialization.value.HTValueInput @@ -14,6 +11,9 @@ import hiiragi283.ragium.api.serialization.value.HTValueOutput import hiiragi283.ragium.api.stack.ImmutableFluidStack import hiiragi283.ragium.api.stack.ImmutableItemStack import hiiragi283.ragium.api.storage.HTHandlerProvider +import hiiragi283.ragium.api.storage.attachments.HTAttachedEnergy +import hiiragi283.ragium.api.storage.attachments.HTAttachedFluids +import hiiragi283.ragium.api.storage.attachments.HTAttachedItems import hiiragi283.ragium.api.storage.energy.HTEnergyBattery import hiiragi283.ragium.api.storage.energy.HTEnergyHandler import hiiragi283.ragium.api.storage.fluid.HTFluidHandler @@ -302,7 +302,7 @@ abstract class HTBlockEntity(val blockHolder: Holder, pos: BlockPos, stat /** * @see mekanism.common.tile.base.TileEntityMekanism.applyFluidTanks */ - fun applyFluidTanks(containers: List, contents: HTFluidContents) { + fun applyFluidTanks(containers: List, contents: HTAttachedFluids) { for (i: Int in contents.indices) { val stack: ImmutableFluidStack? = contents[i] (containers.getOrNull(i) as? HTBasicFluidTank)?.setStackUnchecked(stack, true) @@ -312,10 +312,10 @@ abstract class HTBlockEntity(val blockHolder: Holder, pos: BlockPos, stat /** * @see mekanism.common.tile.base.TileEntityMekanism.collectFluidTanks */ - fun collectFluidTanks(containers: List): HTFluidContents? = containers + fun collectFluidTanks(containers: List): HTAttachedFluids? = containers .map(HTFluidTank::getStack) - .let(HTStackContents.Companion::fromNullable) - .takeUnless(HTFluidContents::isEmpty) + .let(::HTAttachedFluids) + .takeUnless(HTAttachedFluids::isEmpty) // Energy @@ -336,14 +336,20 @@ abstract class HTBlockEntity(val blockHolder: Holder, pos: BlockPos, stat /** * @see mekanism.common.tile.base.TileEntityMekanism.applyEnergyContainers */ - fun applyEnergyBattery(containers: List, value: Int) { - (containers.first() as? HTBasicEnergyBattery)?.setAmountUnchecked(value, true) + fun applyEnergyBattery(containers: List, contents: HTAttachedEnergy) { + for (i: Int in contents.indices) { + val amount: Int = contents[i] + (containers.getOrNull(i) as? HTBasicEnergyBattery)?.setAmountUnchecked(amount, true) + } } /** * @see mekanism.common.tile.base.TileEntityMekanism.collectEnergyContainers */ - fun collectEnergyBattery(containers: List): Int? = containers.firstOrNull()?.getAmount() + fun collectEnergyBattery(containers: List): HTAttachedEnergy? = containers + .map(HTEnergyBattery::getAmount) + .let(::HTAttachedEnergy) + .takeUnless(HTAttachedEnergy::isEmpty) // Item @@ -364,7 +370,7 @@ abstract class HTBlockEntity(val blockHolder: Holder, pos: BlockPos, stat /** * @see mekanism.common.tile.base.TileEntityMekanism.applyInventorySlots */ - fun applyItemSlots(containers: List, contents: HTItemContents) { + fun applyItemSlots(containers: List, contents: HTAttachedItems) { for (i: Int in contents.indices) { val stack: ImmutableItemStack? = contents[i] (containers.getOrNull(i) as? HTBasicItemSlot)?.setStackUnchecked(stack, true) @@ -374,8 +380,8 @@ abstract class HTBlockEntity(val blockHolder: Holder, pos: BlockPos, stat /** * @see mekanism.common.tile.base.TileEntityMekanism.collectInventorySlots */ - fun collectItemSlots(containers: List): HTItemContents? = containers + fun collectItemSlots(containers: List): HTAttachedItems? = containers .map(HTItemSlot::getStack) - .let(HTStackContents.Companion::fromNullable) - .takeUnless(HTItemContents::isEmpty) + .let(::HTAttachedItems) + .takeUnless(HTAttachedItems::isEmpty) } diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/component/HTMachineUpgradeComponent.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/component/HTMachineUpgradeComponent.kt index 6f392ab47..f49ee0562 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/component/HTMachineUpgradeComponent.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/component/HTMachineUpgradeComponent.kt @@ -1,12 +1,11 @@ package hiiragi283.ragium.common.block.entity.component import hiiragi283.ragium.api.function.HTPredicates -import hiiragi283.ragium.api.item.component.HTItemContents -import hiiragi283.ragium.api.item.component.HTStackContents import hiiragi283.ragium.api.serialization.component.HTComponentInput import hiiragi283.ragium.api.serialization.value.HTValueInput import hiiragi283.ragium.api.serialization.value.HTValueOutput import hiiragi283.ragium.api.stack.ImmutableItemStack +import hiiragi283.ragium.api.storage.attachments.HTAttachedItems import hiiragi283.ragium.api.storage.item.HTItemSlot import hiiragi283.ragium.api.upgrade.HTSlotUpgradeHandler import hiiragi283.ragium.api.util.HTContentListener @@ -48,7 +47,7 @@ class HTMachineUpgradeComponent(private val owner: HTBlockEntity) : } override fun applyComponents(input: HTComponentInput) { - input.use(RagiumDataComponents.MACHINE_UPGRADES) { contents: HTItemContents -> + input.use(RagiumDataComponents.MACHINE_UPGRADES) { contents: HTAttachedItems -> for (i: Int in contents.indices) { upgradeSlots.getOrNull(i)?.setStackUnchecked(contents[i]) } @@ -60,7 +59,7 @@ class HTMachineUpgradeComponent(private val owner: HTBlockEntity) : RagiumDataComponents.MACHINE_UPGRADES, upgradeSlots .map(HTBasicItemSlot::getStack) - .let(HTStackContents.Companion::fromNullable), + .let(::HTAttachedItems), ) } // HTSlotUpgradeHandler // diff --git a/src/main/kotlin/hiiragi283/ragium/common/event/RagiumRuntimeHandler.kt b/src/main/kotlin/hiiragi283/ragium/common/event/RagiumRuntimeHandler.kt index 05adb6eab..7b41aad9e 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/event/RagiumRuntimeHandler.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/event/RagiumRuntimeHandler.kt @@ -161,7 +161,7 @@ object RagiumRuntimeHandler { val result: ItemStack = event.crafting if (result.isEmpty) return // 中身のアイテムをプレイヤーに渡す - result.remove(RagiumDataComponents.ITEM_CONTENT)?.forEach { stack: ImmutableItemStack? -> + result.remove(RagiumDataComponents.ITEM)?.forEach { stack: ImmutableItemStack? -> HTItemDropHelper.giveStackTo(event.entity, stack) } } diff --git a/src/main/kotlin/hiiragi283/ragium/common/item/block/HTCrateBlockItem.kt b/src/main/kotlin/hiiragi283/ragium/common/item/block/HTCrateBlockItem.kt index 10e9d74cc..c7188e20e 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/item/block/HTCrateBlockItem.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/item/block/HTCrateBlockItem.kt @@ -2,8 +2,8 @@ package hiiragi283.ragium.common.item.block import hiiragi283.ragium.api.block.attribute.getAttributeTier import hiiragi283.ragium.api.item.HTDescriptionBlockItem -import hiiragi283.ragium.api.item.component.HTItemContents import hiiragi283.ragium.api.stack.ImmutableItemStack +import hiiragi283.ragium.api.storage.attachments.HTAttachedItems import hiiragi283.ragium.common.block.storage.HTCrateBlock import hiiragi283.ragium.common.tier.HTCrateTier import hiiragi283.ragium.setup.RagiumDataComponents @@ -16,7 +16,7 @@ class HTCrateBlockItem(block: HTCrateBlock, properties: Properties) : HTDescript override fun onDestroyed(itemEntity: ItemEntity, damageSource: DamageSource) { val stack: ItemStack = itemEntity.item - val contents: HTItemContents = stack.get(RagiumDataComponents.ITEM_CONTENT) ?: return + val contents: HTAttachedItems = stack.get(RagiumDataComponents.ITEM) ?: return contents .asSequence() .filterNotNull() diff --git a/src/main/kotlin/hiiragi283/ragium/common/item/block/HTTankBlockItem.kt b/src/main/kotlin/hiiragi283/ragium/common/item/block/HTTankBlockItem.kt index d5c006e5b..362242985 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/item/block/HTTankBlockItem.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/item/block/HTTankBlockItem.kt @@ -3,10 +3,10 @@ package hiiragi283.ragium.common.item.block import hiiragi283.ragium.api.capability.HTFluidCapabilities import hiiragi283.ragium.api.item.HTDescriptionBlockItem import hiiragi283.ragium.api.item.HTSubCreativeTabContents -import hiiragi283.ragium.api.item.component.HTItemContents import hiiragi283.ragium.api.item.createItemStack import hiiragi283.ragium.api.registry.HTItemHolderLike import hiiragi283.ragium.api.stack.ImmutableFluidStack +import hiiragi283.ragium.api.storage.attachments.HTAttachedItems import hiiragi283.ragium.api.storage.fluid.HTFluidView import hiiragi283.ragium.api.text.RagiumTranslation import hiiragi283.ragium.api.upgrade.HTUpgradeHelper @@ -71,7 +71,7 @@ class HTTankBlockItem(block: HTTankBlock, properties: Properties) : createItemStack( baseItem, RagiumDataComponents.MACHINE_UPGRADES, - HTItemContents.fromNullable(listOf(RagiumItems.CREATIVE_UPGRADE.toImmutableStack(1))), + HTAttachedItems(listOf(RagiumItems.CREATIVE_UPGRADE.toImmutableStack(1))), ).let(consumer::accept) } } diff --git a/src/main/kotlin/hiiragi283/ragium/common/storage/HTCapabilityCodec.kt b/src/main/kotlin/hiiragi283/ragium/common/storage/HTCapabilityCodec.kt index bcbbac22c..398b9dabc 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/storage/HTCapabilityCodec.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/storage/HTCapabilityCodec.kt @@ -2,11 +2,13 @@ package hiiragi283.ragium.common.storage import hiiragi283.ragium.api.RagiumConst import hiiragi283.ragium.api.function.andThen -import hiiragi283.ragium.api.item.component.HTFluidContents -import hiiragi283.ragium.api.item.component.HTItemContents import hiiragi283.ragium.api.serialization.value.HTValueInput import hiiragi283.ragium.api.serialization.value.HTValueOutput import hiiragi283.ragium.api.serialization.value.HTValueSerializable +import hiiragi283.ragium.api.storage.attachments.HTAttachedContainers +import hiiragi283.ragium.api.storage.attachments.HTAttachedEnergy +import hiiragi283.ragium.api.storage.attachments.HTAttachedFluids +import hiiragi283.ragium.api.storage.attachments.HTAttachedItems import hiiragi283.ragium.api.storage.energy.HTEnergyBattery import hiiragi283.ragium.api.storage.fluid.HTFluidTank import hiiragi283.ragium.api.storage.item.HTItemSlot @@ -15,23 +17,26 @@ import hiiragi283.ragium.setup.RagiumDataComponents import net.minecraft.core.Direction import net.minecraft.core.component.DataComponentMap import net.minecraft.core.component.DataComponentType +import net.minecraft.world.item.ItemStack /** * @see mekanism.common.attachments.containers.ContainerType */ -class HTCapabilityCodec( - private val component: DataComponentType, +class HTCapabilityCodec>( + private val component: DataComponentType, + private val attachedFactory: (Int) -> ATTACHED, private val containerTag: String, private val containerKey: String, private val blockEntityGetter: (HTBlockEntity, Direction?) -> List, private val canHandle: (HTBlockEntity) -> Boolean, - private val copyTo: (HTBlockEntity, List, COMPONENT) -> Unit, - private val copyFrom: (HTBlockEntity, List) -> COMPONENT?, + private val copyTo: (HTBlockEntity, List, ATTACHED) -> Unit, + private val copyFrom: (HTBlockEntity, List) -> ATTACHED?, ) { companion object { @JvmField - val ITEM: HTCapabilityCodec = HTCapabilityCodec( - RagiumDataComponents.ITEM_CONTENT, + val ITEM: HTCapabilityCodec = HTCapabilityCodec( + RagiumDataComponents.ITEM, + HTAttachedItems::create, RagiumConst.ITEMS, RagiumConst.SLOT, HTBlockEntity::getItemSlots, @@ -41,8 +46,9 @@ class HTCapabilityCodec( ) @JvmField - val ENERGY: HTCapabilityCodec = HTCapabilityCodec( + val ENERGY: HTCapabilityCodec = HTCapabilityCodec( RagiumDataComponents.ENERGY, + HTAttachedEnergy::create, RagiumConst.BATTERIES, RagiumConst.SLOT, HTBlockEntity::getEnergyBattery.andThen(::listOfNotNull), @@ -52,8 +58,9 @@ class HTCapabilityCodec( ) @JvmField - val FLUID: HTCapabilityCodec = HTCapabilityCodec( - RagiumDataComponents.FLUID_CONTENT, + val FLUID: HTCapabilityCodec = HTCapabilityCodec( + RagiumDataComponents.FLUID, + HTAttachedFluids::create, RagiumConst.FLUIDS, RagiumConst.TANK, HTBlockEntity::getFluidTanks, @@ -66,6 +73,18 @@ class HTCapabilityCodec( val TYPES: List> = listOf(ITEM, ENERGY, FLUID) } + // Component // + + fun getOrCreate(stack: ItemStack, size: Int): ATTACHED = stack.getOrDefault(component, attachedFactory(size)) + + fun updateAttached(stack: ItemStack, attached: ATTACHED) { + if (attached.isEmpty()) { + stack.remove(component) + } else { + stack.set(component, attached) + } + } + // Save & Read // fun saveTo(output: HTValueOutput, blockEntity: HTBlockEntity) { @@ -109,8 +128,8 @@ class HTCapabilityCodec( /** * @see mekanism.common.attachments.containers.ContainerType.copyToTile */ - fun copyTo(blockEntity: HTBlockEntity, getter: (DataComponentType) -> COMPONENT?) { - val component: COMPONENT = getter(this.component) ?: return + fun copyTo(blockEntity: HTBlockEntity, getter: (DataComponentType) -> ATTACHED?) { + val component: ATTACHED = getter(this.component) ?: return copyTo(blockEntity, getContainers(blockEntity), component) } @@ -120,7 +139,7 @@ class HTCapabilityCodec( fun copyFrom(blockEntity: HTBlockEntity, builder: DataComponentMap.Builder) { val containers: List = getContainers(blockEntity) if (!containers.isEmpty()) { - val component: COMPONENT = copyFrom(blockEntity, containers) ?: return + val component: ATTACHED = copyFrom(blockEntity, containers) ?: return builder.set(this.component, component) } } diff --git a/src/main/kotlin/hiiragi283/ragium/common/storage/attachments/HTComponentHandler.kt b/src/main/kotlin/hiiragi283/ragium/common/storage/attachments/HTComponentHandler.kt new file mode 100644 index 000000000..160a7c555 --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/storage/attachments/HTComponentHandler.kt @@ -0,0 +1,77 @@ +package hiiragi283.ragium.common.storage.attachments + +import hiiragi283.ragium.api.serialization.value.HTValueSerializable +import hiiragi283.ragium.api.storage.attachments.HTAttachedContainers +import hiiragi283.ragium.common.storage.HTCapabilityCodec +import net.minecraft.world.item.ItemStack + +/** + * @see mekanism.common.attachments.containers.ComponentBackedHandler + */ +abstract class HTComponentHandler>( + protected val attachedTo: ItemStack, + override val size: Int, + private val containerFactory: ContainerFactory, +) : AbstractList() { + fun interface ContainerFactory { + fun create(context: ContainerContext): CONTAINER + + fun create(attachedTo: ItemStack, size: Int, index: Int): CONTAINER = create(ContainerContext(attachedTo, size, index)) + } + + private lateinit var containers: MutableList + private var notInitialized: Int = -1 + + protected abstract fun capabilityCodec(): HTCapabilityCodec + + protected fun getAttached(): ATTACHED = capabilityCodec().getOrCreate(attachedTo, size) + + protected fun getContents(index: Int): TYPE? = getAttached().getOrNull(index) + + fun getContainers(): List { + val containers: List = getOrCreateContainers() + var i = 0 + val size: Int = containers.size + while (notInitialized > 0 && i < size) { + if (containers[i] == null) { + initContainer(i) + } + i++ + } + return LazyList(containers) + } + + private fun getOrCreateContainers(): MutableList { + if (!::containers.isInitialized) { + containers = MutableList(size) { null } + notInitialized = size + } + return containers + } + + private fun initContainer(index: Int): CONTAINER { + val container: CONTAINER = containerFactory.create(attachedTo, size, index) + getOrCreateContainers()[index] = container + notInitialized-- + return container + } + + protected fun getContainer(index: Int): CONTAINER = when (val container: CONTAINER? = getOrCreateContainers()[index]) { + null -> initContainer(index) + else -> container + } + + override fun get(index: Int): CONTAINER = getContainer(index) + + @JvmRecord + data class ContainerContext(val attachedTo: ItemStack, val size: Int, val index: Int) + + /** + * nullableな[List]を遅延評価でnot-nullに変換する[List]の実装 + */ + private class LazyList(val delegate: List) : AbstractList() { + override val size: Int get() = delegate.size + + override fun get(index: Int): T = delegate[index] ?: error("Element at $index is not initialized") + } +} diff --git a/src/main/kotlin/hiiragi283/ragium/common/storage/attachments/HTComponentSlot.kt b/src/main/kotlin/hiiragi283/ragium/common/storage/attachments/HTComponentSlot.kt new file mode 100644 index 000000000..7e4a40b89 --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/storage/attachments/HTComponentSlot.kt @@ -0,0 +1,48 @@ +package hiiragi283.ragium.common.storage.attachments + +import hiiragi283.ragium.api.serialization.value.HTValueSerializable +import hiiragi283.ragium.api.stack.ImmutableStack +import hiiragi283.ragium.api.storage.HTStackSlot +import hiiragi283.ragium.api.storage.HTStorageAccess +import hiiragi283.ragium.api.storage.attachments.HTAttachedContainers +import hiiragi283.ragium.api.util.HTContentListener +import hiiragi283.ragium.common.storage.HTCapabilityCodec +import net.minecraft.world.item.ItemStack +import java.util.function.BiPredicate +import java.util.function.Predicate + +abstract class HTComponentSlot, ATTACHED : HTAttachedContainers>( + protected val attachedTo: ItemStack, + private val size: Int, + protected val slot: Int, + protected val capacity: Int, + private val canExtract: BiPredicate, + private val canInsert: BiPredicate, + private val filter: Predicate, +) : HTStackSlot.Basic(), + HTContentListener.Empty, + HTValueSerializable.Empty { + protected fun getAttached(): ATTACHED = capabilityCodec().getOrCreate(attachedTo, size) + + protected abstract fun capabilityCodec(): HTCapabilityCodec<*, ATTACHED> + + final override fun isValid(stack: STACK): Boolean = this.filter.test(stack) + + final override fun isStackValidForInsert(stack: STACK, access: HTStorageAccess): Boolean = + super.isStackValidForInsert(stack, access) && this.canInsert.test(stack, access) + + final override fun canStackExtract(stack: STACK, access: HTStorageAccess): Boolean = + super.canStackExtract(stack, access) && this.canExtract.test(stack, access) + + override fun getStack(): STACK? = getAttached().getOrNull(slot) + + override fun getCapacity(stack: STACK?): Int = capacity + + final override fun setStack(stack: STACK?) { + capabilityCodec().updateAttached(attachedTo, getAttached().with(slot, stack)) + } + + override fun updateAmount(stack: STACK, amount: Int) { + setStack(stack.copyWithAmount(amount)) + } +} diff --git a/src/main/kotlin/hiiragi283/ragium/common/storage/energy/HTComponentEnergyHandler.kt b/src/main/kotlin/hiiragi283/ragium/common/storage/energy/HTComponentEnergyHandler.kt index 876a19c5a..bbd06504b 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/storage/energy/HTComponentEnergyHandler.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/storage/energy/HTComponentEnergyHandler.kt @@ -1,13 +1,21 @@ package hiiragi283.ragium.common.storage.energy +import hiiragi283.ragium.api.storage.attachments.HTAttachedEnergy import hiiragi283.ragium.api.storage.energy.HTEnergyBattery import hiiragi283.ragium.api.storage.energy.HTEnergyHandler +import hiiragi283.ragium.common.storage.HTCapabilityCodec +import hiiragi283.ragium.common.storage.attachments.HTComponentHandler import net.minecraft.core.Direction import net.minecraft.world.item.ItemStack /** - * [HTEnergyHandler]に基づいたコンポーネント向けの実装 + * [HTEnergyBattery]に基づいたコンポーネント向けの実装 + * @see mekanism.common.attachments.containers.energy.ComponentBackedEnergyHandler */ -class HTComponentEnergyHandler(private val parent: ItemStack, private val battery: HTEnergyBattery) : HTEnergyHandler { - override fun getEnergyBattery(side: Direction?): HTEnergyBattery = battery +class HTComponentEnergyHandler(attachedTo: ItemStack, size: Int, containerFactory: ContainerFactory) : + HTComponentHandler(attachedTo, size, containerFactory), + HTEnergyHandler { + override fun capabilityCodec(): HTCapabilityCodec = HTCapabilityCodec.ENERGY + + override fun getEnergyBattery(side: Direction?): HTEnergyBattery? = getContainers().firstOrNull() } diff --git a/src/main/kotlin/hiiragi283/ragium/common/storage/energy/battery/HTComponentEnergyBattery.kt b/src/main/kotlin/hiiragi283/ragium/common/storage/energy/battery/HTComponentEnergyBattery.kt index 3877a867e..1f413bbe3 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/storage/energy/battery/HTComponentEnergyBattery.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/storage/energy/battery/HTComponentEnergyBattery.kt @@ -3,10 +3,11 @@ package hiiragi283.ragium.common.storage.energy.battery import hiiragi283.ragium.api.function.HTPredicates import hiiragi283.ragium.api.serialization.value.HTValueSerializable import hiiragi283.ragium.api.storage.HTStorageAccess +import hiiragi283.ragium.api.storage.attachments.HTAttachedEnergy import hiiragi283.ragium.api.storage.energy.HTEnergyBattery import hiiragi283.ragium.api.util.HTContentListener -import hiiragi283.ragium.setup.RagiumDataComponents -import net.minecraft.core.component.DataComponentType +import hiiragi283.ragium.common.storage.HTCapabilityCodec +import hiiragi283.ragium.common.storage.attachments.HTComponentHandler import net.minecraft.world.item.ItemStack import java.util.function.Predicate @@ -14,7 +15,9 @@ import java.util.function.Predicate * @see mekanism.common.attachments.containers.energy.ComponentBackedEnergyContainer */ open class HTComponentEnergyBattery( - private val parent: ItemStack, + private val attachedTo: ItemStack, + private val size: Int, + private val slot: Int, private val capacity: Int, protected val canExtract: Predicate, protected val canInsert: Predicate, @@ -24,28 +27,25 @@ open class HTComponentEnergyBattery( companion object { @JvmStatic fun create( - parent: ItemStack, + context: HTComponentHandler.ContainerContext, capacity: Int, canExtract: Predicate = HTPredicates.alwaysTrue(), canInsert: Predicate = HTPredicates.alwaysTrue(), - ): HTComponentEnergyBattery = HTComponentEnergyBattery(parent, capacity, canExtract, canInsert) + ): HTComponentEnergyBattery = + HTComponentEnergyBattery(context.attachedTo, context.size, context.index, capacity, canExtract, canInsert) } - protected val component: DataComponentType get() = RagiumDataComponents.ENERGY + protected fun getAttached(): HTAttachedEnergy = HTCapabilityCodec.ENERGY.getOrCreate(attachedTo, size) override fun setAmount(amount: Int) { - if (amount > 0) { - parent.set(component, amount) - } else { - parent.remove(component) - } + HTCapabilityCodec.ENERGY.updateAttached(attachedTo, getAttached().with(slot, amount)) } final override fun canInsert(access: HTStorageAccess): Boolean = this.canInsert.test(access) final override fun canExtract(access: HTStorageAccess): Boolean = this.canExtract.test(access) - override fun getAmount(): Int = parent.getOrDefault(component, 0) + override fun getAmount(): Int = getAttached().getOrNull(slot) ?: 0 override fun getCapacity(): Int = capacity } diff --git a/src/main/kotlin/hiiragi283/ragium/common/storage/fluid/HTComponentFluidHandler.kt b/src/main/kotlin/hiiragi283/ragium/common/storage/fluid/HTComponentFluidHandler.kt index c12af49f4..da2bad3bd 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/storage/fluid/HTComponentFluidHandler.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/storage/fluid/HTComponentFluidHandler.kt @@ -1,19 +1,33 @@ package hiiragi283.ragium.common.storage.fluid +import hiiragi283.ragium.api.stack.ImmutableFluidStack +import hiiragi283.ragium.api.storage.attachments.HTAttachedFluids import hiiragi283.ragium.api.storage.fluid.HTFluidHandler import hiiragi283.ragium.api.storage.fluid.HTFluidTank +import hiiragi283.ragium.common.storage.HTCapabilityCodec +import hiiragi283.ragium.common.storage.attachments.HTComponentHandler import net.minecraft.core.Direction import net.minecraft.world.item.ItemStack +import net.neoforged.neoforge.fluids.FluidStack import net.neoforged.neoforge.fluids.capability.IFluidHandlerItem /** * [HTFluidHandler]に基づいたコンポーネント向けの実装 * @see mekanism.common.attachments.containers.fluid.ComponentBackedFluidHandler */ -class HTComponentFluidHandler(private val parent: ItemStack, private val tank: HTFluidTank) : - IFluidHandlerItem, - HTFluidHandler { - override fun getContainer(): ItemStack = parent +class HTComponentFluidHandler(attachedTo: ItemStack, size: Int, containerFactory: ContainerFactory) : + HTComponentHandler(attachedTo, size, containerFactory), + HTFluidHandler, + IFluidHandlerItem { + override fun capabilityCodec(): HTCapabilityCodec = HTCapabilityCodec.FLUID - override fun getFluidTanks(side: Direction?): List = listOf(tank) + override fun getFluidTanks(side: Direction?): List = getContainers() + + override fun getFluidTank(tank: Int, side: Direction?): HTFluidTank = getContainer(tank) + + override fun getTanks(side: Direction?): Int = size + + override fun getFluidInTank(tank: Int, side: Direction?): FluidStack = getContents(tank)?.unwrap() ?: FluidStack.EMPTY + + override fun getContainer(): ItemStack = attachedTo } diff --git a/src/main/kotlin/hiiragi283/ragium/common/storage/fluid/tank/HTComponentFluidTank.kt b/src/main/kotlin/hiiragi283/ragium/common/storage/fluid/tank/HTComponentFluidTank.kt index 8a3a19b2c..dc72c4fd7 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/storage/fluid/tank/HTComponentFluidTank.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/storage/fluid/tank/HTComponentFluidTank.kt @@ -1,79 +1,41 @@ package hiiragi283.ragium.common.storage.fluid.tank import hiiragi283.ragium.api.function.HTPredicates -import hiiragi283.ragium.api.item.component.HTFluidContents -import hiiragi283.ragium.api.item.component.HTStackContents -import hiiragi283.ragium.api.serialization.value.HTValueSerializable import hiiragi283.ragium.api.stack.ImmutableFluidStack import hiiragi283.ragium.api.storage.HTStorageAccess +import hiiragi283.ragium.api.storage.attachments.HTAttachedFluids import hiiragi283.ragium.api.storage.fluid.HTFluidTank -import hiiragi283.ragium.api.util.HTContentListener -import hiiragi283.ragium.api.util.wrapOptional -import hiiragi283.ragium.setup.RagiumDataComponents -import net.minecraft.core.component.DataComponentType +import hiiragi283.ragium.common.storage.HTCapabilityCodec +import hiiragi283.ragium.common.storage.attachments.HTComponentHandler +import hiiragi283.ragium.common.storage.attachments.HTComponentSlot import net.minecraft.world.item.ItemStack -import java.util.Optional import java.util.function.BiPredicate import java.util.function.Predicate /** * @see mekanism.common.attachments.containers.fluid.ComponentBackedFluidTank */ -open class HTComponentFluidTank( - protected val parent: ItemStack, - private val slot: Int, - private val capacity: Int, - private val canExtract: BiPredicate, - private val canInsert: BiPredicate, - private val filter: Predicate, -) : HTFluidTank.Basic(), - HTContentListener.Empty, - HTValueSerializable.Empty { +class HTComponentFluidTank( + attachedTo: ItemStack, + size: Int, + slot: Int, + capacity: Int, + canExtract: BiPredicate, + canInsert: BiPredicate, + filter: Predicate, +) : HTComponentSlot(attachedTo, size, slot, capacity, canExtract, canInsert, filter), + HTFluidTank { companion object { @JvmStatic fun create( - parent: ItemStack, - slot: Int, + context: HTComponentHandler.ContainerContext, capacity: Int, canExtract: BiPredicate = HTPredicates.alwaysTrueBi(), canInsert: BiPredicate = HTPredicates.alwaysTrueBi(), filter: Predicate = HTPredicates.alwaysTrue(), - ): HTComponentFluidTank = HTComponentFluidTank(parent, slot, capacity, canExtract, canInsert, filter) + ): HTComponentFluidTank = + HTComponentFluidTank(context.attachedTo, context.size, context.index, capacity, canExtract, canInsert, filter) } - protected val component: DataComponentType get() = RagiumDataComponents.FLUID_CONTENT - - protected fun getContents(): HTFluidContents? = parent.get(component) - - final override fun isValid(stack: ImmutableFluidStack): Boolean = this.filter.test(stack) - - final override fun isStackValidForInsert(stack: ImmutableFluidStack, access: HTStorageAccess): Boolean = - super.isStackValidForInsert(stack, access) && this.canInsert.test(stack, access) - - final override fun canStackExtract(stack: ImmutableFluidStack, access: HTStorageAccess): Boolean = - super.canStackExtract(stack, access) && this.canExtract.test(stack, access) - - final override fun getStack(): ImmutableFluidStack? = getContents()?.getOrNull(slot) - - override fun getCapacity(stack: ImmutableFluidStack?): Int = capacity - - final override fun setStack(stack: ImmutableFluidStack?) { - var contents: HTFluidContents? = getContents() - if (contents == null) { - parent.remove(component) - } else { - val items: MutableList> = contents.unwrap() - items[slot] = stack.wrapOptional() - contents = HTStackContents.fromOptional(items) - if (contents.isEmpty()) { - parent.remove(component) - } else { - parent.set(component, contents) - } - } - } - - override fun updateAmount(stack: ImmutableFluidStack, amount: Int) { - setStack(stack.copyWithAmount(amount)) - } + override fun capabilityCodec(): HTCapabilityCodec<*, HTAttachedFluids> = HTCapabilityCodec.FLUID } diff --git a/src/main/kotlin/hiiragi283/ragium/common/storage/item/HTComponentItemHandler.kt b/src/main/kotlin/hiiragi283/ragium/common/storage/item/HTComponentItemHandler.kt index a1816334f..4f31bb006 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/storage/item/HTComponentItemHandler.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/storage/item/HTComponentItemHandler.kt @@ -1,13 +1,28 @@ package hiiragi283.ragium.common.storage.item +import hiiragi283.ragium.api.stack.ImmutableItemStack +import hiiragi283.ragium.api.storage.attachments.HTAttachedItems import hiiragi283.ragium.api.storage.item.HTItemHandler import hiiragi283.ragium.api.storage.item.HTItemSlot +import hiiragi283.ragium.common.storage.HTCapabilityCodec +import hiiragi283.ragium.common.storage.attachments.HTComponentHandler import net.minecraft.core.Direction +import net.minecraft.world.item.ItemStack /** * [HTItemHandler]に基づいたコンポーネント向けの実装 * @see mekanism.common.attachments.containers.item.ComponentBackedItemHandler */ -class HTComponentItemHandler(private val slots: List) : HTItemHandler { - override fun getItemSlots(side: Direction?): List = slots +class HTComponentItemHandler(attachedTo: ItemStack, size: Int, containerFactory: ContainerFactory) : + HTComponentHandler(attachedTo, size, containerFactory), + HTItemHandler { + override fun capabilityCodec(): HTCapabilityCodec = HTCapabilityCodec.ITEM + + override fun getItemSlots(side: Direction?): List = getContainers() + + override fun getItemSlot(slot: Int, side: Direction?): HTItemSlot = getContainer(slot) + + override fun getSlots(side: Direction?): Int = size + + override fun getStackInSlot(slot: Int, side: Direction?): ItemStack = getContents(slot)?.unwrap() ?: ItemStack.EMPTY } diff --git a/src/main/kotlin/hiiragi283/ragium/common/storage/item/slot/HTComponentItemSlot.kt b/src/main/kotlin/hiiragi283/ragium/common/storage/item/slot/HTComponentItemSlot.kt index 7c5b454ef..fb9a202c7 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/storage/item/slot/HTComponentItemSlot.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/storage/item/slot/HTComponentItemSlot.kt @@ -1,74 +1,42 @@ package hiiragi283.ragium.common.storage.item.slot -import hiiragi283.ragium.api.RagiumConst import hiiragi283.ragium.api.function.HTPredicates import hiiragi283.ragium.api.function.andThen -import hiiragi283.ragium.api.item.component.HTItemContents -import hiiragi283.ragium.api.item.component.HTStackContents -import hiiragi283.ragium.api.serialization.value.HTValueSerializable import hiiragi283.ragium.api.stack.ImmutableItemStack import hiiragi283.ragium.api.storage.HTStorageAccess +import hiiragi283.ragium.api.storage.attachments.HTAttachedItems import hiiragi283.ragium.api.storage.item.HTItemSlot -import hiiragi283.ragium.api.util.HTContentListener -import hiiragi283.ragium.api.util.wrapOptional -import hiiragi283.ragium.setup.RagiumDataComponents -import net.minecraft.core.component.DataComponentType +import hiiragi283.ragium.common.storage.HTCapabilityCodec +import hiiragi283.ragium.common.storage.attachments.HTComponentHandler +import hiiragi283.ragium.common.storage.attachments.HTComponentSlot import net.minecraft.world.item.ItemStack -import java.util.Optional import java.util.function.BiPredicate import java.util.function.Predicate /** * @see mekanism.common.attachments.containers.item.ComponentBackedInventorySlot */ -open class HTComponentItemSlot( - private val parent: ItemStack, - private val slot: Int, - private val canExtract: BiPredicate, - private val canInsert: BiPredicate, - private val filter: Predicate, -) : HTItemSlot.Basic(), - HTContentListener.Empty, - HTValueSerializable.Empty { +class HTComponentItemSlot( + attachedTo: ItemStack, + size: Int, + slot: Int, + capacity: Int, + canExtract: BiPredicate, + canInsert: BiPredicate, + filter: Predicate, +) : HTComponentSlot(attachedTo, size, slot, capacity, canExtract, canInsert, filter), + HTItemSlot { companion object { @JvmStatic fun create( - parent: ItemStack, - slot: Int, + context: HTComponentHandler.ContainerContext, + capacity: Int, canExtract: BiPredicate = HTPredicates.alwaysTrueBi(), canInsert: BiPredicate = HTPredicates.alwaysTrueBi(), filter: Predicate = Predicate(ImmutableItemStack::unwrap.andThen(ItemStack::canFitInsideContainerItems)), - ): HTComponentItemSlot = HTComponentItemSlot(parent, slot, canExtract, canInsert, filter) + ): HTComponentItemSlot = + HTComponentItemSlot(context.attachedTo, context.size, context.index, capacity, canExtract, canInsert, filter) } - protected val component: DataComponentType get() = RagiumDataComponents.ITEM_CONTENT - - protected fun getContents(): HTItemContents? = parent.get(component) - - final override fun isValid(stack: ImmutableItemStack): Boolean = this.filter.test(stack) - - final override fun isStackValidForInsert(stack: ImmutableItemStack, access: HTStorageAccess): Boolean = - super.isStackValidForInsert(stack, access) && this.canInsert.test(stack, access) - - final override fun canStackExtract(stack: ImmutableItemStack, access: HTStorageAccess): Boolean = - super.canStackExtract(stack, access) && this.canExtract.test(stack, access) - - final override fun getStack(): ImmutableItemStack? = getContents()?.getOrNull(slot) - - override fun getCapacity(stack: ImmutableItemStack?): Int = RagiumConst.ABSOLUTE_MAX_STACK_SIZE - - final override fun setStack(stack: ImmutableItemStack?) { - val contents: HTItemContents? = getContents() // TODO - if (contents.isNullOrEmpty()) { - parent.remove(component) - } else { - val items: MutableList> = contents.unwrap() - items[slot] = stack.wrapOptional() - parent.set(component, HTStackContents.fromOptional(items)) - } - } - - override fun updateAmount(stack: ImmutableItemStack, amount: Int) { - setStack(stack.copyWithAmount(amount)) - } + override fun capabilityCodec(): HTCapabilityCodec<*, HTAttachedItems> = HTCapabilityCodec.ITEM } diff --git a/src/main/kotlin/hiiragi283/ragium/common/upgrade/HTComponentUpgradeHandler.kt b/src/main/kotlin/hiiragi283/ragium/common/upgrade/HTComponentUpgradeHandler.kt index c814dba14..7a9fda68f 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/upgrade/HTComponentUpgradeHandler.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/upgrade/HTComponentUpgradeHandler.kt @@ -1,16 +1,15 @@ package hiiragi283.ragium.common.upgrade -import hiiragi283.ragium.api.stack.ImmutableComponentStack import hiiragi283.ragium.api.stack.ImmutableItemStack import hiiragi283.ragium.api.upgrade.HTUpgradeHandler import hiiragi283.ragium.setup.RagiumDataComponents import net.minecraft.world.item.ItemStack class HTComponentUpgradeHandler(private val parent: ItemStack) : HTUpgradeHandler { - private fun getComponent(): List = parent.get(RagiumDataComponents.MACHINE_UPGRADES) ?: listOf() + private fun getComponent(): Collection = parent.get(RagiumDataComponents.MACHINE_UPGRADES) ?: listOf() override fun getUpgrades(): List = getComponent().filterNotNull() override fun isValidUpgrade(upgrade: ImmutableItemStack, existing: List): Boolean = - existing.none { stack: ImmutableItemStack -> ImmutableComponentStack.matches(stack, upgrade) } + existing.none { stack: ImmutableItemStack -> ItemStack.isSameItemSameComponents(stack.unwrap(), upgrade.unwrap()) } } diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumDataComponents.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumDataComponents.kt index 761e1f44c..cef4e0698 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumDataComponents.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumDataComponents.kt @@ -2,13 +2,10 @@ package hiiragi283.ragium.setup import hiiragi283.ragium.api.RagiumAPI import hiiragi283.ragium.api.item.component.HTComponentUpgrade -import hiiragi283.ragium.api.item.component.HTFluidContents import hiiragi283.ragium.api.item.component.HTIntrinsicEnchantment -import hiiragi283.ragium.api.item.component.HTItemContents import hiiragi283.ragium.api.item.component.HTItemSoundEvent import hiiragi283.ragium.api.item.component.HTLootTicketTargets import hiiragi283.ragium.api.item.component.HTSpawnerMob -import hiiragi283.ragium.api.item.component.HTStackContents import hiiragi283.ragium.api.item.component.HTTeleportPos import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient import hiiragi283.ragium.api.registry.HTKeyOrTagEntry @@ -17,8 +14,9 @@ import hiiragi283.ragium.api.registry.impl.HTDeferredDataComponentRegister import hiiragi283.ragium.api.serialization.codec.BiCodec import hiiragi283.ragium.api.serialization.codec.BiCodecs import hiiragi283.ragium.api.serialization.codec.VanillaBiCodecs -import hiiragi283.ragium.api.stack.ImmutableFluidStack -import hiiragi283.ragium.api.stack.ImmutableItemStack +import hiiragi283.ragium.api.storage.attachments.HTAttachedEnergy +import hiiragi283.ragium.api.storage.attachments.HTAttachedFluids +import hiiragi283.ragium.api.storage.attachments.HTAttachedItems import hiiragi283.ragium.api.text.HTSimpleTranslation import hiiragi283.ragium.api.text.HTTranslation import net.minecraft.core.component.DataComponentType @@ -37,6 +35,9 @@ object RagiumDataComponents { fun init(eventBus: IEventBus) { REGISTER.addAlias("blast_power", "charge_power") + REGISTER.addAlias("fluid_content", "fluid") + REGISTER.addAlias("item_content", "item") + REGISTER.register(eventBus) } @@ -87,8 +88,7 @@ object RagiumDataComponents { val MACHINE_UPGRADE: DataComponentType = REGISTER.registerType("machine_upgrade", HTComponentUpgrade.CODEC) @JvmField - val MACHINE_UPGRADES: DataComponentType = - REGISTER.registerType("machine_upgrades", HTStackContents.codec(ImmutableItemStack.CODEC)) + val MACHINE_UPGRADES: DataComponentType = REGISTER.registerType("machine_upgrades", HTAttachedItems.CODEC) @JvmField val MACHINE_UPGRADE_FILTER: DataComponentType>> = @@ -97,13 +97,11 @@ object RagiumDataComponents { // Storage // @JvmField - val ENERGY: DataComponentType = REGISTER.registerType("energy", BiCodecs.NON_NEGATIVE_INT) + val ENERGY: DataComponentType = REGISTER.registerType("energy", HTAttachedEnergy.CODEC) @JvmField - val FLUID_CONTENT: DataComponentType = - REGISTER.registerType("fluid_content", HTStackContents.codec(ImmutableFluidStack.CODEC)) + val FLUID: DataComponentType = REGISTER.registerType("fluid", HTAttachedFluids.CODEC) @JvmField - val ITEM_CONTENT: DataComponentType = - REGISTER.registerType("item_content", HTStackContents.codec(ImmutableItemStack.CODEC)) + val ITEM: DataComponentType = REGISTER.registerType("item", HTAttachedItems.CODEC) } diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumItems.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumItems.kt index 9738d41dc..3e37681e0 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumItems.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumItems.kt @@ -61,6 +61,7 @@ import hiiragi283.ragium.common.material.CommonMaterialPrefixes import hiiragi283.ragium.common.material.FoodMaterialKeys import hiiragi283.ragium.common.material.RagiumMaterialKeys import hiiragi283.ragium.common.material.VanillaMaterialKeys +import hiiragi283.ragium.common.storage.attachments.HTComponentHandler import hiiragi283.ragium.common.storage.energy.HTComponentEnergyHandler import hiiragi283.ragium.common.storage.energy.battery.HTComponentEnergyBattery import hiiragi283.ragium.common.storage.fluid.HTComponentFluidHandler @@ -70,6 +71,7 @@ import hiiragi283.ragium.common.storage.item.slot.HTComponentItemSlot import hiiragi283.ragium.common.text.HTSmithingTranslation import hiiragi283.ragium.common.text.RagiumCommonTranslation import hiiragi283.ragium.common.tier.HTComponentTier +import hiiragi283.ragium.common.tier.HTCrateTier import hiiragi283.ragium.common.upgrade.HTComponentUpgradeHandler import hiiragi283.ragium.common.variant.HTArmorVariant import hiiragi283.ragium.common.variant.HTHammerToolVariant @@ -760,19 +762,19 @@ object RagiumItems { @JvmStatic private fun registerItemCapabilities(event: RegisterCapabilitiesEvent) { // Item - for ((_, block: ItemLike) in RagiumBlocks.CRATES) { + for ((tier: HTCrateTier, block: ItemLike) in RagiumBlocks.CRATES) { registerItem( event, - { stack: ItemStack -> listOf(HTComponentItemSlot.create(stack, 1)) }, + 1, + { context: HTComponentHandler.ContainerContext -> HTComponentItemSlot.create(context, tier.getMultiplier()) }, block, ) } registerItem( event, - { stack: ItemStack -> - (0..<9).map { slot: Int -> - HTComponentItemSlot.create(stack, slot, filter = HTPotionBundleContainerMenu::filterPotion) - } + 9, + { context: HTComponentHandler.ContainerContext -> + HTComponentItemSlot.create(context, 1, filter = HTPotionBundleContainerMenu::filterPotion) }, POTION_BUNDLE, ) @@ -780,18 +782,18 @@ object RagiumItems { // Fluid registerFluid( event, - { stack: ItemStack -> - val capacity: Int = HTUpgradeHelper.getTankCapacity(stack, RagiumConfig.COMMON.tankCapacity.asInt) - HTComponentFluidTank.create(stack, 0, capacity) + { context: HTComponentHandler.ContainerContext -> + val capacity: Int = HTUpgradeHelper.getTankCapacity(context.attachedTo, RagiumConfig.COMMON.tankCapacity.asInt) + HTComponentFluidTank.create(context, capacity) }, RagiumBlocks.TANK, ) registerFluid( event, - { stack: ItemStack -> - val capacity: Int = HTUpgradeHelper.getTankCapacity(stack, 8000) - HTComponentFluidTank.create(stack, 0, capacity, filter = RagiumFluidContents.DEW_OF_THE_WARP::isOf) + { context: HTComponentHandler.ContainerContext -> + val capacity: Int = HTUpgradeHelper.getTankCapacity(context.attachedTo, 8000) + HTComponentFluidTank.create(context, capacity, filter = RagiumFluidContents.DEW_OF_THE_WARP::isOf) }, TELEPORT_KEY, ) @@ -799,8 +801,8 @@ object RagiumItems { // Energy registerEnergy( event, - { stack: ItemStack -> - HTComponentEnergyBattery.create(stack, HTUpgradeHelper.getEnergyCapacity(stack, 160000)) + { context: HTComponentHandler.ContainerContext -> + HTComponentEnergyBattery.create(context, HTUpgradeHelper.getEnergyCapacity(context.attachedTo, 160000)) }, DRILL, ) @@ -855,28 +857,41 @@ object RagiumItems { } @JvmStatic - fun registerItem(event: RegisterCapabilitiesEvent, getter: (ItemStack) -> List, vararg items: ItemLike) { + fun registerItem( + event: RegisterCapabilitiesEvent, + size: Int, + factory: HTComponentHandler.ContainerFactory, + vararg items: ItemLike, + ) { event.registerItem( HTItemCapabilities.item, - { stack: ItemStack, _: Void? -> HTComponentItemHandler(getter(stack)) }, + { stack: ItemStack, _: Void? -> HTComponentItemHandler(stack, size, factory) }, *items, ) } @JvmStatic - fun registerFluid(event: RegisterCapabilitiesEvent, getter: (ItemStack) -> HTFluidTank, vararg items: ItemLike) { + fun registerFluid( + event: RegisterCapabilitiesEvent, + factory: HTComponentHandler.ContainerFactory, + vararg items: ItemLike, + ) { event.registerItem( HTFluidCapabilities.item, - { stack: ItemStack, _: Void? -> HTComponentFluidHandler(stack, getter(stack)) }, + { stack: ItemStack, _: Void? -> HTComponentFluidHandler(stack, 1, factory) }, *items, ) } @JvmStatic - fun registerEnergy(event: RegisterCapabilitiesEvent, getter: (ItemStack) -> HTEnergyBattery, vararg items: ItemLike) { + fun registerEnergy( + event: RegisterCapabilitiesEvent, + factory: HTComponentHandler.ContainerFactory, + vararg items: ItemLike, + ) { event.registerItem( HTEnergyCapabilities.item, - { stack: ItemStack, _: Void? -> HTComponentEnergyHandler(stack, getter(stack)) }, + { stack: ItemStack, _: Void? -> HTComponentEnergyHandler(stack, 1, factory) }, *items, ) } From e0fe5ec06cd0405f058ef10754789c3de6768074 Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Fri, 12 Dec 2025 03:15:29 +0900 Subject: [PATCH 31/49] feat: added block entity renderer for Variable Tank --- .../data/client/RagiumEnglishProvider.kt | 6 +-- .../data/client/RagiumJapaneseProvider.kt | 6 +-- .../hiiragi283/ragium/client/RagiumClient.kt | 3 ++ .../block/HTSingleFluidMachineRenderer.kt | 6 +-- .../client/renderer/block/HTTankRenderer.kt | 43 +++++++++++++++++++ .../block/entity/ExtendedBlockEntity.kt | 33 +++++++++----- .../common/block/entity/HTBlockEntity.kt | 29 +++++++------ .../entity/processor/HTMelterBlockEntity.kt | 16 +++++++ .../entity/processor/HTRefineryBlockEntity.kt | 18 ++++++++ .../block/entity/storage/HTTankBlockEntity.kt | 21 +++++++++ .../common/entity/vehicle/HTTankMinecart.kt | 5 +-- 11 files changed, 144 insertions(+), 42 deletions(-) create mode 100644 src/main/kotlin/hiiragi283/ragium/client/renderer/block/HTTankRenderer.kt diff --git a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt index ca7896fbb..5da0911e6 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt @@ -191,11 +191,7 @@ class RagiumEnglishProvider(output: PackOutput) : HTLanguageProvider.English(out private fun entity() { add(RagiumEntityTypes.ELDRITCH_EGG, "Thrown Eldritch Egg") - // add(RagiumEntityTypes.DYNAMITE, "Dynamite") - // add(RagiumEntityTypes.DEFOLIANT_DYNAMITE, "Defoliant Dynamite") - // add(RagiumEntityTypes.FLATTEN_DYNAMITE, "Flatten Dynamite") - // add(RagiumEntityTypes.NAPALM_DYNAMITE, "Napalm Dynamite") - // add(RagiumEntityTypes.POISON_DYNAMITE, "Poison Dynamite") + add(RagiumEntityTypes.TANK_MINECART, "Minecart with Variable Tank") } private fun fluid() { diff --git a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt index 4eb000c7b..9ed44d28c 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt @@ -182,11 +182,7 @@ class RagiumJapaneseProvider(output: PackOutput) : HTLanguageProvider.Japanese(o private fun entity() { add(RagiumEntityTypes.ELDRITCH_EGG, "異質な卵") - // add(RagiumEntityTypes.DYNAMITE, "ダイナマイト") - // add(RagiumEntityTypes.DEFOLIANT_DYNAMITE, "枯葉剤ダイナマイト") - // add(RagiumEntityTypes.FLATTEN_DYNAMITE, "整地用ダイナマイト") - // add(RagiumEntityTypes.NAPALM_DYNAMITE, "ナパームダイナマイト") - // add(RagiumEntityTypes.POISON_DYNAMITE, "毒ガスダイナマイト") + add(RagiumEntityTypes.TANK_MINECART, "可変タンク付きトロッコ") } private fun fluid() { diff --git a/src/main/kotlin/hiiragi283/ragium/client/RagiumClient.kt b/src/main/kotlin/hiiragi283/ragium/client/RagiumClient.kt index c4751a0b6..4d5991771 100644 --- a/src/main/kotlin/hiiragi283/ragium/client/RagiumClient.kt +++ b/src/main/kotlin/hiiragi283/ragium/client/RagiumClient.kt @@ -39,6 +39,7 @@ import hiiragi283.ragium.client.renderer.block.HTFuelGeneratorRenderer import hiiragi283.ragium.client.renderer.block.HTImitationSpawnerRenderer import hiiragi283.ragium.client.renderer.block.HTRefineryRenderer import hiiragi283.ragium.client.renderer.block.HTSingleFluidMachineRenderer +import hiiragi283.ragium.client.renderer.block.HTTankRenderer import hiiragi283.ragium.client.renderer.item.HTFuelGeneratorItemRenderer import hiiragi283.ragium.common.block.entity.HTBlockEntity import hiiragi283.ragium.common.block.entity.device.HTFluidCollectorBlockEntity @@ -321,6 +322,8 @@ class RagiumClient(eventBus: IEventBus, container: ModContainer) { for (tier: HTCrateTier in HTCrateTier.entries) { event.registerBlockEntityRenderer(tier.getBlockEntityType().get(), ::HTCrateRenderer) } + + event.registerBlockEntityRenderer(RagiumBlockEntityTypes.TANK.get(), ::HTTankRenderer) // Entity for (type: HTDeferredEntityType in RagiumEntityTypes.CHARGES.values) { event.registerEntityRenderer(type.get(), ::ThrownItemRenderer) diff --git a/src/main/kotlin/hiiragi283/ragium/client/renderer/block/HTSingleFluidMachineRenderer.kt b/src/main/kotlin/hiiragi283/ragium/client/renderer/block/HTSingleFluidMachineRenderer.kt index 1c79a884c..63e8e6a9d 100644 --- a/src/main/kotlin/hiiragi283/ragium/client/renderer/block/HTSingleFluidMachineRenderer.kt +++ b/src/main/kotlin/hiiragi283/ragium/client/renderer/block/HTSingleFluidMachineRenderer.kt @@ -4,7 +4,6 @@ import com.mojang.blaze3d.vertex.PoseStack import hiiragi283.ragium.api.stack.ImmutableFluidStack import hiiragi283.ragium.api.stack.getTintColor import hiiragi283.ragium.api.storage.fluid.HTFluidTank -import hiiragi283.ragium.client.renderer.scale import hiiragi283.ragium.client.util.HTSpriteRenderHelper import hiiragi283.ragium.common.block.entity.HTBlockEntity import net.minecraft.client.renderer.MultiBufferSource @@ -25,13 +24,12 @@ class HTSingleFluidMachineRenderer(context: BlockEntityRendererProvider.Context) val sprite: TextureAtlasSprite = HTSpriteRenderHelper.getFluidSprite(stack) ?: return poseStack.pushPose() - poseStack.translate(0.05f, 0.5f, 0.05f) + poseStack.translate(1 / 16f, 1 / 2f, 1 / 16f) val level: Float = tank.getStoredLevelAsFloat() if (stack.fluidType().isLighterThanAir) { poseStack.translate(0f, 1f - (level / 2f), 0f) } - poseStack.scale(1f, level / 2f, 1f) - poseStack.scale(0.9f) + poseStack.scale(15 / 16f, level / 2f, 15 / 16f) HTSpriteRenderHelper.drawFluidBox( poseStack, bufferSource, diff --git a/src/main/kotlin/hiiragi283/ragium/client/renderer/block/HTTankRenderer.kt b/src/main/kotlin/hiiragi283/ragium/client/renderer/block/HTTankRenderer.kt new file mode 100644 index 000000000..fa13e88bd --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/client/renderer/block/HTTankRenderer.kt @@ -0,0 +1,43 @@ +package hiiragi283.ragium.client.renderer.block + +import com.mojang.blaze3d.vertex.PoseStack +import hiiragi283.ragium.api.stack.ImmutableFluidStack +import hiiragi283.ragium.api.stack.getTintColor +import hiiragi283.ragium.api.storage.fluid.HTFluidTank +import hiiragi283.ragium.client.util.HTSpriteRenderHelper +import hiiragi283.ragium.common.block.entity.storage.HTTankBlockEntity +import net.minecraft.client.renderer.MultiBufferSource +import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider +import net.minecraft.client.renderer.texture.TextureAtlasSprite + +class HTTankRenderer(context: BlockEntityRendererProvider.Context) : HTBlockEntityRenderer(context) { + override fun render( + blockEntity: HTTankBlockEntity, + partialTick: Float, + poseStack: PoseStack, + bufferSource: MultiBufferSource, + packedLight: Int, + packedOverlay: Int, + ) { + val tank: HTFluidTank = blockEntity.tank + val stack: ImmutableFluidStack = tank.getStack() ?: return + val sprite: TextureAtlasSprite = HTSpriteRenderHelper.getFluidSprite(stack) ?: return + + poseStack.pushPose() + poseStack.translate(2.5f / 16f, 0f, 2.5f / 16f) + val level: Float = tank.getStoredLevelAsFloat() + if (stack.fluidType().isLighterThanAir) { + poseStack.translate(0f, 1f - (level / 2f), 0f) + } + poseStack.scale(11 / 16f, level, 11 / 16f) + HTSpriteRenderHelper.drawFluidBox( + poseStack, + bufferSource, + sprite, + stack.getTintColor(), + packedLight, + packedOverlay, + ) + poseStack.popPose() + } +} diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/ExtendedBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/ExtendedBlockEntity.kt index 2ead2e6fa..ac4eba062 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/ExtendedBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/ExtendedBlockEntity.kt @@ -1,15 +1,16 @@ package hiiragi283.ragium.common.block.entity +import hiiragi283.ragium.api.RagiumPlatform import hiiragi283.ragium.api.block.entity.HTAbstractBlockEntity import hiiragi283.ragium.api.registry.impl.HTDeferredBlockEntityType +import hiiragi283.ragium.api.serialization.value.HTValueInput +import hiiragi283.ragium.api.serialization.value.HTValueOutput import hiiragi283.ragium.common.network.HTUpdateBlockEntityPacket import net.minecraft.core.BlockPos import net.minecraft.core.HolderLookup import net.minecraft.nbt.CompoundTag import net.minecraft.network.Connection import net.minecraft.network.RegistryFriendlyByteBuf -import net.minecraft.network.protocol.Packet -import net.minecraft.network.protocol.game.ClientGamePacketListener import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket import net.minecraft.server.level.ServerLevel import net.minecraft.world.level.ChunkPos @@ -28,17 +29,18 @@ abstract class ExtendedBlockEntity(type: HTDeferredBlockEntityType<*>, pos: Bloc HTAbstractBlockEntity { // Save & Read // - final override fun getUpdatePacket(): Packet = ClientboundBlockEntityDataPacket.create(this) + final override fun getUpdatePacket(): ClientboundBlockEntityDataPacket = ClientboundBlockEntityDataPacket.create(this) final override fun getUpdateTag(registries: HolderLookup.Provider): CompoundTag = getReducedUpdateTag(registries) - final override fun handleUpdateTag(tag: CompoundTag, lookupProvider: HolderLookup.Provider) { - loadAdditional(tag, lookupProvider) + final override fun handleUpdateTag(tag: CompoundTag, provider: HolderLookup.Provider) { + super.loadAdditional(tag, provider) + handleUpdateTag(RagiumPlatform.INSTANCE.createValueInput(provider, tag)) } - final override fun onDataPacket(net: Connection, pkt: ClientboundBlockEntityDataPacket, lookupProvider: HolderLookup.Provider) { + final override fun onDataPacket(net: Connection, pkt: ClientboundBlockEntityDataPacket, provider: HolderLookup.Provider) { val tag: CompoundTag = pkt.tag - if (!tag.isEmpty) handleUpdateTag(tag, lookupProvider) + if (!tag.isEmpty) handleUpdateTag(tag, provider) } fun sendUpdatePacket(level: ServerLevel) { @@ -69,7 +71,6 @@ abstract class ExtendedBlockEntity(type: HTDeferredBlockEntityType<*>, pos: Bloc protected fun setOnlySave() { setChanged(false) - requestModelDataUpdate() } override fun setChanged() { @@ -88,8 +89,10 @@ abstract class ExtendedBlockEntity(type: HTDeferredBlockEntityType<*>, pos: Bloc level.blockEntityChanged(blockPos) lastSaveTime = time } - if (updateComparator && !level.isClientSide) { - markDirtyComparator() + if (level.isClientSide) { + requestModelDataUpdate() + } else { + if (updateComparator) markDirtyComparator() } } @@ -100,7 +103,15 @@ abstract class ExtendedBlockEntity(type: HTDeferredBlockEntityType<*>, pos: Bloc /** * @see mekanism.common.tile.base.TileEntityUpdateable.getReducedUpdateTag */ - fun getReducedUpdateTag(registries: HolderLookup.Provider): CompoundTag = saveCustomOnly(registries) + fun getReducedUpdateTag(provider: HolderLookup.Provider): CompoundTag { + val tag: CompoundTag = super.getUpdateTag(provider) + initReducedUpdateTag(RagiumPlatform.INSTANCE.createValueOutput(provider, tag)) + return tag + } + + open fun initReducedUpdateTag(output: HTValueOutput) {} + + open fun handleUpdateTag(input: HTValueInput) {} /** * [BlockEntity.setBlockState]の後で呼び出されます。 diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTBlockEntity.kt index 47de978b6..d6de6745b 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTBlockEntity.kt @@ -50,7 +50,6 @@ import net.minecraft.network.chat.ComponentSerialization import net.minecraft.server.level.ServerLevel import net.minecraft.world.Nameable import net.minecraft.world.entity.player.Player -import net.minecraft.world.item.enchantment.ItemEnchantments import net.minecraft.world.level.Level import net.minecraft.world.level.block.Block import net.minecraft.world.level.block.state.BlockState @@ -134,8 +133,21 @@ abstract class HTBlockEntity(val blockHolder: Holder, pos: BlockPos, stat components1 += component } - var enchantment: ItemEnchantments - private set + override fun initReducedUpdateTag(output: HTValueOutput) { + super.initReducedUpdateTag(output) + // Components + for (component: HTBlockEntityComponent in components) { + component.serialize(output) + } + } + + override fun handleUpdateTag(input: HTValueInput) { + super.handleUpdateTag(input) + // Components + for (component: HTBlockEntityComponent in components) { + component.deserialize(input) + } + } final override fun saveAdditional(tag: CompoundTag, registries: HolderLookup.Provider) { super.saveAdditional(tag, registries) @@ -155,8 +167,6 @@ abstract class HTBlockEntity(val blockHolder: Holder, pos: BlockPos, stat } // Custom Name output.store("custom_name", ComponentSerialization.CODEC, this.customName) - // Enchantments - output.store(RagiumConst.ENCHANTMENT, ItemEnchantments.CODEC, enchantment) // Owner output.store(RagiumConst.OWNER, UUIDUtil.CODEC, ownerId) } @@ -179,8 +189,6 @@ abstract class HTBlockEntity(val blockHolder: Holder, pos: BlockPos, stat } // Custom Name this.customName = input.read("custom_name", ComponentSerialization.CODEC) - // Enchantments - enchantment = input.read(RagiumConst.ENCHANTMENT, ItemEnchantments.CODEC) ?: ItemEnchantments.EMPTY // Owner this.ownerId = input.read(RagiumConst.OWNER, UUIDUtil.CODEC) } @@ -201,8 +209,6 @@ abstract class HTBlockEntity(val blockHolder: Holder, pos: BlockPos, stat } // Custom Name this.customName = componentInput.get(DataComponents.CUSTOM_NAME) - // Enchantments - enchantment = componentInput.getOrDefault(DataComponents.ENCHANTMENTS, ItemEnchantments.EMPTY) } override fun collectImplicitComponents(builder: DataComponentMap.Builder) { @@ -219,10 +225,6 @@ abstract class HTBlockEntity(val blockHolder: Holder, pos: BlockPos, stat } // Custom Name builder.set(DataComponents.CUSTOM_NAME, this.customName) - // Enchantments - if (!enchantment.isEmpty) { - builder.set(DataComponents.ENCHANTMENTS, enchantment) - } } /** @@ -275,7 +277,6 @@ abstract class HTBlockEntity(val blockHolder: Holder, pos: BlockPos, stat init { initializeVariables() - enchantment = ItemEnchantments.EMPTY fluidHandlerManager = initializeFluidHandler(::setOnlySave)?.let { HTFluidHandlerManager(it, this) } energyHandlerManager = initializeEnergyHandler(::setOnlySave)?.let { HTEnergyStorageManager(it, this) } itemHandlerManager = initializeItemHandler(::setOnlySave)?.let { HTItemHandlerManager(it, this) } 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 f3a56efde..edb7add1b 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 @@ -1,9 +1,13 @@ package hiiragi283.ragium.common.block.entity.processor +import hiiragi283.ragium.api.RagiumConst import hiiragi283.ragium.api.block.attribute.getFluidAttribute import hiiragi283.ragium.api.recipe.RagiumRecipeTypes import hiiragi283.ragium.api.recipe.fluid.HTMeltingRecipe import hiiragi283.ragium.api.recipe.input.HTRecipeInput +import hiiragi283.ragium.api.serialization.value.HTValueInput +import hiiragi283.ragium.api.serialization.value.HTValueOutput +import hiiragi283.ragium.api.stack.ImmutableFluidStack import hiiragi283.ragium.api.stack.ImmutableItemStack import hiiragi283.ragium.api.stack.getCraftingRemainingItem import hiiragi283.ragium.api.storage.HTStorageAccess @@ -56,6 +60,18 @@ class HTMelterBlockEntity(pos: BlockPos, state: BlockState) : ) } + // Save & Load // + + override fun initReducedUpdateTag(output: HTValueOutput) { + super.initReducedUpdateTag(output) + output.store(RagiumConst.FLUID, ImmutableFluidStack.CODEC, outputTank.getStack()) + } + + override fun handleUpdateTag(input: HTValueInput) { + super.handleUpdateTag(input) + input.read(RagiumConst.FLUID, ImmutableFluidStack.CODEC).let(outputTank::setStackUnchecked) + } + // Ticking // override fun shouldCheckRecipe(level: ServerLevel, pos: BlockPos): Boolean = outputTank.getNeeded() > 0 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 e1c3d67d3..88a07b57f 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 @@ -1,9 +1,13 @@ package hiiragi283.ragium.common.block.entity.processor +import hiiragi283.ragium.api.RagiumConst import hiiragi283.ragium.api.block.attribute.getFluidAttribute import hiiragi283.ragium.api.recipe.RagiumRecipeTypes import hiiragi283.ragium.api.recipe.fluid.HTRefiningRecipe import hiiragi283.ragium.api.recipe.input.HTRecipeInput +import hiiragi283.ragium.api.serialization.value.HTValueInput +import hiiragi283.ragium.api.serialization.value.HTValueOutput +import hiiragi283.ragium.api.stack.ImmutableFluidStack import hiiragi283.ragium.api.storage.HTStorageAccess import hiiragi283.ragium.api.storage.HTStorageAction import hiiragi283.ragium.api.storage.holder.HTSlotInfo @@ -67,6 +71,20 @@ class HTRefineryBlockEntity(pos: BlockPos, state: BlockState) : ) } + // Save & Load // + + override fun initReducedUpdateTag(output: HTValueOutput) { + super.initReducedUpdateTag(output) + output.store("${RagiumConst.FLUID}_input", ImmutableFluidStack.CODEC, inputTank.getStack()) + output.store("${RagiumConst.FLUID}_output", ImmutableFluidStack.CODEC, outputTank.getStack()) + } + + override fun handleUpdateTag(input: HTValueInput) { + super.handleUpdateTag(input) + input.read("${RagiumConst.FLUID}_input", ImmutableFluidStack.CODEC).let(inputTank::setStackUnchecked) + input.read("${RagiumConst.FLUID}_output", ImmutableFluidStack.CODEC).let(outputTank::setStackUnchecked) + } + // Ticking // override fun shouldCheckRecipe(level: ServerLevel, pos: BlockPos): Boolean = outputSlot.getNeeded() > 0 || outputTank.getNeeded() > 0 diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTTankBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTTankBlockEntity.kt index 39bb7aebc..b7d775d94 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTTankBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTTankBlockEntity.kt @@ -1,6 +1,9 @@ package hiiragi283.ragium.common.block.entity.storage +import hiiragi283.ragium.api.RagiumConst import hiiragi283.ragium.api.function.HTPredicates +import hiiragi283.ragium.api.serialization.value.HTValueInput +import hiiragi283.ragium.api.serialization.value.HTValueOutput import hiiragi283.ragium.api.stack.ImmutableFluidStack import hiiragi283.ragium.api.storage.HTStorageAccess import hiiragi283.ragium.api.storage.HTStorageAction @@ -23,6 +26,9 @@ import net.minecraft.world.level.Level import net.minecraft.world.level.block.Block import net.minecraft.world.level.block.state.BlockState +/** + * @see mekanism.common.tile.TileEntityFluidTank + */ open class HTTankBlockEntity(blockHolder: Holder, pos: BlockPos, state: BlockState) : HTUpgradableBlockEntity(blockHolder, pos, state) { constructor(pos: BlockPos, state: BlockState) : this(RagiumBlocks.TANK, pos, state) @@ -56,6 +62,18 @@ open class HTTankBlockEntity(blockHolder: Holder, pos: BlockPos, state: B final override fun getComparatorOutput(state: BlockState, level: Level, pos: BlockPos): Int = HTStackSlotHelper.calculateRedstoneLevel(tank) + // Save & Load // + + override fun initReducedUpdateTag(output: HTValueOutput) { + super.initReducedUpdateTag(output) + output.store(RagiumConst.FLUID, ImmutableFluidStack.CODEC, tank.getStack()) + } + + override fun handleUpdateTag(input: HTValueInput) { + super.handleUpdateTag(input) + input.read(RagiumConst.FLUID, ImmutableFluidStack.CODEC).let(tank::setStackUnchecked) + } + // Ticking // override fun onUpdateServer(level: ServerLevel, pos: BlockPos, state: BlockState): Boolean = @@ -63,6 +81,9 @@ open class HTTankBlockEntity(blockHolder: Holder, pos: BlockPos, state: B // TankFluidTank // + /** + * @see mekanism.common.capabilities.fluid.FluidTankFluidTank + */ protected inner class TankFluidTank(listener: HTContentListener) : HTBasicFluidTank( getCapacity(), diff --git a/src/main/kotlin/hiiragi283/ragium/common/entity/vehicle/HTTankMinecart.kt b/src/main/kotlin/hiiragi283/ragium/common/entity/vehicle/HTTankMinecart.kt index c4a603b06..02d535a8b 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/entity/vehicle/HTTankMinecart.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/entity/vehicle/HTTankMinecart.kt @@ -4,6 +4,7 @@ import hiiragi283.ragium.common.block.entity.storage.HTTankBlockEntity import hiiragi283.ragium.setup.RagiumBlockEntityTypes import hiiragi283.ragium.setup.RagiumBlocks import hiiragi283.ragium.setup.RagiumEntityTypes +import hiiragi283.ragium.setup.RagiumItems import hiiragi283.ragium.util.HTStackSlotHelper import net.minecraft.core.BlockPos import net.minecraft.world.InteractionHand @@ -40,9 +41,7 @@ class HTTankMinecart : InteractionResult.PASS } - override fun getPickResult(): ItemStack { - TODO("Not yet implemented") - } + override fun getPickResult(): ItemStack = RagiumItems.TANK_MINECART.toStack() override fun getDefaultDisplayBlockState(): BlockState = RagiumBlocks.TANK.get().defaultBlockState() From 55dae8fc3d83b76df15f055931be67c41fe115f0 Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Fri, 12 Dec 2025 06:15:36 +0900 Subject: [PATCH 32/49] feat!: removed item Ragi-Cherry Pulp feat: added item Chocolate Bread refactor: updated textures --- .../ragium/data/client/RagiumEnglishProvider.kt | 2 +- .../data/client/RagiumJapaneseProvider.kt | 2 +- .../server/recipe/RagiumFoodRecipeProvider.kt | 6 ++++++ .../compat/RagiumDelightRecipeProvider.kt | 1 - .../compat/RagiumKaleidoRecipeProvider.kt | 1 - .../data/server/tag/RagiumItemTagsProvider.kt | 14 ++++++++------ .../recipe/material/FoodMaterialRecipeData.kt | 7 ------- .../common/event/RagiumMaterialHandler.kt | 4 ++-- .../hiiragi283/ragium/setup/RagiumBlocks.kt | 2 +- .../hiiragi283/ragium/setup/RagiumFoods.kt | 6 ------ .../hiiragi283/ragium/setup/RagiumItems.kt | 10 +++++----- .../ragium/textures/block/azure_tiles.png | Bin 352 -> 347 bytes .../ragium/textures/block/chocolate_block.png | Bin 275 -> 282 bytes .../ragium/textures/block/cooked_meat_block.png | Bin 144 -> 352 bytes .../textures/block/crimson_crystal_glass.png | Bin 223 -> 211 bytes .../ragium/textures/block/enchanter_front.png | Bin 243 -> 255 bytes .../ragium/textures/block/mob_crusher_front.png | Bin 259 -> 258 bytes .../ragium/textures/block/obsidian_glass.png | Bin 208 -> 215 bytes .../ragium/textures/block/ragi_bricks.png | Bin 321 -> 342 bytes .../ragium/textures/block/raw_meat_block.png | Bin 148 -> 340 bytes .../ragium/textures/block/simulator_front.png | Bin 257 -> 261 bytes .../block/tinted_crimson_crystal_glass.png | Bin 274 -> 269 bytes .../textures/block/tinted_obsidian_glass.png | Bin 277 -> 273 bytes .../block/tinted_warped_crystal_glass.png | Bin 278 -> 278 bytes .../textures/block/warped_crystal_glass.png | Bin 224 -> 229 bytes .../ragium/textures/item/chocolate_bread.png | Bin 0 -> 339 bytes .../ragium/textures/item/chocolate_ingot.png | Bin 313 -> 294 bytes .../ragium/textures/item/cooked_meat_ingot.png | Bin 291 -> 286 bytes .../ragium/textures/item/enriched_azure.png | Bin 372 -> 341 bytes .../ragium/textures/item/enriched_deep.png | Bin 379 -> 345 bytes .../ragium/textures/item/enriched_ragium.png | Bin 313 -> 330 bytes .../assets/ragium/textures/item/ragi_cherry.png | Bin 369 -> 439 bytes .../ragium/textures/item/ragi_cherry_pulp.png | Bin 278 -> 0 bytes .../ragium/textures/item/ragi_cherry_seeds.png | Bin 117 -> 0 bytes .../assets/ragium/textures/item/ragi_coke.png | Bin 324 -> 0 bytes .../models/block/crimson_crystal_glass.json | 12 ++++++++++++ .../models/block/warped_crystal_glass.json | 12 ++++++++++++ .../textures/block/crimson_crystal_glass.png | Bin 0 -> 310 bytes ....mcmeta => crimson_crystal_glass.png.mcmeta} | 0 .../ragium/textures/block/small_drum_side.png | Bin 300 -> 0 bytes .../ragium/textures/block/small_drum_top.png | Bin 296 -> 0 bytes .../textures/block/warped_crystal_glass.png | Bin 0 -> 329 bytes ...g.mcmeta => warped_crystal_glass.png.mcmeta} | 0 43 files changed, 48 insertions(+), 31 deletions(-) create mode 100644 src/main/resources/assets/ragium/textures/item/chocolate_bread.png delete mode 100644 src/main/resources/assets/ragium/textures/item/ragi_cherry_pulp.png delete mode 100644 src/main/resources/assets/ragium/textures/item/ragi_cherry_seeds.png delete mode 100644 src/main/resources/assets/ragium/textures/item/ragi_coke.png create mode 100644 src/main/resources/fusion/assets/ragium/models/block/crimson_crystal_glass.json create mode 100644 src/main/resources/fusion/assets/ragium/models/block/warped_crystal_glass.json create mode 100644 src/main/resources/fusion/assets/ragium/textures/block/crimson_crystal_glass.png rename src/main/resources/fusion/assets/ragium/textures/block/{small_drum_side.png.mcmeta => crimson_crystal_glass.png.mcmeta} (100%) delete mode 100644 src/main/resources/fusion/assets/ragium/textures/block/small_drum_side.png delete mode 100644 src/main/resources/fusion/assets/ragium/textures/block/small_drum_top.png create mode 100644 src/main/resources/fusion/assets/ragium/textures/block/warped_crystal_glass.png rename src/main/resources/fusion/assets/ragium/textures/block/{small_drum_top.png.mcmeta => warped_crystal_glass.png.mcmeta} (100%) diff --git a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt index 5da0911e6..b10e454a7 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt @@ -271,7 +271,6 @@ class RagiumEnglishProvider(output: PackOutput) : HTLanguageProvider.English(out add(RagiumItems.MELON_PIE, "Melon Pie") add(RagiumItems.RAGI_CHERRY, "Ragi-Cherry") - add(RagiumItems.RAGI_CHERRY_PULP, "Ragi-Cherry Pulp") add(RagiumItems.RAGI_CHERRY_JUICE, "Ragi-Cherry Juice") add(RagiumItems.RAGI_CHERRY_JAM, "Ragi-Cherry Jam") add(RagiumItems.RAGI_CHERRY_PIE, "Ragi-Cherry Pie") @@ -280,6 +279,7 @@ class RagiumEnglishProvider(output: PackOutput) : HTLanguageProvider.English(out add(RagiumItems.FEVER_CHERRY, "Fever Cherry") add(RagiumItems.BOTTLED_BEE, "Bottled Bee") + add(RagiumItems.CHOCOLATE_BREAD, "Chocolate Bread") add(RagiumItems.AMBROSIA, "Ambrosia") // Parts add(RagiumItems.ADVANCED_CIRCUIT, "Advanced Circuit") diff --git a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt index 9ed44d28c..7fe4e158b 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt @@ -262,7 +262,6 @@ class RagiumJapaneseProvider(output: PackOutput) : HTLanguageProvider.Japanese(o add(RagiumItems.MELON_PIE, "メロンパイ") add(RagiumItems.RAGI_CHERRY, "らぎチェリー") - add(RagiumItems.RAGI_CHERRY_PULP, "らぎチェリーの果肉") add(RagiumItems.RAGI_CHERRY_JUICE, "らぎチェリージュース") add(RagiumItems.RAGI_CHERRY_JAM, "らぎチェリージャム") add(RagiumItems.RAGI_CHERRY_PIE, "らぎチェリーパイ") @@ -271,6 +270,7 @@ class RagiumJapaneseProvider(output: PackOutput) : HTLanguageProvider.Japanese(o add(RagiumItems.FEVER_CHERRY, "フィーバーチェリー") add(RagiumItems.BOTTLED_BEE, "瓶詰めのハチ") + add(RagiumItems.CHOCOLATE_BREAD, "チョコレートパン") add(RagiumItems.AMBROSIA, "アンブロシア") // Mold diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumFoodRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumFoodRecipeProvider.kt index 2ca966c71..ff57ee5d1 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumFoodRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumFoodRecipeProvider.kt @@ -131,6 +131,12 @@ object RagiumFoodRecipeProvider : HTRecipeProvider.Direct() { .save(output) meltAndFreeze(FoodMaterialRecipeData.CHOCOLATE_INGOT) + // Bread + HTShapelessRecipeBuilder + .create(RagiumItems.CHOCOLATE_BREAD, 3) + .addIngredient(CommonMaterialPrefixes.FOOD, FoodMaterialKeys.CHOCOLATE) + .addIngredients(Tags.Items.FOODS_BREAD, 3) + .save(output) // Cake HTShapedRecipeBuilder .create(RagiumBlocks.SWEET_BERRIES_CAKE) diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumDelightRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumDelightRecipeProvider.kt index 9d3665920..f9d8747b3 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumDelightRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumDelightRecipeProvider.kt @@ -81,7 +81,6 @@ object RagiumDelightRecipeProvider : HTRecipeProvider.Integration(RagiumConst.FA @JvmStatic private fun cherry() { - cuttingFromData(FoodMaterialRecipeData.RAGI_CHERRY_PULP) cuttingFromData(FoodMaterialRecipeData.RAGI_CHERRY_PIE) // Jam HTCookingPotRecipeBuilder diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumKaleidoRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumKaleidoRecipeProvider.kt index cfd26a756..31d8ff6a6 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumKaleidoRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumKaleidoRecipeProvider.kt @@ -64,7 +64,6 @@ object RagiumKaleidoRecipeProvider : HTRecipeProvider.Integration(RagiumConst.KA @JvmStatic private fun cherry() { - choppingFromData(FoodMaterialRecipeData.RAGI_CHERRY_PULP) choppingFromData(FoodMaterialRecipeData.RAGI_CHERRY_PIE) } diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/tag/RagiumItemTagsProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/tag/RagiumItemTagsProvider.kt index f2998e06c..89844b8ee 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/tag/RagiumItemTagsProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/tag/RagiumItemTagsProvider.kt @@ -201,15 +201,19 @@ class RagiumItemTagsProvider(private val blockTags: CompletableFuture42%=|&2F{i1QzR8GL6<1P#me2|*7*9!Jzy&V1P{2mJMT%-sY&~l;&*X%5Cy^- z_t5kawTXSCwK`MWf&=#+pwpRGXy9mtgTfYXzW@LL|NqCFVORhF00v1!K~w_(9PP`~ TIzvrS00000NkvXXu0mjf!OxJ- delta 326 zcmV-M0lEI$0^kCWBYyw^b5ch_0Itp)=>Px$8c9S!R5*=wQoTw8K^UA1`vkW^4hzX5 z0X3a%gkZq8un-$1wZ4y)wY{i?Sfsg5B1qWdiX$Ai`wSLyetvAs6wCh14Kwpyb~e2R z5Q7JhTleo?AIPDj>eoJWE zws5-Kx0f%8Ep6giXPL} z)qQwjdd)k3vyif6F?6%h2>x4=eCk1O!jKw>xaIm7VFR*m$#=2TvZ?ChW<89b^EDJ; z(3!FoB@tTP&S%5;Hryg#O`-hKD*1UGq!g`lX&rFhcm}g*ebPGUvBp!%Zq4hE24e*#U;;`C zg!H1Kg9<7-4xBj7+fw2pvG4uXo$qlWj!raqIOGZzj7*hw-3o2flKTI_KlI4;{Azz@N3oJo~_+Jgm|@9iuNsi-k*Uy xZ*ptR25bHW00960?x3$F00006Nkl0?Q41_O-$-hWm9!_ROQ4FRF+1ArN{$#moq&tvidh(A}b%vDd8!Zr76yORzA?witX#w*A=DQ61+0RR7v8t&o%000I_L_t&o Y07sqrKOJ8LLjV8(07*qoM6N<$f($#9!2kdN delta 116 zcmV-)0E_?N0+0caBW(Zyb5ch_0Itp)=>Px#N=ZaPR5*=e+-sx0_SSm_;(!W2JImTz z?^XEOiPW(3!ZUd%djT)upot@< zk{G~+c5v`5B_wS=pI<%q;FJ*DPo?QFtym}l)(oypFBiyHgvaI;gv}%J)I0;o3vP2X zK;i?`ZTti-FAqLfK>T1psRV>+Wh+Pnr)i@&gn@&m@(O6HC@>WCuT*oern~C}00960 llE|)a00006NklZaBkj>}>m>`!lfF1_!_FCasf$&rh009601w?$`00006 dNklOXBq$i0RR8r9YvJ@ g000I_L_t&o0A2%LGXx&IY5)KL07*qoM6N<$f>b(LdH?_b delta 231 zcmVYM7Nd~`nL^Dn?Ljo2_*Sm-h)KZNGS~G?Y?;Ee-yaMrgXSn5^DhX^m;}a z?BnPvZgP0&gXPT)mR@C{d&ZZwT}RcH#_E5;O*)OWl9 p00960Pid;u00006Nkl&@apxLieZ&;Ili%IDIcLt=OSViztJ$Vs%hbI%aZMJy zgHQcJWq%Q3fv^qfoJ=LUjS>11{nNd`J)&-FEYJdR7m3D>_kTn5QUXo8R>g+v@x$q` z+pM>82#_z*+=jXbb5@+rCLg*3s5yL^4&@xtSUtaZ4E#6+{wIg9YCrU$OwVtA(v8OX z1a2gUP&e0P;rgL4oJS7My!n=IIcU?mIG?8+-p*U=*4!*953Qm>=6%aYy(sZ>lT-?9 zXx;p--ukh>=rz{dBD`1K6og7D2R4J|3IG8A|ETlXy8r+H21!IgR09CP{<=dpHtNp+ O0000J{1BYyw^b5ch_0Itp)=>Px#`$LwGk2 zycT+hKrWygEHat zN`Gef%!yMhpahX-7_Pz#05%;60)zgh9H#_j1n64jUBPpVzkkj-D5G#x0$?V80g#5S z}AU4M#}*K>KjJr+$w&gC@fmWIJoo z9brDvIE`yEnQLoj6ir`vevCm1(nx=r&S6x`Q4*BLxm~vmCV$OOi4e>RMofl1+B7^0 zj>4cNsyX^d`;@TNhV?)iV&pEl^DE}rmDP`YnbKMF7KUf>FV6baJ|+IM2onqan2$;N zLo2ZaThsUf2k0j)!3wS}yKQN%L*W4A%i?l%E|bAc&4GW5_A)d_sEE|#H%im+H(J5k zXVp@COrT7*OEYafaI3VWdO?4q4SxUt0RR6!%>eiS000I_L_t&o0HBcHaVNM^;Q#;t M07*qoM6N<$f|+=XsQ>@~ delta 120 zcmV-;0Ehq70+a!eBXIx$b5ch_0Itp)=>Px#PDw;TR5*=e{2Cg2{`_SI;(!_-56k)U zm(}=qh}1Cu&3h&ymBIlF0|NuMvLdm{-@IpGU|{%q_dfA9j5=w=I7y95 zK#4?6NfD|viSCt`Y$yJFl9TL{Ui$O--nM2YEVk?CRo{QrsK(P~X>PlHLIP-hpD&{X z$}A&ZxW#Q-3|WHpR3C-M-#i}_@Eojc?+p&Lf`cA=VrG?Cs6 zcnS>ZN}hn$c1Hjoqf|T^7wk4MGtmG50RR7xjd$4q000I_L_t&o00XvH?M_7#bN~PV M07*qoM6N<$g2{eZ5dZ)H delta 229 zcmV=0)YaMB!9L^L_t(|oTO7R3c^4TyvQM`>}^FXQ|JSHg8s=r_zr!756~i| zh;1Ncs*omO78dRdSxC~j?xw+XpYZk)dvwyzZ`jby;OplrQT}}xJpt-!?CJAiL zSK`%BF=PqW{i(mX$JOgGD&RRt4;k&+6o2Ab4$!>b?r3)~7G7#<2cZ+L#oUM)0GvZC z4;wnb(u5avz!^yAcA=VrG?Bp!cnS>ZNS=V!c258gLvv|du-n8eL|NrpX6A}Ob f00v1!K~w_(ix*V_ypboI00000NkvXXu0mjf5AkCJ diff --git a/src/main/resources/assets/ragium/textures/block/tinted_crimson_crystal_glass.png b/src/main/resources/assets/ragium/textures/block/tinted_crimson_crystal_glass.png index 36ec666d46f901b3cebecb09d11613f56386833d..6c4697278532f65d1c043a9624f0ba0f1e92576c 100644 GIT binary patch delta 241 zcmV0*wNYB!9w5L_t(|oTQVn3c@fHMPFkVp$g(4bt{5{Yd*klaCYxnaCUSS zGWr3|eu`hFa@`3^^4zD7$50Yf4 zYL=ZV8%&9$_}|=hd(s7lF3-o;fer6FQR)I~nFgz7=nb0&xNq~3$QvHC+CK-rFl63< z1D70dRl9*8ru49}9B7#30Py;rOa1U(4gk-uH@UI0BakRp7_x&mi9%{D`y&-+3u$asa)72XOCN@Bj`T zK*;C;Jb*{=03JaqItYT34&72-+N6OFOHD5bN3)g zQeBJU-qT_wS!ZioM9ppx>(HPy%UMj%)r3#?fZKM6a!)&@11zmE-jxJ z%`gBr!17@W$(k7$7$9MwsHn{FLUBIHnz=Xy5iTHAGXruMkaD9L!v*AmfinP>*vK*f zrkR0(fr07t@3SOpwmvj#A}rvUOj(Ud(kyWxapDqLXL#Nr+66FYBWFD6uQ3da+Kd(d z85kHCZZl10Q2m$7aGPl|Q3k61%Vl6-U|;|MUC~D-^qv3b00000NkvXXu0mjf5s7UM diff --git a/src/main/resources/assets/ragium/textures/block/tinted_warped_crystal_glass.png b/src/main/resources/assets/ragium/textures/block/tinted_warped_crystal_glass.png index b426f82be810fb2ccf4f6e8c642d30190be16e91..601d99db7a2b8b48c36a0ff6ecd3f26940cf9def 100644 GIT binary patch delta 241 zcmVVsaswC1f8kiNqoJfQAIIgrE=@G$eIwenBJo z1Ox&PO!5KX2d~i5uw-f9u6a$Hb93ADy5Tx42~v;aiMX(Ewwpvh2!gJdMRBcn=*OJ? z?|HkN8^Lcq&))<(+*vFW6Ie?y~81mM9thz&?QKm3RFJ3#2h~tl#s52D9>qTOkD9lqa rUjP6A|Nk?%E_?t000v1!K~w_(s@p@zTZ0~&00000NkvXXu0mjfCfR5M delta 241 zcmVvdKLk^^<6ZN0p$UZB!8MoL_t(|oZOQ!4nQyzhD$nf0J~TXwL5~%5$XWW;Q;Io;207e ztYUWn_R2$~HMOssZ)wxy{rUUy|1@b@Ns#QLAQUc3U3mmSRC4KmAK5e+J38jafjTU* z%*xFx0K2dq)&wwnh&b23V9VBZZUW8@fFB6>1VKCqi57sstwIHRGee( z=A$f7YMue$1-4lm;Nk;Ia{UQdULJg|0QkWGpE#hV6|KMw96g1N!k`9@rI}O!TLqzj ye}!s8P&IeG00030|IP6RH~;_u21!IgR09CS)GhDTQYzH|0000C_jFxHBIR<%q_qe9Qz;6a@5#Y}V+3}A225zbBG zk=WFToG{QzGI%`f)2g%8hF+*zyD8+BWH2T}Y`5yn z1>AHJR1jS3B;p?gr1pw6ox;8AX7Xwn?VQ) zrh}%C!8gbn=-7K?>K%HBj4nMwMnk}phY$!D6VauRA)Z18b&~3+c1pMQpB_(qpPn9q zf0Ilqn@MHEzW51p_2OaTN?SB_G$;t6S$fy!_7d?62%vjri+`q$L?)GeeV((cnp>~& zNwp-^67mwj3V>B!^7J?zl%!hvdX<+{=7dgS4(;V@2ce`7>dVy6Lo zC^$$JYX|?-wQ>m;qh8uzeoHQCzAx#O3g#KXJmV}FM*RxLG(T}?0YZ>*9AR0R643<3 zVIb?I7qIMn`;iD&2u7G2krEE@d^XV=zfL0OC|s;}>ISRLfqP9y1G$JN*-nP}u~5&7 zvV8Y|l2A}~eXyk4VPq3g(gc|i)CLgMLCfu4y~6X(1#}X>f(=M?$}aWF+CZ4uGbF2*&kszkjg@TQ~Ktjqq^3fe6O6 zm`}0Wt_CG0GLkr5D*%9(=C2v}VQeL@=XRl_P*~2!cCRr+Bl!f?L;DW+VLS+VX$}Cm zs5_xSnGpf5f%iZiGN7q#AsE+-$;e8QLLn%sUZ|c%)BJ}-sX^$s@&FwhgIg>H$g}_e O002ovPDHLkU;%Wj#63@T^y{@ymB}gR4ry+SXt$%#UhEbHnLdleM|Ln`! z#apW*AYAt$n@Er_=`CTqU&ya=2WS&O2iFb-kc<<;1)QV(!t4FYh;tiJU0?K`NsjFTrx$i zI+IU`aq!vV#56Z)BEsz$Of2J1z00960;n6XL00006NklH@$ N002ovPDHLkV1iIFg5v-H delta 346 zcmV-g0j2)c0`vlqBYyw^b5ch_0Itp)=>Px$E=fc|R5*>*kv&VpU=)R)6#qd(C>_ch ziV$^kZK1@1gNs8Er!H9v-8(vU%wEWn#mT|JRj5U1S2r~vl8_;U(D)bPU=!Xnt+Sr( zo_o)^U-0jt$id}cnr#<6+}|kMxts$ykj2--a~5+C0KKhlGJn%7jeWFctKiev%9blv z0jSB{7IP1?Zxmu7RJ3M`dPB$T8zfPP5Gr4(Pi2A}L9oW`834HMvfyX7!+0`cW;><& zVuCdOarHmfg*b^q-d~=J+}-VC<%qQkBZ<@4=jgP@#nqtHWUoOIh3IXyB+hRk?=7SB z#%{;T>J6PV_EQ;8Mg+kcAyj6zQ!;q-7S%TbELX15?N}L`V+x^`_LhY^C&+PZnAzdU s8CtVN5`}!cKJ66mHONhV>-=}{4OPc~J#C&~0ssI207*qoM6N<$f^fs7^Z)<= diff --git a/src/main/resources/assets/ragium/textures/item/enriched_deep.png b/src/main/resources/assets/ragium/textures/item/enriched_deep.png index 2c664e8bbd9d4490426f91d23b247613a1c8687a..8f3496f965a97a3aaa5abcc4c872107afaa96d09 100644 GIT binary patch delta 319 zcmV-F0l@zI0@(tPBYy!7Nkl#N(UpQO&x^xW^9bI;c_0|}9Vg!r#Pz1!o_0b?>& zqG!Z~3~*r3(P6RKig!&d&=I!}N61x*GSA5*C8wcSuT=xFrhlqJm@k(E@9df2Ov8w; zfG{mf43QzB+3LZ3HWp7A!42@5zQH9BW1_hPx$HAzH4R5*>*k|9q6K@f$%gE|nH6&Kq5 z0f#E7Avu!DGZmMB=?`dvsILTvKS6RopaxM<1hRz61_P7?1$)<2Y!HxuAS8#Nx7q6f z8lKykc{B6gEc|;o_GAB`mn|2Zo*X;NxjY6?vB_Z=FrG{Skbj$Ek?CbRRfw82ah962IZ06NPjIdX^YYp#gxJYy7&0U-!&50C5x(h5>OD z7wV0Kd`&geP>2561v*jaRGH$z;JjpFX#*&dy&a!mFEm4bZJ-nNWs*hCy|8uLD4em` zYGZ z{Gh_q>pO2R&ph7Ud`m7#u(7qhYkuBO1p=5JjKl_zcFCu3(s8 z+?aqMR~enjQ|BCM+z6wATp^VSq)REBO|jNSD+NQUkYDZoo&SeFv+(axj4vH^m=@gg zTuk2vE;Hz;gQ$R=A|WdP+~09}lrr(=XBv(LFtAtH33QvpNPmTJL0E!raTXvI&PS5m z%|iJr=wm!LPv73wqPoMZ&B~L3(<7ANZ%OPdaC+b~)|k)wl{01{R!UUXsmV=)m~oYf zhgpnskCCnMz&;4eDArw^hg6ugnSt?=blDIaj>Um}-1k*H&OH|1gt7@8bqG9!jyfot k*$4YE!qnu~ofrQEU(uRdQnW#8a{vGU07*qoM6N<$fE&24uWL7xHqm!c_I0$|Wx=R-8=1>sCqBls$P*4O5k+x95k3q3Hb1xcmX<{nA<-L1% z|KI)J6XBmB`aPK5>Z9et3)b@Lo#4E$^And29w3*iz-_S+&VSDP>7M{h+}xsL{qgt= z8z)ay5Kq9Q6rw%d0j|fK)Z~DP+e1yTDdz>2)uVfB_QNZkbHOcf2jb>M=DU-(?ieIG z(M2y69i|3;{uS-wnOGQLC~7uNRR9vFDLE@Fj(1Y#Mr;j&Gel0jHjhnBTEWbEX%aD9 zy;*`lu)!GP{ePDoENx>-L&b7aD!*dB-ctov2X^r;(W;nPx$D@jB_R5*>Lk|9sSKp2Lf>pF>H!`2c6 z$&w?uh6GC!s`&w(>~F!X_Y+WvY0SV7E~%TsUUVjc_rCl3 z2^^BMD+91v4tcx17cP&L*9RY+l-xXBo4o`6!pEmRk9WNd;D0xZ)p7{Xg1=tBdjmT0 zwq*-{&gUXXV`IO2)2xCtHlrvquCt7A_e@^6G(j47Oc|juT$oW5nS_bS2y2h9Ab^x( zlzu0{Lo)zCQ`WVnL{iO3QJ~009U$cx^hc{B#SfY_35U*(6$M@kPR?6~1P{pp0FsR} zq}l@ut7oT4vQVj?WThz^0XwvvLl@SpQRKoq<3VT!o!jlurYwY_=)hL~_ON<$6Sh+1 p0w$(iS88om^Z!p-?6-CQ)i1b_ijwBS96SI3002ovPDHLkV1h#}o5lbD diff --git a/src/main/resources/assets/ragium/textures/item/ragi_cherry_pulp.png b/src/main/resources/assets/ragium/textures/item/ragi_cherry_pulp.png deleted file mode 100644 index 9eed9cb24e27aba75ad03aabe560794decb79005..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 278 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|E_k{)hFJ8z zon*+@WQ;G-U5qP2lHb6csezwh&^@6nI%{r=|QmD9wnt$bD}YCCK3vUT!q8_n4{QViJ` zfy|E;2P9OU=UYb<1eGPOzYzHRN=b^<$EK9E0_M|h+r5%$3toD}jV;9F6!!+H-#YeJ ZnYTKIb7fx5zYp{qgQu&X%Q~loCIDzhZr%U@ diff --git a/src/main/resources/assets/ragium/textures/item/ragi_cherry_seeds.png b/src/main/resources/assets/ragium/textures/item/ragi_cherry_seeds.png deleted file mode 100644 index 15316c05225fd6a418fd99511397d75a58125342..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 117 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|^gUf1Lo9le z6C_v{H@JMr@q1QZVyKoRa_~rgTwO=7+`5eVeb?)2+9o_b6WAcnz+mDm6J8vb_YtU- N!PC{xWt~$(69DLyBdh=b diff --git a/src/main/resources/assets/ragium/textures/item/ragi_coke.png b/src/main/resources/assets/ragium/textures/item/ragi_coke.png deleted file mode 100644 index 451dd7c8dc18269dfbe63d5a30853b0da6b725e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 324 zcmV-K0lWT*P)Px#{z*hZR5*>rl1*yEFc5`5*Yz?4jG+_)xkBLG$#;tHG|(HAf}t2pHeMRlT}YOH z}YHD%IHB$)AQy(0>YaUog7oipMRNj3z+ zfv#vKz=a|DSr{WwYz!mHOdwo5H1dsk!_U$xpBQbH4AK87kHy0IcE~Y?(B2U1HwF!l zfH|9u(P+-E&)L63ahXIF)+a&;vsx{j5bRQ_9hESzuUJ_clbQl*R&V>dHe!) WC}%e|(>(zI0000n;TwVlgl%g zgKb2Kdwt|u-&aBa|MSDC)~L#3W4CM3g8f6!_!~Sh3rJ$Ld-v3$2F+8%FK@PgN4ob@ z7=0IW@&_gspPc@SE>Z6bh_i?>U#i~!!kV+hZg#@xL+0oYj1Y94L1U8I9~43mc0dYJ z`va;2Gr52?xqu|OfF!C*WbCv*W&Pj|%z?YDFEEi9LKrwTlaM&DruJv`zYfGy1)&tV zs&6>0%Dqg1|3pZ;e`X|yZu|lO0RR8Irs~xI000I_L_t&o06OBS#*R=IKmY&$07*qo IM6N<$f~z5jNB{r; literal 0 HcmV?d00001 diff --git a/src/main/resources/fusion/assets/ragium/textures/block/small_drum_side.png.mcmeta b/src/main/resources/fusion/assets/ragium/textures/block/crimson_crystal_glass.png.mcmeta similarity index 100% rename from src/main/resources/fusion/assets/ragium/textures/block/small_drum_side.png.mcmeta rename to src/main/resources/fusion/assets/ragium/textures/block/crimson_crystal_glass.png.mcmeta diff --git a/src/main/resources/fusion/assets/ragium/textures/block/small_drum_side.png b/src/main/resources/fusion/assets/ragium/textures/block/small_drum_side.png deleted file mode 100644 index 48d23cec7f4295b581b93ad014de2063a5a48fe4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 300 zcmeAS@N?(olHy`uVBq!ia0vp^0YEIk!2~4vwDYF{DaPU;cPEB*=VV?2InO*@977^n zlSRbDo;`SwkdW};;lsoOy!&c?9y)N~!{g)qrSDEvOi64q-5&RvyU4)6U`5xbM}cL( zzoxUXwROL*fAi~%+oYeHdwzNboxhZ+!dBQdYZ8-O>GpTF4Hn${jeHjT|7C3W%-F!D zAs|$4m�kt%RLF{;|)R8o_A87V`dKa2sbvuHDK8*Z2v|OC%PQ@=VUMTbW?eR@ih= zLXEHIn8DPu>Y_l(&p_(%k;aP>%QpR70+c$&>6Sdh!r(WHU_UXxgt94okWvtMOqy+X)*m9GpfFFvfOcj)^9^f7~{tDnm{r-UW|X3c|Y diff --git a/src/main/resources/fusion/assets/ragium/textures/block/small_drum_top.png b/src/main/resources/fusion/assets/ragium/textures/block/small_drum_top.png deleted file mode 100644 index 6b9fdaa73306aa44351262a72a82a3ffc1d08092..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 296 zcmV+@0oVSCP)Px#;z>k7R9J=Wm%R#uFcgJPLnsc}^y%zd^bLK4f-VXoh*O3RI^3~CXcVbw{D}?P zZ_()Ccu%g9cnQNW2m$~?2u#y;9RMPVqR1dKJ4`*oaBFjarqWt6OYA319llQR`VM#k z*GaPbP1Y%ZysYA+8R>)&`(#$%jyqefFUdO1%L+gt+fg=0MSR4?v<^Ml=I)-;cQ`Mr zLbd=NPXew#t;!*N;5cdCtv_tqGrrRQz(?nFf%$N-=XyKEni>pyX?@Psz-A+*m5U3q uVX?n?ruv@;8?`6R-vmZP_Uc(;KY0PH%vBWyZD*_i0000#FlEU+6J>swU0U3ZCBb|FqnUfga zJYn~xE{dOn^1fL@^nHxUpHW@0O%m~n&Qae4kk2B-e6ITD7nYnQQJNB>Z!<=JMiD@1 z47tR$KNAu_dk46{wLb&xK#va~j1M4)45?Ng=ldLQvQqajdtgrxI-9t|N2_yGU_|Nn_jAlv`|00v1! bK~w_(Y1pm&+;q$Q00000NkvXXu0mjfME;E2 literal 0 HcmV?d00001 diff --git a/src/main/resources/fusion/assets/ragium/textures/block/small_drum_top.png.mcmeta b/src/main/resources/fusion/assets/ragium/textures/block/warped_crystal_glass.png.mcmeta similarity index 100% rename from src/main/resources/fusion/assets/ragium/textures/block/small_drum_top.png.mcmeta rename to src/main/resources/fusion/assets/ragium/textures/block/warped_crystal_glass.png.mcmeta From bcfddc0f4febf2353be18bddae41f4da887ae71e Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Fri, 12 Dec 2025 07:40:41 +0900 Subject: [PATCH 33/49] feat: update scripts --- .../ragium/api/upgrade/RagiumUpgradeKeys.kt | 13 +++- .../data/client/RagiumEnglishProvider.kt | 5 +- .../data/client/RagiumJapaneseProvider.kt | 5 +- .../recipe/RagiumChemistryRecipeProvider.kt | 2 - .../recipe/RagiumEnchantingRecipeProvider.kt | 2 - .../recipe/RagiumMachineRecipeProvider.kt | 21 +++--- .../client/integration/emi/RagiumEmiPlugin.kt | 29 ++------ .../emi/category/HTEmiRecipeCategory.kt | 35 ++-------- .../emi/category/RagiumEmiRecipeCategories.kt | 24 ++++--- .../recipe/custom/HTExpExtractingEmiRecipe.kt | 10 +-- .../processor/HTItemWithCatalystEmiRecipe.kt | 4 +- .../processor/HTAdvancedMixerBlockEntity.kt | 2 +- .../processor/HTCompressorBlockEntity.kt | 8 ++- .../processor/HTExtractorBlockEntity.kt | 69 ++++++++++++++++++- .../entity/processor/HTMixerBlockEntity.kt | 2 +- .../processor/HTProcessorBlockEntity.kt | 8 +++ .../processor/HTSimulatorBlockEntity.kt | 2 +- .../processor/base/HTComplexBlockEntity.kt | 36 ++++++---- .../base/HTItemWithCatalystBlockEntity.kt | 9 +-- .../recipe/custom/HTBioExtractingRecipe.kt | 51 -------------- .../recipe/custom/HTExpExtractingRecipe.kt | 55 --------------- .../common/text/RagiumCommonTranslation.kt | 1 + .../ragium/setup/RagiumRecipeSerializers.kt | 10 --- 23 files changed, 170 insertions(+), 233 deletions(-) delete mode 100644 src/main/kotlin/hiiragi283/ragium/common/recipe/custom/HTBioExtractingRecipe.kt delete mode 100644 src/main/kotlin/hiiragi283/ragium/common/recipe/custom/HTExpExtractingRecipe.kt diff --git a/src/api/kotlin/hiiragi283/ragium/api/upgrade/RagiumUpgradeKeys.kt b/src/api/kotlin/hiiragi283/ragium/api/upgrade/RagiumUpgradeKeys.kt index 4e3eef7fa..2333fd0c0 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/upgrade/RagiumUpgradeKeys.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/upgrade/RagiumUpgradeKeys.kt @@ -23,15 +23,22 @@ object RagiumUpgradeKeys { val FLUID_CAPACITY: HTUpgradeKey = HTUpgradeKey.get("fluid_capacity") // Processor - @JvmField - val SPEED: HTUpgradeKey = HTUpgradeKey.get("speed") @JvmField - val USE_LUBRICANT: HTUpgradeKey = HTUpgradeKey.get("use_lubricant") + val COMPOSTING: HTUpgradeKey = HTUpgradeKey.get("composting") @JvmField val DISABLE_EXTRA: HTUpgradeKey = HTUpgradeKey.get("disable_extra") + @JvmField + val EXP_DRAIN: HTUpgradeKey = HTUpgradeKey.get("exp_drain") + + @JvmField + val SPEED: HTUpgradeKey = HTUpgradeKey.get("speed") + + @JvmField + val USE_LUBRICANT: HTUpgradeKey = HTUpgradeKey.get("use_lubricant") + // Device @JvmField val EXP_COLLECTING: HTUpgradeKey = HTUpgradeKey.get("exp_collecting") diff --git a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt index b10e454a7..b89170910 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt @@ -377,9 +377,11 @@ class RagiumEnglishProvider(output: PackOutput) : HTLanguageProvider.English(out add(RagiumUpgradeKeys.FLUID_CAPACITY, $$"- Fluid Capacity: %1$s") + add(RagiumUpgradeKeys.COMPOSTING, "- Convert input into Crude Bio") + add(RagiumUpgradeKeys.DISABLE_EXTRA, "- Extra output disabled") + add(RagiumUpgradeKeys.EXP_DRAIN, "- Extract Liquid Experience from enchanted item") add(RagiumUpgradeKeys.SPEED, $$"- Speed: %1$s") add(RagiumUpgradeKeys.USE_LUBRICANT, "- Use lubricant per operation") - add(RagiumUpgradeKeys.DISABLE_EXTRA, "- Extra output disabled") add(RagiumUpgradeKeys.EXP_COLLECTING, "- Collect Experience Orb instead of Water") add(RagiumUpgradeKeys.FISHING, "- Do fishing instead of collecting items") @@ -500,6 +502,7 @@ class RagiumEnglishProvider(output: PackOutput) : HTLanguageProvider.English(out private fun emi() { add(RagiumCommonTranslation.EMI_MACHINE_UPGRADE_TITLE, "Machine Upgrades") + add(RagiumCommonTranslation.EMI_COMPOSTING_TITLE, "Composting") add(RagiumCommonTranslation.EMI_BLOCK_CATALYST, "Placed below the block.") } diff --git a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt index 7fe4e158b..00c4c3999 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt @@ -379,9 +379,11 @@ class RagiumJapaneseProvider(output: PackOutput) : HTLanguageProvider.Japanese(o add(RagiumUpgradeKeys.FLUID_CAPACITY, $$"- 液体容量: %1$s") + add(RagiumUpgradeKeys.COMPOSTING, "- アイテムを未加工バイオに変換") + add(RagiumUpgradeKeys.DISABLE_EXTRA, "- 追加の生産物を無効化") + add(RagiumUpgradeKeys.EXP_DRAIN, "- エンチャントされたアイテムから液体経験値を抽出") add(RagiumUpgradeKeys.SPEED, $$"- 処理速度: %1$s") add(RagiumUpgradeKeys.USE_LUBRICANT, "- 処理ごとに潤滑油を消費") - add(RagiumUpgradeKeys.DISABLE_EXTRA, "- 追加の生産物を無効化") add(RagiumUpgradeKeys.EXP_COLLECTING, "- 水の代わりに経験値オーブを収集") add(RagiumUpgradeKeys.FISHING, "- アイテム収集の代わりに釣りを実行") @@ -505,6 +507,7 @@ class RagiumJapaneseProvider(output: PackOutput) : HTLanguageProvider.Japanese(o private fun emi() { add(RagiumCommonTranslation.EMI_MACHINE_UPGRADE_TITLE, "機械のアップグレード") + add(RagiumCommonTranslation.EMI_COMPOSTING_TITLE, "コンポスト") add(RagiumCommonTranslation.EMI_BLOCK_CATALYST, "ブロックの下に設置します。") } diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumChemistryRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumChemistryRecipeProvider.kt index 7f05fb35d..c6674f8c9 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumChemistryRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumChemistryRecipeProvider.kt @@ -24,7 +24,6 @@ import hiiragi283.ragium.common.material.HTColorMaterial import hiiragi283.ragium.common.material.RagiumMaterialKeys import hiiragi283.ragium.common.material.RagiumMoltenCrystalData import hiiragi283.ragium.common.material.VanillaMaterialKeys -import hiiragi283.ragium.common.recipe.custom.HTBioExtractingRecipe import hiiragi283.ragium.common.variant.HTColoredVariant import hiiragi283.ragium.impl.data.recipe.material.RagiumMaterialRecipeData import hiiragi283.ragium.setup.RagiumBlocks @@ -643,7 +642,6 @@ object RagiumChemistryRecipeProvider : HTRecipeProvider.Direct() { @JvmStatic private fun biomass() { - save(HTBioExtractingRecipe.RECIPE_ID, HTBioExtractingRecipe) // Biomass -> Crude Bio HTFluidRecipeBuilder .melting( diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumEnchantingRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumEnchantingRecipeProvider.kt index 0dd023e93..675368a47 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumEnchantingRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumEnchantingRecipeProvider.kt @@ -7,7 +7,6 @@ import hiiragi283.ragium.common.material.CommonMaterialPrefixes import hiiragi283.ragium.common.material.RagiumMaterialKeys import hiiragi283.ragium.common.material.VanillaMaterialKeys import hiiragi283.ragium.common.recipe.custom.HTCopyEnchantingRecipe -import hiiragi283.ragium.common.recipe.custom.HTExpExtractingRecipe import hiiragi283.ragium.setup.RagiumEnchantments import hiiragi283.ragium.setup.RagiumItems import net.minecraft.core.HolderGetter @@ -22,7 +21,6 @@ object RagiumEnchantingRecipeProvider : HTRecipeProvider.Direct() { private val enchLookup: HolderGetter by lazy { provider.lookupOrThrow(Registries.ENCHANTMENT) } override fun buildRecipeInternal() { - save(HTExpExtractingRecipe.RECIPE_ID, HTExpExtractingRecipe) save(HTCopyEnchantingRecipe.RECIPE_ID, HTCopyEnchantingRecipe) // Vanilla diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumMachineRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumMachineRecipeProvider.kt index ce050c5e6..11153065e 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumMachineRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumMachineRecipeProvider.kt @@ -351,11 +351,11 @@ object RagiumMachineRecipeProvider : HTRecipeProvider.Direct() { HTUpgradeVariant.SPEED -> RagiumMaterialKeys.CRIMSON_CRYSTAL } HTShapedRecipeBuilder - .cross8Mirrored(output, upgrade) { - define('A', CommonMaterialPrefixes.INGOT, RagiumMaterialKeys.AZURE_STEEL) - define('B', RagiumModTags.Items.PLASTICS) - define('C', CommonMaterialPrefixes.GEM, gem) - } + .create(upgrade) + .cross8() + .define('A', CommonMaterialPrefixes.INGOT, RagiumMaterialKeys.AZURE_STEEL) + .define('B', RagiumModTags.Items.PLASTICS) + .define('C', CommonMaterialPrefixes.GEM, gem) } for ((variant: HTUpgradeVariant, upgrade: ItemLike) in RagiumItems.MACHINE_UPGRADES.column(HTBaseTier.ADVANCED)) { @@ -369,10 +369,10 @@ object RagiumMachineRecipeProvider : HTRecipeProvider.Direct() { // Processor processorUpgrade(RagiumItems.EFFICIENT_CRUSH_UPGRADE) { - define('B', RagiumFluidContents.LUBRICANT.bucketTag) + define('C', RagiumFluidContents.LUBRICANT.bucketTag) } processorUpgrade(RagiumItems.PRIMARY_ONLY_UPGRADE) { - define('B', Tags.Items.BUCKETS_LAVA) + define('C', Tags.Items.BUCKETS_LAVA) } // Device @@ -391,8 +391,9 @@ object RagiumMachineRecipeProvider : HTRecipeProvider.Direct() { private inline fun processorUpgrade(upgrade: ItemLike, action: HTShapedRecipeBuilder.() -> Unit) { HTShapedRecipeBuilder .create(upgrade) - .hollow4() - .define('A', CommonMaterialPrefixes.INGOT, RagiumMaterialKeys.ADVANCED_RAGI_ALLOY) + .cross8() + .define('A', CommonMaterialPrefixes.PLATE, CommonMaterialKeys.PLASTIC) + .define('B', CommonMaterialPrefixes.PLATE, CommonMaterialKeys.RUBBER) .apply(action) .save(output) } @@ -402,7 +403,7 @@ object RagiumMachineRecipeProvider : HTRecipeProvider.Direct() { HTShapedRecipeBuilder .create(upgrade) .hollow4() - .define('A', CommonMaterialPrefixes.PLATE, CommonMaterialKeys.RUBBER) + .define('A', CommonMaterialPrefixes.INGOT, RagiumMaterialKeys.NIGHT_METAL) .apply(action) .save(output) } 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 5480af689..562135eba 100644 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/RagiumEmiPlugin.kt +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/RagiumEmiPlugin.kt @@ -12,25 +12,21 @@ import dev.emi.emi.api.recipe.VanillaEmiRecipeCategories import dev.emi.emi.api.stack.Comparison import dev.emi.emi.api.stack.EmiStack import hiiragi283.ragium.api.RagiumAPI +import hiiragi283.ragium.api.RagiumConst import hiiragi283.ragium.api.data.map.HTFluidCoolantData import hiiragi283.ragium.api.data.map.HTFluidFuelData import hiiragi283.ragium.api.data.map.RagiumDataMapTypes -import hiiragi283.ragium.api.data.recipe.HTResultHelper import hiiragi283.ragium.api.function.partially1 import hiiragi283.ragium.api.item.alchemy.HTPotionHelper import hiiragi283.ragium.api.item.createItemStack import hiiragi283.ragium.api.recipe.HTRecipe import hiiragi283.ragium.api.recipe.RagiumRecipeTypes -import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient 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.api.stack.ImmutableFluidStack -import hiiragi283.ragium.api.util.Ior -import hiiragi283.ragium.api.util.wrapOptional import hiiragi283.ragium.client.integration.emi.category.HTEmiRecipeCategory import hiiragi283.ragium.client.integration.emi.category.RagiumEmiRecipeCategories import hiiragi283.ragium.client.integration.emi.data.HTEmiFluidFuelData @@ -55,12 +51,10 @@ import hiiragi283.ragium.client.integration.emi.recipe.processor.HTSolidifyingEm import hiiragi283.ragium.common.block.HTImitationSpawnerBlock import hiiragi283.ragium.common.block.entity.HTBlockEntity import hiiragi283.ragium.common.block.entity.generator.HTCulinaryGeneratorBlockEntity +import hiiragi283.ragium.common.block.entity.processor.HTExtractorBlockEntity import hiiragi283.ragium.common.material.CommonMaterialPrefixes import hiiragi283.ragium.common.material.FoodMaterialKeys -import hiiragi283.ragium.common.recipe.HTExtractingRecipe -import hiiragi283.ragium.common.recipe.custom.HTBioExtractingRecipe import hiiragi283.ragium.common.recipe.custom.HTCopyEnchantingRecipe -import hiiragi283.ragium.common.recipe.custom.HTExpExtractingRecipe import hiiragi283.ragium.setup.DeferredBEMenu import hiiragi283.ragium.setup.RagiumBlocks import hiiragi283.ragium.setup.RagiumDataComponents @@ -81,10 +75,8 @@ 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.Ingredient import net.minecraft.world.item.crafting.RecipeHolder import net.minecraft.world.level.ItemLike -import net.minecraft.world.level.block.ComposterBlock import net.minecraft.world.level.material.Fluid import net.minecraft.world.level.material.Fluids import net.neoforged.neoforge.common.Tags @@ -317,21 +309,8 @@ class RagiumEmiPlugin : EmiPlugin { addRegistryRecipes(registry, RagiumRecipeTypes.CUTTING, HTSingleExtraItemEmiRecipe::cutting) addRegistryRecipes(registry, RagiumRecipeTypes.EXTRACTING, HTItemWithCatalystEmiRecipe::extracting) - addItemStackRecipes( - registry, - "crude_bio", - { stack: ItemStack -> - val crudeBio: ImmutableFluidStack = HTBioExtractingRecipe.getCrudeBio(ComposterBlock.getValue(stack)) - ?: return@addItemStackRecipes null - HTExtractingRecipe( - HTItemIngredient(Ingredient.of(stack), 1), - HTItemIngredient(Ingredient.of(Items.COMPOSTER), 1).wrapOptional(), - Ior.Right(HTResultHelper.fluid(crudeBio)), - ) - }, - HTItemWithCatalystEmiRecipe::extracting, - ) - registry.addRecipeSafe(HTExpExtractingRecipe.RECIPE_ID.withPrefix("/"), ::HTExpExtractingEmiRecipe) + addItemStackRecipes(registry, "crude_bio", HTExtractorBlockEntity::createComposting, HTItemWithCatalystEmiRecipe::composting) + registry.addRecipeSafe(RagiumAPI.id("/${RagiumConst.EXTRACTING}", "experience_from_items"), ::HTExpExtractingEmiRecipe) // Advanced addRegistryRecipes(registry, RagiumRecipeTypes.MELTING, ::HTMeltingEmiRecipe) addRegistryRecipes(registry, RagiumRecipeTypes.MIXING, ::HTMixingEmiRecipe) diff --git a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/category/HTEmiRecipeCategory.kt b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/category/HTEmiRecipeCategory.kt index db96eac9c..429f9a926 100644 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/category/HTEmiRecipeCategory.kt +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/category/HTEmiRecipeCategory.kt @@ -6,7 +6,6 @@ import dev.emi.emi.api.recipe.EmiRecipeSorting import dev.emi.emi.api.render.EmiRenderable import dev.emi.emi.api.stack.EmiStack import hiiragi283.ragium.api.math.HTBounds -import hiiragi283.ragium.api.registry.HTItemHolderLike import hiiragi283.ragium.api.registry.impl.HTDeferredRecipeType import hiiragi283.ragium.api.text.HTHasText import hiiragi283.ragium.client.integration.emi.toEmi @@ -26,44 +25,24 @@ open class HTEmiRecipeCategory( ) : EmiRecipeCategory(id, icon, simplified, sorter) { companion object { @JvmStatic - fun create( + fun create( bounds: HTBounds, - item: ITEM, hasText: HTHasText, + id: ResourceLocation, + vararg workStations: ItemLike, sorter: Comparator = EmiRecipeSorting.compareOutputThenInput(), ): HTEmiRecipeCategory = HTEmiRecipeCategory( bounds, hasText, - listOf(item.toEmi()), - item.getId(), - item.toEmi(), - sorter = sorter, - ) - - @JvmStatic - fun create( - bounds: HTBounds, - item: ITEM, - sorter: Comparator = EmiRecipeSorting.compareOutputThenInput(), - ): HTEmiRecipeCategory where ITEM : HTItemHolderLike, ITEM : HTHasText = create( - bounds, - item, - item, + workStations.map(ItemLike::toEmi), + id, + workStations[0].toEmi(), sorter = sorter, ) - @JvmStatic - fun create( - bounds: HTBounds, - recipeType: HTDeferredRecipeType<*, *>, - workStations: List, - icon: EmiRenderable, - ): HTEmiRecipeCategory = - HTEmiRecipeCategory(bounds, recipeType, workStations, recipeType.id, icon, icon, EmiRecipeSorting.compareOutputThenInput()) - @JvmStatic fun create(bounds: HTBounds, recipeType: HTDeferredRecipeType<*, *>, vararg workStations: ItemLike): HTEmiRecipeCategory = - create(bounds, recipeType, workStations.map(ItemLike::toEmi), workStations[0].toEmi()) + create(bounds, recipeType, recipeType.id, *workStations) } override fun getName(): Component = hasText.getText() 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 25ddd3882..46c6de964 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 @@ -2,6 +2,7 @@ package hiiragi283.ragium.client.integration.emi.category import dev.emi.emi.api.EmiRegistry import dev.emi.emi.api.recipe.VanillaEmiRecipeCategories +import hiiragi283.ragium.api.RagiumAPI import hiiragi283.ragium.api.function.partially1 import hiiragi283.ragium.api.math.HTBounds import hiiragi283.ragium.api.recipe.RagiumRecipeTypes @@ -13,8 +14,6 @@ import hiiragi283.ragium.common.material.RagiumMaterialKeys import hiiragi283.ragium.common.text.RagiumCommonTranslation import hiiragi283.ragium.setup.RagiumBlocks import hiiragi283.ragium.setup.RagiumItems -import net.minecraft.world.item.crafting.Recipe -import net.minecraft.world.item.crafting.RecipeInput import net.minecraft.world.level.ItemLike object RagiumEmiRecipeCategories { @@ -24,8 +23,9 @@ object RagiumEmiRecipeCategories { @JvmField val MACHINE_UPGRADE: HTEmiRecipeCategory = HTEmiRecipeCategory.create( MACHINE_BOUNDS, - RagiumItems.getHammer(RagiumMaterialKeys.RAGI_ALLOY), RagiumCommonTranslation.EMI_MACHINE_UPGRADE_TITLE::translate, + RagiumAPI.id("machine_upgrade"), + RagiumItems.getHammer(RagiumMaterialKeys.RAGI_ALLOY), ) // Generators // @@ -35,7 +35,7 @@ object RagiumEmiRecipeCategories { @JvmStatic private fun generator(item: ITEM): HTEmiRecipeCategory where ITEM : HTItemHolderLike, ITEM : HTHasText = - HTEmiRecipeCategory.create(GENERATOR_BOUNDS, item) + HTEmiRecipeCategory.create(GENERATOR_BOUNDS, item, item.getId(), item) // Basic @JvmField @@ -58,10 +58,8 @@ object RagiumEmiRecipeCategories { // Processors // @JvmStatic - private fun > machine( - recipeType: HTDeferredRecipeType, - vararg workStations: ItemLike, - ): HTEmiRecipeCategory = HTEmiRecipeCategory.create(MACHINE_BOUNDS, recipeType, *workStations) + private fun machine(recipeType: HTDeferredRecipeType<*, *>, vararg workStations: ItemLike): HTEmiRecipeCategory = + HTEmiRecipeCategory.create(MACHINE_BOUNDS, recipeType, *workStations) // Basic @JvmField @@ -84,6 +82,14 @@ object RagiumEmiRecipeCategories { val EXTRACTING: HTEmiRecipeCategory = machine(RagiumRecipeTypes.EXTRACTING, RagiumBlocks.EXTRACTOR) + @JvmField + val COMPOSTING: HTEmiRecipeCategory = HTEmiRecipeCategory.create( + MACHINE_BOUNDS, + RagiumCommonTranslation.EMI_COMPOSTING_TITLE::translate, + RagiumAPI.id("composting"), + RagiumBlocks.EXTRACTOR, + ) + // Advanced @JvmField val MELTING: HTEmiRecipeCategory = @@ -145,6 +151,8 @@ object RagiumEmiRecipeCategories { register(registry, CUTTING) register(registry, EXTRACTING) + register(registry, COMPOSTING) + register(registry, MELTING) register(registry, MIXING) register(registry, REFINING) diff --git a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/custom/HTExpExtractingEmiRecipe.kt b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/custom/HTExpExtractingEmiRecipe.kt index 4d7c964cc..c1f7d8163 100644 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/custom/HTExpExtractingEmiRecipe.kt +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/custom/HTExpExtractingEmiRecipe.kt @@ -7,14 +7,10 @@ import hiiragi283.ragium.client.integration.emi.addArrow import hiiragi283.ragium.client.integration.emi.category.RagiumEmiRecipeCategories import hiiragi283.ragium.client.integration.emi.recipe.HTEmiRecipe import hiiragi283.ragium.client.integration.emi.toFluidEmi -import hiiragi283.ragium.common.recipe.custom.HTExpExtractingRecipe import hiiragi283.ragium.setup.RagiumFluidContents import net.minecraft.resources.ResourceLocation -import net.minecraft.world.item.Items -import net.minecraft.world.item.crafting.RecipeHolder -class HTExpExtractingEmiRecipe(id: ResourceLocation) : - HTEmiRecipe(RagiumEmiRecipeCategories.EXTRACTING, id, HTExpExtractingRecipe) { +class HTExpExtractingEmiRecipe(id: ResourceLocation) : HTEmiRecipe(RagiumEmiRecipeCategories.EXTRACTING, id, Unit) { companion object { @JvmStatic private val UNIQUE_ID: Int = EmiUtil.RANDOM.nextInt() @@ -25,11 +21,9 @@ class HTExpExtractingEmiRecipe(id: ResourceLocation) : // Input widgets.addGeneratedSlot({ HTEnchantEmiRecipeHelper.getTool(it, 0) }, UNIQUE_ID, getPosition(1), getPosition(0)) - widgets.addSlot(EmiStack.of(Items.GRINDSTONE), getPosition(1), getPosition(2)).catalyst(true) + widgets.addSlot(EmiStack.EMPTY, getPosition(1), getPosition(2)).catalyst(true) // Output widgets.addGeneratedOutput({ HTEnchantEmiRecipeHelper.getTool(it, 1) }, UNIQUE_ID, getPosition(4.5), getPosition(0) + 4, true) widgets.addSlot(RagiumFluidContents.EXPERIENCE.toFluidEmi(), getPosition(4.5), getPosition(2)) } - - override fun getBackingRecipe(): RecipeHolder = RecipeHolder(id, HTExpExtractingRecipe) } diff --git a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTItemWithCatalystEmiRecipe.kt b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTItemWithCatalystEmiRecipe.kt index 054e2d3fc..cd1f32de9 100644 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTItemWithCatalystEmiRecipe.kt +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTItemWithCatalystEmiRecipe.kt @@ -28,8 +28,8 @@ class HTItemWithCatalystEmiRecipe : HTMultiOutputsEmiRecipe): HTItemWithCatalystEmiRecipe = 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 ecaf373ab..c3cc864a9 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 @@ -19,7 +19,7 @@ import net.minecraft.core.BlockPos import net.minecraft.world.level.block.state.BlockState class HTAdvancedMixerBlockEntity(pos: BlockPos, state: BlockState) : - HTComplexBlockEntity( + HTComplexBlockEntity.Cached( RagiumRecipeTypes.MIXING, RagiumBlocks.ADVANCED_MIXER, pos, 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 18bad3206..e64182f38 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,9 +1,11 @@ package hiiragi283.ragium.common.block.entity.processor +import hiiragi283.ragium.api.recipe.HTRecipeCache import hiiragi283.ragium.api.recipe.RagiumRecipeTypes 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.common.recipe.HTFinderRecipeCache import hiiragi283.ragium.setup.RagiumBlocks import net.minecraft.core.BlockPos import net.minecraft.server.level.ServerLevel @@ -13,11 +15,15 @@ import net.minecraft.world.level.block.state.BlockState class HTCompressorBlockEntity(pos: BlockPos, state: BlockState) : HTItemWithCatalystBlockEntity( - RagiumRecipeTypes.COMPRESSING, RagiumBlocks.COMPRESSOR, pos, state, ) { + private val recipeCache: HTRecipeCache = HTFinderRecipeCache(RagiumRecipeTypes.COMPRESSING) + + override fun getMatchedRecipe(input: HTRecipeInput, level: ServerLevel): HTItemWithCatalystRecipe? = + recipeCache.getFirstRecipe(input, level) + override fun completeRecipe( level: ServerLevel, pos: BlockPos, 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 f8003706f..164c2aeb9 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,23 +1,90 @@ package hiiragi283.ragium.common.block.entity.processor +import hiiragi283.ragium.api.data.recipe.HTResultHelper +import hiiragi283.ragium.api.math.times +import hiiragi283.ragium.api.math.toFraction +import hiiragi283.ragium.api.recipe.HTRecipeCache import hiiragi283.ragium.api.recipe.RagiumRecipeTypes +import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient import hiiragi283.ragium.api.recipe.input.HTRecipeInput import hiiragi283.ragium.api.recipe.multi.HTItemWithCatalystRecipe +import hiiragi283.ragium.api.stack.ImmutableFluidStack +import hiiragi283.ragium.api.upgrade.RagiumUpgradeKeys +import hiiragi283.ragium.api.util.Ior import hiiragi283.ragium.common.block.entity.processor.base.HTItemWithCatalystBlockEntity +import hiiragi283.ragium.common.recipe.HTExtractingRecipe +import hiiragi283.ragium.common.recipe.HTFinderRecipeCache import hiiragi283.ragium.setup.RagiumBlocks +import hiiragi283.ragium.setup.RagiumFluidContents +import hiiragi283.ragium.util.HTExperienceHelper 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.ItemStack +import net.minecraft.world.item.crafting.Ingredient +import net.minecraft.world.item.enchantment.EnchantmentHelper +import net.minecraft.world.item.enchantment.ItemEnchantments +import net.minecraft.world.level.block.ComposterBlock import net.minecraft.world.level.block.state.BlockState +import java.util.* class HTExtractorBlockEntity(pos: BlockPos, state: BlockState) : HTItemWithCatalystBlockEntity( - RagiumRecipeTypes.EXTRACTING, RagiumBlocks.EXTRACTOR, pos, state, ) { + companion object { + @JvmStatic + fun getCrudeBio(chance: Float): ImmutableFluidStack? { + if (chance <= 0f) return null + return RagiumFluidContents.CRUDE_BIO.toImmutableStack((1000 * chance.toFraction()).toInt()) + } + + @JvmStatic + fun createComposting(item: ItemStack): HTExtractingRecipe? { + val chance: Float = ComposterBlock.getValue(item) + if (chance <= 0f) return null + val crudeBio: ImmutableFluidStack = getCrudeBio(chance) ?: return null + return HTExtractingRecipe( + HTItemIngredient(Ingredient.of(item), 1), + Optional.empty(), + Ior.Right(HTResultHelper.fluid(crudeBio)), + ) + } + } + + private val recipeCache: HTRecipeCache = + HTFinderRecipeCache(RagiumRecipeTypes.EXTRACTING) + + override fun getMatchedRecipe(input: HTRecipeInput, level: ServerLevel): HTItemWithCatalystRecipe? = when { + hasUpgrade(RagiumUpgradeKeys.COMPOSTING) -> + input + .item(0) + ?.unwrap() + ?.let(::createComposting) + hasUpgrade(RagiumUpgradeKeys.EXP_DRAIN) -> expExtracting(input) + else -> recipeCache.getFirstRecipe(input, level) + } + + private fun expExtracting(input: HTRecipeInput): HTItemWithCatalystRecipe? { + val stack: ItemStack = input.item(0)?.unwrap() ?: return null + val enchantments: ItemEnchantments = EnchantmentHelper.getEnchantmentsForCrafting(stack) + if (enchantments.isEmpty) return null + val expFluid: ImmutableFluidStack = enchantments + .let(HTExperienceHelper::getTotalMinCost) + .let(HTExperienceHelper::fluidAmountFromExp) + .let(RagiumFluidContents.EXPERIENCE::toImmutableStack) + ?: return null + stack.remove(EnchantmentHelper.getComponentType(stack)) + return HTExtractingRecipe( + HTItemIngredient(Ingredient.of(stack), 1), + Optional.empty(), + Ior.Both(resultHelper.item(stack), resultHelper.fluid(expFluid)), + ) + } + override fun completeRecipe( level: ServerLevel, pos: BlockPos, 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 c36321c9d..374cfadd8 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 @@ -20,7 +20,7 @@ import net.minecraft.server.level.ServerLevel import net.minecraft.world.level.block.state.BlockState class HTMixerBlockEntity(pos: BlockPos, state: BlockState) : - HTComplexBlockEntity( + HTComplexBlockEntity.Cached( RagiumRecipeTypes.MIXING, RagiumBlocks.MIXER, pos, 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 6b34ff7bf..828aa6751 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 @@ -1,5 +1,9 @@ package hiiragi283.ragium.common.block.entity.processor +import hiiragi283.ragium.api.RagiumPlatform +import hiiragi283.ragium.api.data.recipe.HTResultHelper +import hiiragi283.ragium.api.data.recipe.ingredient.HTFluidIngredientCreator +import hiiragi283.ragium.api.data.recipe.ingredient.HTItemIngredientCreator import hiiragi283.ragium.api.math.div import hiiragi283.ragium.api.math.fraction import hiiragi283.ragium.api.math.minus @@ -39,6 +43,10 @@ abstract class HTProcessorBlockEntity(blockHolder: Ho battery = builder.addSlot(HTSlotInfo.INPUT, HTMachineEnergyBattery.input(listener, this)) } + val itemCreator: HTItemIngredientCreator get() = RagiumPlatform.INSTANCE.itemCreator() + val fluidCreator: HTFluidIngredientCreator get() = RagiumPlatform.INSTANCE.fluidCreator() + val resultHelper: HTResultHelper = HTResultHelper + // Ticking // protected var requiredEnergy: Int = 0 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 2eab64b9a..3b33530e2 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 @@ -17,7 +17,7 @@ import net.minecraft.sounds.SoundSource import net.minecraft.world.level.block.state.BlockState class HTSimulatorBlockEntity(pos: BlockPos, state: BlockState) : - HTComplexBlockEntity( + HTComplexBlockEntity.Cached( RagiumRecipeTypes.SIMULATING, RagiumBlocks.SIMULATOR, pos, 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 e1a872fb3..86a22b372 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 @@ -10,6 +10,7 @@ import hiiragi283.ragium.api.storage.HTStorageAction import hiiragi283.ragium.api.storage.holder.HTSlotInfo import hiiragi283.ragium.api.util.HTContentListener import hiiragi283.ragium.common.block.entity.processor.HTProcessorBlockEntity +import hiiragi283.ragium.common.recipe.HTFinderRecipeCache import hiiragi283.ragium.common.storage.fluid.tank.HTBasicFluidTank import hiiragi283.ragium.common.storage.fluid.tank.HTVariableFluidTank import hiiragi283.ragium.common.storage.holder.HTBasicFluidTankHolder @@ -22,21 +23,8 @@ import net.minecraft.server.level.ServerLevel import net.minecraft.world.level.block.Block import net.minecraft.world.level.block.state.BlockState -abstract class HTComplexBlockEntity : HTProcessorBlockEntity.Cached { - constructor( - recipeCache: HTRecipeCache, - blockHolder: Holder, - pos: BlockPos, - state: BlockState, - ) : super(recipeCache, blockHolder, pos, state) - - constructor( - finder: HTRecipeFinder, - blockHolder: Holder, - pos: BlockPos, - state: BlockState, - ) : super(finder, blockHolder, pos, state) - +abstract class HTComplexBlockEntity(blockHolder: Holder, pos: BlockPos, state: BlockState) : + HTProcessorBlockEntity.RecipeBased(blockHolder, pos, state) { lateinit var outputTank: HTBasicFluidTank private set @@ -75,4 +63,22 @@ abstract class HTComplexBlockEntity : HTProcessorBlockEn outputSlot.insert(recipe.assembleItem(input, access), HTStorageAction.EXECUTE, HTStorageAccess.INTERNAL) outputTank.insert(recipe.assembleFluid(input, access), HTStorageAction.EXECUTE, HTStorageAccess.INTERNAL) } + + // Cached // + + abstract class Cached( + private val recipeCache: HTRecipeCache, + blockHolder: Holder, + pos: BlockPos, + state: BlockState, + ) : HTComplexBlockEntity(blockHolder, pos, state) { + constructor( + finder: HTRecipeFinder, + blockHolder: Holder, + pos: BlockPos, + state: BlockState, + ) : this(HTFinderRecipeCache(finder), blockHolder, pos, state) + + 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/base/HTItemWithCatalystBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/base/HTItemWithCatalystBlockEntity.kt index 2cebed5d5..ab4552262 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/base/HTItemWithCatalystBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/base/HTItemWithCatalystBlockEntity.kt @@ -1,6 +1,5 @@ package hiiragi283.ragium.common.block.entity.processor.base -import hiiragi283.ragium.api.recipe.HTRecipeFinder import hiiragi283.ragium.api.recipe.input.HTRecipeInput import hiiragi283.ragium.api.recipe.multi.HTItemWithCatalystRecipe import hiiragi283.ragium.api.storage.HTStorageAccess @@ -16,12 +15,8 @@ import net.minecraft.server.level.ServerLevel import net.minecraft.world.level.block.Block import net.minecraft.world.level.block.state.BlockState -abstract class HTItemWithCatalystBlockEntity( - finder: HTRecipeFinder, - blockHolder: Holder, - pos: BlockPos, - state: BlockState, -) : HTComplexBlockEntity(finder, blockHolder, pos, state) { +abstract class HTItemWithCatalystBlockEntity(blockHolder: Holder, pos: BlockPos, state: BlockState) : + HTComplexBlockEntity(blockHolder, pos, state) { lateinit var inputSlot: HTBasicItemSlot private set lateinit var catalystSlot: HTBasicItemSlot diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/custom/HTBioExtractingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/custom/HTBioExtractingRecipe.kt deleted file mode 100644 index b12f990a0..000000000 --- a/src/main/kotlin/hiiragi283/ragium/common/recipe/custom/HTBioExtractingRecipe.kt +++ /dev/null @@ -1,51 +0,0 @@ -package hiiragi283.ragium.common.recipe.custom - -import hiiragi283.ragium.api.RagiumAPI -import hiiragi283.ragium.api.RagiumConst -import hiiragi283.ragium.api.math.times -import hiiragi283.ragium.api.math.toFraction -import hiiragi283.ragium.api.recipe.RagiumRecipeTypes -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.setup.RagiumFluidContents -import hiiragi283.ragium.setup.RagiumRecipeSerializers -import net.minecraft.core.HolderLookup -import net.minecraft.resources.ResourceLocation -import net.minecraft.world.item.Items -import net.minecraft.world.item.crafting.RecipeSerializer -import net.minecraft.world.item.crafting.RecipeType -import net.minecraft.world.level.Level -import net.minecraft.world.level.block.ComposterBlock - -data object HTBioExtractingRecipe : HTItemWithCatalystRecipe { - @JvmField - val RECIPE_ID: ResourceLocation = RagiumAPI.id(RagiumConst.EXTRACTING, "crude_bio_from_items") - - @JvmStatic - fun getCrudeBio(chance: Float): ImmutableFluidStack? { - if (chance <= 0f) return null - return RagiumFluidContents.CRUDE_BIO.toImmutableStack((1000 * chance.toFraction()).toInt()) - } - - override fun assembleFluid(input: HTRecipeInput, provider: HolderLookup.Provider): ImmutableFluidStack? = input - .item(0) - ?.unwrap() - ?.let(ComposterBlock::getValue) - ?.let(::getCrudeBio) - - override fun assembleItem(input: HTRecipeInput, provider: HolderLookup.Provider): ImmutableItemStack? = null - - override fun matches(input: HTRecipeInput, level: Level): Boolean { - val bool1: Boolean = input.testItem(0) { stack: ImmutableItemStack -> ComposterBlock.getValue(stack.unwrap()) > 0f } - val bool2: Boolean = input.testItem(1) { stack: ImmutableItemStack -> stack.isOf(Items.COMPOSTER) } - return bool1 && bool2 - } - - override fun getSerializer(): RecipeSerializer<*> = RagiumRecipeSerializers.BIO_EXTRACTING - - override fun getType(): RecipeType<*> = RagiumRecipeTypes.EXTRACTING.get() - - override fun getRequiredCount(): Int = 1 -} diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/custom/HTExpExtractingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/custom/HTExpExtractingRecipe.kt deleted file mode 100644 index 2133c334f..000000000 --- a/src/main/kotlin/hiiragi283/ragium/common/recipe/custom/HTExpExtractingRecipe.kt +++ /dev/null @@ -1,55 +0,0 @@ -package hiiragi283.ragium.common.recipe.custom - -import hiiragi283.ragium.api.RagiumAPI -import hiiragi283.ragium.api.RagiumConst -import hiiragi283.ragium.api.recipe.RagiumRecipeTypes -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.setup.RagiumFluidContents -import hiiragi283.ragium.setup.RagiumRecipeSerializers -import hiiragi283.ragium.util.HTExperienceHelper -import net.minecraft.core.HolderLookup -import net.minecraft.resources.ResourceLocation -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 { - @JvmField - val RECIPE_ID: ResourceLocation = RagiumAPI.id(RagiumConst.EXTRACTING, "experience_from_items") - - 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: HTRecipeInput, provider: HolderLookup.Provider): ImmutableItemStack? { - val tool: ImmutableItemStack = input.item(0)?.copyWithAmount(1) ?: return null - return when { - tool.isOf(Items.ENCHANTED_BOOK) -> ImmutableItemStack.of(Items.BOOK) - else -> tool.minus(EnchantmentHelper.getComponentType(tool.unwrap())) - } - } - - 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 - - override fun getType(): RecipeType<*> = RagiumRecipeTypes.EXTRACTING.get() - - override fun getRequiredCount(): Int = 1 -} diff --git a/src/main/kotlin/hiiragi283/ragium/common/text/RagiumCommonTranslation.kt b/src/main/kotlin/hiiragi283/ragium/common/text/RagiumCommonTranslation.kt index 7312a3186..5efd19836 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/text/RagiumCommonTranslation.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/text/RagiumCommonTranslation.kt @@ -116,6 +116,7 @@ enum class RagiumCommonTranslation(type: String, vararg path: String) : HTTransl // EMI EMI_MACHINE_UPGRADE_TITLE("emi.category", "machine_upgrade"), + EMI_COMPOSTING_TITLE("emi.category", "composting"), EMI_BLOCK_CATALYST("description", "block_catalyst"), diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeSerializers.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeSerializers.kt index 57d28cd28..f0a17094f 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeSerializers.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeSerializers.kt @@ -29,9 +29,7 @@ import hiiragi283.ragium.common.recipe.HTExtractingRecipe import hiiragi283.ragium.common.recipe.HTMixingRecipe import hiiragi283.ragium.common.recipe.HTSimpleMixingRecipe import hiiragi283.ragium.common.recipe.HTSolidifyingRecipe -import hiiragi283.ragium.common.recipe.custom.HTBioExtractingRecipe import hiiragi283.ragium.common.recipe.custom.HTCopyEnchantingRecipe -import hiiragi283.ragium.common.recipe.custom.HTExpExtractingRecipe import net.minecraft.core.registries.Registries import net.minecraft.network.RegistryFriendlyByteBuf import net.minecraft.network.codec.StreamCodec @@ -61,10 +59,6 @@ object RagiumRecipeSerializers { // Custom // - @JvmField - val BIO_EXTRACTING: RecipeSerializer = - register("bio_extracting", HTBioExtractingRecipe) - @JvmField val CLEAR_COMPONENT: RecipeSerializer = register("clear_component", HTClearComponentRecipe.CODEC) @@ -77,10 +71,6 @@ object RagiumRecipeSerializers { val ETERNAL_UPGRADE: RecipeSerializer = register("eternal_upgrade", SimpleCraftingRecipeSerializer(::HTEternalUpgradeRecipe)) - @JvmField - val EXP_EXTRACTING: RecipeSerializer = - register("exp_extracting", HTExpExtractingRecipe) - @JvmField val GRAVITATIONAL_UPGRADE: RecipeSerializer = register("gravitational_upgrade", SimpleCraftingRecipeSerializer(::HTGravitationalUpgradeRecipe)) From 7f1f69fdd52b5169dceafc866a4c1ac847692cd2 Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Sat, 13 Dec 2025 22:37:34 +0900 Subject: [PATCH 34/49] feat: support group for upgrades --- .../attribute/HTUpgradeGroupBlockAttribute.kt | 6 + .../api/block/type/HTEntityBlockType.kt | 4 + .../ragium/api/data/map/HTUpgradeData.kt | 60 +++++++++ .../ragium/api/data/map/RagiumDataMapTypes.kt | 17 ++- .../api/serialization/codec/BiCodecs.kt | 12 +- .../ragium/api/text/RagiumTranslation.kt | 1 + .../api/upgrade/HTSlotUpgradeHandler.kt | 4 - .../ragium/api/upgrade/HTUpgradeGroup.kt | 26 ++++ .../ragium/api/upgrade/HTUpgradeHandler.kt | 4 +- .../ragium/api/upgrade/HTUpgradeHelper.kt | 29 +++-- .../ragium/api/upgrade/HTUpgradeKeys.kt | 28 +++++ .../HTUpgradePropertyMap.kt} | 21 ++-- .../ragium/api/upgrade/HTUpgradeProvider.kt | 4 +- .../ragium/api/upgrade/RagiumUpgradeKeys.kt | 51 -------- .../data/client/RagiumEnglishProvider.kt | 25 ++-- .../data/client/RagiumJapaneseProvider.kt | 25 ++-- .../data/server/RagiumDataMapProvider.kt | 53 ++++++++ .../client/integration/emi/RagiumEmiPlugin.kt | 11 -- .../emi/category/HTEmiRecipeCategory.kt | 5 - .../emi/category/RagiumEmiRecipeCategories.kt | 17 +-- .../integration/emi/recipe/HTEmiRecipe.kt | 2 +- .../custom/HTMachineUpgradeEmiRecipe.kt | 36 ------ .../HTBlockMachinePropertiesProvider.kt | 12 +- .../common/RagiumAlmostUnifiedPlugin.kt | 2 +- .../kotlin/hiiragi283/ragium/RagiumCommon.kt | 1 + .../hiiragi283/ragium/client/RagiumClient.kt | 2 +- .../gui/screen/processor/HTCrusherScreen.kt | 2 +- .../client/model/HTFuelGeneratorModel.kt | 4 +- .../block/entity/HTUpgradableBlockEntity.kt | 4 + .../component/HTMachineUpgradeComponent.kt | 19 +++ .../device/HTFluidCollectorBlockEntity.kt | 2 +- .../device/HTItemCollectorBlockEntity.kt | 2 +- .../HTSolarPanelControllerBlockEntity.kt | 4 +- .../base/HTFuelGeneratorBlockEntity.kt | 4 +- .../entity/processor/HTCrusherBlockEntity.kt | 2 +- .../processor/HTCuttingMachineBlockEntity.kt | 2 +- .../processor/HTExtractorBlockEntity.kt | 2 +- .../processor/HTMultiSmelterBlockEntity.kt | 4 +- .../processor/HTProcessorBlockEntity.kt | 6 +- .../base/HTAbstractCrusherBlockEntity.kt | 2 +- .../upgrade/HTComponentUpgradeHandler.kt | 16 ++- .../common/upgrade/RagiumUpgradeGroups.kt | 15 +++ .../common/upgrade/RagiumUpgradeKeys.kt | 36 ++++++ .../ragium/setup/RagiumBlockTypes.kt | 3 + .../ragium/setup/RagiumDataComponents.kt | 9 +- .../hiiragi283/ragium/setup/RagiumItems.kt | 117 +++++------------- .../ragium/setup/RagiumMiscRegister.kt | 1 - 47 files changed, 425 insertions(+), 289 deletions(-) create mode 100644 src/api/kotlin/hiiragi283/ragium/api/block/attribute/HTUpgradeGroupBlockAttribute.kt create mode 100644 src/api/kotlin/hiiragi283/ragium/api/data/map/HTUpgradeData.kt create mode 100644 src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeGroup.kt create mode 100644 src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeKeys.kt rename src/api/kotlin/hiiragi283/ragium/api/{item/component/HTComponentUpgrade.kt => upgrade/HTUpgradePropertyMap.kt} (55%) delete mode 100644 src/api/kotlin/hiiragi283/ragium/api/upgrade/RagiumUpgradeKeys.kt delete mode 100644 src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/custom/HTMachineUpgradeEmiRecipe.kt create mode 100644 src/main/kotlin/hiiragi283/ragium/common/upgrade/RagiumUpgradeGroups.kt create mode 100644 src/main/kotlin/hiiragi283/ragium/common/upgrade/RagiumUpgradeKeys.kt diff --git a/src/api/kotlin/hiiragi283/ragium/api/block/attribute/HTUpgradeGroupBlockAttribute.kt b/src/api/kotlin/hiiragi283/ragium/api/block/attribute/HTUpgradeGroupBlockAttribute.kt new file mode 100644 index 000000000..854761ee8 --- /dev/null +++ b/src/api/kotlin/hiiragi283/ragium/api/block/attribute/HTUpgradeGroupBlockAttribute.kt @@ -0,0 +1,6 @@ +package hiiragi283.ragium.api.block.attribute + +import hiiragi283.ragium.api.upgrade.HTUpgradeGroup + +@JvmInline +value class HTUpgradeGroupBlockAttribute(val group: HTUpgradeGroup) : HTBlockAttribute diff --git a/src/api/kotlin/hiiragi283/ragium/api/block/type/HTEntityBlockType.kt b/src/api/kotlin/hiiragi283/ragium/api/block/type/HTEntityBlockType.kt index 15afdd7bd..24b68a1c8 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/block/type/HTEntityBlockType.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/block/type/HTEntityBlockType.kt @@ -6,11 +6,13 @@ import hiiragi283.ragium.api.block.attribute.HTEnergyBlockAttribute import hiiragi283.ragium.api.block.attribute.HTFluidBlockAttribute import hiiragi283.ragium.api.block.attribute.HTMenuBlockAttribute import hiiragi283.ragium.api.block.attribute.HTTierBlockAttribute +import hiiragi283.ragium.api.block.attribute.HTUpgradeGroupBlockAttribute import hiiragi283.ragium.api.collection.AttributeMap import hiiragi283.ragium.api.registry.impl.HTDeferredBlockEntityType import hiiragi283.ragium.api.registry.impl.HTDeferredMenuType import hiiragi283.ragium.api.text.HTTranslation import hiiragi283.ragium.api.tier.HTTierProvider +import hiiragi283.ragium.api.upgrade.HTUpgradeGroup import net.minecraft.world.level.block.entity.BlockEntity import java.util.function.IntSupplier import java.util.function.Supplier @@ -72,6 +74,8 @@ open class HTEntityBlockType( fun addFluid(tankMap: Map): BUILDER = add(HTFluidBlockAttribute(tankMap)) + fun addUpgradeGroup(group: HTUpgradeGroup): BUILDER = add(HTUpgradeGroupBlockAttribute(group)) + /** * ティアを追加します。 * @param TIER [HTTierProvider]を実装したクラス diff --git a/src/api/kotlin/hiiragi283/ragium/api/data/map/HTUpgradeData.kt b/src/api/kotlin/hiiragi283/ragium/api/data/map/HTUpgradeData.kt new file mode 100644 index 000000000..a6d510dbc --- /dev/null +++ b/src/api/kotlin/hiiragi283/ragium/api/data/map/HTUpgradeData.kt @@ -0,0 +1,60 @@ +package hiiragi283.ragium.api.data.map + +import hiiragi283.ragium.api.math.fraction +import hiiragi283.ragium.api.serialization.codec.BiCodec +import hiiragi283.ragium.api.upgrade.HTUpgradeGroup +import hiiragi283.ragium.api.upgrade.HTUpgradeKey +import hiiragi283.ragium.api.upgrade.HTUpgradePropertyMap +import hiiragi283.ragium.api.util.wrapOptional +import io.netty.buffer.ByteBuf +import org.apache.commons.lang3.math.Fraction +import java.util.Optional +import kotlin.jvm.optionals.getOrNull + +/** + * @see net.minecraft.world.item.enchantment.Enchantment + */ +@ConsistentCopyVisibility +data class HTUpgradeData private constructor(val propertyMap: HTUpgradePropertyMap, val group: Optional) : + Map by propertyMap { + companion object { + @JvmField + val CODEC: BiCodec = BiCodec.composite( + HTUpgradePropertyMap.CODEC.fieldOf("properties").forGetter(HTUpgradeData::propertyMap), + HTUpgradeGroup.CODEC.optionalFieldOf("group").forGetter(HTUpgradeData::group), + ::HTUpgradeData, + ) + + @JvmStatic + inline fun create(builderAction: Builder.() -> Unit): HTUpgradeData = Builder().apply(builderAction).build() + + @JvmStatic + fun createSimple(key: HTUpgradeKey, group: HTUpgradeGroup? = null): HTUpgradeData = create { + set(key, 1) + group(group) + } + } + + val groupOrNull: HTUpgradeGroup? get() = this.group.getOrNull() + + // Builder // + + class Builder { + private var propertyMap: MutableMap = mutableMapOf() + private var group: HTUpgradeGroup? = null + + operator fun set(key: HTUpgradeKey, value: Fraction) { + propertyMap[key] = value + } + + operator fun set(key: HTUpgradeKey, value: Int) { + set(key, fraction(value)) + } + + fun group(group: HTUpgradeGroup?): Builder = apply { + this.group = group + } + + fun build(): HTUpgradeData = HTUpgradeData(HTUpgradePropertyMap.create(propertyMap), group.wrapOptional()) + } + } diff --git a/src/api/kotlin/hiiragi283/ragium/api/data/map/RagiumDataMapTypes.kt b/src/api/kotlin/hiiragi283/ragium/api/data/map/RagiumDataMapTypes.kt index 447f2aa1d..50daf077f 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/data/map/RagiumDataMapTypes.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/data/map/RagiumDataMapTypes.kt @@ -39,30 +39,39 @@ object RagiumDataMapTypes { val ARMOR_EQUIP: DataMapType = create("armor_equip", Registries.ITEM, HTEquipAction.CODEC) + @JvmField + val UPGRADE: DataMapType = + create("upgrade", Registries.ITEM, HTUpgradeData.CODEC) + // Extensions // /** - * 指定した値からエンチャントでドロップするモブの頭を取得します。 + * 指定した[entity]からエンチャントでドロップするモブの頭を取得します。 */ fun getMobHead(entity: Entity): ItemStack = entity.typeHolder.getData(MOB_HEAD)?.toStack() ?: ItemStack.EMPTY /** - * 指定した値から,一度の処理に必要な冷却材の使用量を取得します。 + * 指定した[stack]から,一度の処理に必要な冷却材の使用量を取得します。 */ fun getCoolantAmount(stack: ImmutableFluidStack): Int = stack.getData(COOLANT)?.amount ?: 0 /** - * 指定した値から,1000 mbの高温の液体による燃焼時間を取得します。 + * 指定した[stack]から,1000 mbの高温の液体による燃焼時間を取得します。 */ fun getTimeFromMagmatic(stack: ImmutableFluidStack): Int = stack.getData(MAGMATIC_FUEL)?.time ?: 0 /** - * 指定した値から,1000 mbの液体燃料による燃焼時間を取得します。 + * 指定した[stack]から,1000 mbの液体燃料による燃焼時間を取得します。 */ fun getTimeFromCombustion(stack: ImmutableFluidStack): Int = stack.getData(COMBUSTION_FUEL)?.time ?: 0 fun getEquipAction(stack: ItemStack): HTEquipAction? = stack.itemHolder.getData(ARMOR_EQUIP) + /** + * 指定した[stack]から,アップグレードのデータを取得します。 + */ + fun getUpgradeData(stack: ItemStack): HTUpgradeData? = stack.itemHolder.getData(UPGRADE) + @JvmStatic private fun create(path: String, registryKey: ResourceKey>, codec: BiCodec<*, T>): DataMapType = create(path, registryKey, codec.codec) diff --git a/src/api/kotlin/hiiragi283/ragium/api/serialization/codec/BiCodecs.kt b/src/api/kotlin/hiiragi283/ragium/api/serialization/codec/BiCodecs.kt index 4b12b7545..8af1eb8f1 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/serialization/codec/BiCodecs.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/serialization/codec/BiCodecs.kt @@ -4,6 +4,7 @@ import com.mojang.datafixers.util.Either import com.mojang.serialization.Codec import com.mojang.serialization.DataResult import hiiragi283.ragium.api.function.andThen +import hiiragi283.ragium.api.math.fraction import io.netty.buffer.ByteBuf import net.minecraft.network.codec.ByteBufCodecs import net.minecraft.network.codec.StreamCodec @@ -74,7 +75,16 @@ object BiCodecs { val POSITIVE_LONG: BiCodec = longRange(1, Long.MAX_VALUE) @JvmField - val FRACTION: BiCodec = BiCodec.STRING.flatXmap(Fraction::getFraction, Fraction::toString) + val FRACTION: BiCodec = either(BiCodec.STRING, BiCodec.INT).xmap( + { either: Either -> either.map(Fraction::getFraction, ::fraction) }, + { fraction: Fraction -> + if (fraction.denominator == 1) { + Either.right(fraction.numerator) + } else { + Either.left(fraction.toString()) + } + }, + ) /** * `0`以上の値を対象とする[Fraction]の[BiCodec] diff --git a/src/api/kotlin/hiiragi283/ragium/api/text/RagiumTranslation.kt b/src/api/kotlin/hiiragi283/ragium/api/text/RagiumTranslation.kt index 90593c367..92710b911 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/text/RagiumTranslation.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/text/RagiumTranslation.kt @@ -54,6 +54,7 @@ enum class RagiumTranslation(type: String, vararg path: String) : HTTranslation TOOLTIP_DIMENSION("tooltip", "dimension"), TOOLTIP_INTRINSIC_ENCHANTMENT("tooltip", "intrinsic_enchantment"), TOOLTIP_LOOT_TABLE_ID("tooltip", "loot_table_id"), + TOOLTIP_UPGRADE_GROUP("tooltip", "upgrade_group"), TOOLTIP_SHOW_DESCRIPTION("tooltip", "show_description"), TOOLTIP_SHOW_DETAILS("tooltip", "show_details"), diff --git a/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTSlotUpgradeHandler.kt b/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTSlotUpgradeHandler.kt index 5de189184..382faa6e9 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTSlotUpgradeHandler.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTSlotUpgradeHandler.kt @@ -2,13 +2,9 @@ package hiiragi283.ragium.api.upgrade import hiiragi283.ragium.api.stack.ImmutableItemStack import hiiragi283.ragium.api.storage.item.HTItemSlot -import net.minecraft.world.item.ItemStack interface HTSlotUpgradeHandler : HTUpgradeHandler { fun getUpgradeSlots(): List override fun getUpgrades(): List = getUpgradeSlots().mapNotNull(HTItemSlot::getStack) - - override fun isValidUpgrade(upgrade: ImmutableItemStack, existing: List): Boolean = - existing.none { stack: ImmutableItemStack -> ItemStack.isSameItemSameComponents(stack.unwrap(), upgrade.unwrap()) } } diff --git a/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeGroup.kt b/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeGroup.kt new file mode 100644 index 000000000..c9fc9caca --- /dev/null +++ b/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeGroup.kt @@ -0,0 +1,26 @@ +package hiiragi283.ragium.api.upgrade + +import hiiragi283.ragium.api.RagiumAPI +import hiiragi283.ragium.api.serialization.codec.BiCodec +import hiiragi283.ragium.api.text.HTTranslation +import io.netty.buffer.ByteBuf +import net.minecraft.Util + +@ConsistentCopyVisibility +data class HTUpgradeGroup private constructor(val name: String) : HTTranslation { + companion object { + @JvmStatic + private val instances: MutableMap = mutableMapOf() + + @JvmField + val CODEC: BiCodec = BiCodec.STRING.xmap(HTUpgradeGroup::get, HTUpgradeGroup::name) + + @JvmStatic + fun get(name: String): HTUpgradeGroup = instances.computeIfAbsent(name, ::HTUpgradeGroup) + + @JvmStatic + fun getAll(): Collection = instances.values + } + + override val translationKey: String = Util.makeDescriptionId("gui", RagiumAPI.id("machine.upgrade.group.$name")) +} diff --git a/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeHandler.kt b/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeHandler.kt index b2087bd92..2e1cf3c0c 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeHandler.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeHandler.kt @@ -46,7 +46,7 @@ interface HTUpgradeHandler { fun modifyValue(key: HTUpgradeKey, ignoreEmpty: Boolean = false, operator: UnaryOperator): Int = collectMultiplier(key, ignoreEmpty).let(operator::apply).toInt() - fun getBaseMultiplier(): Fraction = collectMultiplier(RagiumUpgradeKeys.BASE_MULTIPLIER) + fun getBaseMultiplier(): Fraction = collectMultiplier(HTUpgradeKeys.BASE_MULTIPLIER) - fun isCreative(): Boolean = hasUpgrade(RagiumUpgradeKeys.IS_CREATIVE) + fun isCreative(): Boolean = hasUpgrade(HTUpgradeKeys.IS_CREATIVE) } diff --git a/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeHelper.kt b/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeHelper.kt index b0d22caaf..45e50b20c 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeHelper.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeHelper.kt @@ -1,10 +1,10 @@ package hiiragi283.ragium.api.upgrade import hiiragi283.ragium.api.capability.RagiumCapabilities -import hiiragi283.ragium.api.item.component.HTComponentUpgrade import hiiragi283.ragium.api.math.times import hiiragi283.ragium.api.stack.ImmutableItemStack import hiiragi283.ragium.api.stack.toImmutable +import hiiragi283.ragium.api.text.RagiumTranslation import net.minecraft.ChatFormatting import net.minecraft.network.chat.Component import net.minecraft.world.item.ItemStack @@ -15,27 +15,32 @@ data object HTUpgradeHelper { // HTUpgradeProvider // @JvmStatic - fun getUpgrade(stack: ItemStack, key: HTUpgradeKey): Fraction? { - val immutable: ImmutableItemStack = stack.toImmutable() ?: return Fraction.ZERO - return getUpgrade(immutable, key) - } + fun getUpgradeProvider(stack: ImmutableItemStack): HTUpgradeProvider? = stack.getCapability(RagiumCapabilities.UPGRADE_ITEM) @JvmStatic - fun getUpgrade(stack: ImmutableItemStack, key: HTUpgradeKey): Fraction = - stack.getCapability(RagiumCapabilities.UPGRADE_ITEM)?.getUpgradeData(key) ?: Fraction.ZERO + fun getUpgrade(stack: ImmutableItemStack, key: HTUpgradeKey): Fraction = getUpgradeProvider(stack)?.getUpgradeData(key) ?: Fraction.ZERO @JvmStatic fun appendTooltips(stack: ItemStack, consumer: Consumer) { + val immutable: ImmutableItemStack = stack.toImmutable() ?: return + val provider: HTUpgradeProvider = getUpgradeProvider(immutable) ?: return + // Property value for (key: HTUpgradeKey in HTUpgradeKey.getAll()) { - val property: Fraction = getUpgrade(stack, key) ?: continue + val property: Fraction = provider.getUpgradeData(key) if (property <= Fraction.ZERO) continue consumer.accept(key.translateColored(ChatFormatting.GRAY, getPropertyColor(key, property), property)) } + // Upgrade Group + provider + .getGroup() + ?.let { + RagiumTranslation.TOOLTIP_UPGRADE_GROUP.translateColored(ChatFormatting.BLUE, ChatFormatting.GRAY, it) + }?.let(consumer::accept) } @JvmStatic - fun appendTooltips(component: HTComponentUpgrade, consumer: Consumer) { - component.forEach { (key: HTUpgradeKey, property: Fraction) -> + fun appendTooltips(propertyMap: HTUpgradePropertyMap, consumer: Consumer) { + propertyMap.forEach { (key: HTUpgradeKey, property: Fraction) -> consumer.accept(key.translateColored(ChatFormatting.GRAY, getPropertyColor(key, property), property)) } } @@ -56,7 +61,7 @@ data object HTUpgradeHelper { fun getHandler(stack: ImmutableItemStack): HTUpgradeHandler? = stack.getCapability(RagiumCapabilities.UPGRADABLE_ITEM) @JvmStatic - fun getTankCapacity(handler: HTUpgradeHandler, base: Int): Int = handler.modifyValue(RagiumUpgradeKeys.FLUID_CAPACITY) { + fun getTankCapacity(handler: HTUpgradeHandler, base: Int): Int = handler.modifyValue(HTUpgradeKeys.FLUID_CAPACITY) { base * it * handler.getBaseMultiplier() } @@ -67,7 +72,7 @@ data object HTUpgradeHelper { } @JvmStatic - fun getEnergyCapacity(handler: HTUpgradeHandler, base: Int): Int = handler.modifyValue(RagiumUpgradeKeys.ENERGY_CAPACITY) { + fun getEnergyCapacity(handler: HTUpgradeHandler, base: Int): Int = handler.modifyValue(HTUpgradeKeys.ENERGY_CAPACITY) { base * it * handler.getBaseMultiplier() } diff --git a/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeKeys.kt b/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeKeys.kt new file mode 100644 index 000000000..5d37a5659 --- /dev/null +++ b/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeKeys.kt @@ -0,0 +1,28 @@ +package hiiragi283.ragium.api.upgrade + +object HTUpgradeKeys { + // Common // + + @JvmField + val BASE_MULTIPLIER: HTUpgradeKey = HTUpgradeKey.get("base_multiplier") + + @JvmField + val IS_CREATIVE: HTUpgradeKey = HTUpgradeKey.get("is_creative") + + // Machine // + + @JvmField + val ENERGY_CAPACITY: HTUpgradeKey = HTUpgradeKey.get("energy_capacity") + + @JvmField + val ENERGY_EFFICIENCY: HTUpgradeKey = HTUpgradeKey.get("energy_efficiency") + + @JvmField + val ENERGY_GENERATION: HTUpgradeKey = HTUpgradeKey.get("energy_generation") + + @JvmField + val FLUID_CAPACITY: HTUpgradeKey = HTUpgradeKey.get("fluid_capacity") + + @JvmField + val SPEED: HTUpgradeKey = HTUpgradeKey.get("speed") +} diff --git a/src/api/kotlin/hiiragi283/ragium/api/item/component/HTComponentUpgrade.kt b/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradePropertyMap.kt similarity index 55% rename from src/api/kotlin/hiiragi283/ragium/api/item/component/HTComponentUpgrade.kt rename to src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradePropertyMap.kt index 311138dc1..f8cd11691 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/item/component/HTComponentUpgrade.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradePropertyMap.kt @@ -1,37 +1,36 @@ -package hiiragi283.ragium.api.item.component +package hiiragi283.ragium.api.upgrade import hiiragi283.ragium.api.serialization.codec.BiCodec import hiiragi283.ragium.api.serialization.codec.BiCodecs -import hiiragi283.ragium.api.upgrade.HTUpgradeKey import io.netty.buffer.ByteBuf import org.apache.commons.lang3.math.Fraction @JvmInline -value class HTComponentUpgrade private constructor(val map: Map) : Map by map { +value class HTUpgradePropertyMap private constructor(val map: Map) : Map by map { companion object { @JvmField - val CODEC: BiCodec = BiCodecs + val CODEC: BiCodec = BiCodecs .mapOf(HTUpgradeKey.CODEC, BiCodecs.NON_NEGATIVE_FRACTION) - .xmap(::HTComponentUpgrade, HTComponentUpgrade::map) + .xmap(::create, HTUpgradePropertyMap::map) @JvmStatic - val EMPTY = HTComponentUpgrade(mapOf()) + val EMPTY = HTUpgradePropertyMap(mapOf()) @JvmStatic - fun create(vararg pairs: Pair): HTComponentUpgrade = create(mapOf(*pairs)) + fun create(vararg pairs: Pair): HTUpgradePropertyMap = create(mapOf(*pairs)) @JvmStatic - inline fun create(builderAction: MutableMap.() -> Unit): HTComponentUpgrade = + inline fun create(builderAction: MutableMap.() -> Unit): HTUpgradePropertyMap = create(buildMap(builderAction)) @JvmStatic - fun create(map: Map): HTComponentUpgrade = + fun create(map: Map): HTUpgradePropertyMap = createInternal(map.filter { (_, value: Fraction) -> value > Fraction.ZERO }) @JvmStatic - private fun createInternal(map: Map): HTComponentUpgrade = when { + private fun createInternal(map: Map): HTUpgradePropertyMap = when { map.isEmpty() -> EMPTY - else -> HTComponentUpgrade(map) + else -> HTUpgradePropertyMap(map) } } } diff --git a/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeProvider.kt b/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeProvider.kt index 55f6b6b3b..d2677e3d3 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeProvider.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeProvider.kt @@ -5,11 +5,13 @@ import org.apache.commons.lang3.math.Fraction /** * アップグレードを提供するインターフェース */ -fun interface HTUpgradeProvider { +interface HTUpgradeProvider { /** * 指定された引数から,アップグレードの倍率を返します。 * @param key 対象の倍率に紐づいた[HTUpgradeKey] * @return [key]に紐づいたアップグレードの倍率 */ fun getUpgradeData(key: HTUpgradeKey): Fraction + + fun getGroup(): HTUpgradeGroup? } diff --git a/src/api/kotlin/hiiragi283/ragium/api/upgrade/RagiumUpgradeKeys.kt b/src/api/kotlin/hiiragi283/ragium/api/upgrade/RagiumUpgradeKeys.kt deleted file mode 100644 index 2333fd0c0..000000000 --- a/src/api/kotlin/hiiragi283/ragium/api/upgrade/RagiumUpgradeKeys.kt +++ /dev/null @@ -1,51 +0,0 @@ -package hiiragi283.ragium.api.upgrade - -object RagiumUpgradeKeys { - // Common - @JvmField - val BASE_MULTIPLIER: HTUpgradeKey = HTUpgradeKey.get("base_multiplier") - - @JvmField - val IS_CREATIVE: HTUpgradeKey = HTUpgradeKey.get("is_creative") - - // Energy - @JvmField - val ENERGY_CAPACITY: HTUpgradeKey = HTUpgradeKey.get("energy_capacity") - - @JvmField - val ENERGY_EFFICIENCY: HTUpgradeKey = HTUpgradeKey.get("energy_efficiency") - - @JvmField - val ENERGY_GENERATION: HTUpgradeKey = HTUpgradeKey.get("energy_generation") - - // Fluid - @JvmField - val FLUID_CAPACITY: HTUpgradeKey = HTUpgradeKey.get("fluid_capacity") - - // Processor - - @JvmField - val COMPOSTING: HTUpgradeKey = HTUpgradeKey.get("composting") - - @JvmField - val DISABLE_EXTRA: HTUpgradeKey = HTUpgradeKey.get("disable_extra") - - @JvmField - val EXP_DRAIN: HTUpgradeKey = HTUpgradeKey.get("exp_drain") - - @JvmField - val SPEED: HTUpgradeKey = HTUpgradeKey.get("speed") - - @JvmField - val USE_LUBRICANT: HTUpgradeKey = HTUpgradeKey.get("use_lubricant") - - // Device - @JvmField - val EXP_COLLECTING: HTUpgradeKey = HTUpgradeKey.get("exp_collecting") - - @JvmField - val FISHING: HTUpgradeKey = HTUpgradeKey.get("fishing") - - @JvmField - val MOB_CAPTURE: HTUpgradeKey = HTUpgradeKey.get("mob_capture") -} diff --git a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt index b89170910..4ed3ac7fa 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt @@ -5,12 +5,14 @@ import hiiragi283.ragium.api.data.lang.HTLanguageProvider import hiiragi283.ragium.api.recipe.RagiumRecipeTypes import hiiragi283.ragium.api.tag.RagiumModTags import hiiragi283.ragium.api.text.RagiumTranslation -import hiiragi283.ragium.api.upgrade.RagiumUpgradeKeys +import hiiragi283.ragium.api.upgrade.HTUpgradeKeys import hiiragi283.ragium.api.util.access.HTAccessConfig import hiiragi283.ragium.client.integration.jade.provider.HTBlockConfigurationDataProvider import hiiragi283.ragium.client.integration.jade.provider.HTBlockMachinePropertiesProvider import hiiragi283.ragium.client.integration.jade.provider.HTBlockOwnerProvider import hiiragi283.ragium.common.text.RagiumCommonTranslation +import hiiragi283.ragium.common.upgrade.RagiumUpgradeGroups +import hiiragi283.ragium.common.upgrade.RagiumUpgradeKeys import hiiragi283.ragium.data.server.advancement.RagiumAdvancements import hiiragi283.ragium.setup.RagiumBlocks import hiiragi283.ragium.setup.RagiumEnchantments @@ -368,24 +370,28 @@ class RagiumEnglishProvider(output: PackOutput) : HTLanguageProvider.English(out add(HTFluidBlockAttribute.TankType.FIRST_INPUT, "First Input Tank Capacity") add(HTFluidBlockAttribute.TankType.SECOND_INPUT, "Second Input Tank Capacity") - add(RagiumUpgradeKeys.BASE_MULTIPLIER, $$"- Base Multiplier: %1$s") - add(RagiumUpgradeKeys.IS_CREATIVE, "- Creative") + add(HTUpgradeKeys.BASE_MULTIPLIER, $$"- Base Multiplier: %1$s") + add(HTUpgradeKeys.IS_CREATIVE, "- Creative") - add(RagiumUpgradeKeys.ENERGY_CAPACITY, $$"- Energy Capacity: %1$s") - add(RagiumUpgradeKeys.ENERGY_EFFICIENCY, $$"- Energy Efficiency: %1$s") - add(RagiumUpgradeKeys.ENERGY_GENERATION, $$"- Energy Generation: %1$s") - - add(RagiumUpgradeKeys.FLUID_CAPACITY, $$"- Fluid Capacity: %1$s") + add(HTUpgradeKeys.ENERGY_CAPACITY, $$"- Energy Capacity: %1$s") + add(HTUpgradeKeys.ENERGY_EFFICIENCY, $$"- Energy Efficiency: %1$s") + add(HTUpgradeKeys.ENERGY_GENERATION, $$"- Energy Generation: %1$s") + add(HTUpgradeKeys.FLUID_CAPACITY, $$"- Fluid Capacity: %1$s") + add(HTUpgradeKeys.SPEED, $$"- Speed: %1$s") add(RagiumUpgradeKeys.COMPOSTING, "- Convert input into Crude Bio") add(RagiumUpgradeKeys.DISABLE_EXTRA, "- Extra output disabled") add(RagiumUpgradeKeys.EXP_DRAIN, "- Extract Liquid Experience from enchanted item") - add(RagiumUpgradeKeys.SPEED, $$"- Speed: %1$s") + add(RagiumUpgradeKeys.LONG_BREWING, "- Extend duration of potion effects") + add(RagiumUpgradeKeys.STRONG_BREWING, "- Strengthen potion effects") add(RagiumUpgradeKeys.USE_LUBRICANT, "- Use lubricant per operation") add(RagiumUpgradeKeys.EXP_COLLECTING, "- Collect Experience Orb instead of Water") add(RagiumUpgradeKeys.FISHING, "- Do fishing instead of collecting items") add(RagiumUpgradeKeys.MOB_CAPTURE, "- Capture mobs instead of collecting items") + + add(RagiumUpgradeGroups.FLUID_COLLECTOR, "Fluid Collector") + add(RagiumUpgradeGroups.ITEM_COLLECTOR, "Item Collector") // API - Constants add(RagiumTranslation.ERROR, "Error") add(RagiumTranslation.INFINITE, "Infinite") @@ -407,6 +413,7 @@ class RagiumEnglishProvider(output: PackOutput) : HTLanguageProvider.English(out add(RagiumTranslation.TOOLTIP_DIMENSION, $$"Dimension: %1$s") add(RagiumTranslation.TOOLTIP_INTRINSIC_ENCHANTMENT, $$"Always has at least %1$s") add(RagiumTranslation.TOOLTIP_LOOT_TABLE_ID, $$"Loot Table: %1$s") + add(RagiumTranslation.TOOLTIP_UPGRADE_GROUP, $$"Upgrade Group: %1$s") add(RagiumTranslation.TOOLTIP_SHOW_DESCRIPTION, "Press Shift to show description") add(RagiumTranslation.TOOLTIP_SHOW_DETAILS, "Press Ctrl to show details") diff --git a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt index 00c4c3999..3cfd6560a 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt @@ -5,12 +5,14 @@ import hiiragi283.ragium.api.data.lang.HTLanguageProvider import hiiragi283.ragium.api.recipe.RagiumRecipeTypes import hiiragi283.ragium.api.tag.RagiumModTags import hiiragi283.ragium.api.text.RagiumTranslation -import hiiragi283.ragium.api.upgrade.RagiumUpgradeKeys +import hiiragi283.ragium.api.upgrade.HTUpgradeKeys import hiiragi283.ragium.api.util.access.HTAccessConfig import hiiragi283.ragium.client.integration.jade.provider.HTBlockConfigurationDataProvider import hiiragi283.ragium.client.integration.jade.provider.HTBlockMachinePropertiesProvider import hiiragi283.ragium.client.integration.jade.provider.HTBlockOwnerProvider import hiiragi283.ragium.common.text.RagiumCommonTranslation +import hiiragi283.ragium.common.upgrade.RagiumUpgradeGroups +import hiiragi283.ragium.common.upgrade.RagiumUpgradeKeys import hiiragi283.ragium.data.server.advancement.RagiumAdvancements import hiiragi283.ragium.setup.RagiumBlocks import hiiragi283.ragium.setup.RagiumEnchantments @@ -370,24 +372,28 @@ class RagiumJapaneseProvider(output: PackOutput) : HTLanguageProvider.Japanese(o add(HTFluidBlockAttribute.TankType.FIRST_INPUT, "1番目の搬入タンクの容量") add(HTFluidBlockAttribute.TankType.SECOND_INPUT, "2番目の搬入タンクの容量") - add(RagiumUpgradeKeys.BASE_MULTIPLIER, $$"- 基本倍率: %1$s") - add(RagiumUpgradeKeys.IS_CREATIVE, "- クリエイティブ") + add(HTUpgradeKeys.BASE_MULTIPLIER, $$"- 基本倍率: %1$s") + add(HTUpgradeKeys.IS_CREATIVE, "- クリエイティブ") - add(RagiumUpgradeKeys.ENERGY_CAPACITY, $$"- エネルギー容量: %1$s") - add(RagiumUpgradeKeys.ENERGY_EFFICIENCY, $$"- エネルギー効率: %1$s") - add(RagiumUpgradeKeys.ENERGY_GENERATION, $$"- エネルギー生産率: %1$s") - - add(RagiumUpgradeKeys.FLUID_CAPACITY, $$"- 液体容量: %1$s") + add(HTUpgradeKeys.ENERGY_CAPACITY, $$"- エネルギー容量: %1$s") + add(HTUpgradeKeys.ENERGY_EFFICIENCY, $$"- エネルギー効率: %1$s") + add(HTUpgradeKeys.ENERGY_GENERATION, $$"- エネルギー生産率: %1$s") + add(HTUpgradeKeys.FLUID_CAPACITY, $$"- 液体容量: %1$s") + add(HTUpgradeKeys.SPEED, $$"- 処理速度: %1$s") add(RagiumUpgradeKeys.COMPOSTING, "- アイテムを未加工バイオに変換") add(RagiumUpgradeKeys.DISABLE_EXTRA, "- 追加の生産物を無効化") add(RagiumUpgradeKeys.EXP_DRAIN, "- エンチャントされたアイテムから液体経験値を抽出") - add(RagiumUpgradeKeys.SPEED, $$"- 処理速度: %1$s") + add(RagiumUpgradeKeys.LONG_BREWING, "- ポーション効果の時間を延長") + add(RagiumUpgradeKeys.STRONG_BREWING, "- ポーション効果を強化") add(RagiumUpgradeKeys.USE_LUBRICANT, "- 処理ごとに潤滑油を消費") add(RagiumUpgradeKeys.EXP_COLLECTING, "- 水の代わりに経験値オーブを収集") add(RagiumUpgradeKeys.FISHING, "- アイテム収集の代わりに釣りを実行") add(RagiumUpgradeKeys.MOB_CAPTURE, "- アイテム収集の代わりにモブを捕獲") + + add(RagiumUpgradeGroups.FLUID_COLLECTOR, "液体収集機") + add(RagiumUpgradeGroups.ITEM_COLLECTOR, "アイテム収集機") // API - Constants add(RagiumTranslation.ERROR, "エラー") add(RagiumTranslation.INFINITE, "無限") @@ -409,6 +415,7 @@ class RagiumJapaneseProvider(output: PackOutput) : HTLanguageProvider.Japanese(o add(RagiumTranslation.TOOLTIP_DIMENSION, $$"次元: %1$s") add(RagiumTranslation.TOOLTIP_INTRINSIC_ENCHANTMENT, $$"常に少なくとも%1$sがあります") add(RagiumTranslation.TOOLTIP_LOOT_TABLE_ID, $$"ルートテーブル: %1$s") + add(RagiumTranslation.TOOLTIP_UPGRADE_GROUP, $$"アップグレードの種類: %1$s") add(RagiumTranslation.TOOLTIP_SHOW_DESCRIPTION, "シフトキーを押して説明を表示") add(RagiumTranslation.TOOLTIP_SHOW_DETAILS, "シフトキーを押して詳細を表示") diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/RagiumDataMapProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/RagiumDataMapProvider.kt index 0fb21c26b..9c2949b4b 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/RagiumDataMapProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/RagiumDataMapProvider.kt @@ -7,19 +7,25 @@ import hiiragi283.ragium.api.data.HTDataGenContext import hiiragi283.ragium.api.data.map.HTFluidCoolantData import hiiragi283.ragium.api.data.map.HTFluidFuelData import hiiragi283.ragium.api.data.map.HTMobHead +import hiiragi283.ragium.api.data.map.HTUpgradeData import hiiragi283.ragium.api.data.map.RagiumDataMapTypes import hiiragi283.ragium.api.data.map.equip.HTMobEffectEquipAction import hiiragi283.ragium.api.material.HTMaterialLike import hiiragi283.ragium.api.material.prefix.HTPrefixLike import hiiragi283.ragium.api.registry.HTFluidHolderLike import hiiragi283.ragium.api.registry.HTHolderLike +import hiiragi283.ragium.api.registry.impl.HTSimpleDeferredItem import hiiragi283.ragium.api.registry.toHolderLike import hiiragi283.ragium.api.tag.RagiumCommonTags import hiiragi283.ragium.api.tag.createCommonTag +import hiiragi283.ragium.api.upgrade.HTUpgradeKeys import hiiragi283.ragium.common.material.CommonMaterialKeys import hiiragi283.ragium.common.material.CommonMaterialPrefixes import hiiragi283.ragium.common.material.FoodMaterialKeys import hiiragi283.ragium.common.material.RagiumMaterialKeys +import hiiragi283.ragium.common.tier.HTComponentTier +import hiiragi283.ragium.common.upgrade.RagiumUpgradeGroups +import hiiragi283.ragium.common.upgrade.RagiumUpgradeKeys import hiiragi283.ragium.setup.RagiumFluidContents import hiiragi283.ragium.setup.RagiumItems import net.minecraft.core.HolderLookup @@ -54,6 +60,7 @@ class RagiumDataMapProvider(context: HTDataGenContext) : DataMapProvider(context combustionFuels() armorEquip() + upgrade() createEnchIndustry() } @@ -151,6 +158,52 @@ class RagiumDataMapProvider(context: HTDataGenContext) : DataMapProvider(context .addHolder(RagiumItems.NIGHT_VISION_GOGGLES, HTMobEffectEquipAction(MobEffects.NIGHT_VISION, -1)) } + private fun upgrade() { + val builder: Builder = builder(RagiumDataMapTypes.UPGRADE) + // components + for ((tier: HTComponentTier, item: HTSimpleDeferredItem) in RagiumItems.COMPONENTS) { + builder + .add( + item, + HTUpgradeData.create { + set(HTUpgradeKeys.BASE_MULTIPLIER, tier.ordinal + 2) + }, + false, + ) + } + + builder + .add( + RagiumItems.CREATIVE_UPGRADE, + HTUpgradeData.createSimple(HTUpgradeKeys.IS_CREATIVE), + false, + ) + // Processor + .add( + RagiumItems.EFFICIENT_CRUSH_UPGRADE, + HTUpgradeData.createSimple(RagiumUpgradeKeys.USE_LUBRICANT), + false, + ).add( + RagiumItems.PRIMARY_ONLY_UPGRADE, + HTUpgradeData.createSimple(RagiumUpgradeKeys.DISABLE_EXTRA), + false, + ) + // Device + .add( + RagiumItems.EXP_COLLECTOR_UPGRADE, + HTUpgradeData.createSimple(RagiumUpgradeKeys.EXP_COLLECTING, RagiumUpgradeGroups.FLUID_COLLECTOR), + false, + ).add( + RagiumItems.FISHING_UPGRADE, + HTUpgradeData.createSimple(RagiumUpgradeKeys.FISHING, RagiumUpgradeGroups.ITEM_COLLECTOR), + false, + ).add( + RagiumItems.MOB_CAPTURE_UPGRADE, + HTUpgradeData.createSimple(RagiumUpgradeKeys.MOB_CAPTURE, RagiumUpgradeGroups.ITEM_COLLECTOR), + false, + ) + } + // Integration // private fun createEnchIndustry() { 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 562135eba..64d37ad22 100644 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/RagiumEmiPlugin.kt +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/RagiumEmiPlugin.kt @@ -33,7 +33,6 @@ import hiiragi283.ragium.client.integration.emi.data.HTEmiFluidFuelData import hiiragi283.ragium.client.integration.emi.handler.HTEmiRecipeHandler import hiiragi283.ragium.client.integration.emi.recipe.custom.HTCopyEnchantingEmiRecipe import hiiragi283.ragium.client.integration.emi.recipe.custom.HTExpExtractingEmiRecipe -import hiiragi283.ragium.client.integration.emi.recipe.custom.HTMachineUpgradeEmiRecipe import hiiragi283.ragium.client.integration.emi.recipe.device.HTRockGeneratingEmiRecipe import hiiragi283.ragium.client.integration.emi.recipe.generator.HTCoolantEmiRecipe import hiiragi283.ragium.client.integration.emi.recipe.generator.HTFuelGeneratorEmiRecipe @@ -101,16 +100,6 @@ class RagiumEmiPlugin : EmiPlugin { // Category RagiumEmiRecipeCategories.register(registry) // Recipe - addRecipes( - registry, - ITEM_LOOKUP - .filterElements { item: Item -> item.defaultInstance.has(RagiumDataComponents.MACHINE_UPGRADE_FILTER) } - .listElements() - .map { holder: Holder -> - holder.idOrThrow.withPrefix("/machine/upgrade/") to holder.toItemEmi() - }.asSequence(), - ::HTMachineUpgradeEmiRecipe, - ) addCustomRecipe(registry) addGenerators(registry) diff --git a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/category/HTEmiRecipeCategory.kt b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/category/HTEmiRecipeCategory.kt index 429f9a926..dbecdebc1 100644 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/category/HTEmiRecipeCategory.kt +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/category/HTEmiRecipeCategory.kt @@ -6,7 +6,6 @@ import dev.emi.emi.api.recipe.EmiRecipeSorting import dev.emi.emi.api.render.EmiRenderable import dev.emi.emi.api.stack.EmiStack import hiiragi283.ragium.api.math.HTBounds -import hiiragi283.ragium.api.registry.impl.HTDeferredRecipeType import hiiragi283.ragium.api.text.HTHasText import hiiragi283.ragium.client.integration.emi.toEmi import net.minecraft.network.chat.Component @@ -39,10 +38,6 @@ open class HTEmiRecipeCategory( workStations[0].toEmi(), sorter = sorter, ) - - @JvmStatic - fun create(bounds: HTBounds, recipeType: HTDeferredRecipeType<*, *>, vararg workStations: ItemLike): HTEmiRecipeCategory = - create(bounds, recipeType, recipeType.id, *workStations) } override fun getName(): Component = hasText.getText() 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 46c6de964..4a17384b7 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 @@ -6,14 +6,15 @@ import hiiragi283.ragium.api.RagiumAPI import hiiragi283.ragium.api.function.partially1 import hiiragi283.ragium.api.math.HTBounds import hiiragi283.ragium.api.recipe.RagiumRecipeTypes +import hiiragi283.ragium.api.registry.HTHolderLike import hiiragi283.ragium.api.registry.HTItemHolderLike -import hiiragi283.ragium.api.registry.impl.HTDeferredRecipeType import hiiragi283.ragium.api.text.HTHasText import hiiragi283.ragium.client.integration.emi.toEmi import hiiragi283.ragium.common.material.RagiumMaterialKeys import hiiragi283.ragium.common.text.RagiumCommonTranslation import hiiragi283.ragium.setup.RagiumBlocks import hiiragi283.ragium.setup.RagiumItems +import net.minecraft.resources.ResourceLocation import net.minecraft.world.level.ItemLike object RagiumEmiRecipeCategories { @@ -21,8 +22,7 @@ object RagiumEmiRecipeCategories { val MACHINE_BOUNDS = HTBounds(0, 0, 7 * 18, 3 * 18) @JvmField - val MACHINE_UPGRADE: HTEmiRecipeCategory = HTEmiRecipeCategory.create( - MACHINE_BOUNDS, + val MACHINE_UPGRADE: HTEmiRecipeCategory = machine( RagiumCommonTranslation.EMI_MACHINE_UPGRADE_TITLE::translate, RagiumAPI.id("machine_upgrade"), RagiumItems.getHammer(RagiumMaterialKeys.RAGI_ALLOY), @@ -58,8 +58,12 @@ object RagiumEmiRecipeCategories { // Processors // @JvmStatic - private fun machine(recipeType: HTDeferredRecipeType<*, *>, vararg workStations: ItemLike): HTEmiRecipeCategory = - HTEmiRecipeCategory.create(MACHINE_BOUNDS, recipeType, *workStations) + private fun machine(hasText: HTHasText, id: ResourceLocation, vararg workStations: ItemLike): HTEmiRecipeCategory = + HTEmiRecipeCategory.create(MACHINE_BOUNDS, hasText, id, *workStations) + + @JvmStatic + private fun machine(recipeType: T, vararg workStations: ItemLike): HTEmiRecipeCategory where T : HTHasText, T : HTHolderLike = + machine(recipeType, recipeType.getId(), *workStations) // Basic @JvmField @@ -83,8 +87,7 @@ object RagiumEmiRecipeCategories { machine(RagiumRecipeTypes.EXTRACTING, RagiumBlocks.EXTRACTOR) @JvmField - val COMPOSTING: HTEmiRecipeCategory = HTEmiRecipeCategory.create( - MACHINE_BOUNDS, + val COMPOSTING: HTEmiRecipeCategory = machine( RagiumCommonTranslation.EMI_COMPOSTING_TITLE::translate, RagiumAPI.id("composting"), RagiumBlocks.EXTRACTOR, diff --git a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/HTEmiRecipe.kt b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/HTEmiRecipe.kt index 2803c4ae6..cee01fc5a 100644 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/HTEmiRecipe.kt +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/HTEmiRecipe.kt @@ -48,7 +48,7 @@ abstract class HTEmiRecipe( protected fun catalyst(index: Int): EmiIngredient = catalysts.getOrNull(index) ?: EmiStack.EMPTY - protected fun output(index: Int): EmiStack = outputs.getOrNull(index) ?: EmiStack.EMPTY + protected fun output(index: Int): EmiIngredient = renderOutputs.getOrNull(index) ?: EmiStack.EMPTY protected fun addInput(ingredient: HTItemIngredient?) { addInput(ingredient?.let(HTItemIngredient::toEmi)) diff --git a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/custom/HTMachineUpgradeEmiRecipe.kt b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/custom/HTMachineUpgradeEmiRecipe.kt deleted file mode 100644 index 7da61b240..000000000 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/custom/HTMachineUpgradeEmiRecipe.kt +++ /dev/null @@ -1,36 +0,0 @@ -package hiiragi283.ragium.client.integration.emi.recipe.custom - -import dev.emi.emi.api.recipe.EmiIngredientRecipe -import dev.emi.emi.api.recipe.EmiRecipe -import dev.emi.emi.api.recipe.EmiRecipeCategory -import dev.emi.emi.api.recipe.EmiResolutionRecipe -import dev.emi.emi.api.stack.EmiIngredient -import dev.emi.emi.api.stack.EmiStack -import hiiragi283.ragium.api.RagiumPlatform -import hiiragi283.ragium.client.integration.emi.category.RagiumEmiRecipeCategories -import hiiragi283.ragium.setup.RagiumDataComponents -import net.minecraft.core.Holder -import net.minecraft.core.HolderSet -import net.minecraft.resources.ResourceLocation -import net.minecraft.world.level.block.entity.BlockEntityType - -class HTMachineUpgradeEmiRecipe(private val id: ResourceLocation, private val upgrade: EmiStack) : EmiIngredientRecipe() { - override fun getIngredient(): EmiIngredient = upgrade - - override fun getStacks(): List = upgrade - .get(RagiumDataComponents.MACHINE_UPGRADE_FILTER) - ?.getAllHolders(RagiumPlatform.INSTANCE.getRegistryAccess()) - ?.map { holderSet: HolderSet> -> - holderSet - .map(Holder>::value) - .flatMap(BlockEntityType<*>::getValidBlocks) - .map(EmiStack::of) - }?.result() - ?: listOf() - - override fun getRecipeContext(stack: EmiStack, offset: Int): EmiRecipe = EmiResolutionRecipe(upgrade, stack) - - override fun getCategory(): EmiRecipeCategory = RagiumEmiRecipeCategories.MACHINE_UPGRADE - - override fun getId(): ResourceLocation = id -} diff --git a/src/integration/kotlin/hiiragi283/ragium/client/integration/jade/provider/HTBlockMachinePropertiesProvider.kt b/src/integration/kotlin/hiiragi283/ragium/client/integration/jade/provider/HTBlockMachinePropertiesProvider.kt index 9460e8590..3a8710426 100644 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/jade/provider/HTBlockMachinePropertiesProvider.kt +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/jade/provider/HTBlockMachinePropertiesProvider.kt @@ -1,8 +1,8 @@ package hiiragi283.ragium.client.integration.jade.provider -import hiiragi283.ragium.api.item.component.HTComponentUpgrade import hiiragi283.ragium.api.upgrade.HTUpgradeHelper import hiiragi283.ragium.api.upgrade.HTUpgradeKey +import hiiragi283.ragium.api.upgrade.HTUpgradePropertyMap import hiiragi283.ragium.client.integration.jade.provider.base.HTBasicJadeDataProvider import hiiragi283.ragium.common.block.entity.HTUpgradableBlockEntity import hiiragi283.ragium.common.block.entity.component.HTMachineUpgradeComponent @@ -10,21 +10,21 @@ import snownee.jade.api.BlockAccessor import snownee.jade.api.ITooltip import snownee.jade.api.config.IPluginConfig -object HTBlockMachinePropertiesProvider : HTBasicJadeDataProvider( +object HTBlockMachinePropertiesProvider : HTBasicJadeDataProvider( "block_machine_properties", - HTComponentUpgrade.CODEC.streamCodec.cast(), + HTUpgradePropertyMap.CODEC.streamCodec.cast(), ) { - override fun streamData(accessor: BlockAccessor): HTComponentUpgrade? = (accessor.blockEntity as? HTUpgradableBlockEntity) + override fun streamData(accessor: BlockAccessor): HTUpgradePropertyMap? = (accessor.blockEntity as? HTUpgradableBlockEntity) ?.machineUpgrade ?.let { component: HTMachineUpgradeComponent -> HTUpgradeKey.getAll().associateWith { component.collectMultiplier(it, true) } - }?.let(HTComponentUpgrade.Companion::create) + }?.let(HTUpgradePropertyMap.Companion::create) override fun appendTooltip( tooltip: ITooltip, accessor: BlockAccessor, config: IPluginConfig, - data: HTComponentUpgrade, + data: HTUpgradePropertyMap, ) { HTUpgradeHelper.appendTooltips(data, tooltip::add) } diff --git a/src/integration/kotlin/hiiragi283/ragium/common/RagiumAlmostUnifiedPlugin.kt b/src/integration/kotlin/hiiragi283/ragium/common/RagiumAlmostUnifiedPlugin.kt index 90dd4f2ea..69c90b721 100644 --- a/src/integration/kotlin/hiiragi283/ragium/common/RagiumAlmostUnifiedPlugin.kt +++ b/src/integration/kotlin/hiiragi283/ragium/common/RagiumAlmostUnifiedPlugin.kt @@ -32,7 +32,7 @@ class RagiumAlmostUnifiedPlugin : AlmostUnifiedPlugin { override fun unify(helper: UnificationHelper, recipe: RecipeJson) { // Outputs - val keys: Array = arrayOf(RagiumConst.RESULT, RagiumConst.RESULTS, RagiumConst.ITEM_RESULT) + val keys: Array = arrayOf(RagiumConst.RESULT, RagiumConst.RESULTS, RagiumConst.ITEM_RESULT, "extra") for (key: String in keys) { val json: JsonElement = recipe.getProperty(key) ?: continue RagiumAPI.LOGGER.debug("Current target key: {} for {}", key, recipe.id) diff --git a/src/main/kotlin/hiiragi283/ragium/RagiumCommon.kt b/src/main/kotlin/hiiragi283/ragium/RagiumCommon.kt index 87f8d12d4..b0f619ad7 100644 --- a/src/main/kotlin/hiiragi283/ragium/RagiumCommon.kt +++ b/src/main/kotlin/hiiragi283/ragium/RagiumCommon.kt @@ -118,6 +118,7 @@ class RagiumCommon(eventBus: IEventBus, container: ModContainer, dist: Dist) { event.register(RagiumDataMapTypes.COMBUSTION_FUEL) event.register(RagiumDataMapTypes.ARMOR_EQUIP) + event.register(RagiumDataMapTypes.UPGRADE) RagiumAPI.LOGGER.info("Registered data map types!") } diff --git a/src/main/kotlin/hiiragi283/ragium/client/RagiumClient.kt b/src/main/kotlin/hiiragi283/ragium/client/RagiumClient.kt index 4d5991771..350ebbc3b 100644 --- a/src/main/kotlin/hiiragi283/ragium/client/RagiumClient.kt +++ b/src/main/kotlin/hiiragi283/ragium/client/RagiumClient.kt @@ -9,7 +9,6 @@ import hiiragi283.ragium.api.registry.impl.HTDeferredMenuType import hiiragi283.ragium.api.registry.impl.HTSimpleDeferredBlock import hiiragi283.ragium.api.registry.toId import hiiragi283.ragium.api.registry.vanillaId -import hiiragi283.ragium.api.upgrade.RagiumUpgradeKeys import hiiragi283.ragium.api.world.getTypedBlockEntity import hiiragi283.ragium.client.event.HTClientItemTooltipComponent import hiiragi283.ragium.client.event.HTItemTooltipContent @@ -48,6 +47,7 @@ import hiiragi283.ragium.common.inventory.container.HTBlockEntityContainerMenu import hiiragi283.ragium.common.material.HTColorMaterial import hiiragi283.ragium.common.material.RagiumMoltenCrystalData import hiiragi283.ragium.common.tier.HTCrateTier +import hiiragi283.ragium.common.upgrade.RagiumUpgradeKeys import hiiragi283.ragium.setup.RagiumBlockEntityTypes import hiiragi283.ragium.setup.RagiumBlocks import hiiragi283.ragium.setup.RagiumDataComponents diff --git a/src/main/kotlin/hiiragi283/ragium/client/gui/screen/processor/HTCrusherScreen.kt b/src/main/kotlin/hiiragi283/ragium/client/gui/screen/processor/HTCrusherScreen.kt index c68d5b218..b4ff81eee 100644 --- a/src/main/kotlin/hiiragi283/ragium/client/gui/screen/processor/HTCrusherScreen.kt +++ b/src/main/kotlin/hiiragi283/ragium/client/gui/screen/processor/HTCrusherScreen.kt @@ -1,10 +1,10 @@ package hiiragi283.ragium.client.gui.screen.processor -import hiiragi283.ragium.api.upgrade.RagiumUpgradeKeys import hiiragi283.ragium.client.gui.component.HTFluidTankWidget import hiiragi283.ragium.common.block.entity.processor.base.HTSingleItemInputBlockEntity import hiiragi283.ragium.common.inventory.HTSlotHelper import hiiragi283.ragium.common.inventory.container.HTBlockEntityContainerMenu +import hiiragi283.ragium.common.upgrade.RagiumUpgradeKeys import net.minecraft.network.chat.Component import net.minecraft.world.entity.player.Inventory diff --git a/src/main/kotlin/hiiragi283/ragium/client/model/HTFuelGeneratorModel.kt b/src/main/kotlin/hiiragi283/ragium/client/model/HTFuelGeneratorModel.kt index c96ddf5c7..29149cec6 100644 --- a/src/main/kotlin/hiiragi283/ragium/client/model/HTFuelGeneratorModel.kt +++ b/src/main/kotlin/hiiragi283/ragium/client/model/HTFuelGeneratorModel.kt @@ -5,7 +5,7 @@ import com.mojang.blaze3d.vertex.VertexConsumer import hiiragi283.ragium.api.RagiumAPI import hiiragi283.ragium.api.math.div import hiiragi283.ragium.api.registry.HTHolderLike -import hiiragi283.ragium.api.upgrade.RagiumUpgradeKeys +import hiiragi283.ragium.api.upgrade.HTUpgradeKeys import hiiragi283.ragium.client.renderer.RagiumModelLayers import hiiragi283.ragium.common.block.entity.generator.HTGeneratorBlockEntity import net.minecraft.client.model.geom.EntityModelSet @@ -105,7 +105,7 @@ class HTFuelGeneratorModel(modelSet: EntityModelSet) : HTModel(RenderType::entit blockEntity.isActive -> blockEntity.ticks + partialTick else -> 0f } - val speed: Float = (blockEntity.collectMultiplier(RagiumUpgradeKeys.ENERGY_GENERATION) / 8).toFloat() + val speed: Float = (blockEntity.collectMultiplier(HTUpgradeKeys.ENERGY_GENERATION) / 8).toFloat() top.y = Mth.sin(time * speed + Mth.HALF_PI) * 4 - 4f bellow.y = min(Mth.sin(time * speed + Mth.HALF_PI) * 4, 0f) diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTUpgradableBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTUpgradableBlockEntity.kt index 0173287f8..645326b00 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTUpgradableBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTUpgradableBlockEntity.kt @@ -1,5 +1,6 @@ package hiiragi283.ragium.common.block.entity +import hiiragi283.ragium.api.stack.ImmutableItemStack import hiiragi283.ragium.api.storage.item.HTItemSlot import hiiragi283.ragium.api.upgrade.HTSlotUpgradeHandler import hiiragi283.ragium.common.block.entity.component.HTMachineUpgradeComponent @@ -22,4 +23,7 @@ abstract class HTUpgradableBlockEntity(blockHolder: Holder, pos: BlockPos private set final override fun getUpgradeSlots(): List = machineUpgrade.getUpgradeSlots() + + override fun isValidUpgrade(upgrade: ImmutableItemStack, existing: List): Boolean = + machineUpgrade.isValidUpgrade(upgrade, existing) } diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/component/HTMachineUpgradeComponent.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/component/HTMachineUpgradeComponent.kt index f49ee0562..eea36553c 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/component/HTMachineUpgradeComponent.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/component/HTMachineUpgradeComponent.kt @@ -1,5 +1,8 @@ package hiiragi283.ragium.common.block.entity.component +import hiiragi283.ragium.api.block.attribute.HTUpgradeGroupBlockAttribute +import hiiragi283.ragium.api.block.attribute.getAttribute +import hiiragi283.ragium.api.capability.RagiumCapabilities import hiiragi283.ragium.api.function.HTPredicates import hiiragi283.ragium.api.serialization.component.HTComponentInput import hiiragi283.ragium.api.serialization.value.HTValueInput @@ -8,6 +11,8 @@ import hiiragi283.ragium.api.stack.ImmutableItemStack import hiiragi283.ragium.api.storage.attachments.HTAttachedItems import hiiragi283.ragium.api.storage.item.HTItemSlot import hiiragi283.ragium.api.upgrade.HTSlotUpgradeHandler +import hiiragi283.ragium.api.upgrade.HTUpgradeGroup +import hiiragi283.ragium.api.upgrade.HTUpgradeProvider import hiiragi283.ragium.api.util.HTContentListener import hiiragi283.ragium.api.world.sendBlockUpdated import hiiragi283.ragium.common.block.entity.HTBlockEntity @@ -35,6 +40,9 @@ class HTMachineUpgradeComponent(private val owner: HTBlockEntity) : filter = filter, ) } + private val group: HTUpgradeGroup? = owner.blockHolder + .getAttribute() + ?.group // HTBlockEntityComponent // @@ -65,4 +73,15 @@ class HTMachineUpgradeComponent(private val owner: HTBlockEntity) : // HTSlotUpgradeHandler // override fun getUpgradeSlots(): List = upgradeSlots + + override fun isValidUpgrade(upgrade: ImmutableItemStack, existing: List): Boolean { + val provider: HTUpgradeProvider = upgrade.getCapability(RagiumCapabilities.UPGRADE_ITEM) ?: return false + val group: HTUpgradeGroup = provider.getGroup() ?: return true + return when (group) { + this.group -> existing.none { stack: ImmutableItemStack -> + stack.getCapability(RagiumCapabilities.UPGRADE_ITEM)?.getGroup() == group + } + else -> false + } + } } diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTFluidCollectorBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTFluidCollectorBlockEntity.kt index 6a685097e..6332dda0d 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTFluidCollectorBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTFluidCollectorBlockEntity.kt @@ -5,13 +5,13 @@ import hiiragi283.ragium.api.stack.ImmutableFluidStack import hiiragi283.ragium.api.storage.HTStorageAccess import hiiragi283.ragium.api.storage.HTStorageAction import hiiragi283.ragium.api.storage.holder.HTSlotInfo -import hiiragi283.ragium.api.upgrade.RagiumUpgradeKeys import hiiragi283.ragium.api.util.HTContentListener import hiiragi283.ragium.api.world.getRangedAABB import hiiragi283.ragium.common.storage.fluid.tank.HTBasicFluidTank import hiiragi283.ragium.common.storage.fluid.tank.HTExpOrbTank import hiiragi283.ragium.common.storage.fluid.tank.HTVariableFluidTank import hiiragi283.ragium.common.storage.holder.HTBasicFluidTankHolder +import hiiragi283.ragium.common.upgrade.RagiumUpgradeKeys import hiiragi283.ragium.config.RagiumConfig import hiiragi283.ragium.setup.RagiumBlocks import hiiragi283.ragium.util.HTStackSlotHelper diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTItemCollectorBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTItemCollectorBlockEntity.kt index a84693e8e..264eca783 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTItemCollectorBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTItemCollectorBlockEntity.kt @@ -7,7 +7,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.HTItemSlot -import hiiragi283.ragium.api.upgrade.RagiumUpgradeKeys import hiiragi283.ragium.api.util.HTContentListener import hiiragi283.ragium.api.world.getRangedAABB import hiiragi283.ragium.common.entity.HTThrownCaptureEgg @@ -16,6 +15,7 @@ import hiiragi283.ragium.common.storage.holder.HTBasicItemSlotHolder import hiiragi283.ragium.common.storage.item.slot.HTBasicItemSlot import hiiragi283.ragium.common.storage.item.slot.HTItemEntitySlot import hiiragi283.ragium.common.storage.item.slot.HTOutputItemSlot +import hiiragi283.ragium.common.upgrade.RagiumUpgradeKeys import hiiragi283.ragium.config.RagiumConfig import hiiragi283.ragium.setup.RagiumBlocks import hiiragi283.ragium.setup.RagiumItems diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/generator/HTSolarPanelControllerBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/generator/HTSolarPanelControllerBlockEntity.kt index 6851805c5..057bb1de9 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/generator/HTSolarPanelControllerBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/generator/HTSolarPanelControllerBlockEntity.kt @@ -1,7 +1,7 @@ package hiiragi283.ragium.common.block.entity.generator import hiiragi283.ragium.api.math.times -import hiiragi283.ragium.api.upgrade.RagiumUpgradeKeys +import hiiragi283.ragium.api.upgrade.HTUpgradeKeys import hiiragi283.ragium.api.util.HTContentListener import hiiragi283.ragium.common.storage.holder.HTBasicItemSlotHolder import hiiragi283.ragium.setup.RagiumBlocks @@ -22,7 +22,7 @@ class HTSolarPanelControllerBlockEntity(pos: BlockPos, state: BlockState) : checkSolarPanel(level, posIn, stateIn) }.size if (panels == 0) return false - battery.currentEnergyPerTick = modifyValue(RagiumUpgradeKeys.ENERGY_GENERATION) { + battery.currentEnergyPerTick = modifyValue(HTUpgradeKeys.ENERGY_GENERATION) { battery.baseEnergyPerTick * (panels / 4) * it * getBaseMultiplier() } return battery.generate() > 0 diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/generator/base/HTFuelGeneratorBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/generator/base/HTFuelGeneratorBlockEntity.kt index 669d4a98d..08fc4afc3 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/generator/base/HTFuelGeneratorBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/generator/base/HTFuelGeneratorBlockEntity.kt @@ -3,7 +3,7 @@ package hiiragi283.ragium.common.block.entity.generator.base import hiiragi283.ragium.api.block.attribute.getAttributeFront import hiiragi283.ragium.api.math.times import hiiragi283.ragium.api.storage.energy.HTEnergyBattery -import hiiragi283.ragium.api.upgrade.RagiumUpgradeKeys +import hiiragi283.ragium.api.upgrade.HTUpgradeKeys import hiiragi283.ragium.common.block.entity.generator.HTGeneratorBlockEntity import hiiragi283.ragium.util.HTEnergyHelper import net.minecraft.core.BlockPos @@ -29,7 +29,7 @@ abstract class HTFuelGeneratorBlockEntity(blockHolder: Holder, pos: Block // 燃料がある場合,それを消費する if (remainingBurnTime > 0) { remainingBurnTime-- - battery.currentEnergyPerTick = modifyValue(RagiumUpgradeKeys.ENERGY_GENERATION) { + battery.currentEnergyPerTick = modifyValue(HTUpgradeKeys.ENERGY_GENERATION) { battery.baseEnergyPerTick * it * getBaseMultiplier() } battery.generate() 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 7e8d6f2c5..f66a9bdcf 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 @@ -4,11 +4,11 @@ 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.upgrade.RagiumUpgradeKeys import hiiragi283.ragium.api.util.HTContentListener import hiiragi283.ragium.common.block.entity.processor.base.HTAbstractCrusherBlockEntity import hiiragi283.ragium.common.storage.holder.HTBasicItemSlotHolder import hiiragi283.ragium.common.storage.item.slot.HTBasicItemSlot +import hiiragi283.ragium.common.upgrade.RagiumUpgradeKeys import hiiragi283.ragium.setup.RagiumBlocks import hiiragi283.ragium.util.HTStackSlotHelper import net.minecraft.core.BlockPos 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 9489f656c..f89b9afe6 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 @@ -5,10 +5,10 @@ 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.upgrade.RagiumUpgradeKeys import hiiragi283.ragium.api.util.HTContentListener import hiiragi283.ragium.common.storage.holder.HTBasicItemSlotHolder import hiiragi283.ragium.common.storage.item.slot.HTBasicItemSlot +import hiiragi283.ragium.common.upgrade.RagiumUpgradeKeys import hiiragi283.ragium.setup.RagiumBlocks import hiiragi283.ragium.util.HTStackSlotHelper import net.minecraft.core.BlockPos 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 164c2aeb9..eac8874b0 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 @@ -9,11 +9,11 @@ import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient import hiiragi283.ragium.api.recipe.input.HTRecipeInput import hiiragi283.ragium.api.recipe.multi.HTItemWithCatalystRecipe import hiiragi283.ragium.api.stack.ImmutableFluidStack -import hiiragi283.ragium.api.upgrade.RagiumUpgradeKeys import hiiragi283.ragium.api.util.Ior import hiiragi283.ragium.common.block.entity.processor.base.HTItemWithCatalystBlockEntity import hiiragi283.ragium.common.recipe.HTExtractingRecipe import hiiragi283.ragium.common.recipe.HTFinderRecipeCache +import hiiragi283.ragium.common.upgrade.RagiumUpgradeKeys import hiiragi283.ragium.setup.RagiumBlocks import hiiragi283.ragium.setup.RagiumFluidContents import hiiragi283.ragium.util.HTExperienceHelper 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 88d39535c..f688a0072 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 @@ -5,7 +5,7 @@ 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.upgrade.RagiumUpgradeKeys +import hiiragi283.ragium.api.upgrade.HTUpgradeKeys import hiiragi283.ragium.common.block.entity.processor.base.HTAbstractSmelterBlockEntity import hiiragi283.ragium.common.recipe.vanilla.HTVanillaCookingRecipe import hiiragi283.ragium.setup.RagiumBlocks @@ -52,7 +52,7 @@ class HTMultiSmelterBlockEntity(pos: BlockPos, state: BlockState) : } private fun getMaxParallel(): Int { - val maxTier: Fraction? = getMaxMultiplier(RagiumUpgradeKeys.BASE_MULTIPLIER) + val maxTier: Fraction? = getMaxMultiplier(HTUpgradeKeys.BASE_MULTIPLIER) return when { isCreative() -> inputSlot.getStack()?.maxStackSize() ?: -1 maxTier != null -> 2.0.pow((maxTier - 1).toDouble()).toInt() 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 828aa6751..234539f90 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 @@ -14,7 +14,7 @@ import hiiragi283.ragium.api.recipe.HTRecipeFinder import hiiragi283.ragium.api.recipe.input.HTRecipeInput import hiiragi283.ragium.api.recipe.input.HTRecipeInput.Builder import hiiragi283.ragium.api.storage.holder.HTSlotInfo -import hiiragi283.ragium.api.upgrade.RagiumUpgradeKeys +import hiiragi283.ragium.api.upgrade.HTUpgradeKeys import hiiragi283.ragium.api.util.HTContentListener import hiiragi283.ragium.common.block.entity.HTMachineBlockEntity import hiiragi283.ragium.common.inventory.container.HTContainerMenu @@ -119,8 +119,8 @@ abstract class HTProcessorBlockEntity(blockHolder: Ho */ protected fun getRequiredEnergy(recipe: RECIPE): Int { if (isCreative()) return 0 - battery.currentEnergyPerTick = modifyValue(RagiumUpgradeKeys.ENERGY_EFFICIENCY) { battery.baseEnergyPerTick / it } - val time: Int = modifyValue(RagiumUpgradeKeys.SPEED) { getRecipeTime(recipe) / (it * getBaseMultiplier()) } + battery.currentEnergyPerTick = modifyValue(HTUpgradeKeys.ENERGY_EFFICIENCY) { battery.baseEnergyPerTick / it } + val time: Int = modifyValue(HTUpgradeKeys.SPEED) { getRecipeTime(recipe) / (it * getBaseMultiplier()) } return battery.currentEnergyPerTick * time } 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 081f2e465..a238e3d41 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 @@ -8,10 +8,10 @@ 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.upgrade.RagiumUpgradeKeys import hiiragi283.ragium.api.util.HTContentListener import hiiragi283.ragium.common.storage.fluid.tank.HTBasicFluidTank import hiiragi283.ragium.common.storage.fluid.tank.HTVariableFluidTank +import hiiragi283.ragium.common.upgrade.RagiumUpgradeKeys import hiiragi283.ragium.setup.RagiumFluidContents import hiiragi283.ragium.util.HTStackSlotHelper import net.minecraft.core.BlockPos diff --git a/src/main/kotlin/hiiragi283/ragium/common/upgrade/HTComponentUpgradeHandler.kt b/src/main/kotlin/hiiragi283/ragium/common/upgrade/HTComponentUpgradeHandler.kt index 7a9fda68f..efef1ff08 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/upgrade/HTComponentUpgradeHandler.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/upgrade/HTComponentUpgradeHandler.kt @@ -1,7 +1,10 @@ package hiiragi283.ragium.common.upgrade +import hiiragi283.ragium.api.capability.RagiumCapabilities import hiiragi283.ragium.api.stack.ImmutableItemStack +import hiiragi283.ragium.api.upgrade.HTUpgradeGroup import hiiragi283.ragium.api.upgrade.HTUpgradeHandler +import hiiragi283.ragium.api.upgrade.HTUpgradeProvider import hiiragi283.ragium.setup.RagiumDataComponents import net.minecraft.world.item.ItemStack @@ -10,6 +13,15 @@ class HTComponentUpgradeHandler(private val parent: ItemStack) : HTUpgradeHandle override fun getUpgrades(): List = getComponent().filterNotNull() - override fun isValidUpgrade(upgrade: ImmutableItemStack, existing: List): Boolean = - existing.none { stack: ImmutableItemStack -> ItemStack.isSameItemSameComponents(stack.unwrap(), upgrade.unwrap()) } + override fun isValidUpgrade(upgrade: ImmutableItemStack, existing: List): Boolean { + val provider: HTUpgradeProvider = upgrade.getCapability(RagiumCapabilities.UPGRADE_ITEM) ?: return false + val group: HTUpgradeGroup? = provider.getGroup() + val attachedGroup: HTUpgradeGroup = parent.get(RagiumDataComponents.UPGRADE_GROUP) ?: return true + return when (group) { + attachedGroup -> existing.none { stack: ImmutableItemStack -> + stack.getCapability(RagiumCapabilities.UPGRADE_ITEM)?.getGroup() == group + } + else -> false + } + } } diff --git a/src/main/kotlin/hiiragi283/ragium/common/upgrade/RagiumUpgradeGroups.kt b/src/main/kotlin/hiiragi283/ragium/common/upgrade/RagiumUpgradeGroups.kt new file mode 100644 index 000000000..534b3c26b --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/upgrade/RagiumUpgradeGroups.kt @@ -0,0 +1,15 @@ +package hiiragi283.ragium.common.upgrade + +import hiiragi283.ragium.api.upgrade.HTUpgradeGroup + +object RagiumUpgradeGroups { + // Processor // + + // Device // + + @JvmField + val FLUID_COLLECTOR: HTUpgradeGroup = HTUpgradeGroup.get("fluid_collector") + + @JvmField + val ITEM_COLLECTOR: HTUpgradeGroup = HTUpgradeGroup.get("item_collector") +} diff --git a/src/main/kotlin/hiiragi283/ragium/common/upgrade/RagiumUpgradeKeys.kt b/src/main/kotlin/hiiragi283/ragium/common/upgrade/RagiumUpgradeKeys.kt new file mode 100644 index 000000000..92813217e --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/upgrade/RagiumUpgradeKeys.kt @@ -0,0 +1,36 @@ +package hiiragi283.ragium.common.upgrade + +import hiiragi283.ragium.api.upgrade.HTUpgradeKey + +object RagiumUpgradeKeys { + // Processor // + + @JvmField + val COMPOSTING: HTUpgradeKey = HTUpgradeKey.get("composting") + + @JvmField + val DISABLE_EXTRA: HTUpgradeKey = HTUpgradeKey.get("disable_extra") + + @JvmField + val EXP_DRAIN: HTUpgradeKey = HTUpgradeKey.get("exp_drain") + + @JvmField + val LONG_BREWING: HTUpgradeKey = HTUpgradeKey.get("long_brewing") + + @JvmField + val STRONG_BREWING: HTUpgradeKey = HTUpgradeKey.get("strong_brewing") + + @JvmField + val USE_LUBRICANT: HTUpgradeKey = HTUpgradeKey.get("use_lubricant") + + // Device // + + @JvmField + val EXP_COLLECTING: HTUpgradeKey = HTUpgradeKey.get("exp_collecting") + + @JvmField + val FISHING: HTUpgradeKey = HTUpgradeKey.get("fishing") + + @JvmField + val MOB_CAPTURE: HTUpgradeKey = HTUpgradeKey.get("mob_capture") +} diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlockTypes.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlockTypes.kt index 7696aa7c9..ff4a746a1 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlockTypes.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlockTypes.kt @@ -7,6 +7,7 @@ import hiiragi283.ragium.common.block.type.HTMachineBlockType import hiiragi283.ragium.common.text.RagiumCommonTranslation import hiiragi283.ragium.common.tier.HTCrateTier import hiiragi283.ragium.common.tier.HTMachineTier +import hiiragi283.ragium.common.upgrade.RagiumUpgradeGroups import hiiragi283.ragium.config.RagiumConfig import net.minecraft.world.level.block.Block @@ -235,6 +236,7 @@ object RagiumBlockTypes { .builder { RagiumBlockEntityTypes.FLUID_COLLECTOR } .addMenu { RagiumMenuTypes.FLUID_COLLECTOR } .addTier(HTMachineTier.BASIC) + .addUpgradeGroup(RagiumUpgradeGroups.FLUID_COLLECTOR) .build(RagiumCommonTranslation.FLUID_COLLECTOR) @JvmField @@ -242,6 +244,7 @@ object RagiumBlockTypes { .builder { RagiumBlockEntityTypes.ITEM_COLLECTOR } .addMenu { RagiumMenuTypes.ITEM_COLLECTOR } .addTier(HTMachineTier.BASIC) + .addUpgradeGroup(RagiumUpgradeGroups.ITEM_COLLECTOR) .build(RagiumCommonTranslation.ITEM_COLLECTOR) // Advanced diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumDataComponents.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumDataComponents.kt index cef4e0698..803dbf52c 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumDataComponents.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumDataComponents.kt @@ -1,7 +1,6 @@ package hiiragi283.ragium.setup import hiiragi283.ragium.api.RagiumAPI -import hiiragi283.ragium.api.item.component.HTComponentUpgrade import hiiragi283.ragium.api.item.component.HTIntrinsicEnchantment import hiiragi283.ragium.api.item.component.HTItemSoundEvent import hiiragi283.ragium.api.item.component.HTLootTicketTargets @@ -19,11 +18,11 @@ import hiiragi283.ragium.api.storage.attachments.HTAttachedFluids import hiiragi283.ragium.api.storage.attachments.HTAttachedItems import hiiragi283.ragium.api.text.HTSimpleTranslation import hiiragi283.ragium.api.text.HTTranslation +import hiiragi283.ragium.api.upgrade.HTUpgradeGroup import net.minecraft.core.component.DataComponentType import net.minecraft.core.registries.Registries import net.minecraft.world.damagesource.DamageType import net.minecraft.world.item.DyeColor -import net.minecraft.world.level.block.entity.BlockEntityType import net.neoforged.bus.api.IEventBus import org.apache.commons.lang3.math.Fraction @@ -84,15 +83,11 @@ object RagiumDataComponents { // Machine // - @JvmField - val MACHINE_UPGRADE: DataComponentType = REGISTER.registerType("machine_upgrade", HTComponentUpgrade.CODEC) - @JvmField val MACHINE_UPGRADES: DataComponentType = REGISTER.registerType("machine_upgrades", HTAttachedItems.CODEC) @JvmField - val MACHINE_UPGRADE_FILTER: DataComponentType>> = - REGISTER.registerType("machine_upgrade/filter", HTKeyOrTagHelper.INSTANCE.codec(Registries.BLOCK_ENTITY_TYPE)) + val UPGRADE_GROUP: DataComponentType = REGISTER.registerType("upgrade_group", HTUpgradeGroup.CODEC) // Storage // diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumItems.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumItems.kt index 47f05a810..4ac866fe5 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumItems.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumItems.kt @@ -7,7 +7,8 @@ import hiiragi283.ragium.api.capability.HTItemCapabilities import hiiragi283.ragium.api.capability.RagiumCapabilities import hiiragi283.ragium.api.collection.ImmutableTable import hiiragi283.ragium.api.collection.buildTable -import hiiragi283.ragium.api.item.component.HTComponentUpgrade +import hiiragi283.ragium.api.data.map.HTUpgradeData +import hiiragi283.ragium.api.data.map.RagiumDataMapTypes import hiiragi283.ragium.api.item.component.HTIntrinsicEnchantment import hiiragi283.ragium.api.item.component.HTItemSoundEvent import hiiragi283.ragium.api.material.HTMaterialKey @@ -15,8 +16,6 @@ import hiiragi283.ragium.api.material.HTMaterialLike import hiiragi283.ragium.api.material.prefix.HTMaterialPrefix import hiiragi283.ragium.api.material.prefix.HTPrefixLike import hiiragi283.ragium.api.math.fraction -import hiiragi283.ragium.api.registry.HTKeyOrTagHelper -import hiiragi283.ragium.api.registry.impl.HTDeferredBlockEntityType import hiiragi283.ragium.api.registry.impl.HTDeferredItem import hiiragi283.ragium.api.registry.impl.HTDeferredItemRegister import hiiragi283.ragium.api.registry.impl.HTSimpleDeferredItem @@ -24,13 +23,13 @@ import hiiragi283.ragium.api.registry.vanillaId import hiiragi283.ragium.api.storage.energy.HTEnergyBattery import hiiragi283.ragium.api.storage.fluid.HTFluidTank import hiiragi283.ragium.api.storage.item.HTItemSlot -import hiiragi283.ragium.api.tag.RagiumModTags import hiiragi283.ragium.api.text.HTTranslation import hiiragi283.ragium.api.tier.HTBaseTier +import hiiragi283.ragium.api.upgrade.HTUpgradeGroup import hiiragi283.ragium.api.upgrade.HTUpgradeHelper import hiiragi283.ragium.api.upgrade.HTUpgradeKey +import hiiragi283.ragium.api.upgrade.HTUpgradeKeys import hiiragi283.ragium.api.upgrade.HTUpgradeProvider -import hiiragi283.ragium.api.upgrade.RagiumUpgradeKeys import hiiragi283.ragium.api.variant.HTEquipmentMaterial import hiiragi283.ragium.api.variant.HTToolVariant import hiiragi283.ragium.common.HTChargeType @@ -84,7 +83,6 @@ import net.minecraft.core.registries.BuiltInRegistries import net.minecraft.resources.ResourceKey import net.minecraft.sounds.SoundEvent import net.minecraft.sounds.SoundEvents -import net.minecraft.tags.TagKey import net.minecraft.world.food.FoodProperties import net.minecraft.world.food.Foods import net.minecraft.world.item.DyeColor @@ -94,7 +92,6 @@ import net.minecraft.world.item.Rarity import net.minecraft.world.item.enchantment.Enchantment import net.minecraft.world.item.enchantment.Enchantments import net.minecraft.world.level.ItemLike -import net.minecraft.world.level.block.entity.BlockEntityType import net.neoforged.bus.api.IEventBus import net.neoforged.neoforge.capabilities.RegisterCapabilitiesEvent import net.neoforged.neoforge.event.ModifyDefaultComponentsEvent @@ -661,53 +658,45 @@ object RagiumItems { @JvmStatic val MACHINE_UPGRADES: ImmutableTable = buildTable { fun register(variant: HTUpgradeVariant, tier: HTBaseTier, vararg pairs: Pair) { - this[variant, tier] = REGISTER.registerSimpleItem("${tier.serializedName}_${variant.variantName()}_upgrade") { - it - .stacksTo(1) - .component(RagiumDataComponents.MACHINE_UPGRADE, HTComponentUpgrade.create(*pairs)) - .component( - RagiumDataComponents.MACHINE_UPGRADE_FILTER, - HTKeyOrTagHelper.INSTANCE.create(RagiumModTags.BlockEntityTypes.MACHINES_ELECTRIC), - ) - } + this[variant, tier] = REGISTER.registerSimpleItem("${tier.serializedName}_${variant.variantName()}_upgrade") { it.stacksTo(1) } } // Efficiency register( HTUpgradeVariant.EFFICIENCY, HTBaseTier.BASIC, - RagiumUpgradeKeys.ENERGY_EFFICIENCY to fraction(5, 4), + HTUpgradeKeys.ENERGY_EFFICIENCY to fraction(5, 4), ) register( HTUpgradeVariant.EFFICIENCY, HTBaseTier.ADVANCED, - RagiumUpgradeKeys.ENERGY_EFFICIENCY to fraction(3, 2), + HTUpgradeKeys.ENERGY_EFFICIENCY to fraction(3, 2), ) // Energy Capacity register( HTUpgradeVariant.ENERGY_CAPACITY, HTBaseTier.BASIC, - RagiumUpgradeKeys.ENERGY_CAPACITY to fraction(4), + HTUpgradeKeys.ENERGY_CAPACITY to fraction(4), ) register( HTUpgradeVariant.ENERGY_CAPACITY, HTBaseTier.ADVANCED, - RagiumUpgradeKeys.ENERGY_CAPACITY to fraction(8), + HTUpgradeKeys.ENERGY_CAPACITY to fraction(8), ) // Speed register( HTUpgradeVariant.SPEED, HTBaseTier.BASIC, - RagiumUpgradeKeys.ENERGY_EFFICIENCY to fraction(4, 5), - RagiumUpgradeKeys.ENERGY_GENERATION to fraction(5, 4), - RagiumUpgradeKeys.SPEED to fraction(5, 4), + HTUpgradeKeys.ENERGY_EFFICIENCY to fraction(4, 5), + HTUpgradeKeys.ENERGY_GENERATION to fraction(5, 4), + HTUpgradeKeys.SPEED to fraction(5, 4), ) register( HTUpgradeVariant.SPEED, HTBaseTier.ADVANCED, - RagiumUpgradeKeys.ENERGY_EFFICIENCY to fraction(2, 3), - RagiumUpgradeKeys.ENERGY_GENERATION to fraction(3, 2), - RagiumUpgradeKeys.SPEED to fraction(3, 2), + HTUpgradeKeys.ENERGY_EFFICIENCY to fraction(2, 3), + HTUpgradeKeys.ENERGY_GENERATION to fraction(3, 2), + HTUpgradeKeys.SPEED to fraction(3, 2), ) } @@ -717,44 +706,27 @@ object RagiumItems { // Processor @JvmField - val EFFICIENT_CRUSH_UPGRADE: HTSimpleDeferredItem = - registerUpgrade("efficient_crush", RagiumUpgradeKeys.USE_LUBRICANT, RagiumCommonTranslation.EFFICIENT_CRUSH_UPGRADE) + val EFFICIENT_CRUSH_UPGRADE: HTSimpleDeferredItem = registerUpgrade("efficient_crush") @JvmField - val PRIMARY_ONLY_UPGRADE: HTSimpleDeferredItem = - registerUpgrade("primary_only", RagiumUpgradeKeys.DISABLE_EXTRA, RagiumCommonTranslation.PRIMARY_ONLY_UPGRADE) + val PRIMARY_ONLY_UPGRADE: HTSimpleDeferredItem = registerUpgrade("primary_only") // Device @JvmField - val EXP_COLLECTOR_UPGRADE: HTSimpleDeferredItem = - registerUpgrade("exp_collector", RagiumUpgradeKeys.EXP_COLLECTING, RagiumCommonTranslation.EXP_COLLECTOR_UPGRADE) + val EXP_COLLECTOR_UPGRADE: HTSimpleDeferredItem = registerUpgrade("exp_collector") @JvmField - val FISHING_UPGRADE: HTSimpleDeferredItem = - registerUpgrade("fishing", RagiumUpgradeKeys.FISHING, RagiumCommonTranslation.FISHING_UPGRADE) + val FISHING_UPGRADE: HTSimpleDeferredItem = registerUpgrade("fishing") @JvmField - val MOB_CAPTURE_UPGRADE: HTSimpleDeferredItem = - registerUpgrade("mob_capture", RagiumUpgradeKeys.MOB_CAPTURE, RagiumCommonTranslation.MOB_CAPTURE_UPGRADE) + val MOB_CAPTURE_UPGRADE: HTSimpleDeferredItem = registerUpgrade("mob_capture") @JvmStatic - private fun registerUpgrade(name: String, key: HTUpgradeKey, translation: HTTranslation): HTSimpleDeferredItem = - REGISTER.registerSimpleItem("${name}_upgrade") { - it - .stacksTo(1) - .description(translation) - .component( - RagiumDataComponents.MACHINE_UPGRADE, - HTComponentUpgrade.create(key to fraction(1)), - ) - } + private fun registerUpgrade(name: String): HTSimpleDeferredItem = REGISTER.registerSimpleItem("${name}_upgrade") { it.stacksTo(1) } @JvmField val CREATIVE_UPGRADE: HTSimpleDeferredItem = REGISTER.registerItemWith("creative_upgrade", HTBaseTier.CREATIVE, ::HTTierBasedItem) { - it.stacksTo(1).component( - RagiumDataComponents.MACHINE_UPGRADE, - HTComponentUpgrade.create(RagiumUpgradeKeys.IS_CREATIVE to fraction(1)), - ) + it.stacksTo(1) } // Event // @@ -809,16 +781,15 @@ object RagiumItems { // Upgrade for (item: Item in BuiltInRegistries.ITEM) { - // Component-Based for all items + // Data-Based for all items event.registerItem( RagiumCapabilities.UPGRADE_ITEM, { stack: ItemStack, _: Void? -> - if (stack.has(RagiumDataComponents.MACHINE_UPGRADE)) { - HTUpgradeProvider { key: HTUpgradeKey -> - stack.get(RagiumDataComponents.MACHINE_UPGRADE)?.get(key) ?: Fraction.ZERO - } - } else { - null + val upgradeData: HTUpgradeData = RagiumDataMapTypes.getUpgradeData(stack) ?: return@registerItem null + object : HTUpgradeProvider { + override fun getUpgradeData(key: HTUpgradeKey): Fraction = upgradeData[key] ?: Fraction.ZERO + + override fun getGroup(): HTUpgradeGroup? = upgradeData.groupOrNull } }, item, @@ -837,22 +808,6 @@ object RagiumItems { ) } - for ((tier: HTComponentTier, item: ItemLike) in COMPONENTS) { - event.registerItem( - RagiumCapabilities.UPGRADE_ITEM, - { _: ItemStack, _: Void? -> - HTUpgradeProvider { key: HTUpgradeKey -> - if (key == RagiumUpgradeKeys.BASE_MULTIPLIER) { - fraction(tier.ordinal + 2) - } else { - Fraction.ZERO - } - } - }, - item, - ) - } - RagiumAPI.LOGGER.info("Registered item capabilities!") } @@ -906,14 +861,6 @@ object RagiumItems { modify(item, RagiumDataComponents.INTRINSIC_ENCHANTMENT, HTIntrinsicEnchantment(ench, level)) } - fun setFilter(item: ItemLike, type: HTDeferredBlockEntityType<*>) { - modify(item, RagiumDataComponents.MACHINE_UPGRADE_FILTER, HTKeyOrTagHelper.INSTANCE.create(type.key)) - } - - fun setFilter(item: ItemLike, tagKey: TagKey>) { - modify(item, RagiumDataComponents.MACHINE_UPGRADE_FILTER, HTKeyOrTagHelper.INSTANCE.create(tagKey)) - } - // Tools for (item: HTDeferredItem<*> in getToolMap(RagiumMaterialKeys.AZURE_STEEL).values) { setEnch(item, Enchantments.SILK_TOUCH) @@ -923,14 +870,6 @@ object RagiumItems { setEnch(getTool(VanillaToolVariant.AXE, RagiumMaterialKeys.DEEP_STEEL), RagiumEnchantments.STRIKE) setEnch(getTool(VanillaToolVariant.SWORD, RagiumMaterialKeys.DEEP_STEEL), RagiumEnchantments.NOISE_CANCELING, 5) - // Upgrades - setFilter(EFFICIENT_CRUSH_UPGRADE, RagiumModTags.BlockEntityTypes.EFFICIENT_CRUSH_UPGRADABLE) - setFilter(PRIMARY_ONLY_UPGRADE, RagiumModTags.BlockEntityTypes.EXTRA_OUTPUT_UPGRADABLE) - - setFilter(EXP_COLLECTOR_UPGRADE, RagiumBlockEntityTypes.FLUID_COLLECTOR) - setFilter(FISHING_UPGRADE, RagiumBlockEntityTypes.ITEM_COLLECTOR) - setFilter(MOB_CAPTURE_UPGRADE, RagiumBlockEntityTypes.ITEM_COLLECTOR) - RagiumAPI.LOGGER.info("Modified default item components!") } diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumMiscRegister.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumMiscRegister.kt index d35c8e5bd..9187ef7ed 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumMiscRegister.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumMiscRegister.kt @@ -34,7 +34,6 @@ object RagiumMiscRegister { event.register(Registries.RECIPE_TYPE) { helper -> // Machine register(helper, RagiumRecipeTypes.ALLOYING) - register(helper, RagiumRecipeTypes.BREWING) register(helper, RagiumRecipeTypes.COMPRESSING) register(helper, RagiumRecipeTypes.CRUSHING) register(helper, RagiumRecipeTypes.CUTTING) From fc0357cc27414b46699fdcc495f0de5d60849959 Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Sat, 13 Dec 2025 23:57:03 +0900 Subject: [PATCH 35/49] refactor: add HTAbstractRecipe --- .../ragium/api/recipe/HTAbstractRecipe.kt | 18 +++++++++++++ .../recipe/HTAbstractSingleItemInputRecipe.kt | 19 ++++++++++++++ .../hiiragi283/ragium/api/recipe/HTRecipe.kt | 25 +++---------------- .../ragium/api/recipe/HTRecipeCache.kt | 3 +-- .../ragium/api/recipe/HTRecipeFinder.kt | 9 +++---- .../api/recipe/HTSingleItemInputRecipe.kt | 10 ++------ .../api/registry/impl/HTDeferredRecipeType.kt | 11 ++++++-- .../device/HTStoneCollectorBlockEntity.kt | 17 +++++++------ .../processor/HTProcessorBlockEntity.kt | 6 ++--- .../base/HTSingleItemInputBlockEntity.kt | 8 +++--- .../common/recipe/HTFinderRecipeCache.kt | 11 ++++---- .../recipe/vanilla/HTAutoCraftingRecipe.kt | 7 ++---- .../recipe/vanilla/HTVanillaCookingRecipe.kt | 4 +-- .../vanilla/HTVanillaSingleItemRecipe.kt | 6 ++--- 14 files changed, 83 insertions(+), 71 deletions(-) create mode 100644 src/api/kotlin/hiiragi283/ragium/api/recipe/HTAbstractRecipe.kt create mode 100644 src/api/kotlin/hiiragi283/ragium/api/recipe/HTAbstractSingleItemInputRecipe.kt diff --git a/src/api/kotlin/hiiragi283/ragium/api/recipe/HTAbstractRecipe.kt b/src/api/kotlin/hiiragi283/ragium/api/recipe/HTAbstractRecipe.kt new file mode 100644 index 000000000..5339f4768 --- /dev/null +++ b/src/api/kotlin/hiiragi283/ragium/api/recipe/HTAbstractRecipe.kt @@ -0,0 +1,18 @@ +package hiiragi283.ragium.api.recipe + +import hiiragi283.ragium.api.recipe.input.HTRecipeInput +import hiiragi283.ragium.api.stack.ImmutableItemStack +import net.minecraft.core.HolderLookup +import net.minecraft.world.level.Level + +interface HTAbstractRecipe { + fun matches(input: HTRecipeInput, level: Level): Boolean + + fun assembleItem(input: HTRecipeInput, provider: HolderLookup.Provider): ImmutableItemStack? + + // Modifiable // + + interface Modifiable : HTAbstractRecipe { + fun copyAndMultiply(multiplier: Int): RECIPE + } +} diff --git a/src/api/kotlin/hiiragi283/ragium/api/recipe/HTAbstractSingleItemInputRecipe.kt b/src/api/kotlin/hiiragi283/ragium/api/recipe/HTAbstractSingleItemInputRecipe.kt new file mode 100644 index 000000000..3fd33d3a2 --- /dev/null +++ b/src/api/kotlin/hiiragi283/ragium/api/recipe/HTAbstractSingleItemInputRecipe.kt @@ -0,0 +1,19 @@ +package hiiragi283.ragium.api.recipe + +import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient +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 HTAbstractSingleItemInputRecipe : + HTAbstractRecipe, + 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/recipe/HTRecipe.kt b/src/api/kotlin/hiiragi283/ragium/api/recipe/HTRecipe.kt index 5a997e360..b33a66566 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/recipe/HTRecipe.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/recipe/HTRecipe.kt @@ -1,25 +1,22 @@ package hiiragi283.ragium.api.recipe 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.RecipeSerializer -import net.minecraft.world.item.crafting.RecipeType /** * Ragiumで使用する[Recipe]の拡張インターフェース * @see mekanism.api.recipes.MekanismRecipe */ -interface HTRecipe : Recipe { +interface HTRecipe : + Recipe, + HTAbstractRecipe { @Deprecated("Not used in Ragium", level = DeprecationLevel.ERROR) override fun canCraftInDimensions(width: Int, height: Int): Boolean = true - fun assembleItem(input: HTRecipeInput, provider: HolderLookup.Provider): ImmutableItemStack? - @Deprecated( "Use `assembleItem(HTRecipeInput, HolderLookup.Provider) `instead", ReplaceWith("this.assembleItem(input, registries)"), @@ -38,20 +35,4 @@ interface HTRecipe : Recipe { override fun getIngredients(): NonNullList = super.getIngredients() override fun isSpecial(): Boolean = true - - // Fake // - - interface Fake : HTRecipe { - @Deprecated("Not implemented", level = DeprecationLevel.ERROR) - override fun getSerializer(): RecipeSerializer<*> = throw UnsupportedOperationException() - - @Deprecated("Not implemented", level = DeprecationLevel.ERROR) - override fun getType(): RecipeType<*> = throw UnsupportedOperationException() - } - - // Modifiable // - - interface Modifiable : HTRecipe { - fun copyAndMultiply(multiplier: Int): RECIPE - } } diff --git a/src/api/kotlin/hiiragi283/ragium/api/recipe/HTRecipeCache.kt b/src/api/kotlin/hiiragi283/ragium/api/recipe/HTRecipeCache.kt index c32bbf903..9803f05c7 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/recipe/HTRecipeCache.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/recipe/HTRecipeCache.kt @@ -1,6 +1,5 @@ package hiiragi283.ragium.api.recipe -import net.minecraft.world.item.crafting.Recipe import net.minecraft.world.item.crafting.RecipeInput import net.minecraft.world.level.Level @@ -9,7 +8,7 @@ import net.minecraft.world.level.Level * @param INPUT レシピの入力となるクラス * @param RECIPE レシピのクラス */ -fun interface HTRecipeCache> { +fun interface HTRecipeCache { /** * 指定された[input], [level]から最初に一致するレシピを返します。 * @param input レシピの入力 diff --git a/src/api/kotlin/hiiragi283/ragium/api/recipe/HTRecipeFinder.kt b/src/api/kotlin/hiiragi283/ragium/api/recipe/HTRecipeFinder.kt index d5cb2c54f..ebfa7c01c 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/recipe/HTRecipeFinder.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/recipe/HTRecipeFinder.kt @@ -1,7 +1,6 @@ package hiiragi283.ragium.api.recipe -import net.minecraft.world.item.crafting.Recipe -import net.minecraft.world.item.crafting.RecipeHolder +import net.minecraft.resources.ResourceLocation import net.minecraft.world.item.crafting.RecipeInput import net.minecraft.world.item.crafting.RecipeManager import net.minecraft.world.level.Level @@ -11,7 +10,7 @@ import net.minecraft.world.level.Level * @param INPUT レシピの入力となるクラス * @param RECIPE レシピのクラス */ -fun interface HTRecipeFinder> { +fun interface HTRecipeFinder { /** * 指定した引数から最初に一致するレシピを返します。 * @param manager バニラの[RecipeManager] @@ -24,6 +23,6 @@ fun interface HTRecipeFinder> { manager: RecipeManager, input: INPUT, level: Level, - lastRecipe: RecipeHolder?, - ): RecipeHolder? + lastRecipe: Pair?, + ): Pair? } diff --git a/src/api/kotlin/hiiragi283/ragium/api/recipe/HTSingleItemInputRecipe.kt b/src/api/kotlin/hiiragi283/ragium/api/recipe/HTSingleItemInputRecipe.kt index c9e979f26..d656a6c5a 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/recipe/HTSingleItemInputRecipe.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/recipe/HTSingleItemInputRecipe.kt @@ -1,19 +1,13 @@ package hiiragi283.ragium.api.recipe -import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient 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 HTSingleItemInputRecipe : HTRecipe, - Predicate, - HTItemIngredient.CountGetter { - override fun matches(input: HTRecipeInput, level: Level): Boolean = input.testItem(0, this::test) - - override fun test(stack: ImmutableItemStack): Boolean + HTAbstractSingleItemInputRecipe { + override fun matches(input: HTRecipeInput, level: Level): Boolean = super.matches(input, level) } 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 d4bad283a..a91859837 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/registry/impl/HTDeferredRecipeType.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/registry/impl/HTDeferredRecipeType.kt @@ -34,6 +34,13 @@ class HTDeferredRecipeType> : manager: RecipeManager, input: INPUT, level: Level, - lastRecipe: RecipeHolder?, - ): RecipeHolder? = manager.getRecipeFor(get(), input, level, lastRecipe).getOrNull() + lastRecipe: Pair?, + ): Pair? { + val lastHolder: RecipeHolder? = lastRecipe + ?.let { (id: ResourceLocation, recipe: RECIPE) -> RecipeHolder(id, recipe) } + return manager + .getRecipeFor(get(), input, level, lastHolder) + .map { holder: RecipeHolder -> holder.id to holder.value } + .getOrNull() + } } 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 c794ff0ce..21ed09cd1 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 @@ -20,6 +20,7 @@ import hiiragi283.ragium.common.storage.item.slot.HTOutputItemSlot import hiiragi283.ragium.setup.RagiumBlocks import net.minecraft.core.BlockPos import net.minecraft.core.Direction +import net.minecraft.resources.ResourceLocation import net.minecraft.server.level.ServerLevel import net.minecraft.sounds.SoundEvents import net.minecraft.sounds.SoundSource @@ -84,29 +85,29 @@ class HTStoneCollectorBlockEntity(pos: BlockPos, state: BlockState) : manager: RecipeManager, input: HTRecipeInput, level: Level, - lastRecipe: RecipeHolder?, - ): RecipeHolder? { + lastRecipe: Pair?, + ): Pair? { // 入力が空の場合は即座に抜ける if (input.isEmpty) return null // キャッシュから判定を行う - if (lastRecipe != null && lastRecipe.value.matches(input, level)) { + if (lastRecipe != null && lastRecipe.second.matches(input, level)) { return lastRecipe } // 次にRecipeManagerから一覧を取得する val allRecipes: List> = - manager.getAllRecipesFor(RagiumRecipeTypes.ROCK_GENERATING.get()) + manager.getRecipesFor(RagiumRecipeTypes.ROCK_GENERATING.get(), input, level) // 触媒ありのレシピから優先して判定を行う for (holder: RecipeHolder in allRecipes) { val recipe: HTRockGeneratingRecipe = holder.value() - if (recipe.bottom.isPresent && recipe.matches(input, level)) { - return holder + if (recipe.bottom.isPresent) { + return holder.id to holder.value } } // 触媒なしのレシピを判定 for (holder: RecipeHolder in allRecipes) { val recipe: HTRockGeneratingRecipe = holder.value() - if (recipe.bottom.isEmpty && recipe.matches(input, level)) { - return holder + if (recipe.bottom.isEmpty) { + return holder.id to holder.value } } return null 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 234539f90..100d5b4f9 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 @@ -8,7 +8,7 @@ import hiiragi283.ragium.api.math.div import hiiragi283.ragium.api.math.fraction import hiiragi283.ragium.api.math.minus import hiiragi283.ragium.api.math.times -import hiiragi283.ragium.api.recipe.HTRecipe +import hiiragi283.ragium.api.recipe.HTAbstractRecipe import hiiragi283.ragium.api.recipe.HTRecipeCache import hiiragi283.ragium.api.recipe.HTRecipeFinder import hiiragi283.ragium.api.recipe.input.HTRecipeInput @@ -145,7 +145,7 @@ abstract class HTProcessorBlockEntity(blockHolder: Ho // RecipeBased // - abstract class RecipeBased(blockHolder: Holder, pos: BlockPos, state: BlockState) : + abstract class RecipeBased(blockHolder: Holder, pos: BlockPos, state: BlockState) : HTProcessorBlockEntity(blockHolder, pos, state) { override fun createRecipeInput(level: ServerLevel, pos: BlockPos): HTRecipeInput? = HTRecipeInput.create(null, ::buildRecipeInput) @@ -157,7 +157,7 @@ abstract class HTProcessorBlockEntity(blockHolder: Ho /** * レシピのキャッシュを保持する[HTProcessorBlockEntity]の拡張クラス */ - abstract class Cached( + abstract class Cached( private val recipeCache: HTRecipeCache, blockHolder: Holder, pos: BlockPos, 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 4c7f34876..092e92d36 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,6 +1,6 @@ package hiiragi283.ragium.common.block.entity.processor.base -import hiiragi283.ragium.api.recipe.HTRecipe +import hiiragi283.ragium.api.recipe.HTAbstractRecipe import hiiragi283.ragium.api.recipe.HTRecipeCache import hiiragi283.ragium.api.recipe.HTRecipeFinder import hiiragi283.ragium.api.recipe.input.HTRecipeInput @@ -17,7 +17,7 @@ import net.minecraft.server.level.ServerLevel import net.minecraft.world.level.block.Block import net.minecraft.world.level.block.state.BlockState -abstract class HTSingleItemInputBlockEntity(blockHolder: Holder, pos: BlockPos, state: BlockState) : +abstract class HTSingleItemInputBlockEntity(blockHolder: Holder, pos: BlockPos, state: BlockState) : HTProcessorBlockEntity.RecipeBased(blockHolder, pos, state) { lateinit var inputSlot: HTBasicItemSlot protected set @@ -28,7 +28,7 @@ abstract class HTSingleItemInputBlockEntity(blockHolder: Hold // Cached // - abstract class Cached( + abstract class Cached( private val recipeCache: HTRecipeCache, blockHolder: Holder, pos: BlockPos, @@ -44,7 +44,7 @@ abstract class HTSingleItemInputBlockEntity(blockHolder: Hold final override fun getMatchedRecipe(input: HTRecipeInput, level: ServerLevel): RECIPE? = recipeCache.getFirstRecipe(input, level) } - abstract class CachedWithTank : Cached { + abstract class CachedWithTank : Cached { constructor( recipeCache: HTRecipeCache, blockHolder: Holder, diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/HTFinderRecipeCache.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/HTFinderRecipeCache.kt index 475b890b4..4ca62000b 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/recipe/HTFinderRecipeCache.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/HTFinderRecipeCache.kt @@ -2,17 +2,16 @@ package hiiragi283.ragium.common.recipe import hiiragi283.ragium.api.recipe.HTRecipeCache import hiiragi283.ragium.api.recipe.HTRecipeFinder -import net.minecraft.world.item.crafting.Recipe -import net.minecraft.world.item.crafting.RecipeHolder +import net.minecraft.resources.ResourceLocation import net.minecraft.world.item.crafting.RecipeInput import net.minecraft.world.level.Level -class HTFinderRecipeCache>(private val finder: HTRecipeFinder) : +class HTFinderRecipeCache(private val finder: HTRecipeFinder) : HTRecipeCache { - private var lastRecipe: RecipeHolder? = null + private var lastRecipe: Pair? = null override fun getFirstRecipe(input: INPUT, level: Level): RECIPE? = finder .getRecipeFor(level.recipeManager, input, level, lastRecipe) - .also { holder: RecipeHolder? -> lastRecipe = holder } - ?.value + .also(::lastRecipe::set) + ?.second } diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/vanilla/HTAutoCraftingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/vanilla/HTAutoCraftingRecipe.kt index c7c09f195..40a0766c9 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/recipe/vanilla/HTAutoCraftingRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/vanilla/HTAutoCraftingRecipe.kt @@ -1,9 +1,8 @@ package hiiragi283.ragium.common.recipe.vanilla -import hiiragi283.ragium.api.recipe.HTRecipe +import hiiragi283.ragium.api.recipe.HTAbstractRecipe import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient 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 @@ -11,9 +10,7 @@ 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(val ingredients: List, private val factory: HTVanillaResultFactory) : HTAbstractRecipe { companion object { /** * @see net.minecraft.world.level.block.entity.CrafterBlockEntity diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/vanilla/HTVanillaCookingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/vanilla/HTVanillaCookingRecipe.kt index a99538d11..5b6cc0851 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/recipe/vanilla/HTVanillaCookingRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/vanilla/HTVanillaCookingRecipe.kt @@ -1,14 +1,14 @@ package hiiragi283.ragium.common.recipe.vanilla import hiiragi283.ragium.api.function.andThen -import hiiragi283.ragium.api.recipe.HTRecipe +import hiiragi283.ragium.api.recipe.HTAbstractRecipe import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient import net.minecraft.world.item.ItemStack import net.minecraft.world.item.crafting.AbstractCookingRecipe open class HTVanillaCookingRecipe : HTVanillaSingleItemRecipe, - HTRecipe.Modifiable { + HTAbstractRecipe.Modifiable { constructor( recipe: AbstractCookingRecipe, ingredient: HTItemIngredient, diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/vanilla/HTVanillaSingleItemRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/vanilla/HTVanillaSingleItemRecipe.kt index 72f914281..84652a7b2 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/recipe/vanilla/HTVanillaSingleItemRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/vanilla/HTVanillaSingleItemRecipe.kt @@ -1,7 +1,6 @@ package hiiragi283.ragium.common.recipe.vanilla -import hiiragi283.ragium.api.recipe.HTRecipe -import hiiragi283.ragium.api.recipe.HTSingleItemInputRecipe +import hiiragi283.ragium.api.recipe.HTAbstractSingleItemInputRecipe import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient import hiiragi283.ragium.api.recipe.input.HTRecipeInput import hiiragi283.ragium.api.stack.ImmutableItemStack @@ -15,8 +14,7 @@ open class HTVanillaSingleItemRecipe>( protected val recipe: RECIPE, protected val ingredient: HTItemIngredient, protected val resultFactory: HTVanillaResultFactory, -) : HTRecipe.Fake, - HTSingleItemInputRecipe { +) : HTAbstractSingleItemInputRecipe { constructor(recipe: RECIPE) : this( recipe, HTItemIngredient(recipe.ingredients[0], 1), From 90f30ebd2ea623973c581ff2120b51ca88c1cf25 Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Sun, 14 Dec 2025 01:08:07 +0900 Subject: [PATCH 36/49] feat!: removed XX Crates feat: added new block Variable Crate --- .../block/attribute/HTFluidBlockAttribute.kt | 2 +- .../ragium/api/recipe/HTRecipeFinder.kt | 21 +++-- .../ragium/api/recipe/RecipeHolders.kt | 9 +++ .../api/registry/impl/HTDeferredRecipeType.kt | 18 +---- .../ragium/api/upgrade/HTUpgradeHandler.kt | 2 +- .../ragium/api/upgrade/HTUpgradeHelper.kt | 17 +++- .../ragium/api/upgrade/HTUpgradeKeys.kt | 3 + .../api/data/lang/HTLanguageProvider.kt | 12 --- .../data/client/RagiumBlockStateProvider.kt | 10 +-- .../data/client/RagiumEnglishProvider.kt | 6 +- .../data/client/RagiumJapaneseProvider.kt | 4 +- .../recipe/RagiumMachineRecipeProvider.kt | 76 +++++++----------- .../server/tag/RagiumBlockTagsProvider.kt | 2 +- .../hiiragi283/ragium/client/RagiumClient.kt | 9 +-- .../client/renderer/block/HTCrateRenderer.kt | 23 +++--- .../device/HTStoneCollectorBlockEntity.kt | 19 ++--- .../base/HTAbstractSmelterBlockEntity.kt | 24 +++--- .../entity/storage/HTCrateBlockEntity.kt | 75 ++++++++++++----- .../block/entity/storage/HTTankBlockEntity.kt | 4 +- .../common/block/storage/HTCrateBlock.kt | 75 +---------------- .../common/item/block/HTCrateBlockItem.kt | 26 ------ .../common/recipe/HTFinderRecipeCache.kt | 2 +- .../ragium/common/tier/HTCrateTier.kt | 52 ------------ .../ragium/config/RagiumCommonConfig.kt | 22 +---- .../ragium/setup/RagiumBlockEntityTypes.kt | 17 ++-- .../ragium/setup/RagiumBlockTypes.kt | 11 +-- .../hiiragi283/ragium/setup/RagiumBlocks.kt | 29 +++---- .../hiiragi283/ragium/setup/RagiumItems.kt | 22 ++--- .../ragium/setup/RagiumMenuTypes.kt | 4 + .../ragium/setup/RagiumMiscRegister.kt | 1 + .../ragium/textures/block/crate_top.png | Bin 172 -> 0 bytes .../ragium/textures/block/huge_crate_side.png | Bin 189 -> 0 bytes .../textures/block/large_crate_side.png | Bin 184 -> 0 bytes .../textures/block/medium_crate_side.png | Bin 185 -> 0 bytes .../textures/block/small_crate_side.png | Bin 169 -> 0 bytes .../ragium/textures/gui/container/crate.png | Bin 0 -> 1216 bytes 36 files changed, 218 insertions(+), 379 deletions(-) create mode 100644 src/api/kotlin/hiiragi283/ragium/api/recipe/RecipeHolders.kt delete mode 100644 src/main/kotlin/hiiragi283/ragium/common/item/block/HTCrateBlockItem.kt delete mode 100644 src/main/kotlin/hiiragi283/ragium/common/tier/HTCrateTier.kt delete mode 100644 src/main/resources/assets/ragium/textures/block/crate_top.png delete mode 100644 src/main/resources/assets/ragium/textures/block/huge_crate_side.png delete mode 100644 src/main/resources/assets/ragium/textures/block/large_crate_side.png delete mode 100644 src/main/resources/assets/ragium/textures/block/medium_crate_side.png delete mode 100644 src/main/resources/assets/ragium/textures/block/small_crate_side.png create mode 100644 src/main/resources/assets/ragium/textures/gui/container/crate.png diff --git a/src/api/kotlin/hiiragi283/ragium/api/block/attribute/HTFluidBlockAttribute.kt b/src/api/kotlin/hiiragi283/ragium/api/block/attribute/HTFluidBlockAttribute.kt index 218017de3..ec6a0d538 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/block/attribute/HTFluidBlockAttribute.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/block/attribute/HTFluidBlockAttribute.kt @@ -12,7 +12,7 @@ import java.util.function.IntSupplier data class HTFluidBlockAttribute(private val tankMap: Map) : HTBlockAttribute { private fun getTankCapacity(type: TankType, handler: HTUpgradeHandler): IntSupplier { val baseCapacity: IntSupplier = tankMap[type] ?: error("Undefined tank capacity for ${type.serializedName}") - return IntSupplier { HTUpgradeHelper.getTankCapacity(handler, baseCapacity.asInt) } + return IntSupplier { HTUpgradeHelper.getFluidCapacity(handler, baseCapacity.asInt) } } fun getInputTank(handler: HTUpgradeHandler): IntSupplier = getTankCapacity(TankType.INPUT, handler) diff --git a/src/api/kotlin/hiiragi283/ragium/api/recipe/HTRecipeFinder.kt b/src/api/kotlin/hiiragi283/ragium/api/recipe/HTRecipeFinder.kt index ebfa7c01c..fb85587ac 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/recipe/HTRecipeFinder.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/recipe/HTRecipeFinder.kt @@ -1,8 +1,9 @@ package hiiragi283.ragium.api.recipe import net.minecraft.resources.ResourceLocation +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 import net.minecraft.world.level.Level /** @@ -13,16 +14,20 @@ import net.minecraft.world.level.Level fun interface HTRecipeFinder { /** * 指定した引数から最初に一致するレシピを返します。 - * @param manager バニラの[RecipeManager] * @param input レシピの入力 * @param level この処理を行っている[Level] * @param lastRecipe 最後に一致したレシピのキャッシュ * @return 一致するレシピがない場合は`null` */ - fun getRecipeFor( - manager: RecipeManager, - input: INPUT, - level: Level, - lastRecipe: Pair?, - ): Pair? + fun getRecipeFor(input: INPUT, level: Level, lastRecipe: Pair?): Pair? + + fun interface Vanilla> : HTRecipeFinder { + override fun getRecipeFor( + input: INPUT, + level: Level, + lastRecipe: Pair?, + ): Pair? = getVanillaRecipeFor(input, level, lastRecipe?.toHolder())?.toPair() + + fun getVanillaRecipeFor(input: INPUT, level: Level, lastRecipe: RecipeHolder?): RecipeHolder? + } } diff --git a/src/api/kotlin/hiiragi283/ragium/api/recipe/RecipeHolders.kt b/src/api/kotlin/hiiragi283/ragium/api/recipe/RecipeHolders.kt new file mode 100644 index 000000000..ec65f3c6c --- /dev/null +++ b/src/api/kotlin/hiiragi283/ragium/api/recipe/RecipeHolders.kt @@ -0,0 +1,9 @@ +package hiiragi283.ragium.api.recipe + +import net.minecraft.resources.ResourceLocation +import net.minecraft.world.item.crafting.Recipe +import net.minecraft.world.item.crafting.RecipeHolder + +fun > RecipeHolder.toPair(): Pair = this.id to this.value + +fun > Pair.toHolder(): RecipeHolder = RecipeHolder(this.first, this.second) 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 a91859837..b1b864069 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/registry/impl/HTDeferredRecipeType.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/registry/impl/HTDeferredRecipeType.kt @@ -12,14 +12,13 @@ import net.minecraft.resources.ResourceLocation 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 import net.minecraft.world.item.crafting.RecipeType import net.minecraft.world.level.Level import kotlin.jvm.optionals.getOrNull class HTDeferredRecipeType> : HTDeferredHolder, RecipeType>, - HTRecipeFinder, + HTRecipeFinder.Vanilla, HTHasTranslationKey, HTHasText { constructor(key: ResourceKey>) : super(key) @@ -30,17 +29,8 @@ class HTDeferredRecipeType> : override fun getText(): Component = translatableText(translationKey) - override fun getRecipeFor( - manager: RecipeManager, - input: INPUT, - level: Level, - lastRecipe: Pair?, - ): Pair? { - val lastHolder: RecipeHolder? = lastRecipe - ?.let { (id: ResourceLocation, recipe: RECIPE) -> RecipeHolder(id, recipe) } - return manager - .getRecipeFor(get(), input, level, lastHolder) - .map { holder: RecipeHolder -> holder.id to holder.value } + override fun getVanillaRecipeFor(input: INPUT, level: Level, lastRecipe: RecipeHolder?): RecipeHolder? = + level.recipeManager + .getRecipeFor(get(), input, level, lastRecipe) .getOrNull() - } } diff --git a/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeHandler.kt b/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeHandler.kt index 2e1cf3c0c..2bddfd564 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeHandler.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeHandler.kt @@ -46,7 +46,7 @@ interface HTUpgradeHandler { fun modifyValue(key: HTUpgradeKey, ignoreEmpty: Boolean = false, operator: UnaryOperator): Int = collectMultiplier(key, ignoreEmpty).let(operator::apply).toInt() - fun getBaseMultiplier(): Fraction = collectMultiplier(HTUpgradeKeys.BASE_MULTIPLIER) + fun getBaseMultiplier(): Fraction = getMaxMultiplier(HTUpgradeKeys.BASE_MULTIPLIER) ?: Fraction.ONE fun isCreative(): Boolean = hasUpgrade(HTUpgradeKeys.IS_CREATIVE) } diff --git a/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeHelper.kt b/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeHelper.kt index 45e50b20c..29716183f 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeHelper.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeHelper.kt @@ -61,14 +61,25 @@ data object HTUpgradeHelper { fun getHandler(stack: ImmutableItemStack): HTUpgradeHandler? = stack.getCapability(RagiumCapabilities.UPGRADABLE_ITEM) @JvmStatic - fun getTankCapacity(handler: HTUpgradeHandler, base: Int): Int = handler.modifyValue(HTUpgradeKeys.FLUID_CAPACITY) { + fun getItemCapacity(handler: HTUpgradeHandler, base: Int): Int = handler.modifyValue(HTUpgradeKeys.ITEM_CAPACITY) { base * it * handler.getBaseMultiplier() } @JvmStatic - fun getTankCapacity(stack: ItemStack, base: Int): Int { + fun getItemCapacity(stack: ItemStack, base: Int): Int { val handler: HTUpgradeHandler = getHandler(stack) ?: return base - return getTankCapacity(handler, base) + return getItemCapacity(handler, base) + } + + @JvmStatic + fun getFluidCapacity(handler: HTUpgradeHandler, base: Int): Int = handler.modifyValue(HTUpgradeKeys.FLUID_CAPACITY) { + base * it * handler.getBaseMultiplier() + } + + @JvmStatic + fun getFluidCapacity(stack: ItemStack, base: Int): Int { + val handler: HTUpgradeHandler = getHandler(stack) ?: return base + return getFluidCapacity(handler, base) } @JvmStatic diff --git a/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeKeys.kt b/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeKeys.kt index 5d37a5659..3adb6b13c 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeKeys.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeKeys.kt @@ -23,6 +23,9 @@ object HTUpgradeKeys { @JvmField val FLUID_CAPACITY: HTUpgradeKey = HTUpgradeKey.get("fluid_capacity") + @JvmField + val ITEM_CAPACITY: HTUpgradeKey = HTUpgradeKey.get("item_capacity") + @JvmField val SPEED: HTUpgradeKey = HTUpgradeKey.get("speed") } diff --git a/src/data/kotlin/hiiragi283/ragium/api/data/lang/HTLanguageProvider.kt b/src/data/kotlin/hiiragi283/ragium/api/data/lang/HTLanguageProvider.kt index e6e96f87c..21a72722c 100644 --- a/src/data/kotlin/hiiragi283/ragium/api/data/lang/HTLanguageProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/api/data/lang/HTLanguageProvider.kt @@ -16,13 +16,11 @@ import hiiragi283.ragium.api.registry.impl.HTDeferredBlock import hiiragi283.ragium.api.registry.toDescriptionKey import hiiragi283.ragium.api.text.HTHasTranslationKey import hiiragi283.ragium.api.text.RagiumTranslation -import hiiragi283.ragium.api.tier.HTBaseTier import hiiragi283.ragium.common.material.RagiumEssenceType import hiiragi283.ragium.common.material.RagiumMaterialKeys import hiiragi283.ragium.common.material.RagiumMoltenCrystalData import hiiragi283.ragium.common.material.VanillaMaterialKeys import hiiragi283.ragium.common.text.HTSmithingTranslation -import hiiragi283.ragium.common.tier.HTCrateTier import hiiragi283.ragium.setup.RagiumBlocks import hiiragi283.ragium.setup.RagiumChemicals import hiiragi283.ragium.setup.RagiumEntityTypes @@ -80,10 +78,6 @@ abstract class HTLanguageProvider(output: PackOutput, val type: HTLanguageType) fromVariantTable(RagiumItems.MACHINE_UPGRADES, identity()) // Translation - addTranslations(HTBaseTier.entries, identity()) - - addTranslations(HTCrateTier.entries, HTCrateTier::getBlock) - translations() // Integration @@ -132,12 +126,6 @@ abstract class HTLanguageProvider(output: PackOutput, val type: HTLanguageType) } // Collection - private fun addTranslations(entries: Iterable, blockGetter: (T) -> HTHasTranslationKey) { - for (entry: T in entries) { - add(blockGetter(entry), entry.getTranslatedName(type)) - } - } - private fun fromLangMap(provider: HTLangPatternProvider, map: Map) { for ((langName: HTLangName, translationKey: HTHasTranslationKey) in map) { add(translationKey, provider.translate(type, langName)) diff --git a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumBlockStateProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumBlockStateProvider.kt index f3e484b16..e218ca66a 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumBlockStateProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumBlockStateProvider.kt @@ -226,15 +226,7 @@ class RagiumBlockStateProvider(context: HTDataGenContext) : BlockStateProvider(c ) // Storages - for (crate: HTDeferredBlock<*, *> in RagiumBlocks.CRATES.values) { - val id: ResourceLocation = crate.blockId - simpleBlockAndItem(crate, models().cubeColumn(id.path, id.withSuffix("_side"), RagiumAPI.id("block", "crate_top"))) - } - /*simpleBlockAndItem(RagiumBlocks.OPEN_CRATE) { block: HTDeferredBlock<*, *> -> - val id: ResourceLocation = block.blockId - models().cubeBottomTop(id.path, id, id.withSuffix("_bottom"), id) - }*/ - + cutoutSimpleBlock(RagiumBlocks.CRATE, vanillaId("block", "glass")) altModelBlock(RagiumBlocks.TANK) // Fluids diff --git a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt index 4ed3ac7fa..4a7394392 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt @@ -177,6 +177,7 @@ class RagiumEnglishProvider(output: PackOutput) : HTLanguageProvider.English(out add(RagiumBlocks.CEU, "C.E.U.") // Storage + add(RagiumBlocks.CRATE, "Variable Crate") add(RagiumBlocks.OPEN_CRATE, "Open Crate") add(RagiumBlocks.TANK, "Variable Tank") @@ -377,6 +378,7 @@ class RagiumEnglishProvider(output: PackOutput) : HTLanguageProvider.English(out add(HTUpgradeKeys.ENERGY_EFFICIENCY, $$"- Energy Efficiency: %1$s") add(HTUpgradeKeys.ENERGY_GENERATION, $$"- Energy Generation: %1$s") add(HTUpgradeKeys.FLUID_CAPACITY, $$"- Fluid Capacity: %1$s") + add(HTUpgradeKeys.ITEM_CAPACITY, $$"- Item Capacity: %1$s") add(HTUpgradeKeys.SPEED, $$"- Speed: %1$s") add(RagiumUpgradeKeys.COMPOSTING, "- Convert input into Crude Bio") @@ -465,8 +467,8 @@ class RagiumEnglishProvider(output: PackOutput) : HTLanguageProvider.English(out add(RagiumCommonTranslation.CEU, "A device which provides unlimited amount of energy.") - add(RagiumCommonTranslation.CRATE, "A storage which stores one type of item.") - add(RagiumCommonTranslation.OPEN_CRATE, "A storage which drops inserted items below.") + add(RagiumCommonTranslation.CRATE, "A item storage which slot is extendable by upgrade.") + add(RagiumCommonTranslation.OPEN_CRATE, "A item storage which drops inserted items below.") add(RagiumCommonTranslation.TANK, "A fluid storage which capacity is extendable by upgrade.") add(RagiumCommonTranslation.CONFIG_ENERGY_CAPACITY, "Energy Capacity") diff --git a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt index 3cfd6560a..49cc2e9be 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt @@ -168,6 +168,7 @@ class RagiumJapaneseProvider(output: PackOutput) : HTLanguageProvider.Japanese(o add(RagiumBlocks.CEU, "C.E.U.") // Storage + add(RagiumBlocks.CRATE, "可変クレート") add(RagiumBlocks.OPEN_CRATE, "オープンクレート") add(RagiumBlocks.TANK, "可変タンク") @@ -379,6 +380,7 @@ class RagiumJapaneseProvider(output: PackOutput) : HTLanguageProvider.Japanese(o add(HTUpgradeKeys.ENERGY_EFFICIENCY, $$"- エネルギー効率: %1$s") add(HTUpgradeKeys.ENERGY_GENERATION, $$"- エネルギー生産率: %1$s") add(HTUpgradeKeys.FLUID_CAPACITY, $$"- 液体容量: %1$s") + add(HTUpgradeKeys.ITEM_CAPACITY, $$"- アイテム容量: %1$s") add(HTUpgradeKeys.SPEED, $$"- 処理速度: %1$s") add(RagiumUpgradeKeys.COMPOSTING, "- アイテムを未加工バイオに変換") @@ -467,7 +469,7 @@ class RagiumJapaneseProvider(output: PackOutput) : HTLanguageProvider.Japanese(o add(RagiumCommonTranslation.CEU, "無制限にエネルギーを供給する設備です。") - add(RagiumCommonTranslation.CRATE, "1種類のアイテムを保管するストレージです。") + add(RagiumCommonTranslation.CRATE, "アップグレードでスロット数を拡張可能なアイテムストレージです。") add(RagiumCommonTranslation.OPEN_CRATE, "搬入されたアイテムを真下に落とすストレージです。") add(RagiumCommonTranslation.TANK, "アップグレードで容量を拡張可能な液体ストレージです。") diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumMachineRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumMachineRecipeProvider.kt index 11153065e..21f4f618d 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumMachineRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumMachineRecipeProvider.kt @@ -3,8 +3,6 @@ package hiiragi283.ragium.data.server.recipe import hiiragi283.ragium.api.data.recipe.HTRecipeProvider import hiiragi283.ragium.api.material.HTMaterialKey import hiiragi283.ragium.api.material.HTMaterialLike -import hiiragi283.ragium.api.material.prefix.HTMaterialPrefix -import hiiragi283.ragium.api.registry.HTItemHolderLike import hiiragi283.ragium.api.tag.RagiumCommonTags import hiiragi283.ragium.api.tag.RagiumModTags import hiiragi283.ragium.api.tier.HTBaseTier @@ -15,7 +13,6 @@ import hiiragi283.ragium.common.material.CommonMaterialPrefixes import hiiragi283.ragium.common.material.RagiumMaterialKeys import hiiragi283.ragium.common.material.VanillaMaterialKeys import hiiragi283.ragium.common.tier.HTComponentTier -import hiiragi283.ragium.common.tier.HTCrateTier import hiiragi283.ragium.common.variant.HTUpgradeVariant import hiiragi283.ragium.common.variant.VanillaToolVariant import hiiragi283.ragium.setup.RagiumBlocks @@ -33,25 +30,7 @@ object RagiumMachineRecipeProvider : HTRecipeProvider.Direct() { processors() devices() upgrades() - - crate() - - // Tank - resetComponent(RagiumBlocks.TANK, RagiumDataComponents.FLUID) - HTShapedRecipeBuilder - .create(RagiumBlocks.TANK) - .crossLayered() - .define('A', CommonMaterialPrefixes.INGOT, RagiumMaterialKeys.RAGI_ALLOY) - .define('B', CommonMaterialPrefixes.PLATE, CommonMaterialKeys.RUBBER) - .define('C', Tags.Items.GLASS_BLOCKS) - .define('D', Tags.Items.BUCKETS_EMPTY) - .save(output) - - HTShapelessRecipeBuilder - .create(RagiumItems.TANK_MINECART) - .addIngredient(RagiumBlocks.TANK) - .addIngredient(Items.MINECART) - .save(output) + storages() } // Generators // @@ -411,31 +390,18 @@ object RagiumMachineRecipeProvider : HTRecipeProvider.Direct() { // Storage // @JvmStatic - private fun crate() { - for ((tier: HTCrateTier, crate: HTItemHolderLike) in RagiumBlocks.CRATES) { - resetComponent(crate, RagiumDataComponents.ITEM) - - val key: HTMaterialKey = when (tier) { - HTCrateTier.SMALL -> VanillaMaterialKeys.IRON - HTCrateTier.MEDIUM -> VanillaMaterialKeys.GOLD - HTCrateTier.LARGE -> VanillaMaterialKeys.DIAMOND - HTCrateTier.HUGE -> continue - } - val prefix: HTMaterialPrefix = getDefaultPrefix(key) ?: continue - HTShapedRecipeBuilder - .create(crate) - .pattern( - "ABA", - "ACA", - "ABA", - ).define('A', prefix, key) - .define('B', CommonMaterialPrefixes.PLATE, CommonMaterialKeys.RUBBER) - .define('C', Tags.Items.CHESTS_WOODEN) - .save(output) - } - // Huge - createNetheriteUpgrade(HTCrateTier.HUGE.getBlock(), HTCrateTier.LARGE.getBlock()).save(output) - // Open + private fun storages() { + // Crate + resetComponent(RagiumBlocks.CRATE, RagiumDataComponents.ITEM) + HTShapedRecipeBuilder + .create(RagiumBlocks.CRATE) + .crossLayered() + .define('A', CommonMaterialPrefixes.INGOT, RagiumMaterialKeys.RAGI_ALLOY) + .define('B', CommonMaterialPrefixes.PLATE, CommonMaterialKeys.RUBBER) + .define('C', Tags.Items.GLASS_BLOCKS) + .define('D', Tags.Items.CHESTS) + .save(output) + // Open Crate HTShapedRecipeBuilder .create(RagiumBlocks.OPEN_CRATE) .pattern( @@ -445,5 +411,21 @@ object RagiumMachineRecipeProvider : HTRecipeProvider.Direct() { ).define('A', CommonMaterialPrefixes.PLATE, CommonMaterialKeys.RUBBER) .define('B', Items.HOPPER) .save(output) + // Tank + resetComponent(RagiumBlocks.TANK, RagiumDataComponents.FLUID) + HTShapedRecipeBuilder + .create(RagiumBlocks.TANK) + .crossLayered() + .define('A', CommonMaterialPrefixes.INGOT, RagiumMaterialKeys.RAGI_ALLOY) + .define('B', CommonMaterialPrefixes.PLATE, CommonMaterialKeys.RUBBER) + .define('C', Tags.Items.GLASS_BLOCKS) + .define('D', Tags.Items.BUCKETS_EMPTY) + .save(output) + + HTShapelessRecipeBuilder + .create(RagiumItems.TANK_MINECART) + .addIngredient(RagiumBlocks.TANK) + .addIngredient(Items.MINECART) + .save(output) } } diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/tag/RagiumBlockTagsProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/tag/RagiumBlockTagsProvider.kt index 27cf96a84..351cfec9d 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/tag/RagiumBlockTagsProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/tag/RagiumBlockTagsProvider.kt @@ -120,6 +120,7 @@ class RagiumBlockTagsProvider(context: HTDataGenContext) : HTTagsProvider add(RagiumBlocks.CEU) // Storage + add(RagiumBlocks.CRATE) add(RagiumBlocks.OPEN_CRATE) add(RagiumBlocks.TANK) @@ -142,7 +143,6 @@ class RagiumBlockTagsProvider(context: HTDataGenContext) : HTTagsProvider } pickaxe.addBlocks(RagiumBlocks.COILS) - pickaxe.addBlocks(RagiumBlocks.CRATES) pickaxe.addBlocks(RagiumBlocks.DECORATION_MAP) pickaxe.addBlocks(RagiumBlocks.GLASSES.values) pickaxe.addBlocks(RagiumBlocks.METAL_BARS) diff --git a/src/main/kotlin/hiiragi283/ragium/client/RagiumClient.kt b/src/main/kotlin/hiiragi283/ragium/client/RagiumClient.kt index 350ebbc3b..06079f65e 100644 --- a/src/main/kotlin/hiiragi283/ragium/client/RagiumClient.kt +++ b/src/main/kotlin/hiiragi283/ragium/client/RagiumClient.kt @@ -46,7 +46,6 @@ import hiiragi283.ragium.common.entity.charge.HTAbstractCharge import hiiragi283.ragium.common.inventory.container.HTBlockEntityContainerMenu import hiiragi283.ragium.common.material.HTColorMaterial import hiiragi283.ragium.common.material.RagiumMoltenCrystalData -import hiiragi283.ragium.common.tier.HTCrateTier import hiiragi283.ragium.common.upgrade.RagiumUpgradeKeys import hiiragi283.ragium.setup.RagiumBlockEntityTypes import hiiragi283.ragium.setup.RagiumBlocks @@ -269,8 +268,8 @@ class RagiumClient(eventBus: IEventBus, container: ModContainer) { event.register(RagiumMenuTypes.BREWERY, HTSingleFluidProcessorScreen.Companion::combine) event.register(RagiumMenuTypes.COMBUSTION_GENERATOR, ::HTCombustionGeneratorScreen) event.register(RagiumMenuTypes.COMPRESSOR, HTSingleFluidProcessorScreen.Companion::itemWithCatalyst) + event.register(RagiumMenuTypes.CRATE, ::HTBlockEntityContainerScreen) event.register(RagiumMenuTypes.CUTTING_MACHINE, ::HTProcessorScreen) - event.register(RagiumMenuTypes.TANK, ::HTTankScreen) event.register(RagiumMenuTypes.ENCHANTER, HTSingleFluidProcessorScreen.Companion::combine) event.register(RagiumMenuTypes.ENERGY_NETWORK_ACCESS, ::HTEnergyNetworkAccessScreen) event.register(RagiumMenuTypes.EXTRACTOR, HTSingleFluidProcessorScreen.Companion::itemWithCatalyst) @@ -286,6 +285,7 @@ class RagiumClient(eventBus: IEventBus, container: ModContainer) { event.register(RagiumMenuTypes.SIMULATOR, ::HTSimulatorScreen) event.register(RagiumMenuTypes.SINGLE_ITEM_WITH_FLUID, ::HTCrusherScreen) event.register(RagiumMenuTypes.SMELTER, HTProcessorScreen.createFactory("smelter")) + event.register(RagiumMenuTypes.TANK, ::HTTankScreen) event.register(RagiumMenuTypes.TELEPAD, ::HTTelepadScreen) RagiumAPI.LOGGER.info("Registered Screens!") @@ -319,10 +319,7 @@ class RagiumClient(eventBus: IEventBus, container: ModContainer) { event.registerBlockEntityRenderer(RagiumBlockEntityTypes.COMBUSTION_GENERATOR.get(), ::HTFuelGeneratorRenderer) event.registerBlockEntityRenderer(RagiumBlockEntityTypes.ENCHANTMENT_GENERATOR.get(), ::HTFuelGeneratorRenderer) - for (tier: HTCrateTier in HTCrateTier.entries) { - event.registerBlockEntityRenderer(tier.getBlockEntityType().get(), ::HTCrateRenderer) - } - + event.registerBlockEntityRenderer(RagiumBlockEntityTypes.CRATE.get(), ::HTCrateRenderer) event.registerBlockEntityRenderer(RagiumBlockEntityTypes.TANK.get(), ::HTTankRenderer) // Entity for (type: HTDeferredEntityType in RagiumEntityTypes.CHARGES.values) { diff --git a/src/main/kotlin/hiiragi283/ragium/client/renderer/block/HTCrateRenderer.kt b/src/main/kotlin/hiiragi283/ragium/client/renderer/block/HTCrateRenderer.kt index 86d84b70c..3dfe31b62 100644 --- a/src/main/kotlin/hiiragi283/ragium/client/renderer/block/HTCrateRenderer.kt +++ b/src/main/kotlin/hiiragi283/ragium/client/renderer/block/HTCrateRenderer.kt @@ -1,17 +1,16 @@ package hiiragi283.ragium.client.renderer.block import com.mojang.blaze3d.vertex.PoseStack -import hiiragi283.ragium.api.block.attribute.HTDirectionalBlockAttribute -import hiiragi283.ragium.api.block.attribute.getAttribute -import hiiragi283.ragium.client.renderer.translate +import com.mojang.math.Axis +import hiiragi283.ragium.api.stack.ImmutableItemStack +import hiiragi283.ragium.client.renderer.scale import hiiragi283.ragium.common.block.entity.storage.HTCrateBlockEntity import net.minecraft.client.renderer.MultiBufferSource import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider import net.minecraft.client.renderer.entity.ItemRenderer -import net.minecraft.core.Direction +import net.minecraft.util.Mth import net.minecraft.world.item.ItemDisplayContext import net.minecraft.world.level.Level -import net.minecraft.world.level.block.state.BlockState class HTCrateRenderer(context: BlockEntityRendererProvider.Context) : HTBlockEntityRenderer(context) { private val itemRenderer: ItemRenderer = context.itemRenderer @@ -25,15 +24,15 @@ class HTCrateRenderer(context: BlockEntityRendererProvider.Context) : HTBlockEnt packedOverlay: Int, ) { val level: Level = blockEntity.level ?: return - val state: BlockState = level.getBlockState(blockEntity.blockPos) - val attribute: HTDirectionalBlockAttribute = state.getAttribute() ?: return - val front: Direction = attribute.getDirection(state) + val stack: ImmutableItemStack = blockEntity.slot.getStack() ?: return + + val ticks: Float = blockEntity.ticks + partialTick poseStack.pushPose() - poseStack.translate(0.5f) - poseStack.mulPose(front.rotation) - poseStack.translate(front.stepX, front.stepY, front.stepZ) + val x: Float = Mth.sin(ticks / 10f) * 0.1f + poseStack.translate(8 / 16f, x + 0.5f, 8 / 16f) + poseStack.mulPose(Axis.YP.rotation(ticks / 20f)) itemRenderer.renderStatic( - blockEntity.getStackInSlot(0, blockEntity.getItemSideFor()), + stack.unwrap(), ItemDisplayContext.FIXED, packedLight, packedOverlay, 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 21ed09cd1..717a58919 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 @@ -20,12 +20,10 @@ import hiiragi283.ragium.common.storage.item.slot.HTOutputItemSlot import hiiragi283.ragium.setup.RagiumBlocks import net.minecraft.core.BlockPos import net.minecraft.core.Direction -import net.minecraft.resources.ResourceLocation import net.minecraft.server.level.ServerLevel import net.minecraft.sounds.SoundEvents import net.minecraft.sounds.SoundSource import net.minecraft.world.item.crafting.RecipeHolder -import net.minecraft.world.item.crafting.RecipeManager import net.minecraft.world.level.Level import net.minecraft.world.level.block.state.BlockState import net.minecraft.world.level.material.FluidState @@ -80,34 +78,33 @@ class HTStoneCollectorBlockEntity(pos: BlockPos, state: BlockState) : // RecipeFinder // - private class RecipeFinder : HTRecipeFinder { - override fun getRecipeFor( - manager: RecipeManager, + private class RecipeFinder : HTRecipeFinder.Vanilla { + override fun getVanillaRecipeFor( input: HTRecipeInput, level: Level, - lastRecipe: Pair?, - ): Pair? { + lastRecipe: RecipeHolder?, + ): RecipeHolder? { // 入力が空の場合は即座に抜ける if (input.isEmpty) return null // キャッシュから判定を行う - if (lastRecipe != null && lastRecipe.second.matches(input, level)) { + if (lastRecipe != null && lastRecipe.value.matches(input, level)) { return lastRecipe } // 次にRecipeManagerから一覧を取得する val allRecipes: List> = - manager.getRecipesFor(RagiumRecipeTypes.ROCK_GENERATING.get(), input, level) + level.recipeManager.getRecipesFor(RagiumRecipeTypes.ROCK_GENERATING.get(), input, level) // 触媒ありのレシピから優先して判定を行う for (holder: RecipeHolder in allRecipes) { val recipe: HTRockGeneratingRecipe = holder.value() if (recipe.bottom.isPresent) { - return holder.id to holder.value + return holder } } // 触媒なしのレシピを判定 for (holder: RecipeHolder in allRecipes) { val recipe: HTRockGeneratingRecipe = holder.value() if (recipe.bottom.isEmpty) { - return holder.id to holder.value + return holder } } return null 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 95bff0ff5..5b0ebdf30 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.HTRecipeFinder import hiiragi283.ragium.api.recipe.input.HTRecipeInput import hiiragi283.ragium.api.storage.HTStorageAccess import hiiragi283.ragium.api.storage.HTStorageAction @@ -21,7 +22,6 @@ import net.minecraft.world.item.Items import net.minecraft.world.item.crafting.AbstractCookingRecipe import net.minecraft.world.item.crafting.BlastingRecipe import net.minecraft.world.item.crafting.RecipeHolder -import net.minecraft.world.item.crafting.RecipeManager import net.minecraft.world.item.crafting.RecipeType import net.minecraft.world.item.crafting.SingleRecipeInput import net.minecraft.world.item.crafting.SmeltingRecipe @@ -50,19 +50,19 @@ abstract class HTAbstractSmelterBlockEntity(blockHolder: Holder, pos: Blo outputSlot = singleOutput(builder, listener) } - private val smeltingCache: HTRecipeCache = - HTFinderRecipeCache { manager: RecipeManager, input: SingleRecipeInput, level: Level, lastRecipe: RecipeHolder? -> - manager.getRecipeFor(RecipeType.SMELTING, input, level, lastRecipe).getOrNull() - } - private val blastingCache: HTRecipeCache = - HTFinderRecipeCache { manager: RecipeManager, input: SingleRecipeInput, level: Level, lastRecipe: RecipeHolder? -> - manager.getRecipeFor(RecipeType.BLASTING, input, level, lastRecipe).getOrNull() - } - private val smokingCache: HTRecipeCache = - HTFinderRecipeCache { manager: RecipeManager, input: SingleRecipeInput, level: Level, lastRecipe: RecipeHolder? -> - manager.getRecipeFor(RecipeType.SMOKING, input, level, lastRecipe).getOrNull() + private fun findRecipe( + recipeType: RecipeType, + ): HTRecipeFinder.Vanilla = + HTRecipeFinder.Vanilla { input: SingleRecipeInput, level: Level, lastRecipe: RecipeHolder? -> + level.recipeManager + .getRecipeFor(recipeType, input, level, lastRecipe) + .getOrNull() } + private val smeltingCache: HTRecipeCache = HTFinderRecipeCache(findRecipe(RecipeType.SMELTING)) + private val blastingCache: HTRecipeCache = HTFinderRecipeCache(findRecipe(RecipeType.BLASTING)) + private val smokingCache: HTRecipeCache = HTFinderRecipeCache(findRecipe(RecipeType.SMOKING)) + protected fun getRecipeCache(): HTRecipeCache = when (catalystSlot.getStack()?.value()) { Items.BLAST_FURNACE -> blastingCache Items.SMOKER -> smokingCache diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTCrateBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTCrateBlockEntity.kt index f161287dd..da32df92d 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTCrateBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTCrateBlockEntity.kt @@ -1,15 +1,19 @@ package hiiragi283.ragium.common.block.entity.storage -import hiiragi283.ragium.api.block.attribute.getAttributeTier +import hiiragi283.ragium.api.function.HTPredicates import hiiragi283.ragium.api.stack.ImmutableItemStack +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.HTItemSlot +import hiiragi283.ragium.api.upgrade.HTUpgradeHelper import hiiragi283.ragium.api.util.HTContentListener -import hiiragi283.ragium.common.block.entity.HTConfigurableBlockEntity +import hiiragi283.ragium.common.block.entity.HTUpgradableBlockEntity +import hiiragi283.ragium.common.inventory.HTContainerItemSlot +import hiiragi283.ragium.common.inventory.HTSlotHelper import hiiragi283.ragium.common.storage.holder.HTBasicItemSlotHolder import hiiragi283.ragium.common.storage.item.slot.HTBasicItemSlot -import hiiragi283.ragium.common.storage.item.slot.HTVariableItemSlot -import hiiragi283.ragium.common.tier.HTCrateTier +import hiiragi283.ragium.config.RagiumConfig +import hiiragi283.ragium.setup.RagiumBlocks import hiiragi283.ragium.util.HTStackSlotHelper import net.minecraft.core.BlockPos import net.minecraft.core.Holder @@ -18,27 +22,60 @@ import net.minecraft.world.level.Level import net.minecraft.world.level.block.Block import net.minecraft.world.level.block.state.BlockState -class HTCrateBlockEntity(blockHolder: Holder, pos: BlockPos, state: BlockState) : - HTConfigurableBlockEntity(blockHolder, pos, state) { - private lateinit var tier: HTCrateTier - - override fun initializeVariables() { - tier = blockHolder.getAttributeTier() - } +open class HTCrateBlockEntity(blockHolder: Holder, pos: BlockPos, state: BlockState) : + HTUpgradableBlockEntity(blockHolder, pos, state) { + constructor(pos: BlockPos, state: BlockState) : this(RagiumBlocks.CRATE, pos, state) lateinit var slot: HTBasicItemSlot private set override fun initializeItemSlots(builder: HTBasicItemSlotHolder.Builder, listener: HTContentListener) { - slot = builder.addSlot( - HTSlotInfo.BOTH, - HTVariableItemSlot.create(listener, { stack: ImmutableItemStack? -> - HTItemSlot.getMaxStackSize(stack) * tier.getMultiplier() - }, 0, 0), - ) + slot = builder.addSlot(HTSlotInfo.BOTH, CrateItemSlot(listener)) } - override fun getComparatorOutput(state: BlockState, level: Level, pos: BlockPos): Int = HTStackSlotHelper.calculateRedstoneLevel(slot) + protected fun getCapacity(): Int = HTUpgradeHelper.getItemCapacity(this, RagiumConfig.COMMON.crateCapacity.asInt) + + final override fun getComparatorOutput(state: BlockState, level: Level, pos: BlockPos): Int = + HTStackSlotHelper.calculateRedstoneLevel(slot) + // Ticking // + override fun onUpdateServer(level: ServerLevel, pos: BlockPos, state: BlockState): Boolean = false + + // CrateItemSlot // + + /** + * @see mekanism.common.inventory.slot.BinInventorySlot + */ + protected inner class CrateItemSlot(listener: HTContentListener) : + HTBasicItemSlot( + getCapacity(), + HTPredicates.alwaysTrueBi(), + HTPredicates.alwaysTrueBi(), + { stack: ImmutableItemStack -> stack.unwrap().canFitInsideContainerItems() }, + listener, + HTSlotHelper.getSlotPosX(4), + HTSlotHelper.getSlotPosY(1), + HTContainerItemSlot.Type.BOTH, + ) { + private val isCreative: Boolean get() = this@HTCrateBlockEntity.isCreative() + + override fun insert(stack: ImmutableItemStack?, action: HTStorageAction, access: HTStorageAccess): ImmutableItemStack? { + val remainder: ImmutableItemStack? + if (isCreative && this.getStack() == null && action.execute && access != HTStorageAccess.EXTERNAL) { + remainder = super.insert(stack, HTStorageAction.SIMULATE, access) + if (remainder == null) { + setStackUnchecked(stack?.copyWithAmount(getCapacity())) + } + } else { + remainder = super.insert(stack, action.combine(!isCreative), access) + } + return remainder + } + + override fun extract(amount: Int, action: HTStorageAction, access: HTStorageAccess): ImmutableItemStack? = + super.extract(amount, action.combine(!isCreative), access) + + override fun getCapacity(stack: ImmutableItemStack?): Int = this@HTCrateBlockEntity.getCapacity() + } } diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTTankBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTTankBlockEntity.kt index b7d775d94..44fd6655e 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTTankBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTTankBlockEntity.kt @@ -40,7 +40,7 @@ open class HTTankBlockEntity(blockHolder: Holder, pos: BlockPos, state: B tank = builder.addSlot(HTSlotInfo.BOTH, TankFluidTank(listener)) } - protected fun getCapacity(): Int = HTUpgradeHelper.getTankCapacity(this, RagiumConfig.COMMON.tankCapacity.asInt) + protected fun getCapacity(): Int = HTUpgradeHelper.getFluidCapacity(this, RagiumConfig.COMMON.tankCapacity.asInt) lateinit var slot: HTBasicItemSlot private set @@ -92,7 +92,7 @@ open class HTTankBlockEntity(blockHolder: Holder, pos: BlockPos, state: B HTPredicates.alwaysTrue(), listener, ) { - val isCreative: Boolean get() = this@HTTankBlockEntity.isCreative() + private val isCreative: Boolean get() = this@HTTankBlockEntity.isCreative() override fun insert(stack: ImmutableFluidStack?, action: HTStorageAction, access: HTStorageAccess): ImmutableFluidStack? { val remainder: ImmutableFluidStack? diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/storage/HTCrateBlock.kt b/src/main/kotlin/hiiragi283/ragium/common/block/storage/HTCrateBlock.kt index 713e32d6d..af449bf22 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/storage/HTCrateBlock.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/storage/HTCrateBlock.kt @@ -1,78 +1,7 @@ package hiiragi283.ragium.common.block.storage import hiiragi283.ragium.api.block.type.HTEntityBlockType -import hiiragi283.ragium.api.stack.ImmutableItemStack -import hiiragi283.ragium.api.stack.maxStackSize -import hiiragi283.ragium.api.storage.HTStorageAccess -import hiiragi283.ragium.api.storage.HTStorageAction -import hiiragi283.ragium.api.world.getTypedBlockEntity import hiiragi283.ragium.common.block.HTTypedEntityBlock -import hiiragi283.ragium.common.block.entity.storage.HTCrateBlockEntity -import hiiragi283.ragium.common.storage.item.slot.HTBasicItemSlot -import hiiragi283.ragium.common.storage.item.slot.HTPlayerHandSlot -import hiiragi283.ragium.common.tier.HTCrateTier -import hiiragi283.ragium.util.HTItemDropHelper -import net.minecraft.core.BlockPos -import net.minecraft.world.InteractionHand -import net.minecraft.world.ItemInteractionResult -import net.minecraft.world.entity.player.Player -import net.minecraft.world.item.ItemStack -import net.minecraft.world.level.Level -import net.minecraft.world.level.block.state.BlockState -import net.minecraft.world.phys.BlockHitResult +import hiiragi283.ragium.setup.RagiumBlockTypes -class HTCrateBlock(tier: HTCrateTier, properties: Properties) : HTTypedEntityBlock(tier.getBlockType(), properties) { - override fun useItemOn( - stack: ItemStack, - state: BlockState, - level: Level, - pos: BlockPos, - player: Player, - hand: InteractionHand, - hitResult: BlockHitResult, - ): ItemInteractionResult { - val crate: HTCrateBlockEntity = level.getTypedBlockEntity(pos) ?: return ItemInteractionResult.FAIL - val slot: HTBasicItemSlot = crate.slot - val handSlot = HTPlayerHandSlot(player, hand) - // プレイヤーがアイテムを持っている場合 - val stackInHand: ImmutableItemStack? = handSlot.getStack() - if (stackInHand != null) { - if (!level.isClientSide) { - var remainder: ImmutableItemStack? = slot.insert(stackInHand, HTStorageAction.SIMULATE, HTStorageAccess.INTERNAL) - if (remainder != stackInHand) { - remainder = slot.insert(stackInHand, HTStorageAction.EXECUTE, HTStorageAccess.INTERNAL) - handSlot.setStackUnchecked(remainder) - } - } - return ItemInteractionResult.sidedSuccess(level.isClientSide) - } - return super.useItemOn(stack, state, level, pos, player, hand, hitResult) - } - - override fun attack( - state: BlockState, - level: Level, - pos: BlockPos, - player: Player, - ) { - super.attack(state, level, pos, player) - val crate: HTCrateBlockEntity = level.getTypedBlockEntity(pos) ?: return - val slot: HTBasicItemSlot = crate.slot - val toExtract: Int = if (player.isShiftKeyDown) { - slot.getStack()?.maxStackSize() ?: return - } else { - 1 - } - val extracted: ImmutableItemStack? = slot.extract(toExtract, HTStorageAction.EXECUTE, HTStorageAccess.INTERNAL) - HTItemDropHelper.giveStackTo(player, extracted) - } - - /*override fun appendHoverText( - stack: ItemStack, - context: Item.TooltipContext, - tooltips: MutableList, - flag: TooltipFlag, - ) { - addFluidTooltip(RagiumCapabilities.FLUID.getCapabilityStacks(stack), tooltips::add, flag) - }*/ -} +class HTCrateBlock(properties: Properties) : HTTypedEntityBlock(RagiumBlockTypes.CRATE, properties) diff --git a/src/main/kotlin/hiiragi283/ragium/common/item/block/HTCrateBlockItem.kt b/src/main/kotlin/hiiragi283/ragium/common/item/block/HTCrateBlockItem.kt deleted file mode 100644 index c7188e20e..000000000 --- a/src/main/kotlin/hiiragi283/ragium/common/item/block/HTCrateBlockItem.kt +++ /dev/null @@ -1,26 +0,0 @@ -package hiiragi283.ragium.common.item.block - -import hiiragi283.ragium.api.block.attribute.getAttributeTier -import hiiragi283.ragium.api.item.HTDescriptionBlockItem -import hiiragi283.ragium.api.stack.ImmutableItemStack -import hiiragi283.ragium.api.storage.attachments.HTAttachedItems -import hiiragi283.ragium.common.block.storage.HTCrateBlock -import hiiragi283.ragium.common.tier.HTCrateTier -import hiiragi283.ragium.setup.RagiumDataComponents -import net.minecraft.world.damagesource.DamageSource -import net.minecraft.world.entity.item.ItemEntity -import net.minecraft.world.item.ItemStack - -class HTCrateBlockItem(block: HTCrateBlock, properties: Properties) : HTDescriptionBlockItem(block, properties) { - override fun getTier(): HTCrateTier? = block.getAttributeTier() - - override fun onDestroyed(itemEntity: ItemEntity, damageSource: DamageSource) { - val stack: ItemStack = itemEntity.item - val contents: HTAttachedItems = stack.get(RagiumDataComponents.ITEM) ?: return - contents - .asSequence() - .filterNotNull() - .map(ImmutableItemStack::unwrap) - .forEach(itemEntity::spawnAtLocation) - } -} diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/HTFinderRecipeCache.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/HTFinderRecipeCache.kt index 4ca62000b..ce6e9386a 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/recipe/HTFinderRecipeCache.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/HTFinderRecipeCache.kt @@ -11,7 +11,7 @@ class HTFinderRecipeCache(private val finder: private var lastRecipe: Pair? = null override fun getFirstRecipe(input: INPUT, level: Level): RECIPE? = finder - .getRecipeFor(level.recipeManager, input, level, lastRecipe) + .getRecipeFor(input, level, lastRecipe) .also(::lastRecipe::set) ?.second } diff --git a/src/main/kotlin/hiiragi283/ragium/common/tier/HTCrateTier.kt b/src/main/kotlin/hiiragi283/ragium/common/tier/HTCrateTier.kt deleted file mode 100644 index 8ec1461ec..000000000 --- a/src/main/kotlin/hiiragi283/ragium/common/tier/HTCrateTier.kt +++ /dev/null @@ -1,52 +0,0 @@ -package hiiragi283.ragium.common.tier - -import hiiragi283.ragium.api.block.type.HTEntityBlockType -import hiiragi283.ragium.api.data.lang.HTLangName -import hiiragi283.ragium.api.data.lang.HTLanguageType -import hiiragi283.ragium.api.registry.impl.HTDeferredBlock -import hiiragi283.ragium.api.registry.impl.HTDeferredBlockEntityType -import hiiragi283.ragium.api.tier.HTBaseTier -import hiiragi283.ragium.api.tier.HTTierProvider -import hiiragi283.ragium.common.block.entity.storage.HTCrateBlockEntity -import hiiragi283.ragium.common.block.storage.HTCrateBlock -import hiiragi283.ragium.common.item.block.HTCrateBlockItem -import hiiragi283.ragium.config.RagiumConfig -import hiiragi283.ragium.setup.RagiumBlockEntityTypes -import hiiragi283.ragium.setup.RagiumBlockTypes -import hiiragi283.ragium.setup.RagiumBlocks - -enum class HTCrateTier(private val enPattern: String, private val jaPattern: String) : - HTTierProvider, - HTLangName { - SMALL("Small Crate", "小型クレート"), - MEDIUM("Medium Crate", "中型クレート"), - LARGE("Large Crate", "大型クレート"), - HUGE("Huge Crate", "特型クレート大"), - ; - - val path = "${name.lowercase()}_crate" - - fun getMultiplier(): Int = RagiumConfig.COMMON.crateCapacity[this]!!.asInt - - fun getBlock(): HTDeferredBlock = RagiumBlocks.CRATES[this]!! - - fun getBlockType(): HTEntityBlockType = RagiumBlockTypes.CRATES[this]!! - - fun getBlockEntityType(): HTDeferredBlockEntityType = RagiumBlockEntityTypes.CRATES[this]!! - - // HTTierProvider // - - override fun getBaseTier(): HTBaseTier = when (this) { - SMALL -> HTBaseTier.BASIC - MEDIUM -> HTBaseTier.ADVANCED - LARGE -> HTBaseTier.ELITE - HUGE -> HTBaseTier.ULTIMATE - } - - // HTLangName // - - override fun getTranslatedName(type: HTLanguageType): String = when (type) { - HTLanguageType.EN_US -> enPattern - HTLanguageType.JA_JP -> jaPattern - } -} diff --git a/src/main/kotlin/hiiragi283/ragium/config/RagiumCommonConfig.kt b/src/main/kotlin/hiiragi283/ragium/config/RagiumCommonConfig.kt index dbf4127b3..8d697dab4 100644 --- a/src/main/kotlin/hiiragi283/ragium/config/RagiumCommonConfig.kt +++ b/src/main/kotlin/hiiragi283/ragium/config/RagiumCommonConfig.kt @@ -9,7 +9,6 @@ import hiiragi283.ragium.api.config.HTIntConfigValue import hiiragi283.ragium.api.config.HTListConfigValue import hiiragi283.ragium.api.config.definePositiveDouble import hiiragi283.ragium.api.config.definePositiveInt -import hiiragi283.ragium.common.tier.HTCrateTier import net.neoforged.neoforge.common.ModConfigSpec class RagiumCommonConfig(builder: ModConfigSpec.Builder) { @@ -59,7 +58,7 @@ class RagiumCommonConfig(builder: ModConfigSpec.Builder) { // Storage @JvmField - val crateCapacity: Map + val crateCapacity: HTIntConfigValue @JvmField val tankCapacity: HTIntConfigValue @@ -109,23 +108,8 @@ class RagiumCommonConfig(builder: ModConfigSpec.Builder) { builder.pop() // Storage builder.push("storage") - crateCapacity = HTCrateTier.entries.associateWith { tier: HTCrateTier -> - val name: String = tier.name.lowercase() - builder.push(name) - // Capacity - val value: HTIntConfigValue = builder.definePositiveInt( - "multiplier", - when (tier) { - HTCrateTier.SMALL -> 32 - HTCrateTier.MEDIUM -> 128 - HTCrateTier.LARGE -> 512 - HTCrateTier.HUGE -> 2048 - }, - ) - builder.pop() - value - } - tankCapacity = builder.definePositiveInt("tank_capacity", 8000) + crateCapacity = builder.definePositiveInt("crate_capacity", 32 * 64) + tankCapacity = builder.definePositiveInt("tank_capacity", 16000) builder.pop() // Block builder.push("block") diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlockEntityTypes.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlockEntityTypes.kt index ed8e07b81..df7be1b84 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlockEntityTypes.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlockEntityTypes.kt @@ -43,11 +43,8 @@ import hiiragi283.ragium.common.block.entity.processor.HTSimulatorBlockEntity import hiiragi283.ragium.common.block.entity.storage.HTCrateBlockEntity import hiiragi283.ragium.common.block.entity.storage.HTOpenCrateBlockEntity import hiiragi283.ragium.common.block.entity.storage.HTTankBlockEntity -import hiiragi283.ragium.common.tier.HTCrateTier -import net.minecraft.core.BlockPos import net.minecraft.world.level.block.Block import net.minecraft.world.level.block.entity.BlockEntityType -import net.minecraft.world.level.block.state.BlockState import net.neoforged.bus.api.IEventBus import net.neoforged.neoforge.capabilities.RegisterCapabilitiesEvent import net.neoforged.neoforge.event.BlockEntityTypeAddBlocksEvent @@ -70,7 +67,10 @@ object RagiumBlockEntityTypes { "medium", "large", "huge", - ).forEach { REGISTER.addAlias("${it}_drum", "tank") } + ).forEach { + REGISTER.addAlias("${it}_drum", "tank") + REGISTER.addAlias("${it}_crate", "crate") + } REGISTER.register(eventBus) @@ -240,10 +240,7 @@ object RagiumBlockEntityTypes { // Storage // @JvmField - val CRATES: Map> = - HTCrateTier.entries.associateWith { tier: HTCrateTier -> - registerTick(tier.path) { pos: BlockPos, state: BlockState -> HTCrateBlockEntity(tier.getBlock(), pos, state) } - } + val CRATE: HTDeferredBlockEntityType = registerTick("crate", ::HTCrateBlockEntity) @JvmField val OPEN_CRATE: HTDeferredBlockEntityType = REGISTER.registerType("open_crate", ::HTOpenCrateBlockEntity) @@ -314,9 +311,7 @@ object RagiumBlockEntityTypes { registerHandler(event, CEU.get()) // Storage - for (type: HTDeferredBlockEntityType in CRATES.values) { - registerHandler(event, type.get()) - } + registerHandler(event, CRATE.get()) registerHandler(event, OPEN_CRATE.get()) registerHandler(event, TANK.get()) diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlockTypes.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlockTypes.kt index ff4a746a1..1ac44beba 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlockTypes.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlockTypes.kt @@ -5,7 +5,6 @@ import hiiragi283.ragium.api.block.type.HTBlockType import hiiragi283.ragium.api.block.type.HTEntityBlockType import hiiragi283.ragium.common.block.type.HTMachineBlockType import hiiragi283.ragium.common.text.RagiumCommonTranslation -import hiiragi283.ragium.common.tier.HTCrateTier import hiiragi283.ragium.common.tier.HTMachineTier import hiiragi283.ragium.common.upgrade.RagiumUpgradeGroups import hiiragi283.ragium.config.RagiumConfig @@ -287,12 +286,10 @@ object RagiumBlockTypes { // Storage // @JvmField - val CRATES: Map = HTCrateTier.entries.associateWith { tier: HTCrateTier -> - HTEntityBlockType - .builder { tier.getBlockEntityType() } - .addTier(tier) - .build(RagiumCommonTranslation.CRATE) - } + val CRATE: HTEntityBlockType = HTEntityBlockType + .builder { RagiumBlockEntityTypes.CRATE } + .addMenu { RagiumMenuTypes.CRATE } + .build(RagiumCommonTranslation.CRATE) @JvmField val OPEN_CRATE: HTEntityBlockType = HTEntityBlockType diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlocks.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlocks.kt index 76ebfb5d7..d6df368db 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlocks.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlocks.kt @@ -35,7 +35,6 @@ import hiiragi283.ragium.common.block.glass.HTQuartzGlassBlock import hiiragi283.ragium.common.block.glass.HTWarpedGlassBlock import hiiragi283.ragium.common.block.storage.HTCrateBlock import hiiragi283.ragium.common.block.storage.HTTankBlock -import hiiragi283.ragium.common.item.block.HTCrateBlockItem import hiiragi283.ragium.common.item.block.HTExpBerriesItem import hiiragi283.ragium.common.item.block.HTImitationSpawnerBlockItem import hiiragi283.ragium.common.item.block.HTMachineBlockItem @@ -47,7 +46,6 @@ import hiiragi283.ragium.common.material.FoodMaterialKeys import hiiragi283.ragium.common.material.HTColorMaterial import hiiragi283.ragium.common.material.RagiumMaterialKeys import hiiragi283.ragium.common.material.VanillaMaterialKeys -import hiiragi283.ragium.common.tier.HTCrateTier import hiiragi283.ragium.common.variant.HTGlassVariant import hiiragi283.ragium.common.variant.HTOreVariant import net.minecraft.world.item.Item @@ -92,13 +90,16 @@ object RagiumBlocks { // Collector REGISTER.addAlias("water_collector", "fluid_collector") REGISTER.addAlias("exp_collector", "fluid_collector") - // Drum + // Drum, Crate listOf( "small", "medium", "large", "huge", - ).forEach { REGISTER.addAlias("${it}_drum", "tank") } + ).forEach { + REGISTER.addAlias("${it}_drum", "tank") + REGISTER.addAlias("${it}_crate", "crate") + } REGISTER.addAlias("fisher", "item_collector") REGISTER.addAlias("item_buffer", "item_collector") @@ -609,20 +610,12 @@ object RagiumBlocks { // Storages // @JvmField - val CRATES: Map> = - HTCrateTier.entries.associateWith { tier: HTCrateTier -> - REGISTER.register( - tier.path, - when (tier) { - HTCrateTier.SMALL -> Blocks.IRON_BLOCK - HTCrateTier.MEDIUM -> Blocks.GOLD_BLOCK - HTCrateTier.LARGE -> Blocks.DIAMOND_BLOCK - HTCrateTier.HUGE -> Blocks.NETHERITE_BLOCK - }.let(::copyOf), - { HTCrateBlock(tier, it) }, - ::HTCrateBlockItem, - ) - } + val CRATE: HTDescriptionDeferredBlock = REGISTER.register( + "crate", + copyOf(Blocks.COPPER_BLOCK).noOcclusion(), + ::HTCrateBlock, + ::HTDescriptionBlockItem, + ) @JvmField val OPEN_CRATE: HTBasicDeferredBlock = registerSimpleEntity( diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumItems.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumItems.kt index 4ac866fe5..a6e94665f 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumItems.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumItems.kt @@ -70,7 +70,6 @@ import hiiragi283.ragium.common.storage.item.slot.HTComponentItemSlot import hiiragi283.ragium.common.text.HTSmithingTranslation import hiiragi283.ragium.common.text.RagiumCommonTranslation import hiiragi283.ragium.common.tier.HTComponentTier -import hiiragi283.ragium.common.tier.HTCrateTier import hiiragi283.ragium.common.upgrade.HTComponentUpgradeHandler import hiiragi283.ragium.common.variant.HTArmorVariant import hiiragi283.ragium.common.variant.HTHammerToolVariant @@ -734,14 +733,15 @@ object RagiumItems { @JvmStatic private fun registerItemCapabilities(event: RegisterCapabilitiesEvent) { // Item - for ((tier: HTCrateTier, block: ItemLike) in RagiumBlocks.CRATES) { - registerItem( - event, - 1, - { context: HTComponentHandler.ContainerContext -> HTComponentItemSlot.create(context, tier.getMultiplier()) }, - block, - ) - } + registerItem( + event, + 1, + { context: HTComponentHandler.ContainerContext -> + val capacity: Int = HTUpgradeHelper.getItemCapacity(context.attachedTo, RagiumConfig.COMMON.crateCapacity.asInt) + HTComponentItemSlot.create(context, capacity) + }, + RagiumBlocks.CRATE, + ) registerItem( event, 9, @@ -755,7 +755,7 @@ object RagiumItems { registerFluid( event, { context: HTComponentHandler.ContainerContext -> - val capacity: Int = HTUpgradeHelper.getTankCapacity(context.attachedTo, RagiumConfig.COMMON.tankCapacity.asInt) + val capacity: Int = HTUpgradeHelper.getFluidCapacity(context.attachedTo, RagiumConfig.COMMON.tankCapacity.asInt) HTComponentFluidTank.create(context, capacity) }, RagiumBlocks.TANK, @@ -764,7 +764,7 @@ object RagiumItems { registerFluid( event, { context: HTComponentHandler.ContainerContext -> - val capacity: Int = HTUpgradeHelper.getTankCapacity(context.attachedTo, 8000) + val capacity: Int = HTUpgradeHelper.getFluidCapacity(context.attachedTo, 8000) HTComponentFluidTank.create(context, capacity, filter = RagiumFluidContents.DEW_OF_THE_WARP::isOf) }, TELEPORT_KEY, diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumMenuTypes.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumMenuTypes.kt index 7d2d0bae9..0d3f60c7a 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumMenuTypes.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumMenuTypes.kt @@ -28,6 +28,7 @@ import hiiragi283.ragium.common.block.entity.processor.HTRefineryBlockEntity import hiiragi283.ragium.common.block.entity.processor.HTSimulatorBlockEntity import hiiragi283.ragium.common.block.entity.processor.base.HTAbstractSmelterBlockEntity import hiiragi283.ragium.common.block.entity.processor.base.HTSingleItemInputBlockEntity +import hiiragi283.ragium.common.block.entity.storage.HTCrateBlockEntity import hiiragi283.ragium.common.block.entity.storage.HTTankBlockEntity import hiiragi283.ragium.common.inventory.container.HTAccessConfigurationMenu import hiiragi283.ragium.common.inventory.container.HTBlockEntityContainerMenu @@ -48,6 +49,9 @@ object RagiumMenuTypes { @JvmField val REGISTER = HTDeferredMenuTypeRegister(RagiumAPI.MOD_ID) + @JvmField + val CRATE: DeferredBEMenu = registerBE("crate") + @JvmField val TANK: DeferredBEMenu = registerBE("tank") diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumMiscRegister.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumMiscRegister.kt index 9187ef7ed..d35c8e5bd 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumMiscRegister.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumMiscRegister.kt @@ -34,6 +34,7 @@ object RagiumMiscRegister { event.register(Registries.RECIPE_TYPE) { helper -> // Machine register(helper, RagiumRecipeTypes.ALLOYING) + register(helper, RagiumRecipeTypes.BREWING) register(helper, RagiumRecipeTypes.COMPRESSING) register(helper, RagiumRecipeTypes.CRUSHING) register(helper, RagiumRecipeTypes.CUTTING) diff --git a/src/main/resources/assets/ragium/textures/block/crate_top.png b/src/main/resources/assets/ragium/textures/block/crate_top.png deleted file mode 100644 index e0f3eb6b3ee66210cb9eac03f39a0fb9a2fb21f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 172 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|iJmTwAr*7pOxnnGz<|R=)xu)O z&;Ru=A4HsB>Ar*7pOj6`)FyL{u_dI&! z4o_0KgW?W`Hs*p9mM-HBDFPFOCr?Q*Fj+a{ard&!f8MkIOe#Jn!F(X9JAdhv9na=) zdR?^ma(PcluJUiE8++E@^n5>&VNGHBgL@2bJp*2`dojrvr)&OrRA}cL`X^c+XzBm| j!6Hw80U2x{+nE^>gO$&}D>%FmD8k_B>gTe~DWM4fid;rc diff --git a/src/main/resources/assets/ragium/textures/block/large_crate_side.png b/src/main/resources/assets/ragium/textures/block/large_crate_side.png deleted file mode 100644 index 95247a0bcd9de1a471d742e79a7d77e2dbf272b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 184 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|xt=bLAr*7p1a0JOFc8?|FhS&g zDvS7u1il9xd=u8@$Q(E)y03z1(fX;q{F*G?F(3KQ-z_e9p4_9z!r; z)4vUMRF|K7*4xv$z~{eB6N7w@y?Ng&qy2&Q{r|t@hrmA| dgAHUcGsE6EMKO2bI7OfcgQu&X%Q~loCIISlLNWjV diff --git a/src/main/resources/assets/ragium/textures/block/medium_crate_side.png b/src/main/resources/assets/ragium/textures/block/medium_crate_side.png deleted file mode 100644 index 0024bc93340860f990aa2f152b82848fc7150c81..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 185 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|d7dtgAr*7pOj6`)FyL|hKdG}* zv#RB8gZ6?lroOI6TpA*r>I#g(f$Vc#c#IsIZV2aI{xjd?=T?^|bC@6Ob(c%Krllm- zI-~ftVNb{1?t-}jQK7ePziNEy;Ia3|lB^%o9h0x=e12m*YX;lrpWEYr7XJSqmjBHb e$Y2B6%*-G*LAL7*)7}3-5e83JKbLh*2~7YNX+(Yi diff --git a/src/main/resources/assets/ragium/textures/block/small_crate_side.png b/src/main/resources/assets/ragium/textures/block/small_crate_side.png deleted file mode 100644 index 64b2ab51f47d4df4b995c7912e79068fd58b0852..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|ah@)YAr*7pOfuv;;K0FRyW`NI zbJyyB{5Sf4K|UhFEvUsra2>~z9l9@B56#!5^Kf(LgiEy_ysi@0K;w=(O!v9X}$ z^O`=X19!Psr2SmN`-f}A4DHj$%JYvuzh4Ek=>LCH)~EY{HnD+hVrCFXRh0>ux^ogx Ogu&C*&t;ucLK6VK9Xdt; diff --git a/src/main/resources/assets/ragium/textures/gui/container/crate.png b/src/main/resources/assets/ragium/textures/gui/container/crate.png new file mode 100644 index 0000000000000000000000000000000000000000..c854bab110b6a0350ac0f9449401154da8b73cf2 GIT binary patch literal 1216 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5893O0R7}x|GzJEiQcoAhkcv5P?i}=$4is^? zSm+XZfvq=U5x;oSD}z+ao~as~+yWnKzMQpncTcj!}0<-QNQqyJgx7f6?J&;Ie( zZC<=?0e9K%)5pVD%swO+elAY-TYkCfQ53+4+Z7t`>c|g@bR1zd5 z((bZu_&0BUB`3pS8+-fsf9n#JFGMgM2ry$h>x(eTF0tG6x_se_qv1jg{=2>fyjJGh z`@@TgArT)sU;s44pF!f7+k&5*49+(>Ow1V@4Dg{JEcSU1cMCT7N7PSw^#9UNKNf~V zP}GnpGwU2lhM`%NAR*oOOr3!zx%bx}h?)0z57h0CU$@ncJ#M$er8(bZyd97K{2+Zm z%v<(4f0O02KksFpb3CqKK{E&+cSAYzhO0sD#b*-zc3VmigvP zvV85QzgF0+n|}9D{bs=vb6!5b!C}&8%)lW`G=gX|=<9WO=3{@{Z9yT(@L!f@OudhJ z;9*4s1EQ_x^E)?%854UQZhz!}#pQdp17QipX)`{TX&c<$D0&0vN{cyi$CVjcIEh9# zxpK~ZDV8`MmXO!C_5j@Q1HM21ex0AYhVjN;tNDKF`FcnG{3yM9_x^qT0&N+FyvJ{) zE8-rQ?f7Z_z_-Pqy+J^YVHANv;F~Z5!~g$^J2Nf;%ON&U0mRJE(en1(`~4~(fFcZ@ Lu6{1-oD!M Date: Sun, 14 Dec 2025 21:14:15 +0900 Subject: [PATCH 37/49] feat!: redesigned around upgrades --- .../attribute/HTUpgradeGroupBlockAttribute.kt | 6 - .../api/block/type/HTEntityBlockType.kt | 4 - .../api/capability/RagiumCapabilities.kt | 7 -- .../ragium/api/data/map/HTUpgradeData.kt | 118 ++++++++++++------ .../ragium/api/data/map/RagiumDataMapTypes.kt | 6 + .../api/recipe/ingredient/HTIngredient.kt | 13 +- .../ragium/api/registry/HTItemHolderLike.kt | 8 ++ .../ragium/api/registry/Registries.kt | 18 --- .../ragium/api/tag/RagiumModTags.kt | 56 ++++----- .../ragium/api/text/RagiumTranslation.kt | 3 +- .../ragium/api/upgrade/HTUpgradeGroup.kt | 26 ---- .../ragium/api/upgrade/HTUpgradeHandler.kt | 13 +- .../ragium/api/upgrade/HTUpgradeHelper.kt | 27 +--- .../ragium/api/upgrade/HTUpgradeKeys.kt | 16 ++- .../ragium/api/upgrade/HTUpgradeProvider.kt | 17 --- .../api/data/lang/HTLanguageProvider.kt | 4 +- .../hiiragi283/ragium/data/RagiumDatagen.kt | 2 - .../data/client/RagiumEnglishProvider.kt | 43 +++---- .../data/client/RagiumItemModelProvider.kt | 39 +++--- .../data/client/RagiumJapaneseProvider.kt | 44 +++---- .../data/server/RagiumDataMapProvider.kt | 115 ++++++++++++----- .../recipe/RagiumMachineRecipeProvider.kt | 112 ++++++++--------- .../tag/RagiumBlockEntityTypeTagsProvider.kt | 94 -------------- .../data/server/tag/RagiumItemTagsProvider.kt | 102 ++++++++++++++- .../hiiragi283/ragium/RagiumIntegration.kt | 2 +- .../client/integration/emi/RagiumEmiPlugin.kt | 3 +- .../hiiragi283/ragium/client/RagiumClient.kt | 2 +- .../client/event/RagiumTooltipHandler.kt | 4 +- .../client/renderer/block/HTCrateRenderer.kt | 1 - .../hiiragi283/ragium/common/HTChargeType.kt | 11 +- .../hiiragi283/ragium/common/HTMoldType.kt | 8 +- .../hiiragi283/ragium/common/HTUpgradeType.kt | 59 +++++++++ .../ragium/common/block/HTCropBlock.kt | 2 +- .../entity/HTImitationSpawnerBlockEntity.kt | 10 ++ .../component/HTMachineUpgradeComponent.kt | 27 ++-- .../device/HTFluidCollectorBlockEntity.kt | 2 +- .../device/HTItemCollectorBlockEntity.kt | 2 +- .../HTSolarPanelControllerBlockEntity.kt | 2 +- .../entity/processor/HTCrusherBlockEntity.kt | 4 +- .../processor/HTCuttingMachineBlockEntity.kt | 4 +- .../processor/HTExtractorBlockEntity.kt | 4 +- .../entity/storage/HTCrateBlockEntity.kt | 2 +- .../common/item/block/HTTankBlockItem.kt | 4 +- .../upgrade/HTComponentUpgradeHandler.kt | 22 ++-- .../common/upgrade/RagiumUpgradeGroups.kt | 15 --- .../common/upgrade/RagiumUpgradeKeys.kt | 16 +-- .../ragium/common/variant/HTUpgradeVariant.kt | 18 --- .../ragium/setup/RagiumBlockTypes.kt | 4 +- .../ragium/setup/RagiumDataComponents.kt | 4 - .../hiiragi283/ragium/setup/RagiumItems.kt | 96 +------------- .../textures/item/efficient_crush_upgrade.png | Bin 275 -> 0 bytes .../ragium/textures/item/energy_capacity.png | Bin 184 -> 0 bytes .../textures/item/exp_collector_upgrade.png | Bin 366 -> 0 bytes .../ragium/textures/item/fishing_upgrade.png | Bin 389 -> 0 bytes .../ragium/textures/item/fortune_upgrade.png | Bin 338 -> 0 bytes .../textures/item/mob_capture_upgrade.png | Bin 346 -> 0 bytes .../textures/item/primary_only_upgrade.png | Bin 292 -> 0 bytes .../assets/ragium/textures/item/speed.png | Bin 238 -> 0 bytes .../textures/item/upgrade/bio_composting.png | Bin 0 -> 241 bytes .../textures/item/upgrade/device_base.png | Bin 0 -> 246 bytes .../item/{ => upgrade}/efficiency.png | Bin .../item/upgrade/efficient_crushing.png | Bin 0 -> 203 bytes .../textures/item/upgrade/energy_capacity.png | Bin 0 -> 192 bytes .../textures/item/upgrade/exp_collecting.png | Bin 0 -> 196 bytes .../textures/item/upgrade/exp_extracting.png | Bin 0 -> 234 bytes .../textures/item/upgrade/extra_voiding.png | Bin 0 -> 194 bytes .../ragium/textures/item/upgrade/fishing.png | Bin 0 -> 219 bytes .../textures/item/upgrade/fluid_capacity.png | Bin 0 -> 190 bytes .../generator_base.png} | Bin .../textures/item/upgrade/high_speed.png | Bin 0 -> 211 bytes .../textures/item/upgrade/item_capacity.png | Bin 0 -> 255 bytes .../textures/item/upgrade/mob_capturing.png | Bin 0 -> 225 bytes .../processor_base.png} | Bin .../ragium/textures/item/upgrade/speed.png | Bin 0 -> 212 bytes .../textures/item/upgrade/storage_base.png | Bin 0 -> 256 bytes 75 files changed, 574 insertions(+), 647 deletions(-) delete mode 100644 src/api/kotlin/hiiragi283/ragium/api/block/attribute/HTUpgradeGroupBlockAttribute.kt delete mode 100644 src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeGroup.kt delete mode 100644 src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeProvider.kt delete mode 100644 src/data/kotlin/hiiragi283/ragium/data/server/tag/RagiumBlockEntityTypeTagsProvider.kt create mode 100644 src/main/kotlin/hiiragi283/ragium/common/HTUpgradeType.kt delete mode 100644 src/main/kotlin/hiiragi283/ragium/common/upgrade/RagiumUpgradeGroups.kt delete mode 100644 src/main/kotlin/hiiragi283/ragium/common/variant/HTUpgradeVariant.kt delete mode 100644 src/main/resources/assets/ragium/textures/item/efficient_crush_upgrade.png delete mode 100644 src/main/resources/assets/ragium/textures/item/energy_capacity.png delete mode 100644 src/main/resources/assets/ragium/textures/item/exp_collector_upgrade.png delete mode 100644 src/main/resources/assets/ragium/textures/item/fishing_upgrade.png delete mode 100644 src/main/resources/assets/ragium/textures/item/fortune_upgrade.png delete mode 100644 src/main/resources/assets/ragium/textures/item/mob_capture_upgrade.png delete mode 100644 src/main/resources/assets/ragium/textures/item/primary_only_upgrade.png delete mode 100644 src/main/resources/assets/ragium/textures/item/speed.png create mode 100644 src/main/resources/assets/ragium/textures/item/upgrade/bio_composting.png create mode 100644 src/main/resources/assets/ragium/textures/item/upgrade/device_base.png rename src/main/resources/assets/ragium/textures/item/{ => upgrade}/efficiency.png (100%) create mode 100644 src/main/resources/assets/ragium/textures/item/upgrade/efficient_crushing.png create mode 100644 src/main/resources/assets/ragium/textures/item/upgrade/energy_capacity.png create mode 100644 src/main/resources/assets/ragium/textures/item/upgrade/exp_collecting.png create mode 100644 src/main/resources/assets/ragium/textures/item/upgrade/exp_extracting.png create mode 100644 src/main/resources/assets/ragium/textures/item/upgrade/extra_voiding.png create mode 100644 src/main/resources/assets/ragium/textures/item/upgrade/fishing.png create mode 100644 src/main/resources/assets/ragium/textures/item/upgrade/fluid_capacity.png rename src/main/resources/assets/ragium/textures/item/{advanced_upgrade_base.png => upgrade/generator_base.png} (100%) create mode 100644 src/main/resources/assets/ragium/textures/item/upgrade/high_speed.png create mode 100644 src/main/resources/assets/ragium/textures/item/upgrade/item_capacity.png create mode 100644 src/main/resources/assets/ragium/textures/item/upgrade/mob_capturing.png rename src/main/resources/assets/ragium/textures/item/{basic_upgrade_base.png => upgrade/processor_base.png} (100%) create mode 100644 src/main/resources/assets/ragium/textures/item/upgrade/speed.png create mode 100644 src/main/resources/assets/ragium/textures/item/upgrade/storage_base.png diff --git a/src/api/kotlin/hiiragi283/ragium/api/block/attribute/HTUpgradeGroupBlockAttribute.kt b/src/api/kotlin/hiiragi283/ragium/api/block/attribute/HTUpgradeGroupBlockAttribute.kt deleted file mode 100644 index 854761ee8..000000000 --- a/src/api/kotlin/hiiragi283/ragium/api/block/attribute/HTUpgradeGroupBlockAttribute.kt +++ /dev/null @@ -1,6 +0,0 @@ -package hiiragi283.ragium.api.block.attribute - -import hiiragi283.ragium.api.upgrade.HTUpgradeGroup - -@JvmInline -value class HTUpgradeGroupBlockAttribute(val group: HTUpgradeGroup) : HTBlockAttribute diff --git a/src/api/kotlin/hiiragi283/ragium/api/block/type/HTEntityBlockType.kt b/src/api/kotlin/hiiragi283/ragium/api/block/type/HTEntityBlockType.kt index 24b68a1c8..15afdd7bd 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/block/type/HTEntityBlockType.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/block/type/HTEntityBlockType.kt @@ -6,13 +6,11 @@ import hiiragi283.ragium.api.block.attribute.HTEnergyBlockAttribute import hiiragi283.ragium.api.block.attribute.HTFluidBlockAttribute import hiiragi283.ragium.api.block.attribute.HTMenuBlockAttribute import hiiragi283.ragium.api.block.attribute.HTTierBlockAttribute -import hiiragi283.ragium.api.block.attribute.HTUpgradeGroupBlockAttribute import hiiragi283.ragium.api.collection.AttributeMap import hiiragi283.ragium.api.registry.impl.HTDeferredBlockEntityType import hiiragi283.ragium.api.registry.impl.HTDeferredMenuType import hiiragi283.ragium.api.text.HTTranslation import hiiragi283.ragium.api.tier.HTTierProvider -import hiiragi283.ragium.api.upgrade.HTUpgradeGroup import net.minecraft.world.level.block.entity.BlockEntity import java.util.function.IntSupplier import java.util.function.Supplier @@ -74,8 +72,6 @@ open class HTEntityBlockType( fun addFluid(tankMap: Map): BUILDER = add(HTFluidBlockAttribute(tankMap)) - fun addUpgradeGroup(group: HTUpgradeGroup): BUILDER = add(HTUpgradeGroupBlockAttribute(group)) - /** * ティアを追加します。 * @param TIER [HTTierProvider]を実装したクラス diff --git a/src/api/kotlin/hiiragi283/ragium/api/capability/RagiumCapabilities.kt b/src/api/kotlin/hiiragi283/ragium/api/capability/RagiumCapabilities.kt index 33cb32034..cf50d9c22 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/capability/RagiumCapabilities.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/capability/RagiumCapabilities.kt @@ -2,7 +2,6 @@ package hiiragi283.ragium.api.capability import hiiragi283.ragium.api.RagiumAPI import hiiragi283.ragium.api.upgrade.HTUpgradeHandler -import hiiragi283.ragium.api.upgrade.HTUpgradeProvider import net.neoforged.neoforge.capabilities.BlockCapability import net.neoforged.neoforge.capabilities.ItemCapability @@ -18,10 +17,4 @@ object RagiumCapabilities { RagiumAPI.id("upgradable"), HTUpgradeHandler::class.java, ) - - @JvmField - val UPGRADE_ITEM: ItemCapability = ItemCapability.createVoid( - RagiumAPI.id("upgrade"), - HTUpgradeProvider::class.java, - ) } diff --git a/src/api/kotlin/hiiragi283/ragium/api/data/map/HTUpgradeData.kt b/src/api/kotlin/hiiragi283/ragium/api/data/map/HTUpgradeData.kt index a6d510dbc..5b5d5e21a 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/data/map/HTUpgradeData.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/data/map/HTUpgradeData.kt @@ -1,60 +1,104 @@ package hiiragi283.ragium.api.data.map import hiiragi283.ragium.api.math.fraction +import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient import hiiragi283.ragium.api.serialization.codec.BiCodec -import hiiragi283.ragium.api.upgrade.HTUpgradeGroup +import hiiragi283.ragium.api.stack.ImmutableItemStack +import hiiragi283.ragium.api.text.RagiumTranslation +import hiiragi283.ragium.api.upgrade.HTUpgradeHelper import hiiragi283.ragium.api.upgrade.HTUpgradeKey import hiiragi283.ragium.api.upgrade.HTUpgradePropertyMap -import hiiragi283.ragium.api.util.wrapOptional -import io.netty.buffer.ByteBuf +import net.minecraft.ChatFormatting +import net.minecraft.network.RegistryFriendlyByteBuf +import net.minecraft.network.chat.Component +import net.minecraft.world.item.ItemStack import org.apache.commons.lang3.math.Fraction import java.util.Optional -import kotlin.jvm.optionals.getOrNull +import java.util.function.Consumer +import kotlin.collections.component1 +import kotlin.collections.component2 +import kotlin.collections.iterator /** * @see net.minecraft.world.item.enchantment.Enchantment */ @ConsistentCopyVisibility -data class HTUpgradeData private constructor(val propertyMap: HTUpgradePropertyMap, val group: Optional) : - Map by propertyMap { - companion object { - @JvmField - val CODEC: BiCodec = BiCodec.composite( - HTUpgradePropertyMap.CODEC.fieldOf("properties").forGetter(HTUpgradeData::propertyMap), - HTUpgradeGroup.CODEC.optionalFieldOf("group").forGetter(HTUpgradeData::group), - ::HTUpgradeData, - ) - - @JvmStatic - inline fun create(builderAction: Builder.() -> Unit): HTUpgradeData = Builder().apply(builderAction).build() - - @JvmStatic - fun createSimple(key: HTUpgradeKey, group: HTUpgradeGroup? = null): HTUpgradeData = create { - set(key, 1) - group(group) - } +data class HTUpgradeData private constructor( + val propertyMap: HTUpgradePropertyMap, + private val targetSet: Optional, + val exclusiveSet: Optional, +) : Map by propertyMap { + companion object { + @JvmField + val CODEC: BiCodec = BiCodec.composite( + HTUpgradePropertyMap.CODEC.fieldOf("properties").forGetter(HTUpgradeData::propertyMap), + HTItemIngredient.UNSIZED_CODEC.optionalFieldOf("target_set").forGetter(HTUpgradeData::targetSet), + HTItemIngredient.UNSIZED_CODEC.optionalFieldOf("exclusive_set").forGetter(HTUpgradeData::exclusiveSet), + ::HTUpgradeData, + ) + + /** + * @see net.minecraft.world.item.enchantment.Enchantment.areCompatible + */ + @JvmStatic + fun areCompatible(first: ImmutableItemStack, second: ImmutableItemStack): Boolean { + val firstData: HTUpgradeData = RagiumDataMapTypes.getUpgradeData(first) ?: return false + val secondData: HTUpgradeData = RagiumDataMapTypes.getUpgradeData(second) ?: return false + val bool1: Boolean = !firstData.exclusiveSet.map { it.test(second) }.orElse(false) + val bool2: Boolean = !secondData.exclusiveSet.map { it.test(first) }.orElse(false) + return bool1 && bool2 } - val groupOrNull: HTUpgradeGroup? get() = this.group.getOrNull() + @JvmStatic + inline fun create(builderAction: Builder.() -> Unit): HTUpgradeData = Builder().apply(builderAction).build() + } + + fun isTarget(stack: ItemStack): Boolean = targetSet.map { it.test(stack) }.orElse(true) + + fun appendTooltips(consumer: Consumer) { + // Properties + for ((key: HTUpgradeKey, property: Fraction) in propertyMap) { + consumer.accept(key.translateColored(ChatFormatting.GRAY, HTUpgradeHelper.getPropertyColor(key, property), property)) + } + // Target Set + targetSet + .map(HTItemIngredient::getText) + .map { RagiumTranslation.TOOLTIP_UPGRADE_TARGET.translateColored(ChatFormatting.BLUE, ChatFormatting.GRAY, it) } + .ifPresent(consumer) + // Exclusive Set + exclusiveSet + .map(HTItemIngredient::getText) + .map { RagiumTranslation.TOOLTIP_UPGRADE_EXCLUSIVE.translateColored(ChatFormatting.RED, ChatFormatting.GRAY, it) } + .ifPresent(consumer) + } - // Builder // + // Builder // - class Builder { - private var propertyMap: MutableMap = mutableMapOf() - private var group: HTUpgradeGroup? = null + class Builder { + private var propertyMap: MutableMap = mutableMapOf() + private var targetSet: HTItemIngredient? = null + private var exclusiveSet: HTItemIngredient? = null - operator fun set(key: HTUpgradeKey, value: Fraction) { - propertyMap[key] = value - } + operator fun set(key: HTUpgradeKey, value: Fraction) { + propertyMap[key] = value + } - operator fun set(key: HTUpgradeKey, value: Int) { - set(key, fraction(value)) - } + operator fun set(key: HTUpgradeKey, value: Int) { + set(key, fraction(value)) + } - fun group(group: HTUpgradeGroup?): Builder = apply { - this.group = group - } + fun targetSet(targetSet: HTItemIngredient?): Builder = apply { + this.targetSet = targetSet + } - fun build(): HTUpgradeData = HTUpgradeData(HTUpgradePropertyMap.create(propertyMap), group.wrapOptional()) + fun exclusiveSet(exclusiveSet: HTItemIngredient?): Builder = apply { + this.exclusiveSet = exclusiveSet } + + fun build(): HTUpgradeData = HTUpgradeData( + HTUpgradePropertyMap.create(propertyMap), + Optional.ofNullable(targetSet), + Optional.ofNullable(exclusiveSet), + ) } +} diff --git a/src/api/kotlin/hiiragi283/ragium/api/data/map/RagiumDataMapTypes.kt b/src/api/kotlin/hiiragi283/ragium/api/data/map/RagiumDataMapTypes.kt index 50daf077f..7dfae1297 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/data/map/RagiumDataMapTypes.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/data/map/RagiumDataMapTypes.kt @@ -5,6 +5,7 @@ import hiiragi283.ragium.api.RagiumAPI import hiiragi283.ragium.api.entity.typeHolder import hiiragi283.ragium.api.serialization.codec.BiCodec import hiiragi283.ragium.api.stack.ImmutableFluidStack +import hiiragi283.ragium.api.stack.ImmutableItemStack import net.minecraft.core.Registry import net.minecraft.core.registries.Registries import net.minecraft.resources.ResourceKey @@ -72,6 +73,11 @@ object RagiumDataMapTypes { */ fun getUpgradeData(stack: ItemStack): HTUpgradeData? = stack.itemHolder.getData(UPGRADE) + /** + * 指定した[stack]から,アップグレードのデータを取得します。 + */ + fun getUpgradeData(stack: ImmutableItemStack): HTUpgradeData? = stack.getData(UPGRADE) + @JvmStatic private fun create(path: String, registryKey: ResourceKey>, codec: BiCodec<*, T>): DataMapType = create(path, registryKey, codec.codec) 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 6bebf9eca..c4ee40f8b 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/recipe/ingredient/HTIngredient.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/recipe/ingredient/HTIngredient.kt @@ -2,6 +2,10 @@ package hiiragi283.ragium.api.recipe.ingredient import com.mojang.datafixers.util.Either import hiiragi283.ragium.api.stack.ImmutableStack +import hiiragi283.ragium.api.tag.getName +import hiiragi283.ragium.api.text.HTHasText +import net.minecraft.network.chat.Component +import net.minecraft.network.chat.ComponentUtils import net.minecraft.tags.TagKey import java.util.function.Predicate @@ -12,7 +16,9 @@ import java.util.function.Predicate * @see HTFluidIngredient * @see mekanism.api.recipes.ingredients.InputIngredient */ -interface HTIngredient> : Predicate { +interface HTIngredient> : + Predicate, + HTHasText { /** * 指定された[stack]が条件を満たしているか判定します。 */ @@ -29,4 +35,9 @@ interface HTIngredient> : Predic fun getRequiredAmount(): Int fun unwrap(): Either, Int>, List> + + override fun getText(): Component = unwrap().map( + { (tagKey: TagKey, _) -> tagKey.getName() }, + { stacks: List -> ComponentUtils.formatList(stacks, HTHasText::getText) }, + ) } diff --git a/src/api/kotlin/hiiragi283/ragium/api/registry/HTItemHolderLike.kt b/src/api/kotlin/hiiragi283/ragium/api/registry/HTItemHolderLike.kt index fdb61d53a..d5c4b4d45 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/registry/HTItemHolderLike.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/registry/HTItemHolderLike.kt @@ -95,4 +95,12 @@ interface HTItemHolderLike : * 指定した[count]から[ImmutableItemStack]を返します。 */ fun toImmutableStack(count: Int = 1): ImmutableItemStack? = toStack(count).toImmutable() + + fun interface Delegate : HTItemHolderLike { + fun getDelegate(): HTItemHolderLike + + override fun asItem(): Item = getDelegate().asItem() + + override fun getId(): ResourceLocation = getDelegate().getId() + } } diff --git a/src/api/kotlin/hiiragi283/ragium/api/registry/Registries.kt b/src/api/kotlin/hiiragi283/ragium/api/registry/Registries.kt index 064eeb7ae..de811919e 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/registry/Registries.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/registry/Registries.kt @@ -1,19 +1,12 @@ package hiiragi283.ragium.api.registry -import hiiragi283.ragium.api.tag.getName import net.minecraft.core.Holder import net.minecraft.core.HolderLookup -import net.minecraft.core.HolderSet import net.minecraft.core.Registry -import net.minecraft.network.chat.Component -import net.minecraft.network.chat.ComponentUtils -import net.minecraft.network.chat.MutableComponent import net.minecraft.resources.ResourceKey import net.minecraft.resources.ResourceLocation -import net.minecraft.tags.TagKey import net.neoforged.neoforge.registries.DeferredHolder import net.neoforged.neoforge.registries.datamaps.DataMapType -import java.util.function.Function import kotlin.streams.asSequence // RegistryKey // @@ -40,17 +33,6 @@ val Holder.idOrThrow: ResourceLocation get() = when (this) { else -> unwrapKey().orElseThrow().location() } -// HolderSet // - -/** - * この[HolderSet]を[Component]に変換します。 - * @param transform 値を[Component]に変換するブロック - * @return [TagKey]の場合は[getName],それ以外の場合は[transform]を連結 - */ -fun HolderSet.asHolderText(transform: Function, Component>): MutableComponent = unwrap() - .map(TagKey::getName) { ComponentUtils.formatList(it, transform) } - .copy() - // HolderLookup // fun HolderLookup.RegistryLookup.getHolderDataMap(type: DataMapType): Map, T> = this diff --git a/src/api/kotlin/hiiragi283/ragium/api/tag/RagiumModTags.kt b/src/api/kotlin/hiiragi283/ragium/api/tag/RagiumModTags.kt index 73dba5e9c..c042854da 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/tag/RagiumModTags.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/tag/RagiumModTags.kt @@ -8,7 +8,6 @@ import net.minecraft.world.damagesource.DamageType import net.minecraft.world.entity.EntityType import net.minecraft.world.item.Item import net.minecraft.world.level.block.Block -import net.minecraft.world.level.block.entity.BlockEntityType import net.minecraft.world.level.material.Fluid object RagiumModTags { @@ -34,35 +33,6 @@ object RagiumModTags { private fun create(path: String): TagKey = Registries.BLOCK.createTagKey(RagiumAPI.id(path)) } - // BlockEntityTypes // - - object BlockEntityTypes { - @JvmField - val MACHINES: TagKey> = create("machines") - - @JvmField - val MACHINES_ELECTRIC: TagKey> = create("machines", "electric") - - @JvmField - val GENERATORS: TagKey> = create("machines", "generator") - - @JvmField - val PROCESSORS: TagKey> = create("machines", "processors") - - @JvmField - val DEVICES: TagKey> = create("machines", "devices") - - // Specific - @JvmField - val EFFICIENT_CRUSH_UPGRADABLE: TagKey> = create("upgradable", "efficient_crush") - - @JvmField - val EXTRA_OUTPUT_UPGRADABLE: TagKey> = create("upgradable", "extra_output") - - @JvmStatic - private fun create(vararg path: String): TagKey> = Registries.BLOCK_ENTITY_TYPE.createTagKey(RagiumAPI.id(*path)) - } - // DamageTypes // object DamageTypes { @@ -166,6 +136,32 @@ object RagiumModTags { @JvmField val TOOLS_HAMMER: TagKey = create("tools", "hammer") + // Upgrade Target + @JvmField + val GENERATOR_UPGRADABLE: TagKey = create("upgradable", "generator") + + @JvmField + val PROCESSOR_UPGRADABLE: TagKey = create("upgradable", "processor") + + @JvmField + val EXTRA_VOIDING_UPGRADABLE: TagKey = create("upgradable", "extra_voiding") + + @JvmField + val EFFICIENT_CRUSHING_UPGRADABLE: TagKey = create("upgradable", "efficient_crushing") + + @JvmField + val ENERGY_CAPACITY_UPGRADABLE: TagKey = create("upgradable", "energy_capacity") + + @JvmField + val FLUID_CAPACITY_UPGRADABLE: TagKey = create("upgradable", "fluid_capacity") + + @JvmField + val ITEM_CAPACITY_UPGRADABLE: TagKey = create("upgradable", "item_capacity") + + // Upgrade Exclusive + @JvmField + val EXTRACTOR_EXCLUSIVE: TagKey = create("exclusive", "extractor") + @JvmStatic private fun create(path: String): TagKey = create(RagiumAPI.id(path)) diff --git a/src/api/kotlin/hiiragi283/ragium/api/text/RagiumTranslation.kt b/src/api/kotlin/hiiragi283/ragium/api/text/RagiumTranslation.kt index 92710b911..2d6d4f530 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/text/RagiumTranslation.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/text/RagiumTranslation.kt @@ -54,7 +54,8 @@ enum class RagiumTranslation(type: String, vararg path: String) : HTTranslation TOOLTIP_DIMENSION("tooltip", "dimension"), TOOLTIP_INTRINSIC_ENCHANTMENT("tooltip", "intrinsic_enchantment"), TOOLTIP_LOOT_TABLE_ID("tooltip", "loot_table_id"), - TOOLTIP_UPGRADE_GROUP("tooltip", "upgrade_group"), + TOOLTIP_UPGRADE_TARGET("tooltip", "upgrade", "target"), + TOOLTIP_UPGRADE_EXCLUSIVE("tooltip", "upgrade", "exclusive"), TOOLTIP_SHOW_DESCRIPTION("tooltip", "show_description"), TOOLTIP_SHOW_DETAILS("tooltip", "show_details"), diff --git a/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeGroup.kt b/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeGroup.kt deleted file mode 100644 index c9fc9caca..000000000 --- a/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeGroup.kt +++ /dev/null @@ -1,26 +0,0 @@ -package hiiragi283.ragium.api.upgrade - -import hiiragi283.ragium.api.RagiumAPI -import hiiragi283.ragium.api.serialization.codec.BiCodec -import hiiragi283.ragium.api.text.HTTranslation -import io.netty.buffer.ByteBuf -import net.minecraft.Util - -@ConsistentCopyVisibility -data class HTUpgradeGroup private constructor(val name: String) : HTTranslation { - companion object { - @JvmStatic - private val instances: MutableMap = mutableMapOf() - - @JvmField - val CODEC: BiCodec = BiCodec.STRING.xmap(HTUpgradeGroup::get, HTUpgradeGroup::name) - - @JvmStatic - fun get(name: String): HTUpgradeGroup = instances.computeIfAbsent(name, ::HTUpgradeGroup) - - @JvmStatic - fun getAll(): Collection = instances.values - } - - override val translationKey: String = Util.makeDescriptionId("gui", RagiumAPI.id("machine.upgrade.group.$name")) -} diff --git a/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeHandler.kt b/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeHandler.kt index 2bddfd564..1e1b39d17 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeHandler.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeHandler.kt @@ -15,12 +15,11 @@ interface HTUpgradeHandler { // Extensions // - fun getMaxMultiplier(key: HTUpgradeKey): Fraction? = getUpgrades().maxOfOrNull { HTUpgradeHelper.getUpgrade(it, key) } + fun getMaxMultiplier(key: HTUpgradeKey): Fraction? = getUpgrades().mapNotNull { HTUpgradeHelper.getUpgrade(it, key) }.maxOrNull() fun hasUpgrade(key: HTUpgradeKey): Boolean { for (stack: ImmutableItemStack in getUpgrades()) { - val fraction: Fraction = HTUpgradeHelper.getUpgrade(stack, key) - if (fraction > Fraction.ZERO) { + if (HTUpgradeHelper.getUpgrade(stack, key) != null) { return true } } @@ -31,11 +30,9 @@ interface HTUpgradeHandler { var isEmpty = true var sum: Fraction = Fraction.ONE for (stack: ImmutableItemStack in getUpgrades()) { - val fraction: Fraction = HTUpgradeHelper.getUpgrade(stack, key) - if (fraction > Fraction.ZERO) { - sum *= fraction - isEmpty = false - } + val fraction: Fraction = HTUpgradeHelper.getUpgrade(stack, key) ?: continue + sum *= fraction + isEmpty = false } return when { isEmpty && ignoreEmpty -> Fraction.ZERO diff --git a/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeHelper.kt b/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeHelper.kt index 29716183f..dda9a7fe2 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeHelper.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeHelper.kt @@ -1,10 +1,10 @@ package hiiragi283.ragium.api.upgrade import hiiragi283.ragium.api.capability.RagiumCapabilities +import hiiragi283.ragium.api.data.map.RagiumDataMapTypes import hiiragi283.ragium.api.math.times import hiiragi283.ragium.api.stack.ImmutableItemStack import hiiragi283.ragium.api.stack.toImmutable -import hiiragi283.ragium.api.text.RagiumTranslation import net.minecraft.ChatFormatting import net.minecraft.network.chat.Component import net.minecraft.world.item.ItemStack @@ -15,28 +15,7 @@ data object HTUpgradeHelper { // HTUpgradeProvider // @JvmStatic - fun getUpgradeProvider(stack: ImmutableItemStack): HTUpgradeProvider? = stack.getCapability(RagiumCapabilities.UPGRADE_ITEM) - - @JvmStatic - fun getUpgrade(stack: ImmutableItemStack, key: HTUpgradeKey): Fraction = getUpgradeProvider(stack)?.getUpgradeData(key) ?: Fraction.ZERO - - @JvmStatic - fun appendTooltips(stack: ItemStack, consumer: Consumer) { - val immutable: ImmutableItemStack = stack.toImmutable() ?: return - val provider: HTUpgradeProvider = getUpgradeProvider(immutable) ?: return - // Property value - for (key: HTUpgradeKey in HTUpgradeKey.getAll()) { - val property: Fraction = provider.getUpgradeData(key) - if (property <= Fraction.ZERO) continue - consumer.accept(key.translateColored(ChatFormatting.GRAY, getPropertyColor(key, property), property)) - } - // Upgrade Group - provider - .getGroup() - ?.let { - RagiumTranslation.TOOLTIP_UPGRADE_GROUP.translateColored(ChatFormatting.BLUE, ChatFormatting.GRAY, it) - }?.let(consumer::accept) - } + fun getUpgrade(stack: ImmutableItemStack, key: HTUpgradeKey): Fraction? = RagiumDataMapTypes.getUpgradeData(stack)?.get(key) @JvmStatic fun appendTooltips(propertyMap: HTUpgradePropertyMap, consumer: Consumer) { @@ -46,7 +25,7 @@ data object HTUpgradeHelper { } @JvmStatic - private fun getPropertyColor(key: HTUpgradeKey, property: Fraction): ChatFormatting = when { + fun getPropertyColor(key: HTUpgradeKey, property: Fraction): ChatFormatting = when { property > Fraction.ONE -> ChatFormatting.GREEN property < Fraction.ONE -> ChatFormatting.RED else -> ChatFormatting.WHITE diff --git a/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeKeys.kt b/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeKeys.kt index 3adb6b13c..106e1df6f 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeKeys.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeKeys.kt @@ -9,23 +9,27 @@ object HTUpgradeKeys { @JvmField val IS_CREATIVE: HTUpgradeKey = HTUpgradeKey.get("is_creative") - // Machine // + // Generator // @JvmField - val ENERGY_CAPACITY: HTUpgradeKey = HTUpgradeKey.get("energy_capacity") + val ENERGY_GENERATION: HTUpgradeKey = HTUpgradeKey.get("energy_generation") + + // Processor // @JvmField val ENERGY_EFFICIENCY: HTUpgradeKey = HTUpgradeKey.get("energy_efficiency") @JvmField - val ENERGY_GENERATION: HTUpgradeKey = HTUpgradeKey.get("energy_generation") + val SPEED: HTUpgradeKey = HTUpgradeKey.get("speed") + + // Storage // @JvmField - val FLUID_CAPACITY: HTUpgradeKey = HTUpgradeKey.get("fluid_capacity") + val ENERGY_CAPACITY: HTUpgradeKey = HTUpgradeKey.get("energy_capacity") @JvmField - val ITEM_CAPACITY: HTUpgradeKey = HTUpgradeKey.get("item_capacity") + val FLUID_CAPACITY: HTUpgradeKey = HTUpgradeKey.get("fluid_capacity") @JvmField - val SPEED: HTUpgradeKey = HTUpgradeKey.get("speed") + val ITEM_CAPACITY: HTUpgradeKey = HTUpgradeKey.get("item_capacity") } diff --git a/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeProvider.kt b/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeProvider.kt deleted file mode 100644 index d2677e3d3..000000000 --- a/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeProvider.kt +++ /dev/null @@ -1,17 +0,0 @@ -package hiiragi283.ragium.api.upgrade - -import org.apache.commons.lang3.math.Fraction - -/** - * アップグレードを提供するインターフェース - */ -interface HTUpgradeProvider { - /** - * 指定された引数から,アップグレードの倍率を返します。 - * @param key 対象の倍率に紐づいた[HTUpgradeKey] - * @return [key]に紐づいたアップグレードの倍率 - */ - fun getUpgradeData(key: HTUpgradeKey): Fraction - - fun getGroup(): HTUpgradeGroup? -} diff --git a/src/data/kotlin/hiiragi283/ragium/api/data/lang/HTLanguageProvider.kt b/src/data/kotlin/hiiragi283/ragium/api/data/lang/HTLanguageProvider.kt index 21a72722c..4d7517d97 100644 --- a/src/data/kotlin/hiiragi283/ragium/api/data/lang/HTLanguageProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/api/data/lang/HTLanguageProvider.kt @@ -6,7 +6,6 @@ import hiiragi283.ragium.api.collection.ImmutableTable import hiiragi283.ragium.api.data.advancement.HTAdvancementKey import hiiragi283.ragium.api.data.advancement.descKey import hiiragi283.ragium.api.data.advancement.titleKey -import hiiragi283.ragium.api.function.identity import hiiragi283.ragium.api.material.HTMaterialKey import hiiragi283.ragium.api.material.HTMaterialLike import hiiragi283.ragium.api.material.prefix.HTPrefixLike @@ -75,8 +74,7 @@ abstract class HTLanguageProvider(output: PackOutput, val type: HTLanguageType) addTemplate(RagiumMaterialKeys.NIGHT_METAL, VanillaMaterialKeys.GOLD) fromLangMap(LangPattern("%s Mold", "%sの鋳型"), RagiumItems.MOLDS) - - fromVariantTable(RagiumItems.MACHINE_UPGRADES, identity()) + fromLangMap(LangPattern("%s Upgrade", "%sアップグレード"), RagiumItems.MACHINE_UPGRADES) // Translation translations() diff --git a/src/data/kotlin/hiiragi283/ragium/data/RagiumDatagen.kt b/src/data/kotlin/hiiragi283/ragium/data/RagiumDatagen.kt index a3faf0c3c..710f5cc84 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/RagiumDatagen.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/RagiumDatagen.kt @@ -23,7 +23,6 @@ import hiiragi283.ragium.data.server.loot.RagiumBlockLootProvider import hiiragi283.ragium.data.server.loot.RagiumCustomLootProvider import hiiragi283.ragium.data.server.loot.RagiumGlobalLootProvider import hiiragi283.ragium.data.server.loot.RagiumLootTableProvider -import hiiragi283.ragium.data.server.tag.RagiumBlockEntityTypeTagsProvider import hiiragi283.ragium.data.server.tag.RagiumBlockTagsProvider import hiiragi283.ragium.data.server.tag.RagiumDamageTypeTagsProvider import hiiragi283.ragium.data.server.tag.RagiumEnchantmentTagsProvider @@ -76,7 +75,6 @@ object RagiumDatagen { server.addProvider(::RagiumRecipeProvider) - server.addProvider(::RagiumBlockEntityTypeTagsProvider) server.addProvider(::RagiumDamageTypeTagsProvider) server.addProvider(::RagiumEnchantmentTagsProvider) server.addProvider(::RagiumEntityTypeTagsProvider) diff --git a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt index 4a7394392..d8fe0e780 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt @@ -11,7 +11,6 @@ import hiiragi283.ragium.client.integration.jade.provider.HTBlockConfigurationDa import hiiragi283.ragium.client.integration.jade.provider.HTBlockMachinePropertiesProvider import hiiragi283.ragium.client.integration.jade.provider.HTBlockOwnerProvider import hiiragi283.ragium.common.text.RagiumCommonTranslation -import hiiragi283.ragium.common.upgrade.RagiumUpgradeGroups import hiiragi283.ragium.common.upgrade.RagiumUpgradeKeys import hiiragi283.ragium.data.server.advancement.RagiumAdvancements import hiiragi283.ragium.setup.RagiumBlocks @@ -301,15 +300,6 @@ class RagiumEnglishProvider(output: PackOutput) : HTLanguageProvider.English(out add(RagiumItems.TANK_MINECART, "Tank with Minecart") // Upgrades add(RagiumItems.ETERNAL_COMPONENT, "Eternal Component") - - add(RagiumItems.EFFICIENT_CRUSH_UPGRADE, "Efficient Crush Upgrade") - add(RagiumItems.PRIMARY_ONLY_UPGRADE, "Primary Only Upgrade") - - add(RagiumItems.EXP_COLLECTOR_UPGRADE, "Exp Collector Upgrade") - add(RagiumItems.FISHING_UPGRADE, "Fishing Upgrade") - add(RagiumItems.MOB_CAPTURE_UPGRADE, "Mob Capture Upgrade") - - add(RagiumItems.CREATIVE_UPGRADE, "Creative Upgrade") } private fun keyMapping() { @@ -341,6 +331,16 @@ class RagiumEnglishProvider(output: PackOutput) : HTLanguageProvider.English(out add(RagiumModTags.Items.TOOLS_DRILL, "Drills") add(RagiumModTags.Items.TOOLS_HAMMER, "Hammers") + + add(RagiumModTags.Items.GENERATOR_UPGRADABLE, "Generators") + add(RagiumModTags.Items.PROCESSOR_UPGRADABLE, "Processors") + add(RagiumModTags.Items.EXTRA_VOIDING_UPGRADABLE, "Processors with Extra Output") + add(RagiumModTags.Items.EFFICIENT_CRUSHING_UPGRADABLE, "Pulverizer or Crusher") + add(RagiumModTags.Items.ENERGY_CAPACITY_UPGRADABLE, "Energy Storage") + add(RagiumModTags.Items.FLUID_CAPACITY_UPGRADABLE, "Fluid Storage") + add(RagiumModTags.Items.ITEM_CAPACITY_UPGRADABLE, "Item Storage") + + add(RagiumModTags.Items.EXTRACTOR_EXCLUSIVE, "Upgrades for Extractor") } private fun recipeType() { @@ -374,26 +374,22 @@ class RagiumEnglishProvider(output: PackOutput) : HTLanguageProvider.English(out add(HTUpgradeKeys.BASE_MULTIPLIER, $$"- Base Multiplier: %1$s") add(HTUpgradeKeys.IS_CREATIVE, "- Creative") - add(HTUpgradeKeys.ENERGY_CAPACITY, $$"- Energy Capacity: %1$s") add(HTUpgradeKeys.ENERGY_EFFICIENCY, $$"- Energy Efficiency: %1$s") add(HTUpgradeKeys.ENERGY_GENERATION, $$"- Energy Generation: %1$s") + add(HTUpgradeKeys.SPEED, $$"- Speed: %1$s") + + add(HTUpgradeKeys.ENERGY_CAPACITY, $$"- Energy Capacity: %1$s") add(HTUpgradeKeys.FLUID_CAPACITY, $$"- Fluid Capacity: %1$s") add(HTUpgradeKeys.ITEM_CAPACITY, $$"- Item Capacity: %1$s") - add(HTUpgradeKeys.SPEED, $$"- Speed: %1$s") - add(RagiumUpgradeKeys.COMPOSTING, "- Convert input into Crude Bio") - add(RagiumUpgradeKeys.DISABLE_EXTRA, "- Extra output disabled") - add(RagiumUpgradeKeys.EXP_DRAIN, "- Extract Liquid Experience from enchanted item") - add(RagiumUpgradeKeys.LONG_BREWING, "- Extend duration of potion effects") - add(RagiumUpgradeKeys.STRONG_BREWING, "- Strengthen potion effects") + add(RagiumUpgradeKeys.COMPOST_BIO, "- Convert input into Crude Bio") + add(RagiumUpgradeKeys.VOID_EXTRA, "- Extra output disabled") + add(RagiumUpgradeKeys.EXTRACT_EXPERIENCE, "- Extract Liquid Experience from enchanted item") add(RagiumUpgradeKeys.USE_LUBRICANT, "- Use lubricant per operation") - add(RagiumUpgradeKeys.EXP_COLLECTING, "- Collect Experience Orb instead of Water") + add(RagiumUpgradeKeys.COLLECT_EXP, "- Collect Experience Orb instead of Water") add(RagiumUpgradeKeys.FISHING, "- Do fishing instead of collecting items") - add(RagiumUpgradeKeys.MOB_CAPTURE, "- Capture mobs instead of collecting items") - - add(RagiumUpgradeGroups.FLUID_COLLECTOR, "Fluid Collector") - add(RagiumUpgradeGroups.ITEM_COLLECTOR, "Item Collector") + add(RagiumUpgradeKeys.CAPTURE_MOB, "- Capture mobs instead of collecting items") // API - Constants add(RagiumTranslation.ERROR, "Error") add(RagiumTranslation.INFINITE, "Infinite") @@ -415,7 +411,8 @@ class RagiumEnglishProvider(output: PackOutput) : HTLanguageProvider.English(out add(RagiumTranslation.TOOLTIP_DIMENSION, $$"Dimension: %1$s") add(RagiumTranslation.TOOLTIP_INTRINSIC_ENCHANTMENT, $$"Always has at least %1$s") add(RagiumTranslation.TOOLTIP_LOOT_TABLE_ID, $$"Loot Table: %1$s") - add(RagiumTranslation.TOOLTIP_UPGRADE_GROUP, $$"Upgrade Group: %1$s") + add(RagiumTranslation.TOOLTIP_UPGRADE_TARGET, $$"Upgrade Targets: %1$s") + add(RagiumTranslation.TOOLTIP_UPGRADE_EXCLUSIVE, $$"Conflicting Upgrades: %1$s") add(RagiumTranslation.TOOLTIP_SHOW_DESCRIPTION, "Press Shift to show description") add(RagiumTranslation.TOOLTIP_SHOW_DETAILS, "Press Ctrl to show details") diff --git a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumItemModelProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumItemModelProvider.kt index a93f47d22..5a00ead48 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumItemModelProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumItemModelProvider.kt @@ -11,9 +11,7 @@ import hiiragi283.ragium.api.registry.impl.HTSimpleDeferredItem import hiiragi283.ragium.api.registry.itemId import hiiragi283.ragium.api.registry.toId import hiiragi283.ragium.api.registry.vanillaId -import hiiragi283.ragium.api.tier.HTBaseTier -import hiiragi283.ragium.common.HTChargeType -import hiiragi283.ragium.common.variant.HTUpgradeVariant +import hiiragi283.ragium.common.HTUpgradeType import hiiragi283.ragium.setup.RagiumFluidContents import hiiragi283.ragium.setup.RagiumIntegrationItems import hiiragi283.ragium.setup.RagiumItems @@ -40,7 +38,7 @@ class RagiumItemModelProvider(context: HTDataGenContext) : ItemModelProvider(con remove(RagiumItems.RAGI_ALLOY_COMPOUND) remove(RagiumItems.RAGI_CHERRY_JUICE) - removeAll(HTChargeType.entries.map(HTChargeType::getItem)) + removeAll(RagiumItems.CHARGES.values) removeAll(tools) removeAll(RagiumItems.MACHINE_UPGRADES.values) @@ -53,17 +51,14 @@ class RagiumItemModelProvider(context: HTDataGenContext) : ItemModelProvider(con .forEach(::basicItem) mapOf(RagiumItems.POTION_DROP to "item/ghast_tear").forEach { (item: HTHolderLike, path: String) -> - withExistingParent(item.getPath(), vanillaId("item", "generated")) - .texture("layer0", vanillaId(path)) + basicItemAlt(item, vanillaId(path)) } mapOf( RagiumItems.RAGI_ALLOY_COMPOUND to "item/copper_ingot", RagiumItems.RAGI_CHERRY_JUICE to "item/potion", ).forEach { (item: HTSimpleDeferredItem, path: String) -> - withExistingParent(item.getPath(), vanillaId("item", "generated")) - .texture("layer0", vanillaId(path)) - .texture("layer1", item.itemId) + layered(item, vanillaId(path), item.itemId) } val dripFluids: List = listOf( @@ -101,7 +96,7 @@ class RagiumItemModelProvider(context: HTDataGenContext) : ItemModelProvider(con // Tools buildList { addAll(tools) - addAll(HTChargeType.entries) + addAll(RagiumItems.CHARGES.values) addAll(tools1) }.asSequence() @@ -109,10 +104,26 @@ class RagiumItemModelProvider(context: HTDataGenContext) : ItemModelProvider(con .forEach(::handheldItem) // Upgrades - RagiumItems.MACHINE_UPGRADES.forEach { (variant: HTUpgradeVariant, tier: HTBaseTier, item: HTHolderLike) -> - withExistingParent(item.getPath(), vanillaId("item", "generated")) - .texture("layer0", RagiumAPI.id("item", "${tier.serializedName}_upgrade_base")) - .texture("layer1", RagiumAPI.id("item", variant.variantName())) + for ((type: HTUpgradeType, item: HTHolderLike) in RagiumItems.MACHINE_UPGRADES) { + val base: ResourceLocation = when (type.group) { + HTUpgradeType.Group.CREATIVE -> { + basicItem(type.getId()) + continue + } + else -> RagiumAPI.id("item", "upgrade", "${type.group.serializedName}_base") + } + layered(item, base, RagiumAPI.id("item", "upgrade", type.serializedName)) } } + + // Extensions // + + private fun basicItemAlt(item: HTHolderLike, layer0: ResourceLocation): ItemModelBuilder = + withExistingParent(item.getPath(), vanillaId("item", "generated")) + .texture("layer0", layer0) + + private fun layered(item: HTHolderLike, layer0: ResourceLocation, layer1: ResourceLocation): ItemModelBuilder = + withExistingParent(item.getPath(), vanillaId("item", "generated")) + .texture("layer0", layer0) + .texture("layer1", layer1) } diff --git a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt index 49cc2e9be..96cfc06e3 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt @@ -11,7 +11,6 @@ import hiiragi283.ragium.client.integration.jade.provider.HTBlockConfigurationDa import hiiragi283.ragium.client.integration.jade.provider.HTBlockMachinePropertiesProvider import hiiragi283.ragium.client.integration.jade.provider.HTBlockOwnerProvider import hiiragi283.ragium.common.text.RagiumCommonTranslation -import hiiragi283.ragium.common.upgrade.RagiumUpgradeGroups import hiiragi283.ragium.common.upgrade.RagiumUpgradeKeys import hiiragi283.ragium.data.server.advancement.RagiumAdvancements import hiiragi283.ragium.setup.RagiumBlocks @@ -302,16 +301,6 @@ class RagiumJapaneseProvider(output: PackOutput) : HTLanguageProvider.Japanese(o add(RagiumItems.TANK_MINECART, "タンク付きトロッコ") // Upgrades add(RagiumItems.ETERNAL_COMPONENT, "永久構造体") - - add(RagiumItems.EFFICIENT_CRUSH_UPGRADE, "効率的粉砕アップグレード") - - add(RagiumItems.PRIMARY_ONLY_UPGRADE, "主産物特化アップグレード") - - add(RagiumItems.EXP_COLLECTOR_UPGRADE, "経験値収集アップグレード") - add(RagiumItems.FISHING_UPGRADE, "釣りアップグレード") - add(RagiumItems.MOB_CAPTURE_UPGRADE, "モブ捕獲アップグレード") - - add(RagiumItems.CREATIVE_UPGRADE, "クリエイティブ用アップグレード") } private fun keyMapping() { @@ -343,6 +332,16 @@ class RagiumJapaneseProvider(output: PackOutput) : HTLanguageProvider.Japanese(o add(RagiumModTags.Items.TOOLS_DRILL, "ドリル") add(RagiumModTags.Items.TOOLS_HAMMER, "ハンマー") + + add(RagiumModTags.Items.GENERATOR_UPGRADABLE, "発電機") + add(RagiumModTags.Items.PROCESSOR_UPGRADABLE, "加工機械") + add(RagiumModTags.Items.EXTRA_VOIDING_UPGRADABLE, "追加の出力スロットをもつ加工機械") + add(RagiumModTags.Items.EFFICIENT_CRUSHING_UPGRADABLE, "粉砕機または破砕機") + add(RagiumModTags.Items.ENERGY_CAPACITY_UPGRADABLE, "エネルギーストレージ") + add(RagiumModTags.Items.FLUID_CAPACITY_UPGRADABLE, "液体ストレージ") + add(RagiumModTags.Items.ITEM_CAPACITY_UPGRADABLE, "アイテムストレージ") + + add(RagiumModTags.Items.EXTRACTOR_EXCLUSIVE, "抽出機に対応したアップグレード") } private fun recipeType() { @@ -376,26 +375,22 @@ class RagiumJapaneseProvider(output: PackOutput) : HTLanguageProvider.Japanese(o add(HTUpgradeKeys.BASE_MULTIPLIER, $$"- 基本倍率: %1$s") add(HTUpgradeKeys.IS_CREATIVE, "- クリエイティブ") - add(HTUpgradeKeys.ENERGY_CAPACITY, $$"- エネルギー容量: %1$s") add(HTUpgradeKeys.ENERGY_EFFICIENCY, $$"- エネルギー効率: %1$s") add(HTUpgradeKeys.ENERGY_GENERATION, $$"- エネルギー生産率: %1$s") + add(HTUpgradeKeys.SPEED, $$"- 処理速度: %1$s") + + add(HTUpgradeKeys.ENERGY_CAPACITY, $$"- エネルギー容量: %1$s") add(HTUpgradeKeys.FLUID_CAPACITY, $$"- 液体容量: %1$s") add(HTUpgradeKeys.ITEM_CAPACITY, $$"- アイテム容量: %1$s") - add(HTUpgradeKeys.SPEED, $$"- 処理速度: %1$s") - add(RagiumUpgradeKeys.COMPOSTING, "- アイテムを未加工バイオに変換") - add(RagiumUpgradeKeys.DISABLE_EXTRA, "- 追加の生産物を無効化") - add(RagiumUpgradeKeys.EXP_DRAIN, "- エンチャントされたアイテムから液体経験値を抽出") - add(RagiumUpgradeKeys.LONG_BREWING, "- ポーション効果の時間を延長") - add(RagiumUpgradeKeys.STRONG_BREWING, "- ポーション効果を強化") + add(RagiumUpgradeKeys.COMPOST_BIO, "- アイテムを未加工バイオに変換") + add(RagiumUpgradeKeys.VOID_EXTRA, "- 追加の生産物を無効化") + add(RagiumUpgradeKeys.EXTRACT_EXPERIENCE, "- エンチャントされたアイテムから液体経験値を抽出") add(RagiumUpgradeKeys.USE_LUBRICANT, "- 処理ごとに潤滑油を消費") - add(RagiumUpgradeKeys.EXP_COLLECTING, "- 水の代わりに経験値オーブを収集") + add(RagiumUpgradeKeys.COLLECT_EXP, "- 水の代わりに経験値オーブを収集") add(RagiumUpgradeKeys.FISHING, "- アイテム収集の代わりに釣りを実行") - add(RagiumUpgradeKeys.MOB_CAPTURE, "- アイテム収集の代わりにモブを捕獲") - - add(RagiumUpgradeGroups.FLUID_COLLECTOR, "液体収集機") - add(RagiumUpgradeGroups.ITEM_COLLECTOR, "アイテム収集機") + add(RagiumUpgradeKeys.CAPTURE_MOB, "- アイテム収集の代わりにモブを捕獲") // API - Constants add(RagiumTranslation.ERROR, "エラー") add(RagiumTranslation.INFINITE, "無限") @@ -417,7 +412,8 @@ class RagiumJapaneseProvider(output: PackOutput) : HTLanguageProvider.Japanese(o add(RagiumTranslation.TOOLTIP_DIMENSION, $$"次元: %1$s") add(RagiumTranslation.TOOLTIP_INTRINSIC_ENCHANTMENT, $$"常に少なくとも%1$sがあります") add(RagiumTranslation.TOOLTIP_LOOT_TABLE_ID, $$"ルートテーブル: %1$s") - add(RagiumTranslation.TOOLTIP_UPGRADE_GROUP, $$"アップグレードの種類: %1$s") + add(RagiumTranslation.TOOLTIP_UPGRADE_TARGET, $$"アップグレードの対象: %1$s") + add(RagiumTranslation.TOOLTIP_UPGRADE_EXCLUSIVE, $$"競合するアップグレード: %1$s") add(RagiumTranslation.TOOLTIP_SHOW_DESCRIPTION, "シフトキーを押して説明を表示") add(RagiumTranslation.TOOLTIP_SHOW_DETAILS, "シフトキーを押して詳細を表示") diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/RagiumDataMapProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/RagiumDataMapProvider.kt index 9c2949b4b..37192eade 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/RagiumDataMapProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/RagiumDataMapProvider.kt @@ -3,6 +3,7 @@ package hiiragi283.ragium.data.server import com.enderio.base.common.init.EIOBlocks import de.ellpeck.actuallyadditions.mod.fluids.InitFluids import hiiragi283.ragium.api.RagiumConst +import hiiragi283.ragium.api.RagiumPlatform import hiiragi283.ragium.api.data.HTDataGenContext import hiiragi283.ragium.api.data.map.HTFluidCoolantData import hiiragi283.ragium.api.data.map.HTFluidFuelData @@ -10,26 +11,32 @@ import hiiragi283.ragium.api.data.map.HTMobHead import hiiragi283.ragium.api.data.map.HTUpgradeData import hiiragi283.ragium.api.data.map.RagiumDataMapTypes import hiiragi283.ragium.api.data.map.equip.HTMobEffectEquipAction +import hiiragi283.ragium.api.data.recipe.ingredient.HTItemIngredientCreator import hiiragi283.ragium.api.material.HTMaterialLike import hiiragi283.ragium.api.material.prefix.HTPrefixLike +import hiiragi283.ragium.api.math.fraction import hiiragi283.ragium.api.registry.HTFluidHolderLike import hiiragi283.ragium.api.registry.HTHolderLike import hiiragi283.ragium.api.registry.impl.HTSimpleDeferredItem import hiiragi283.ragium.api.registry.toHolderLike import hiiragi283.ragium.api.tag.RagiumCommonTags +import hiiragi283.ragium.api.tag.RagiumModTags import hiiragi283.ragium.api.tag.createCommonTag import hiiragi283.ragium.api.upgrade.HTUpgradeKeys +import hiiragi283.ragium.common.HTUpgradeType import hiiragi283.ragium.common.material.CommonMaterialKeys import hiiragi283.ragium.common.material.CommonMaterialPrefixes import hiiragi283.ragium.common.material.FoodMaterialKeys import hiiragi283.ragium.common.material.RagiumMaterialKeys import hiiragi283.ragium.common.tier.HTComponentTier -import hiiragi283.ragium.common.upgrade.RagiumUpgradeGroups import hiiragi283.ragium.common.upgrade.RagiumUpgradeKeys +import hiiragi283.ragium.setup.RagiumBlocks import hiiragi283.ragium.setup.RagiumFluidContents import hiiragi283.ragium.setup.RagiumItems import net.minecraft.core.HolderLookup +import net.minecraft.core.HolderSet import net.minecraft.core.registries.Registries +import net.minecraft.tags.TagKey import net.minecraft.world.effect.MobEffects import net.minecraft.world.entity.EntityType import net.minecraft.world.item.Item @@ -46,6 +53,9 @@ import plus.dragons.createenchantmentindustry.common.registry.CEIDataMaps @Suppress("DEPRECATION") class RagiumDataMapProvider(context: HTDataGenContext) : DataMapProvider(context.output, context.registries) { private lateinit var provider: HolderLookup.Provider + private val itemCreator: HTItemIngredientCreator = RagiumPlatform.INSTANCE.itemCreator() + + private fun holderSet(tagKey: TagKey): HolderSet = provider.lookupOrThrow(tagKey.registry()).getOrThrow(tagKey) override fun gather(provider: HolderLookup.Provider) { this.provider = provider @@ -171,37 +181,80 @@ class RagiumDataMapProvider(context: HTDataGenContext) : DataMapProvider(context false, ) } + // upgrades + val processor = itemCreator.fromTagKey(RagiumModTags.Items.PROCESSOR_UPGRADABLE) + + for (type: HTUpgradeType in HTUpgradeType.entries) { + val upgradeData: HTUpgradeData = when (type) { + // Creative + HTUpgradeType.CREATIVE -> HTUpgradeData.create { + set(HTUpgradeKeys.IS_CREATIVE, 1) + } + // Generator + // Processor + HTUpgradeType.EFFICIENCY -> HTUpgradeData.create { + set(HTUpgradeKeys.ENERGY_EFFICIENCY, fraction(5, 4)) + targetSet(processor) + } + HTUpgradeType.SPEED -> HTUpgradeData.create { + set(HTUpgradeKeys.ENERGY_EFFICIENCY, fraction(4, 5)) + set(HTUpgradeKeys.SPEED, fraction(5, 4)) + targetSet(processor) + } + HTUpgradeType.HIGH_SPEED -> HTUpgradeData.create { + set(HTUpgradeKeys.ENERGY_EFFICIENCY, fraction(2, 5)) + set(HTUpgradeKeys.SPEED, fraction(3, 2)) + targetSet(processor) + } + // Processor + HTUpgradeType.BIO_COMPOSTING -> HTUpgradeData.create { + set(RagiumUpgradeKeys.COMPOST_BIO, 1) + targetSet(itemCreator.fromItem(RagiumBlocks.EXTRACTOR)) + exclusiveSet(itemCreator.fromTagKey(RagiumModTags.Items.EXTRACTOR_EXCLUSIVE)) + } + HTUpgradeType.EXTRA_VOIDING -> HTUpgradeData.create { + set(RagiumUpgradeKeys.VOID_EXTRA, 1) + targetSet(itemCreator.fromTagKey(RagiumModTags.Items.EXTRA_VOIDING_UPGRADABLE)) + } - builder - .add( - RagiumItems.CREATIVE_UPGRADE, - HTUpgradeData.createSimple(HTUpgradeKeys.IS_CREATIVE), - false, - ) - // Processor - .add( - RagiumItems.EFFICIENT_CRUSH_UPGRADE, - HTUpgradeData.createSimple(RagiumUpgradeKeys.USE_LUBRICANT), - false, - ).add( - RagiumItems.PRIMARY_ONLY_UPGRADE, - HTUpgradeData.createSimple(RagiumUpgradeKeys.DISABLE_EXTRA), - false, - ) - // Device - .add( - RagiumItems.EXP_COLLECTOR_UPGRADE, - HTUpgradeData.createSimple(RagiumUpgradeKeys.EXP_COLLECTING, RagiumUpgradeGroups.FLUID_COLLECTOR), - false, - ).add( - RagiumItems.FISHING_UPGRADE, - HTUpgradeData.createSimple(RagiumUpgradeKeys.FISHING, RagiumUpgradeGroups.ITEM_COLLECTOR), - false, - ).add( - RagiumItems.MOB_CAPTURE_UPGRADE, - HTUpgradeData.createSimple(RagiumUpgradeKeys.MOB_CAPTURE, RagiumUpgradeGroups.ITEM_COLLECTOR), - false, - ) + HTUpgradeType.EXP_EXTRACTING -> HTUpgradeData.create { + set(RagiumUpgradeKeys.EXTRACT_EXPERIENCE, 1) + targetSet(itemCreator.fromItem(RagiumBlocks.EXTRACTOR)) + exclusiveSet(itemCreator.fromTagKey(RagiumModTags.Items.EXTRACTOR_EXCLUSIVE)) + } + HTUpgradeType.EFFICIENT_CRUSHING -> HTUpgradeData.create { + set(RagiumUpgradeKeys.USE_LUBRICANT, 1) + targetSet(itemCreator.fromTagKey(RagiumModTags.Items.EFFICIENT_CRUSHING_UPGRADABLE)) + } + // Device + HTUpgradeType.EXP_COLLECTING -> HTUpgradeData.create { + set(RagiumUpgradeKeys.COLLECT_EXP, 1) + targetSet(itemCreator.fromItem(RagiumBlocks.FLUID_COLLECTOR)) + } + HTUpgradeType.FISHING -> HTUpgradeData.create { + set(RagiumUpgradeKeys.FISHING, 1) + targetSet(itemCreator.fromItem(RagiumBlocks.ITEM_COLLECTOR)) + } + HTUpgradeType.MOB_CAPTURING -> HTUpgradeData.create { + set(RagiumUpgradeKeys.CAPTURE_MOB, 1) + targetSet(itemCreator.fromItem(RagiumBlocks.ITEM_COLLECTOR)) + } + // Storage + HTUpgradeType.ENERGY_CAPACITY -> HTUpgradeData.create { + set(HTUpgradeKeys.ENERGY_CAPACITY, 4) + targetSet(itemCreator.fromTagKey(RagiumModTags.Items.ENERGY_CAPACITY_UPGRADABLE)) + } + HTUpgradeType.FLUID_CAPACITY -> HTUpgradeData.create { + set(HTUpgradeKeys.FLUID_CAPACITY, 4) + targetSet(itemCreator.fromTagKey(RagiumModTags.Items.FLUID_CAPACITY_UPGRADABLE)) + } + HTUpgradeType.ITEM_CAPACITY -> HTUpgradeData.create { + set(HTUpgradeKeys.ENERGY_CAPACITY, 4) + targetSet(itemCreator.fromTagKey(RagiumModTags.Items.ITEM_CAPACITY_UPGRADABLE)) + } + } + builder.addHolder(type, upgradeData) + } } // Integration // diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumMachineRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumMachineRecipeProvider.kt index 21f4f618d..47386233a 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumMachineRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumMachineRecipeProvider.kt @@ -1,11 +1,10 @@ package hiiragi283.ragium.data.server.recipe import hiiragi283.ragium.api.data.recipe.HTRecipeProvider -import hiiragi283.ragium.api.material.HTMaterialKey import hiiragi283.ragium.api.material.HTMaterialLike import hiiragi283.ragium.api.tag.RagiumCommonTags import hiiragi283.ragium.api.tag.RagiumModTags -import hiiragi283.ragium.api.tier.HTBaseTier +import hiiragi283.ragium.common.HTUpgradeType import hiiragi283.ragium.common.data.recipe.HTShapedRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTShapelessRecipeBuilder import hiiragi283.ragium.common.material.CommonMaterialKeys @@ -13,7 +12,6 @@ import hiiragi283.ragium.common.material.CommonMaterialPrefixes import hiiragi283.ragium.common.material.RagiumMaterialKeys import hiiragi283.ragium.common.material.VanillaMaterialKeys import hiiragi283.ragium.common.tier.HTComponentTier -import hiiragi283.ragium.common.variant.HTUpgradeVariant import hiiragi283.ragium.common.variant.VanillaToolVariant import hiiragi283.ragium.setup.RagiumBlocks import hiiragi283.ragium.setup.RagiumDataComponents @@ -322,70 +320,64 @@ object RagiumMachineRecipeProvider : HTRecipeProvider.Direct() { @JvmStatic private fun upgrades() { - // Machine - for ((variant: HTUpgradeVariant, upgrade: ItemLike) in RagiumItems.MACHINE_UPGRADES.column(HTBaseTier.BASIC)) { - val gem: HTMaterialKey = when (variant) { - HTUpgradeVariant.EFFICIENCY -> RagiumMaterialKeys.WARPED_CRYSTAL - HTUpgradeVariant.ENERGY_CAPACITY -> RagiumMaterialKeys.RAGI_CRYSTAL - HTUpgradeVariant.SPEED -> RagiumMaterialKeys.CRIMSON_CRYSTAL - } - HTShapedRecipeBuilder - .create(upgrade) - .cross8() - .define('A', CommonMaterialPrefixes.INGOT, RagiumMaterialKeys.AZURE_STEEL) - .define('B', RagiumModTags.Items.PLASTICS) - .define('C', CommonMaterialPrefixes.GEM, gem) - } - - for ((variant: HTUpgradeVariant, upgrade: ItemLike) in RagiumItems.MACHINE_UPGRADES.column(HTBaseTier.ADVANCED)) { - HTShapedRecipeBuilder - .create(upgrade) - .hollow4() - .define('A', CommonMaterialPrefixes.INGOT, RagiumMaterialKeys.DEEP_STEEL) - .define('B', RagiumItems.getUpgrade(variant, HTBaseTier.BASIC)) - .save(output) + for (type: HTUpgradeType in HTUpgradeType.entries) { + val builder: HTShapedRecipeBuilder = when (type.group) { + HTUpgradeType.Group.CREATIVE -> continue + HTUpgradeType.Group.GENERATOR -> ::generator + HTUpgradeType.Group.PROCESSOR -> ::processor + HTUpgradeType.Group.DEVICE -> ::device + HTUpgradeType.Group.STORAGE -> ::storage + }(type) + when (type) { + HTUpgradeType.CREATIVE -> continue + // Processor + HTUpgradeType.EFFICIENCY -> builder.define('C', CommonMaterialPrefixes.GEM, RagiumMaterialKeys.WARPED_CRYSTAL) + HTUpgradeType.SPEED -> builder.define('C', CommonMaterialPrefixes.GEM, RagiumMaterialKeys.CRIMSON_CRYSTAL) + HTUpgradeType.HIGH_SPEED -> builder.define('C', HTUpgradeType.SPEED) + // Processor + HTUpgradeType.BIO_COMPOSTING -> builder.define('C', Items.COMPOSTER) + HTUpgradeType.EXTRA_VOIDING -> builder.define('C', Tags.Items.BUCKETS_LAVA) + HTUpgradeType.EXP_EXTRACTING -> builder.define('C', Items.GRINDSTONE) + HTUpgradeType.EFFICIENT_CRUSHING -> builder.define('C', RagiumFluidContents.LUBRICANT.bucketTag) + // Device + HTUpgradeType.EXP_COLLECTING -> builder.define('C', Items.EXPERIENCE_BOTTLE) + HTUpgradeType.FISHING -> builder.define('C', Tags.Items.TOOLS_FISHING_ROD) + HTUpgradeType.MOB_CAPTURING -> builder.define('C', RagiumItems.ELDRITCH_EGG) + // Storage + HTUpgradeType.ENERGY_CAPACITY -> builder.define('C', CommonMaterialPrefixes.GEM, RagiumMaterialKeys.RAGI_CRYSTAL) + HTUpgradeType.FLUID_CAPACITY -> builder.define('C', Tags.Items.BUCKETS_EMPTY) + HTUpgradeType.ITEM_CAPACITY -> builder.define('C', Tags.Items.CHESTS) + }.save(output) } + } - // Processor - processorUpgrade(RagiumItems.EFFICIENT_CRUSH_UPGRADE) { - define('C', RagiumFluidContents.LUBRICANT.bucketTag) - } - processorUpgrade(RagiumItems.PRIMARY_ONLY_UPGRADE) { - define('C', Tags.Items.BUCKETS_LAVA) - } + @JvmStatic + private fun generator(upgrade: ItemLike): HTShapedRecipeBuilder = HTShapedRecipeBuilder + .create(upgrade) + .cross8() + .define('A', CommonMaterialPrefixes.INGOT, RagiumMaterialKeys.DEEP_STEEL) + .define('B', RagiumModTags.Items.PLASTICS) - // Device - deviceUpgrade(RagiumItems.EXP_COLLECTOR_UPGRADE) { - define('B', Items.EXPERIENCE_BOTTLE) - } - deviceUpgrade(RagiumItems.FISHING_UPGRADE) { - define('B', Tags.Items.TOOLS_FISHING_ROD) - } - deviceUpgrade(RagiumItems.MOB_CAPTURE_UPGRADE) { - define('B', RagiumItems.ELDRITCH_EGG) - } - } + @JvmStatic + private fun processor(upgrade: ItemLike): HTShapedRecipeBuilder = HTShapedRecipeBuilder + .create(upgrade) + .cross8() + .define('A', CommonMaterialPrefixes.INGOT, RagiumMaterialKeys.AZURE_STEEL) + .define('B', RagiumModTags.Items.PLASTICS) @JvmStatic - private inline fun processorUpgrade(upgrade: ItemLike, action: HTShapedRecipeBuilder.() -> Unit) { - HTShapedRecipeBuilder - .create(upgrade) - .cross8() - .define('A', CommonMaterialPrefixes.PLATE, CommonMaterialKeys.PLASTIC) - .define('B', CommonMaterialPrefixes.PLATE, CommonMaterialKeys.RUBBER) - .apply(action) - .save(output) - } + private fun device(upgrade: ItemLike): HTShapedRecipeBuilder = HTShapedRecipeBuilder + .create(upgrade) + .cross8() + .define('A', CommonMaterialPrefixes.INGOT, RagiumMaterialKeys.NIGHT_METAL) + .define('B', CommonMaterialPrefixes.PLATE, CommonMaterialKeys.RUBBER) @JvmStatic - private inline fun deviceUpgrade(upgrade: ItemLike, action: HTShapedRecipeBuilder.() -> Unit) { - HTShapedRecipeBuilder - .create(upgrade) - .hollow4() - .define('A', CommonMaterialPrefixes.INGOT, RagiumMaterialKeys.NIGHT_METAL) - .apply(action) - .save(output) - } + private fun storage(upgrade: ItemLike): HTShapedRecipeBuilder = HTShapedRecipeBuilder + .create(upgrade) + .cross8() + .define('A', CommonMaterialPrefixes.INGOT, RagiumMaterialKeys.ADVANCED_RAGI_ALLOY) + .define('B', CommonMaterialPrefixes.PLATE, CommonMaterialKeys.RUBBER) // Storage // diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/tag/RagiumBlockEntityTypeTagsProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/tag/RagiumBlockEntityTypeTagsProvider.kt deleted file mode 100644 index 6691cce57..000000000 --- a/src/data/kotlin/hiiragi283/ragium/data/server/tag/RagiumBlockEntityTypeTagsProvider.kt +++ /dev/null @@ -1,94 +0,0 @@ -package hiiragi283.ragium.data.server.tag - -import hiiragi283.ragium.api.data.HTDataGenContext -import hiiragi283.ragium.api.data.tag.HTTagsProvider -import hiiragi283.ragium.api.tag.RagiumModTags -import hiiragi283.ragium.setup.RagiumBlockEntityTypes -import net.minecraft.core.registries.Registries -import net.minecraft.world.level.block.entity.BlockEntityType - -class RagiumBlockEntityTypeTagsProvider(context: HTDataGenContext) : - HTTagsProvider>(Registries.BLOCK_ENTITY_TYPE, context) { - override fun addTagsInternal(factory: BuilderFactory>) { - category(factory) - - factory - .apply(RagiumModTags.BlockEntityTypes.EFFICIENT_CRUSH_UPGRADABLE) - .add(RagiumBlockEntityTypes.PULVERIZER) - .add(RagiumBlockEntityTypes.CRUSHER) - - factory - .apply(RagiumModTags.BlockEntityTypes.EXTRA_OUTPUT_UPGRADABLE) - .add(RagiumBlockEntityTypes.CUTTING_MACHINE) - .add(RagiumBlockEntityTypes.CRUSHER) - .add(RagiumBlockEntityTypes.PLANTER) - } - - private fun category(factory: BuilderFactory>) { - factory - .apply(RagiumModTags.BlockEntityTypes.MACHINES) - .addTag(RagiumModTags.BlockEntityTypes.MACHINES_ELECTRIC) - .addTag(RagiumModTags.BlockEntityTypes.DEVICES) - - factory - .apply(RagiumModTags.BlockEntityTypes.MACHINES_ELECTRIC) - .addTag(RagiumModTags.BlockEntityTypes.GENERATORS) - .addTag(RagiumModTags.BlockEntityTypes.PROCESSORS) - // Generators - factory - .apply(RagiumModTags.BlockEntityTypes.GENERATORS) - // Basic - .add(RagiumBlockEntityTypes.THERMAL_GENERATOR) - // Advanced - .add(RagiumBlockEntityTypes.CULINARY_GENERATOR) - .add(RagiumBlockEntityTypes.MAGMATIC_GENERATOR) - // Elite - .add(RagiumBlockEntityTypes.COMBUSTION_GENERATOR) - .add(RagiumBlockEntityTypes.SOLAR_PANEL_CONTROLLER) - // Ultimate - .add(RagiumBlockEntityTypes.ENCHANTMENT_GENERATOR) - .add(RagiumBlockEntityTypes.NUCLEAR_REACTOR) - - // Processors - factory - .apply(RagiumModTags.BlockEntityTypes.PROCESSORS) - // Basic - .add(RagiumBlockEntityTypes.ALLOY_SMELTER) - .add(RagiumBlockEntityTypes.BLOCK_BREAKER) - .add(RagiumBlockEntityTypes.COMPRESSOR) - .add(RagiumBlockEntityTypes.CUTTING_MACHINE) - .add(RagiumBlockEntityTypes.ELECTRIC_FURNACE) - .add(RagiumBlockEntityTypes.EXTRACTOR) - .add(RagiumBlockEntityTypes.PULVERIZER) - // Advanced - .add(RagiumBlockEntityTypes.CRUSHER) - .add(RagiumBlockEntityTypes.MELTER) - .add(RagiumBlockEntityTypes.MIXER) - .add(RagiumBlockEntityTypes.REFINERY) - // Elite - .add(RagiumBlockEntityTypes.ADVANCED_MIXER) - .add(RagiumBlockEntityTypes.BREWERY) - .add(RagiumBlockEntityTypes.MULTI_SMELTER) - .add(RagiumBlockEntityTypes.PLANTER) - // Ultimate - .add(RagiumBlockEntityTypes.ENCHANTER) - .add(RagiumBlockEntityTypes.MOB_CRUSHER) - .add(RagiumBlockEntityTypes.SIMULATOR) - - // Devices - factory - .apply(RagiumModTags.BlockEntityTypes.DEVICES) - // Basic - .add(RagiumBlockEntityTypes.FLUID_COLLECTOR) - .add(RagiumBlockEntityTypes.ITEM_COLLECTOR) - // Advanced - .add(RagiumBlockEntityTypes.STONE_COLLECTOR) - // Elite - .add(RagiumBlockEntityTypes.DIM_ANCHOR) - .add(RagiumBlockEntityTypes.ENI) - // Ultimate - .add(RagiumBlockEntityTypes.TELEPAD) - // Creative - .add(RagiumBlockEntityTypes.CEU) - } -} diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/tag/RagiumItemTagsProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/tag/RagiumItemTagsProvider.kt index 89844b8ee..80597871a 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/tag/RagiumItemTagsProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/tag/RagiumItemTagsProvider.kt @@ -16,6 +16,7 @@ import hiiragi283.ragium.api.registry.toHolderLike import hiiragi283.ragium.api.tag.RagiumCommonTags import hiiragi283.ragium.api.tag.RagiumModTags import hiiragi283.ragium.api.variant.HTToolVariant +import hiiragi283.ragium.common.HTUpgradeType import hiiragi283.ragium.common.material.CommonMaterialKeys import hiiragi283.ragium.common.material.CommonMaterialPrefixes import hiiragi283.ragium.common.material.FoodMaterialKeys @@ -60,6 +61,8 @@ class RagiumItemTagsProvider(private val blockTags: CompletableFuture) { + // Generator + factory + .apply(RagiumModTags.Items.GENERATOR_UPGRADABLE) + // Basic + .add(RagiumBlocks.THERMAL_GENERATOR) + // Advanced + .add(RagiumBlocks.CULINARY_GENERATOR) + .add(RagiumBlocks.MAGMATIC_GENERATOR) + // Elite + .add(RagiumBlocks.COMBUSTION_GENERATOR) + .add(RagiumBlocks.SOLAR_PANEL_CONTROLLER) + // Ultimate + .add(RagiumBlocks.ENCHANTMENT_GENERATOR) + .add(RagiumBlocks.NUCLEAR_REACTOR) + // Processor + factory + .apply(RagiumModTags.Items.PROCESSOR_UPGRADABLE) + // Basic + .add(RagiumBlocks.ALLOY_SMELTER) + .add(RagiumBlocks.BLOCK_BREAKER) + .add(RagiumBlocks.COMPRESSOR) + .add(RagiumBlocks.CUTTING_MACHINE) + .add(RagiumBlocks.ELECTRIC_FURNACE) + .add(RagiumBlocks.EXTRACTOR) + .add(RagiumBlocks.PULVERIZER) + // Advanced + .add(RagiumBlocks.CRUSHER) + .add(RagiumBlocks.MELTER) + .add(RagiumBlocks.MIXER) + .add(RagiumBlocks.REFINERY) + // Elite + .add(RagiumBlocks.BREWERY) + .add(RagiumBlocks.ADVANCED_MIXER) + .add(RagiumBlocks.MULTI_SMELTER) + .add(RagiumBlocks.PLANTER) + // Ultimate + .add(RagiumBlocks.ENCHANTER) + .add(RagiumBlocks.MOB_CRUSHER) + .add(RagiumBlocks.SIMULATOR) + + factory + .apply(RagiumModTags.Items.EXTRA_VOIDING_UPGRADABLE) + .add(RagiumBlocks.CUTTING_MACHINE) + .add(RagiumBlocks.PULVERIZER) + .add(RagiumBlocks.CRUSHER) + + factory + .apply(RagiumModTags.Items.EFFICIENT_CRUSHING_UPGRADABLE) + .add(RagiumBlocks.PULVERIZER) + .add(RagiumBlocks.CRUSHER) + // Storage + factory + .apply(RagiumModTags.Items.ENERGY_CAPACITY_UPGRADABLE) + .addTag(RagiumModTags.Items.GENERATOR_UPGRADABLE) + .addTag(RagiumModTags.Items.PROCESSOR_UPGRADABLE) + + factory + .apply(RagiumModTags.Items.FLUID_CAPACITY_UPGRADABLE) + // Generator + .add(RagiumBlocks.CULINARY_GENERATOR) + .add(RagiumBlocks.MAGMATIC_GENERATOR) + .add(RagiumBlocks.COMBUSTION_GENERATOR) + // Processor + .add(RagiumBlocks.COMPRESSOR) + .add(RagiumBlocks.EXTRACTOR) + .add(RagiumBlocks.PULVERIZER) + .add(RagiumBlocks.CRUSHER) + .add(RagiumBlocks.MELTER) + .add(RagiumBlocks.MIXER) + .add(RagiumBlocks.REFINERY) + .add(RagiumBlocks.BREWERY) + .add(RagiumBlocks.ADVANCED_MIXER) + .add(RagiumBlocks.PLANTER) + .add(RagiumBlocks.ENCHANTER) + .add(RagiumBlocks.MOB_CRUSHER) + .add(RagiumBlocks.SIMULATOR) + // Device + .add(RagiumBlocks.FLUID_COLLECTOR) + // Storage + .add(RagiumBlocks.TANK) + + factory + .apply(RagiumModTags.Items.ITEM_CAPACITY_UPGRADABLE) + .add(RagiumBlocks.CRATE) + } + + private fun upgradeExclusive(factory: BuilderFactory) { + factory + .apply(RagiumModTags.Items.EXTRACTOR_EXCLUSIVE) + .add(HTUpgradeType.BIO_COMPOSTING) + .add(HTUpgradeType.EXP_EXTRACTING) + } + // Categories // private fun categories(factory: BuilderFactory) { @@ -367,9 +466,6 @@ class RagiumItemTagsProvider(private val blockTags: CompletableFuture Soul Sand diff --git a/src/main/kotlin/hiiragi283/ragium/client/RagiumClient.kt b/src/main/kotlin/hiiragi283/ragium/client/RagiumClient.kt index 06079f65e..e9f798154 100644 --- a/src/main/kotlin/hiiragi283/ragium/client/RagiumClient.kt +++ b/src/main/kotlin/hiiragi283/ragium/client/RagiumClient.kt @@ -116,7 +116,7 @@ class RagiumClient(eventBus: IEventBus, container: ModContainer) { getter != null && pos != null -> { val collector: HTFluidCollectorBlockEntity? = getter.getTypedBlockEntity(pos) - if (collector != null && collector.hasUpgrade(RagiumUpgradeKeys.EXP_COLLECTING)) { + if (collector != null && collector.hasUpgrade(RagiumUpgradeKeys.COLLECT_EXP)) { 0x66ff33 } else { BiomeColors.getAverageWaterColor(getter, pos) diff --git a/src/main/kotlin/hiiragi283/ragium/client/event/RagiumTooltipHandler.kt b/src/main/kotlin/hiiragi283/ragium/client/event/RagiumTooltipHandler.kt index 2fb361dca..ca1d2515e 100644 --- a/src/main/kotlin/hiiragi283/ragium/client/event/RagiumTooltipHandler.kt +++ b/src/main/kotlin/hiiragi283/ragium/client/event/RagiumTooltipHandler.kt @@ -2,10 +2,10 @@ package hiiragi283.ragium.client.event import com.mojang.datafixers.util.Either import hiiragi283.ragium.api.RagiumAPI +import hiiragi283.ragium.api.data.map.RagiumDataMapTypes import hiiragi283.ragium.api.storage.attachments.HTAttachedItems import hiiragi283.ragium.api.text.HTTranslation import hiiragi283.ragium.api.text.RagiumTranslation -import hiiragi283.ragium.api.upgrade.HTUpgradeHelper import hiiragi283.ragium.config.RagiumConfig import hiiragi283.ragium.setup.RagiumDataComponents import net.minecraft.ChatFormatting @@ -37,7 +37,7 @@ object RagiumTooltipHandler { if (RagiumConfig.COMMON.showFoodEffect.asBoolean) { food(stack, consumer, event.context.tickRate()) } - HTUpgradeHelper.appendTooltips(stack, consumer) + RagiumDataMapTypes.getUpgradeData(stack)?.appendTooltips(consumer) RagiumDataComponents.REGISTER .asSequence() diff --git a/src/main/kotlin/hiiragi283/ragium/client/renderer/block/HTCrateRenderer.kt b/src/main/kotlin/hiiragi283/ragium/client/renderer/block/HTCrateRenderer.kt index 3dfe31b62..bbf0bf87c 100644 --- a/src/main/kotlin/hiiragi283/ragium/client/renderer/block/HTCrateRenderer.kt +++ b/src/main/kotlin/hiiragi283/ragium/client/renderer/block/HTCrateRenderer.kt @@ -3,7 +3,6 @@ package hiiragi283.ragium.client.renderer.block import com.mojang.blaze3d.vertex.PoseStack import com.mojang.math.Axis import hiiragi283.ragium.api.stack.ImmutableItemStack -import hiiragi283.ragium.client.renderer.scale import hiiragi283.ragium.common.block.entity.storage.HTCrateBlockEntity import net.minecraft.client.renderer.MultiBufferSource import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider diff --git a/src/main/kotlin/hiiragi283/ragium/common/HTChargeType.kt b/src/main/kotlin/hiiragi283/ragium/common/HTChargeType.kt index 9b67ca878..22e9f89bf 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/HTChargeType.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/HTChargeType.kt @@ -5,7 +5,6 @@ import hiiragi283.ragium.api.data.lang.HTLanguageType import hiiragi283.ragium.api.math.fraction import hiiragi283.ragium.api.registry.HTItemHolderLike import hiiragi283.ragium.api.registry.impl.HTDeferredEntityType -import hiiragi283.ragium.api.registry.impl.HTSimpleDeferredItem import hiiragi283.ragium.api.text.HTTranslation import hiiragi283.ragium.common.entity.charge.HTAbstractCharge import hiiragi283.ragium.common.entity.charge.HTBlastCharge @@ -18,13 +17,11 @@ import hiiragi283.ragium.common.text.RagiumCommonTranslation import hiiragi283.ragium.setup.RagiumDataComponents import hiiragi283.ragium.setup.RagiumEntityTypes import hiiragi283.ragium.setup.RagiumItems -import net.minecraft.resources.ResourceLocation import net.minecraft.sounds.SoundEvent import net.minecraft.sounds.SoundEvents import net.minecraft.util.StringRepresentable import net.minecraft.world.entity.LivingEntity import net.minecraft.world.entity.projectile.ThrowableItemProjectile -import net.minecraft.world.item.Item import net.minecraft.world.item.ItemStack import net.minecraft.world.level.Level import org.apache.commons.lang3.math.Fraction @@ -32,7 +29,7 @@ import org.apache.commons.lang3.math.Fraction enum class HTChargeType(private val enPattern: String, private val jaPattern: String) : StringRepresentable, HTLangName, - HTItemHolderLike { + HTItemHolderLike.Delegate { BLAST("Blast", "ブラスト"), STRIKE("Strike", "ストライク"), NEUTRAL("Neutralize", "ニュートラライズ"), @@ -50,7 +47,7 @@ enum class HTChargeType(private val enPattern: String, private val jaPattern: St } // Item - fun getItem(): HTSimpleDeferredItem = RagiumItems.CHARGES[this]!! + override fun getDelegate(): HTItemHolderLike = RagiumItems.CHARGES[this]!! fun getShootSound(): SoundEvent = when (this) { BLAST -> SoundEvents.WITHER_SHOOT @@ -70,10 +67,6 @@ enum class HTChargeType(private val enPattern: String, private val jaPattern: St CONFUSION -> RagiumCommonTranslation.CONFUSING_CHARGE } - override fun asItem(): Item = getItem().get() - - override fun getId(): ResourceLocation = getItem().id - // Entity fun getEntityType(): HTDeferredEntityType = RagiumEntityTypes.CHARGES[this]!! diff --git a/src/main/kotlin/hiiragi283/ragium/common/HTMoldType.kt b/src/main/kotlin/hiiragi283/ragium/common/HTMoldType.kt index ccb87527c..6b3367f84 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/HTMoldType.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/HTMoldType.kt @@ -6,14 +6,12 @@ import hiiragi283.ragium.api.material.prefix.HTPrefixLike import hiiragi283.ragium.api.registry.HTItemHolderLike import hiiragi283.ragium.common.material.CommonMaterialPrefixes import hiiragi283.ragium.setup.RagiumItems -import net.minecraft.resources.ResourceLocation import net.minecraft.util.StringRepresentable -import net.minecraft.world.item.Item enum class HTMoldType(private val enPattern: String, private val jaPattern: String) : StringRepresentable, HTLangName, - HTItemHolderLike { + HTItemHolderLike.Delegate { BLANK("Blank", "空"), STORAGE_BLOCK("Block", "ブロック"), GEM("Gem", "宝石"), @@ -37,9 +35,7 @@ enum class HTMoldType(private val enPattern: String, private val jaPattern: Stri HTLanguageType.JA_JP -> jaPattern } - override fun getId(): ResourceLocation = RagiumItems.MOLDS[this]!!.id - - override fun asItem(): Item = RagiumItems.MOLDS[this]!!.asItem() + override fun getDelegate(): HTItemHolderLike = RagiumItems.MOLDS[this]!! override fun getSerializedName(): String = name.lowercase() } diff --git a/src/main/kotlin/hiiragi283/ragium/common/HTUpgradeType.kt b/src/main/kotlin/hiiragi283/ragium/common/HTUpgradeType.kt new file mode 100644 index 000000000..00aa5ed32 --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/HTUpgradeType.kt @@ -0,0 +1,59 @@ +package hiiragi283.ragium.common + +import hiiragi283.ragium.api.data.lang.HTLangName +import hiiragi283.ragium.api.data.lang.HTLanguageType +import hiiragi283.ragium.api.registry.HTItemHolderLike +import hiiragi283.ragium.setup.RagiumItems +import net.minecraft.util.StringRepresentable + +enum class HTUpgradeType(val group: Group, private val enName: String, private val jpName: String) : + StringRepresentable, + HTLangName, + HTItemHolderLike.Delegate { + // Creative + CREATIVE(Group.CREATIVE, "Creative", "クリエイティブ"), + + // Generator + + // Processor + EFFICIENCY(Group.PROCESSOR, "Efficiency", "効率"), + SPEED(Group.PROCESSOR, "Speed", "スピード"), + HIGH_SPEED(Group.PROCESSOR, "High-Speed", "ハイスピード"), + + // Specific Processor + BIO_COMPOSTING(Group.PROCESSOR, "Bio Composting", "有機コンポスト"), + EXTRA_VOIDING(Group.PROCESSOR, "Extra Voiding", "副産物廃棄"), + EXP_EXTRACTING(Group.PROCESSOR, "Exp Extracting", "経験値抽出"), + EFFICIENT_CRUSHING(Group.PROCESSOR, "Efficient Crushing", "効率的粉砕"), + + // Device + EXP_COLLECTING(Group.DEVICE, "Exp Collecting", "経験値収集"), + FISHING(Group.DEVICE, "Fishing", "自動釣り"), + MOB_CAPTURING(Group.DEVICE, "Mob Capturing", "モブ捕獲"), + + // Storage + ENERGY_CAPACITY(Group.STORAGE, "Energy Capacity", "エネルギー容量"), + FLUID_CAPACITY(Group.STORAGE, "Fluid Capacity", "液体容量"), + ITEM_CAPACITY(Group.STORAGE, "Item Capacity", "アイテム容量"), + ; + + override fun getDelegate(): HTItemHolderLike = RagiumItems.MACHINE_UPGRADES[this]!! + + override fun getTranslatedName(type: HTLanguageType): String = when (type) { + HTLanguageType.EN_US -> enName + HTLanguageType.JA_JP -> jpName + } + + override fun getSerializedName(): String = name.lowercase() + + enum class Group : StringRepresentable { + CREATIVE, + GENERATOR, + PROCESSOR, + DEVICE, + STORAGE, + ; + + override fun getSerializedName(): String = name.lowercase() + } +} diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/HTCropBlock.kt b/src/main/kotlin/hiiragi283/ragium/common/block/HTCropBlock.kt index e50d9317a..089691b88 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/HTCropBlock.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/HTCropBlock.kt @@ -26,7 +26,7 @@ abstract class HTCropBlock(properties: Properties) : CropBlock(properties) { val AGE: IntegerProperty = BeetrootBlock.AGE @JvmField - val SHAPE_BY_AGE: Array = arrayOf( + val SHAPE_BY_AGE: Array = arrayOf( box(0.0, 0.0, 0.0, 16.0, 2.0, 16.0), box(0.0, 0.0, 0.0, 16.0, 4.0, 16.0), box(0.0, 0.0, 0.0, 16.0, 6.0, 16.0), diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTImitationSpawnerBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTImitationSpawnerBlockEntity.kt index 425f1b338..ea0399df4 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTImitationSpawnerBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTImitationSpawnerBlockEntity.kt @@ -2,6 +2,8 @@ package hiiragi283.ragium.common.block.entity import hiiragi283.ragium.api.RagiumPlatform import hiiragi283.ragium.api.item.component.HTSpawnerMob +import hiiragi283.ragium.api.serialization.value.HTValueInput +import hiiragi283.ragium.api.serialization.value.HTValueOutput import hiiragi283.ragium.setup.RagiumBlockEntityTypes import hiiragi283.ragium.setup.RagiumDataComponents import net.minecraft.core.BlockPos @@ -48,4 +50,12 @@ class HTImitationSpawnerBlockEntity(pos: BlockPos, state: BlockState) : spawnerMob = HTSpawnerMob(entityType) setChanged() } + + override fun initReducedUpdateTag(output: HTValueOutput) { + super.initReducedUpdateTag(output) + } + + override fun handleUpdateTag(input: HTValueInput) { + super.handleUpdateTag(input) + } } diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/component/HTMachineUpgradeComponent.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/component/HTMachineUpgradeComponent.kt index eea36553c..37966c617 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/component/HTMachineUpgradeComponent.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/component/HTMachineUpgradeComponent.kt @@ -1,8 +1,7 @@ package hiiragi283.ragium.common.block.entity.component -import hiiragi283.ragium.api.block.attribute.HTUpgradeGroupBlockAttribute -import hiiragi283.ragium.api.block.attribute.getAttribute -import hiiragi283.ragium.api.capability.RagiumCapabilities +import hiiragi283.ragium.api.data.map.HTUpgradeData +import hiiragi283.ragium.api.data.map.RagiumDataMapTypes import hiiragi283.ragium.api.function.HTPredicates import hiiragi283.ragium.api.serialization.component.HTComponentInput import hiiragi283.ragium.api.serialization.value.HTValueInput @@ -11,8 +10,6 @@ import hiiragi283.ragium.api.stack.ImmutableItemStack import hiiragi283.ragium.api.storage.attachments.HTAttachedItems import hiiragi283.ragium.api.storage.item.HTItemSlot import hiiragi283.ragium.api.upgrade.HTSlotUpgradeHandler -import hiiragi283.ragium.api.upgrade.HTUpgradeGroup -import hiiragi283.ragium.api.upgrade.HTUpgradeProvider import hiiragi283.ragium.api.util.HTContentListener import hiiragi283.ragium.api.world.sendBlockUpdated import hiiragi283.ragium.common.block.entity.HTBlockEntity @@ -21,6 +18,7 @@ import hiiragi283.ragium.common.storage.HTCapabilityCodec import hiiragi283.ragium.common.storage.item.slot.HTBasicItemSlot import hiiragi283.ragium.setup.RagiumDataComponents import net.minecraft.core.component.DataComponentMap +import net.minecraft.world.item.ItemStack class HTMachineUpgradeComponent(private val owner: HTBlockEntity) : HTBlockEntityComponent, @@ -35,14 +33,12 @@ class HTMachineUpgradeComponent(private val owner: HTBlockEntity) : HTContentListener(owner::setChanged).andThen { owner.level?.sendBlockUpdated(owner.blockPos) }, HTSlotHelper.getSlotPosX(8), HTSlotHelper.getSlotPosY(i - 0.5), + limit = 1, canExtract = HTPredicates.manualOnly(), canInsert = HTPredicates.manualOnly(), filter = filter, ) } - private val group: HTUpgradeGroup? = owner.blockHolder - .getAttribute() - ?.group // HTBlockEntityComponent // @@ -75,13 +71,12 @@ class HTMachineUpgradeComponent(private val owner: HTBlockEntity) : override fun getUpgradeSlots(): List = upgradeSlots override fun isValidUpgrade(upgrade: ImmutableItemStack, existing: List): Boolean { - val provider: HTUpgradeProvider = upgrade.getCapability(RagiumCapabilities.UPGRADE_ITEM) ?: return false - val group: HTUpgradeGroup = provider.getGroup() ?: return true - return when (group) { - this.group -> existing.none { stack: ImmutableItemStack -> - stack.getCapability(RagiumCapabilities.UPGRADE_ITEM)?.getGroup() == group - } - else -> false - } + val upgradeData: HTUpgradeData = RagiumDataMapTypes.getUpgradeData(upgrade) ?: return false + val isTarget: Boolean = owner.blockHolder + .value() + .let(::ItemStack) + .let(upgradeData::isTarget) + val isCompatible: Boolean = existing.all { stack: ImmutableItemStack -> HTUpgradeData.areCompatible(upgrade, stack) } + return isTarget && isCompatible } } diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTFluidCollectorBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTFluidCollectorBlockEntity.kt index 6332dda0d..e9ce5d8f3 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTFluidCollectorBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTFluidCollectorBlockEntity.kt @@ -49,7 +49,7 @@ class HTFluidCollectorBlockEntity(pos: BlockPos, state: BlockState) : // Ticking // override fun actionServer(level: ServerLevel, pos: BlockPos, state: BlockState): Boolean = when { - hasUpgrade(RagiumUpgradeKeys.EXP_COLLECTING) -> collectExp(level, pos) + hasUpgrade(RagiumUpgradeKeys.COLLECT_EXP) -> collectExp(level, pos) else -> generateWater(level, pos) } diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTItemCollectorBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTItemCollectorBlockEntity.kt index 264eca783..77d7bbef8 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTItemCollectorBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTItemCollectorBlockEntity.kt @@ -77,7 +77,7 @@ class HTItemCollectorBlockEntity(pos: BlockPos, state: BlockState) : override fun actionServer(level: ServerLevel, pos: BlockPos, state: BlockState): Boolean = when { hasUpgrade(RagiumUpgradeKeys.FISHING) -> collectFish(level, pos) - hasUpgrade(RagiumUpgradeKeys.MOB_CAPTURE) -> collectMobs(level, pos) + hasUpgrade(RagiumUpgradeKeys.CAPTURE_MOB) -> collectMobs(level, pos) else -> collectItem(level, pos) } diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/generator/HTSolarPanelControllerBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/generator/HTSolarPanelControllerBlockEntity.kt index 057bb1de9..7f6fe1497 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/generator/HTSolarPanelControllerBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/generator/HTSolarPanelControllerBlockEntity.kt @@ -23,7 +23,7 @@ class HTSolarPanelControllerBlockEntity(pos: BlockPos, state: BlockState) : }.size if (panels == 0) return false battery.currentEnergyPerTick = modifyValue(HTUpgradeKeys.ENERGY_GENERATION) { - battery.baseEnergyPerTick * (panels / 4) * it * getBaseMultiplier() + battery.baseEnergyPerTick * (panels * 5) * it * getBaseMultiplier() } return battery.generate() > 0 } 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 f66a9bdcf..40637d6e9 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 @@ -42,7 +42,7 @@ class HTCrusherBlockEntity(pos: BlockPos, state: BlockState) : override fun canProgressRecipe(level: ServerLevel, input: HTRecipeInput, recipe: HTSingleExtraItemRecipe): Boolean { // アウトプットに搬出できるか判定する val bool1: Boolean = HTStackSlotHelper.canInsertStack(outputSlot, input, level, recipe::assembleItem) - if (!hasUpgrade(RagiumUpgradeKeys.DISABLE_EXTRA)) { + if (!hasUpgrade(RagiumUpgradeKeys.VOID_EXTRA)) { return bool1 } val bool2: Boolean = HTStackSlotHelper.canInsertStack(extraSlot, input, level, recipe::assembleExtraItem) @@ -53,7 +53,7 @@ class HTCrusherBlockEntity(pos: BlockPos, state: BlockState) : // 実際にアウトプットに搬出する val access: RegistryAccess = level.registryAccess() outputSlot.insert(recipe.assembleItem(input, access), HTStorageAction.EXECUTE, HTStorageAccess.INTERNAL) - if (!hasUpgrade(RagiumUpgradeKeys.DISABLE_EXTRA)) { + if (!hasUpgrade(RagiumUpgradeKeys.VOID_EXTRA)) { extraSlot.insert(recipe.assembleExtraItem(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 f89b9afe6..31e0867e4 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 @@ -51,7 +51,7 @@ class HTCuttingMachineBlockEntity(pos: BlockPos, state: BlockState) : override fun canProgressRecipe(level: ServerLevel, input: HTRecipeInput, recipe: HTSingleExtraItemRecipe): Boolean { // アウトプットに搬出できるか判定する val bool1: Boolean = HTStackSlotHelper.canInsertStack(outputSlot, input, level, recipe::assembleItem) - if (hasUpgrade(RagiumUpgradeKeys.DISABLE_EXTRA)) { + if (hasUpgrade(RagiumUpgradeKeys.VOID_EXTRA)) { return bool1 } val bool2: Boolean = HTStackSlotHelper.canInsertStack(extraSlot, input, level, recipe::assembleExtraItem) @@ -68,7 +68,7 @@ class HTCuttingMachineBlockEntity(pos: BlockPos, state: BlockState) : // 実際にアウトプットに搬出する val access: RegistryAccess = level.registryAccess() outputSlot.insert(recipe.assembleItem(input, access), HTStorageAction.EXECUTE, HTStorageAccess.INTERNAL) - if (!hasUpgrade(RagiumUpgradeKeys.DISABLE_EXTRA)) { + if (!hasUpgrade(RagiumUpgradeKeys.VOID_EXTRA)) { extraSlot.insert(recipe.assembleExtraItem(input, access), HTStorageAction.EXECUTE, HTStorageAccess.INTERNAL) } // インプットを減らす 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 eac8874b0..84c48f0c4 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 @@ -59,12 +59,12 @@ class HTExtractorBlockEntity(pos: BlockPos, state: BlockState) : HTFinderRecipeCache(RagiumRecipeTypes.EXTRACTING) override fun getMatchedRecipe(input: HTRecipeInput, level: ServerLevel): HTItemWithCatalystRecipe? = when { - hasUpgrade(RagiumUpgradeKeys.COMPOSTING) -> + hasUpgrade(RagiumUpgradeKeys.COMPOST_BIO) -> input .item(0) ?.unwrap() ?.let(::createComposting) - hasUpgrade(RagiumUpgradeKeys.EXP_DRAIN) -> expExtracting(input) + hasUpgrade(RagiumUpgradeKeys.EXTRACT_EXPERIENCE) -> expExtracting(input) else -> recipeCache.getFirstRecipe(input, level) } diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTCrateBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTCrateBlockEntity.kt index da32df92d..8c559a853 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTCrateBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTCrateBlockEntity.kt @@ -39,7 +39,7 @@ open class HTCrateBlockEntity(blockHolder: Holder, pos: BlockPos, state: HTStackSlotHelper.calculateRedstoneLevel(slot) // Ticking // - + override fun onUpdateServer(level: ServerLevel, pos: BlockPos, state: BlockState): Boolean = false // CrateItemSlot // diff --git a/src/main/kotlin/hiiragi283/ragium/common/item/block/HTTankBlockItem.kt b/src/main/kotlin/hiiragi283/ragium/common/item/block/HTTankBlockItem.kt index 362242985..1ec7450b3 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/item/block/HTTankBlockItem.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/item/block/HTTankBlockItem.kt @@ -10,9 +10,9 @@ import hiiragi283.ragium.api.storage.attachments.HTAttachedItems import hiiragi283.ragium.api.storage.fluid.HTFluidView import hiiragi283.ragium.api.text.RagiumTranslation import hiiragi283.ragium.api.upgrade.HTUpgradeHelper +import hiiragi283.ragium.common.HTUpgradeType import hiiragi283.ragium.common.block.storage.HTTankBlock import hiiragi283.ragium.setup.RagiumDataComponents -import hiiragi283.ragium.setup.RagiumItems import net.minecraft.ChatFormatting import net.minecraft.network.chat.Component import net.minecraft.world.item.CreativeModeTab @@ -71,7 +71,7 @@ class HTTankBlockItem(block: HTTankBlock, properties: Properties) : createItemStack( baseItem, RagiumDataComponents.MACHINE_UPGRADES, - HTAttachedItems(listOf(RagiumItems.CREATIVE_UPGRADE.toImmutableStack(1))), + HTAttachedItems(listOf(HTUpgradeType.CREATIVE.toImmutableStack(1))), ).let(consumer::accept) } } diff --git a/src/main/kotlin/hiiragi283/ragium/common/upgrade/HTComponentUpgradeHandler.kt b/src/main/kotlin/hiiragi283/ragium/common/upgrade/HTComponentUpgradeHandler.kt index efef1ff08..8c147f8b4 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/upgrade/HTComponentUpgradeHandler.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/upgrade/HTComponentUpgradeHandler.kt @@ -1,27 +1,21 @@ package hiiragi283.ragium.common.upgrade -import hiiragi283.ragium.api.capability.RagiumCapabilities +import hiiragi283.ragium.api.data.map.HTUpgradeData +import hiiragi283.ragium.api.data.map.RagiumDataMapTypes import hiiragi283.ragium.api.stack.ImmutableItemStack -import hiiragi283.ragium.api.upgrade.HTUpgradeGroup import hiiragi283.ragium.api.upgrade.HTUpgradeHandler -import hiiragi283.ragium.api.upgrade.HTUpgradeProvider import hiiragi283.ragium.setup.RagiumDataComponents import net.minecraft.world.item.ItemStack -class HTComponentUpgradeHandler(private val parent: ItemStack) : HTUpgradeHandler { - private fun getComponent(): Collection = parent.get(RagiumDataComponents.MACHINE_UPGRADES) ?: listOf() +class HTComponentUpgradeHandler(private val attachedTo: ItemStack) : HTUpgradeHandler { + private fun getComponent(): Collection = attachedTo.get(RagiumDataComponents.MACHINE_UPGRADES) ?: listOf() override fun getUpgrades(): List = getComponent().filterNotNull() override fun isValidUpgrade(upgrade: ImmutableItemStack, existing: List): Boolean { - val provider: HTUpgradeProvider = upgrade.getCapability(RagiumCapabilities.UPGRADE_ITEM) ?: return false - val group: HTUpgradeGroup? = provider.getGroup() - val attachedGroup: HTUpgradeGroup = parent.get(RagiumDataComponents.UPGRADE_GROUP) ?: return true - return when (group) { - attachedGroup -> existing.none { stack: ImmutableItemStack -> - stack.getCapability(RagiumCapabilities.UPGRADE_ITEM)?.getGroup() == group - } - else -> false - } + val upgradeData: HTUpgradeData = RagiumDataMapTypes.getUpgradeData(upgrade) ?: return false + val isTarget: Boolean = upgradeData.isTarget(attachedTo) + val isCompatible: Boolean = existing.all { stack: ImmutableItemStack -> HTUpgradeData.areCompatible(upgrade, stack) } + return isTarget && isCompatible } } diff --git a/src/main/kotlin/hiiragi283/ragium/common/upgrade/RagiumUpgradeGroups.kt b/src/main/kotlin/hiiragi283/ragium/common/upgrade/RagiumUpgradeGroups.kt deleted file mode 100644 index 534b3c26b..000000000 --- a/src/main/kotlin/hiiragi283/ragium/common/upgrade/RagiumUpgradeGroups.kt +++ /dev/null @@ -1,15 +0,0 @@ -package hiiragi283.ragium.common.upgrade - -import hiiragi283.ragium.api.upgrade.HTUpgradeGroup - -object RagiumUpgradeGroups { - // Processor // - - // Device // - - @JvmField - val FLUID_COLLECTOR: HTUpgradeGroup = HTUpgradeGroup.get("fluid_collector") - - @JvmField - val ITEM_COLLECTOR: HTUpgradeGroup = HTUpgradeGroup.get("item_collector") -} diff --git a/src/main/kotlin/hiiragi283/ragium/common/upgrade/RagiumUpgradeKeys.kt b/src/main/kotlin/hiiragi283/ragium/common/upgrade/RagiumUpgradeKeys.kt index 92813217e..5dc7f8963 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/upgrade/RagiumUpgradeKeys.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/upgrade/RagiumUpgradeKeys.kt @@ -6,19 +6,13 @@ object RagiumUpgradeKeys { // Processor // @JvmField - val COMPOSTING: HTUpgradeKey = HTUpgradeKey.get("composting") + val COMPOST_BIO: HTUpgradeKey = HTUpgradeKey.get("compost_bio") @JvmField - val DISABLE_EXTRA: HTUpgradeKey = HTUpgradeKey.get("disable_extra") + val VOID_EXTRA: HTUpgradeKey = HTUpgradeKey.get("void_extra") @JvmField - val EXP_DRAIN: HTUpgradeKey = HTUpgradeKey.get("exp_drain") - - @JvmField - val LONG_BREWING: HTUpgradeKey = HTUpgradeKey.get("long_brewing") - - @JvmField - val STRONG_BREWING: HTUpgradeKey = HTUpgradeKey.get("strong_brewing") + val EXTRACT_EXPERIENCE: HTUpgradeKey = HTUpgradeKey.get("extract_experience") @JvmField val USE_LUBRICANT: HTUpgradeKey = HTUpgradeKey.get("use_lubricant") @@ -26,11 +20,11 @@ object RagiumUpgradeKeys { // Device // @JvmField - val EXP_COLLECTING: HTUpgradeKey = HTUpgradeKey.get("exp_collecting") + val COLLECT_EXP: HTUpgradeKey = HTUpgradeKey.get("collect_exp") @JvmField val FISHING: HTUpgradeKey = HTUpgradeKey.get("fishing") @JvmField - val MOB_CAPTURE: HTUpgradeKey = HTUpgradeKey.get("mob_capture") + val CAPTURE_MOB: HTUpgradeKey = HTUpgradeKey.get("capture_mob") } diff --git a/src/main/kotlin/hiiragi283/ragium/common/variant/HTUpgradeVariant.kt b/src/main/kotlin/hiiragi283/ragium/common/variant/HTUpgradeVariant.kt deleted file mode 100644 index 1b150a80b..000000000 --- a/src/main/kotlin/hiiragi283/ragium/common/variant/HTUpgradeVariant.kt +++ /dev/null @@ -1,18 +0,0 @@ -package hiiragi283.ragium.common.variant - -import hiiragi283.ragium.api.data.lang.HTLanguageType -import hiiragi283.ragium.api.variant.HTVariantKey - -enum class HTUpgradeVariant(private val enPattern: String, private val jaPattern: String) : HTVariantKey { - EFFICIENCY("%s Efficiency", "%s効率"), - ENERGY_CAPACITY("%s Energy Capacity", "%sエネルギー容量"), - SPEED("%s Speed", "%sスピード"), - ; - - override fun translate(type: HTLanguageType, value: String): String = when (type) { - HTLanguageType.EN_US -> "$enPattern Upgrade" - HTLanguageType.JA_JP -> "${jaPattern}アップグレード" - }.replace("%s", value) - - override fun variantName(): String = name.lowercase() -} diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlockTypes.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlockTypes.kt index 1ac44beba..261f2a338 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlockTypes.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlockTypes.kt @@ -6,7 +6,6 @@ import hiiragi283.ragium.api.block.type.HTEntityBlockType import hiiragi283.ragium.common.block.type.HTMachineBlockType import hiiragi283.ragium.common.text.RagiumCommonTranslation import hiiragi283.ragium.common.tier.HTMachineTier -import hiiragi283.ragium.common.upgrade.RagiumUpgradeGroups import hiiragi283.ragium.config.RagiumConfig import net.minecraft.world.level.block.Block @@ -235,7 +234,6 @@ object RagiumBlockTypes { .builder { RagiumBlockEntityTypes.FLUID_COLLECTOR } .addMenu { RagiumMenuTypes.FLUID_COLLECTOR } .addTier(HTMachineTier.BASIC) - .addUpgradeGroup(RagiumUpgradeGroups.FLUID_COLLECTOR) .build(RagiumCommonTranslation.FLUID_COLLECTOR) @JvmField @@ -243,7 +241,6 @@ object RagiumBlockTypes { .builder { RagiumBlockEntityTypes.ITEM_COLLECTOR } .addMenu { RagiumMenuTypes.ITEM_COLLECTOR } .addTier(HTMachineTier.BASIC) - .addUpgradeGroup(RagiumUpgradeGroups.ITEM_COLLECTOR) .build(RagiumCommonTranslation.ITEM_COLLECTOR) // Advanced @@ -300,5 +297,6 @@ object RagiumBlockTypes { val TANK: HTEntityBlockType = HTEntityBlockType .builder { RagiumBlockEntityTypes.TANK } .addMenu { RagiumMenuTypes.TANK } + .addShape(Block.box(2.0, 0.0, 2.0, 14.0, 16.0, 14.0)) .build(RagiumCommonTranslation.TANK) } diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumDataComponents.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumDataComponents.kt index 803dbf52c..d605dc76a 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumDataComponents.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumDataComponents.kt @@ -18,7 +18,6 @@ import hiiragi283.ragium.api.storage.attachments.HTAttachedFluids import hiiragi283.ragium.api.storage.attachments.HTAttachedItems import hiiragi283.ragium.api.text.HTSimpleTranslation import hiiragi283.ragium.api.text.HTTranslation -import hiiragi283.ragium.api.upgrade.HTUpgradeGroup import net.minecraft.core.component.DataComponentType import net.minecraft.core.registries.Registries import net.minecraft.world.damagesource.DamageType @@ -86,9 +85,6 @@ object RagiumDataComponents { @JvmField val MACHINE_UPGRADES: DataComponentType = REGISTER.registerType("machine_upgrades", HTAttachedItems.CODEC) - @JvmField - val UPGRADE_GROUP: DataComponentType = REGISTER.registerType("upgrade_group", HTUpgradeGroup.CODEC) - // Storage // @JvmField diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumItems.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumItems.kt index a6e94665f..a96c8e71a 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumItems.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumItems.kt @@ -7,15 +7,12 @@ import hiiragi283.ragium.api.capability.HTItemCapabilities import hiiragi283.ragium.api.capability.RagiumCapabilities import hiiragi283.ragium.api.collection.ImmutableTable import hiiragi283.ragium.api.collection.buildTable -import hiiragi283.ragium.api.data.map.HTUpgradeData -import hiiragi283.ragium.api.data.map.RagiumDataMapTypes import hiiragi283.ragium.api.item.component.HTIntrinsicEnchantment import hiiragi283.ragium.api.item.component.HTItemSoundEvent import hiiragi283.ragium.api.material.HTMaterialKey import hiiragi283.ragium.api.material.HTMaterialLike import hiiragi283.ragium.api.material.prefix.HTMaterialPrefix import hiiragi283.ragium.api.material.prefix.HTPrefixLike -import hiiragi283.ragium.api.math.fraction import hiiragi283.ragium.api.registry.impl.HTDeferredItem import hiiragi283.ragium.api.registry.impl.HTDeferredItemRegister import hiiragi283.ragium.api.registry.impl.HTSimpleDeferredItem @@ -25,15 +22,12 @@ import hiiragi283.ragium.api.storage.fluid.HTFluidTank import hiiragi283.ragium.api.storage.item.HTItemSlot import hiiragi283.ragium.api.text.HTTranslation import hiiragi283.ragium.api.tier.HTBaseTier -import hiiragi283.ragium.api.upgrade.HTUpgradeGroup import hiiragi283.ragium.api.upgrade.HTUpgradeHelper -import hiiragi283.ragium.api.upgrade.HTUpgradeKey -import hiiragi283.ragium.api.upgrade.HTUpgradeKeys -import hiiragi283.ragium.api.upgrade.HTUpgradeProvider import hiiragi283.ragium.api.variant.HTEquipmentMaterial import hiiragi283.ragium.api.variant.HTToolVariant import hiiragi283.ragium.common.HTChargeType import hiiragi283.ragium.common.HTMoldType +import hiiragi283.ragium.common.HTUpgradeType import hiiragi283.ragium.common.inventory.container.HTPotionBundleContainerMenu import hiiragi283.ragium.common.item.HTIridescentPowderItem import hiiragi283.ragium.common.item.HTLootTicketItem @@ -73,7 +67,6 @@ import hiiragi283.ragium.common.tier.HTComponentTier import hiiragi283.ragium.common.upgrade.HTComponentUpgradeHandler import hiiragi283.ragium.common.variant.HTArmorVariant import hiiragi283.ragium.common.variant.HTHammerToolVariant -import hiiragi283.ragium.common.variant.HTUpgradeVariant import hiiragi283.ragium.common.variant.VanillaToolVariant import hiiragi283.ragium.config.RagiumConfig import net.minecraft.core.component.DataComponentPatch @@ -94,7 +87,6 @@ import net.minecraft.world.level.ItemLike import net.neoforged.bus.api.IEventBus import net.neoforged.neoforge.capabilities.RegisterCapabilitiesEvent import net.neoforged.neoforge.event.ModifyDefaultComponentsEvent -import org.apache.commons.lang3.math.Fraction import java.util.function.UnaryOperator object RagiumItems { @@ -654,78 +646,9 @@ object RagiumItems { REGISTER.registerItemWith("eternal_component", HTBaseTier.CREATIVE, ::HTTierBasedItem) // Machine - @JvmStatic - val MACHINE_UPGRADES: ImmutableTable = buildTable { - fun register(variant: HTUpgradeVariant, tier: HTBaseTier, vararg pairs: Pair) { - this[variant, tier] = REGISTER.registerSimpleItem("${tier.serializedName}_${variant.variantName()}_upgrade") { it.stacksTo(1) } - } - - // Efficiency - register( - HTUpgradeVariant.EFFICIENCY, - HTBaseTier.BASIC, - HTUpgradeKeys.ENERGY_EFFICIENCY to fraction(5, 4), - ) - register( - HTUpgradeVariant.EFFICIENCY, - HTBaseTier.ADVANCED, - HTUpgradeKeys.ENERGY_EFFICIENCY to fraction(3, 2), - ) - // Energy Capacity - register( - HTUpgradeVariant.ENERGY_CAPACITY, - HTBaseTier.BASIC, - HTUpgradeKeys.ENERGY_CAPACITY to fraction(4), - ) - register( - HTUpgradeVariant.ENERGY_CAPACITY, - HTBaseTier.ADVANCED, - HTUpgradeKeys.ENERGY_CAPACITY to fraction(8), - ) - // Speed - register( - HTUpgradeVariant.SPEED, - HTBaseTier.BASIC, - HTUpgradeKeys.ENERGY_EFFICIENCY to fraction(4, 5), - HTUpgradeKeys.ENERGY_GENERATION to fraction(5, 4), - HTUpgradeKeys.SPEED to fraction(5, 4), - ) - register( - HTUpgradeVariant.SPEED, - HTBaseTier.ADVANCED, - HTUpgradeKeys.ENERGY_EFFICIENCY to fraction(2, 3), - HTUpgradeKeys.ENERGY_GENERATION to fraction(3, 2), - HTUpgradeKeys.SPEED to fraction(3, 2), - ) - } - - @JvmStatic - fun getUpgrade(variant: HTUpgradeVariant, tier: HTBaseTier): HTSimpleDeferredItem = MACHINE_UPGRADES[variant, tier] - ?: error("Unknown ${tier.serializedName} ${variant.variantName()} upgrade") - - // Processor - @JvmField - val EFFICIENT_CRUSH_UPGRADE: HTSimpleDeferredItem = registerUpgrade("efficient_crush") - - @JvmField - val PRIMARY_ONLY_UPGRADE: HTSimpleDeferredItem = registerUpgrade("primary_only") - - // Device @JvmField - val EXP_COLLECTOR_UPGRADE: HTSimpleDeferredItem = registerUpgrade("exp_collector") - - @JvmField - val FISHING_UPGRADE: HTSimpleDeferredItem = registerUpgrade("fishing") - - @JvmField - val MOB_CAPTURE_UPGRADE: HTSimpleDeferredItem = registerUpgrade("mob_capture") - - @JvmStatic - private fun registerUpgrade(name: String): HTSimpleDeferredItem = REGISTER.registerSimpleItem("${name}_upgrade") { it.stacksTo(1) } - - @JvmField - val CREATIVE_UPGRADE: HTSimpleDeferredItem = REGISTER.registerItemWith("creative_upgrade", HTBaseTier.CREATIVE, ::HTTierBasedItem) { - it.stacksTo(1) + val MACHINE_UPGRADES: Map = HTUpgradeType.entries.associateWith { type: HTUpgradeType -> + REGISTER.registerSimpleItem("${type.serializedName}_upgrade") } // Event // @@ -782,19 +705,6 @@ object RagiumItems { // Upgrade for (item: Item in BuiltInRegistries.ITEM) { // Data-Based for all items - event.registerItem( - RagiumCapabilities.UPGRADE_ITEM, - { stack: ItemStack, _: Void? -> - val upgradeData: HTUpgradeData = RagiumDataMapTypes.getUpgradeData(stack) ?: return@registerItem null - object : HTUpgradeProvider { - override fun getUpgradeData(key: HTUpgradeKey): Fraction = upgradeData[key] ?: Fraction.ZERO - - override fun getGroup(): HTUpgradeGroup? = upgradeData.groupOrNull - } - }, - item, - ) - event.registerItem( RagiumCapabilities.UPGRADABLE_ITEM, { stack: ItemStack, _: Void? -> diff --git a/src/main/resources/assets/ragium/textures/item/efficient_crush_upgrade.png b/src/main/resources/assets/ragium/textures/item/efficient_crush_upgrade.png deleted file mode 100644 index c32a50f22d50de4774f0ea1217b4fdadaf643bd8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 275 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Cp=voLn`JhnRJ@>kO5EI-BZ>K z>M9nBc_~86UND?F$S}7_I=V&r(UFDA5Ak_SXxUXZcg2)%lcVgFcGt@)`>_079dkh1 zE#S%oMbuHzT(-@R_kP^+wkU4n{MU!08{ax_ z+#a>%^ROneY#p*5kX{^{bLY5p6}{FY?Ny856p!uiP3oyX?>{B`b^ zt%u&F36Ji@Pmp#q`g>r(CdFyb1DPi+nOOO<-L}B^M1qn$&@2D{TT9ev02yo`KQS}p XZ*pC=;zRgnpa_GftDnm{r-UW|Taa_; diff --git a/src/main/resources/assets/ragium/textures/item/energy_capacity.png b/src/main/resources/assets/ragium/textures/item/energy_capacity.png deleted file mode 100644 index 4044b24ee693114a9e24f8f64ed9747bcdbac54d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 184 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`xt=bLAr*7pOg7|eP!M1dcXmo{ zn(F^?;l5KJSmr0RUJMIau)tD?L(wFs^yVGEZ95)oh`29&#gJyXcS`-7S*na{zIi*( zym*$2X?4wnI|o|-ZQ!kH=v;f0@pOUm6Be^CY*(cWPMxt-5t^|0+xahy3=IGO-k3s_Rw8yia-OF~V-BhZjg5-Mo;CIrF(0S*!_ ze9XcOd$2%&Uvhghm;2BDXKqixkqBIZ=NA(=fO@BG2ukkmpI{#rHapu3|I1uoI zZFl*u((kr77P{)&#H*M(@ptS6-lNwn#u%@i1!%`ay#VoCo5ioeN0|>k=7t@o3YPG# zw?MWdZ#B;@KgkrwYX4dXzORwz1uT|HyYd?UHRLnPx&_DW=^fZ1SmQM8^3M3BR2L>} z0DFJt<8 diff --git a/src/main/resources/assets/ragium/textures/item/fishing_upgrade.png b/src/main/resources/assets/ragium/textures/item/fishing_upgrade.png deleted file mode 100644 index 731c6a34ecd127c0b4c75625f119cad8cc038bc7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 389 zcmV;00eb$4P)m2BqWy-*$Y!^H(uAfPIlv25uSoX=sv*%$>`~d&}|Nq;I j2~+?800v1!K~w_(kjR$3234=000000NkvXXu0mjf?lYUtP)g9P4nP8Z+fK7x z*aqkmJ3G_9H=o@VR1*Trx=By^1Jjrs!H#UuPY4sOfm33Da8U@1=VLv|5ZPv}m z+pvfWvfzAr&^IUvATxkW?)*rt#X$K{x>vFMd(g26ploDznULB-FeO8<*B2z0yNnQ9 zTELGW>w;WOWeX;3a|o}NQ(#1&TCh}662MUvguG`!&BVVe8>Rln&k5!X_?&ezz%zje zc~aej$`$}jyVMpIPrm) k3LfbI000I_L_t&o03wfUHc-OhQ~&?~07*qoM6N<$f(OQhJOBUy diff --git a/src/main/resources/assets/ragium/textures/item/mob_capture_upgrade.png b/src/main/resources/assets/ragium/textures/item/mob_capture_upgrade.png deleted file mode 100644 index d7ed72468043646b8da768b6789b41b11c022afc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 346 zcmV-g0j2(lP)209G2o=t=h_A2glOY9vA<)ymAl|w+5CG*J_6Dn_k{Z%!&VQfJZVorhC zST?_oPzSn0q@Gb=GCg=ZAiHkGt<8 diff --git a/src/main/resources/assets/ragium/textures/item/primary_only_upgrade.png b/src/main/resources/assets/ragium/textures/item/primary_only_upgrade.png deleted file mode 100644 index 81459897c998926f48ac55907a2a0e07be5d846e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 292 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`H$7b(Ln`Jh3EItj$UtO|i(CU6 ztCq@w#fO~(HZ$=u8?ZBPVB(bx(o!>!l@(d(w5-8m+S}{Gw{^3ORQ+k;P@ z8yw@VPl#4Zob^GluBl=Y%dwQRx{(DbvllPCnwNG|J@MSi^ReBle{+S}x$x+y{bS1v z@0r~-{p{xj9sY05-C_%hnSJ56)s8N))P*dD8#Qvc^P2dRbSkso^qw&}TTYSCM$>}Z>=!Lg>}2FGet-Dy zmfgs%+i8DD)sbiG^_)Pz^I~$nFIRS^oqeBgy}NSdv=uS|{qL_ScKwa);BDD@^4NpS zXO~h0C9f=FP8L)+dGN@u+s72L`C3-}(B+XzkvL+&>{cWhIhR*)=i#EA{|tD6uKfRh j)2(%!Kn5Ggxy%ewp`M2iq=$C^MHoC?{an^LB{Ts5hZ$Y* diff --git a/src/main/resources/assets/ragium/textures/item/upgrade/bio_composting.png b/src/main/resources/assets/ragium/textures/item/upgrade/bio_composting.png new file mode 100644 index 0000000000000000000000000000000000000000..788837527ef61b5fefe4b7c526f24d40ffe77f98 GIT binary patch literal 241 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`%RF5iLn`JRnQX|_Y#`AZpT*V6 z_x4iWT&u4Q=SgTjZ{JW8T4&Cw;|bSsYz|w#K_8^|*Y{)o0l^efos>LqS5* zX4ya3aXZ{f!6#`Uufp7W;i@uw{z>E}F!i#z+>>hezGtz0Vd=M@vsewztYeB?y^w8X zyoui;vDwd=kA*8#R8L#``kv#>1>BP_zkK?)&6D?r?DzIFtTHQ9e@O@1Pij~?O@5ga o1H=FSS=VrZ zMp+4mHGlqpH&Fa2F+pR2lbXr}S(!B|7q(bBC-EQOn-{vwN#b~tRrO_tbKhqtW`@1y z{rYgn{W@We$64=Q?^?GaGpas&-rK9!=gj)&&-YMBvZw9Dxw$7ksrXG$e*L#z?Zu?E zv6HH8A2C{P`WJMuK}K?G9s68nC&}$`jlWMR&JkirVzTi~T5ezwWIy?hM&Lzn-M{aO s4BEJU0$uz6e>KZKcOZie3RKW}q50!0`+UHx3vIVCg!05NZ3z5oCK literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ragium/textures/item/efficiency.png b/src/main/resources/assets/ragium/textures/item/upgrade/efficiency.png similarity index 100% rename from src/main/resources/assets/ragium/textures/item/efficiency.png rename to src/main/resources/assets/ragium/textures/item/upgrade/efficiency.png diff --git a/src/main/resources/assets/ragium/textures/item/upgrade/efficient_crushing.png b/src/main/resources/assets/ragium/textures/item/upgrade/efficient_crushing.png new file mode 100644 index 0000000000000000000000000000000000000000..9671465688132458d8c52fd6838a091a6824bf2e GIT binary patch literal 203 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`4W2HJAr*6uOg_ljV8G)V{POO+ z5~cJPMS2Q-4~|Oiv2eD%$|=ICXu6E0`A1&nsq_C^A_9^ePnI)&EvxXYNE4vE;XEPj1Px8st)&zlS%0uy(r|B$x1pkT;rp~3O<-%K;0 mz5oB;GdIZxGT1;4U}jh&Z!j&PUsDDs!rL z!c}Dpu66g0-_5R&ligLpTd2$NmBmZeJ6A_^3I8UQKj+(3WF{84eA?T1qWiLXKzmvo z^Wi<;{R+eT6ohZ+WHrZpeLTk`!?kpJViS+~f}oU&Mo$Bit;N$En6kLf>%L!U#Mnv zRr4;n1^YaG&tI6g;CP0pSZ9;5f+d68=GPp2%n>{(ES!yVTQ{iKY@hwJ{=Z*ZOvIx@ zlWKYOmKSe#3o+YzK}x_;WRsJo>Yn@a{SEZ4ESxgyuBE{QRl!FW%%^@}Q`u*GZ^ym) zZoKbP0l+XkKfcREt literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ragium/textures/item/upgrade/extra_voiding.png b/src/main/resources/assets/ragium/textures/item/upgrade/extra_voiding.png new file mode 100644 index 0000000000000000000000000000000000000000..1da563c46f1549a56ce911f8a29f12f6dfceee60 GIT binary patch literal 194 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`<(@8%Ar*7ZOtR){P!MoocUm~r z?A8m$HDCUPKjctTiOO7>X3gRt};=1$p@4|U5FXnc%?poM> zP3rchM_$i3HBx#UIjqzpLmJp`FiGxO5Fe7uJTrayR%tb%yvONG`4;c29*PAvocwQU o0krx5e=(JaDjt1AD;&5}v)J32GDR$74d zA!F@LbN>4^(iJn(zMW!tXwy4YGP9s{EiXe})WW+yQVKEQonJED*p_WDV|cJgrZ+*A z;o-j1DiXad5mOo7%Q3`m|C#Bg74-GL;as4T{{N5f`j-u4uz}ph%uv;BAJ^U6X#o^r N@O1TaS?83{1OP{~OqT!v literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ragium/textures/item/upgrade/fluid_capacity.png b/src/main/resources/assets/ragium/textures/item/upgrade/fluid_capacity.png new file mode 100644 index 0000000000000000000000000000000000000000..fda7799870945252db42a6e6145f009d012df3d4 GIT binary patch literal 190 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`#hxyXAr*73Oy0=bpdjG-U-e6r zB}1`AWAhEm-nq>djnX%Sv$W?rI4|N2^s^N@q^XqykgQ_1zJ0tl>_XYQkXo@n0tKS$S;AeHvEI?0u>ZqXMZuOO|9#kjw*LRm iwsm$MkiiDBo|(arN2x2;K=A@lgu&C*&t;ucLK6T^`aiJ% literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ragium/textures/item/advanced_upgrade_base.png b/src/main/resources/assets/ragium/textures/item/upgrade/generator_base.png similarity index 100% rename from src/main/resources/assets/ragium/textures/item/advanced_upgrade_base.png rename to src/main/resources/assets/ragium/textures/item/upgrade/generator_base.png diff --git a/src/main/resources/assets/ragium/textures/item/upgrade/high_speed.png b/src/main/resources/assets/ragium/textures/item/upgrade/high_speed.png new file mode 100644 index 0000000000000000000000000000000000000000..605a467b1b411a79772b4ae0ca27cb6307c682c1 GIT binary patch literal 211 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`9iA?ZAr*6uOxnxapdir7@1#G~ z`i4bwuknUC+!F2^3fZL7FL0?}a9|2N%-ALncbM_}z9)4ODqW6?J~6%OihpI}=ea@V zmGOJ0LpMCQyVx>5UwFME`ylti6_xYe%;tA;ekRaT!>AVaRa#fO;l_@=_OpM@YWjKL zRjKddKT4M3Py9Jwv>jbl!=DFq%K!gA5|2IrGT1kWFsrffAss8r4YS|HvvchQb|jpRQh)nrOIm_lcT<+i#z8NlZKZVcz@Z1V+x( z{8hSVrfdI+%deTwUy|2oA@9F*^Eur$+h;%Od1B=@DaU!!`t-Lz@qLn`JR3Es`wU?AXo#7khU z&YGjFG6z}L$Q)ca$JKqq)(xU8Yem=t{5&ic9XrBd$MOD?)4f`coFtCf5|5&r4}3PC z>V4TLSS??A zTcW#RO~mCaM*ffMSiQp-c?89-xdiN~{5(O!@W}u9nd}S<|NlqSd6WZP$OdvDGsCp= Vj$Hv;1q6X244$rjF6*2UngEn!P)z^; literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ragium/textures/item/basic_upgrade_base.png b/src/main/resources/assets/ragium/textures/item/upgrade/processor_base.png similarity index 100% rename from src/main/resources/assets/ragium/textures/item/basic_upgrade_base.png rename to src/main/resources/assets/ragium/textures/item/upgrade/processor_base.png diff --git a/src/main/resources/assets/ragium/textures/item/upgrade/speed.png b/src/main/resources/assets/ragium/textures/item/upgrade/speed.png new file mode 100644 index 0000000000000000000000000000000000000000..4cbc571c4680a6147b5f401db5a2e1784b24be5e GIT binary patch literal 212 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`ot`d^Ar*7ZOxn%aU?Ad}zo>T2 z90!3nG6(NXT@!QC^oU;pqocNQgNC3`$Qkyg7rCD%?WulH>r|oDviu(F5uIB{EI+rt zC|Ysy&PN_of6)_?3OvCLn^&zHq5 zQ?M`jYUlg-c=wdea(YT1u6(z>!N|by|G!Jwg$qDOv4I@L%#gm!Q0iM`^*NvjgQu&X J%Q~loCIDXZRAK-C literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ragium/textures/item/upgrade/storage_base.png b/src/main/resources/assets/ragium/textures/item/upgrade/storage_base.png new file mode 100644 index 0000000000000000000000000000000000000000..26666d5f5a13163deed4973a98065bd4414a890b GIT binary patch literal 256 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`TRmMILn`JhnS7A9*?`BDw@Cek z+};fida{k4Rt~ortvuadw6g9f;nMRt!1zhkr$^LL!Qbl<|F3Prsy;If)XEo5^t-?l zvY{j0wY_5dD&~W>uN1W8x8L9J>eT!NGm~;==*~%Idn&nk_s_!K(g{I7xBokSk+1B` z+57$Tl%hRW)~pYo@9pI{yLQd_1p7wAbPa^@e5OWnd5;Jf7rL%3vqqGy8f zX}P7L8J({CcUd~}2?O2z|G!tj?tMT88^{C94BRu^gI3tRu?31Sc)I$ztaD0e0stGI BVQ2sV literal 0 HcmV?d00001 From 5502cedc810e21b753cb39c0851dabff2e3cd32d Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Sun, 14 Dec 2025 23:05:53 +0900 Subject: [PATCH 38/49] build: updated dependency Replication --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index aeafa5211..b54027175 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -29,7 +29,7 @@ kc = "1.1.1-neoforge+mc1.21.1" mek = "1.21.1-10.7.17.83" oritech = "0.19.6" pneuma = "8.2.13+mc1.21.1" -replica = "1.21-1.2.3" +replica = "1.21-1.2.6" arch = "13.0.8" #ars = "5.10.5.1219" From 1dfe9255dda10fc8309c19c040f64c30e074bf12 Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Sun, 14 Dec 2025 23:27:18 +0900 Subject: [PATCH 39/49] refactor: refine around Creative Fluid Tank --- .../hiiragi283/ragium/api/RagiumConst.kt | 2 - .../hiiragi283/ragium/api/math/Fractions.kt | 14 ++++ .../api/recipe/ingredient/HTItemIngredient.kt | 3 +- .../api/serialization/value/HTValueInput.kt | 10 +-- .../ragium/api/storage/HTAmountView.kt | 20 ++---- .../ragium/api/storage/HTStackView.kt | 20 ++---- .../hiiragi283/ragium/api/text/HTTextUtil.kt | 9 ++- .../client/gui/component/HTEnergyWidget.kt | 11 ++- .../client/gui/component/HTFakeSlotWidget.kt | 1 + .../client/gui/component/HTFluidSlotWidget.kt | 23 +++++++ .../client/gui/component/HTFluidTankWidget.kt | 69 +++---------------- .../client/gui/component/HTProgressWidget.kt | 1 + .../component/{ => base}/HTAbstractWidget.kt | 2 +- .../gui/component/base/HTBasicFluidWidget.kt | 35 ++++++++++ .../component/{ => base}/HTSpriteWidget.kt | 13 ++-- .../screen/HTBlockEntityContainerScreen.kt | 27 ++++++-- .../gui/screen/HTFluidCollectorScreen.kt | 7 +- .../ragium/client/gui/screen/HTTankScreen.kt | 28 ++++++-- .../client/gui/screen/HTTelepadScreen.kt | 7 +- .../generator/HTCombustionGeneratorScreen.kt | 10 +-- .../generator/HTMagmaticGeneratorScreen.kt | 7 +- .../gui/screen/processor/HTCrusherScreen.kt | 4 +- .../gui/screen/processor/HTMixerScreen.kt | 10 +-- .../screen/processor/HTMobCrusherScreen.kt | 4 +- .../gui/screen/processor/HTRefineryScreen.kt | 10 +-- .../gui/screen/processor/HTSimulatorScreen.kt | 4 +- .../processor/HTSingleFluidProcessorScreen.kt | 13 ++-- .../renderer/block/HTRefineryRenderer.kt | 2 +- .../block/HTSingleFluidMachineRenderer.kt | 2 +- .../client/renderer/block/HTTankRenderer.kt | 2 +- .../block/entity/ExtendedBlockEntity.kt | 7 +- .../common/block/entity/HTBlockEntity.kt | 4 +- .../block/entity/HTConfigurableBlockEntity.kt | 5 +- .../entity/HTImitationSpawnerBlockEntity.kt | 6 +- .../block/entity/HTMachineBlockEntity.kt | 19 +++-- .../entity/device/HTDeviceBlockEntity.kt | 10 +-- .../device/HTFluidCollectorBlockEntity.kt | 4 ++ .../entity/device/HTTelepadBlockentity.kt | 2 +- .../entity/processor/HTMelterBlockEntity.kt | 2 +- .../processor/HTProcessorBlockEntity.kt | 11 +-- .../entity/processor/HTRefineryBlockEntity.kt | 4 +- .../entity/storage/HTCrateBlockEntity.kt | 28 +++++++- .../block/entity/storage/HTTankBlockEntity.kt | 30 ++++++-- .../ragium/common/item/base/HTEnergyItem.kt | 4 +- .../storage/fluid/tank/HTBasicFluidTank.kt | 2 +- .../storage/item/slot/HTBasicItemSlot.kt | 2 +- .../ragium/util/HTStackSlotHelper.kt | 2 +- 47 files changed, 287 insertions(+), 225 deletions(-) create mode 100644 src/main/kotlin/hiiragi283/ragium/client/gui/component/HTFluidSlotWidget.kt rename src/main/kotlin/hiiragi283/ragium/client/gui/component/{ => base}/HTAbstractWidget.kt (93%) create mode 100644 src/main/kotlin/hiiragi283/ragium/client/gui/component/base/HTBasicFluidWidget.kt rename src/main/kotlin/hiiragi283/ragium/client/gui/component/{ => base}/HTSpriteWidget.kt (88%) diff --git a/src/api/kotlin/hiiragi283/ragium/api/RagiumConst.kt b/src/api/kotlin/hiiragi283/ragium/api/RagiumConst.kt index 7ba882e7d..b917fd929 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/RagiumConst.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/RagiumConst.kt @@ -66,7 +66,6 @@ object RagiumConst { // Serialization // const val ACCESS_CONFIG = "access_config" - const val ENCHANTMENT = "enchantment" const val OWNER = "owner" const val ITEM = "item" @@ -85,7 +84,6 @@ object RagiumConst { const val TAG = "tag" const val COUNT = "count" const val COMPONENTS = "components" - const val CHANCE = "chance" const val PREVENT_ITEM_MAGNET = "PreventRemoteMovement" diff --git a/src/api/kotlin/hiiragi283/ragium/api/math/Fractions.kt b/src/api/kotlin/hiiragi283/ragium/api/math/Fractions.kt index 483835864..9613497b3 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/math/Fractions.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/math/Fractions.kt @@ -1,6 +1,7 @@ package hiiragi283.ragium.api.math import org.apache.commons.lang3.math.Fraction +import kotlin.math.min fun fraction(value: Double): Fraction = Fraction.getFraction(value) @@ -17,6 +18,12 @@ operator fun Fraction.div(other: Fraction): Fraction = this.divideBy(other) // Int fun fraction(numerator: Int, denominator: Int): Fraction = Fraction.getFraction(numerator, denominator) +fun fixedFraction(amount: Int, capacity: Int): Fraction { + if (capacity <= 0) return Fraction.ZERO + val fixedAmount: Int = min(amount, capacity) + return fraction(fixedAmount, capacity) +} + fun fraction(numerator: Int): Fraction = fraction(numerator, 1) fun Int.toFraction(denominator: Int): Fraction = fraction(this, denominator) @@ -37,6 +44,13 @@ operator fun Int.times(other: Fraction): Fraction = this.toFraction(1).multiplyB operator fun Int.div(other: Fraction): Fraction = this.toFraction(1).divideBy(other) +// Long +fun fixedFraction(amount: Long, capacity: Long): Fraction { + if (capacity <= 0) return Fraction.ZERO + val fixedAmount: Long = min(amount, capacity) + return fraction(fixedAmount / capacity.toDouble()) +} + // Float fun fraction(value: Float): Fraction = fraction(value.toDouble()) 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 2b4c1b0f4..d00ccf642 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/recipe/ingredient/HTItemIngredient.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/recipe/ingredient/HTItemIngredient.kt @@ -64,9 +64,8 @@ class HTItemIngredient(private val ingredient: Ingredient, private val count: In if (custom != null) { return Either.right( custom.items - .map { it.copyWithCount(count) } .toList() - .mapNotNull(ItemStack::toImmutable), + .let(::toImmutableList), ) } else { val values: Array = ingredient.values diff --git a/src/api/kotlin/hiiragi283/ragium/api/serialization/value/HTValueInput.kt b/src/api/kotlin/hiiragi283/ragium/api/serialization/value/HTValueInput.kt index 0cfc15dab..28b66e093 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/serialization/value/HTValueInput.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/serialization/value/HTValueInput.kt @@ -2,8 +2,6 @@ package hiiragi283.ragium.api.serialization.value import com.mojang.serialization.Codec import hiiragi283.ragium.api.serialization.codec.BiCodec -import java.util.Optional -import kotlin.jvm.optionals.getOrNull /** * NBTやJSONの読み取り専用のラッパー @@ -27,9 +25,13 @@ interface HTValueInput { */ fun read(key: String, codec: BiCodec<*, T>): T? = read(key, codec.codec) - fun readOptional(key: String, codec: Codec>): T? = read(key, codec)?.getOrNull() + fun readAndSet(key: String, codec: Codec, action: (T?) -> Unit) { + read(key, codec).let(action) + } - fun readOptional(key: String, codec: BiCodec<*, Optional>): T? = read(key, codec)?.getOrNull() + fun readAndSet(key: String, codec: BiCodec<*, T>, action: (T?) -> Unit) { + read(key, codec).let(action) + } // Compound diff --git a/src/api/kotlin/hiiragi283/ragium/api/storage/HTAmountView.kt b/src/api/kotlin/hiiragi283/ragium/api/storage/HTAmountView.kt index 24e2c760a..abdde6877 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/storage/HTAmountView.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/storage/HTAmountView.kt @@ -1,6 +1,8 @@ package hiiragi283.ragium.api.storage import com.google.common.primitives.Ints +import hiiragi283.ragium.api.math.fixedFraction +import org.apache.commons.lang3.math.Fraction import kotlin.math.max /** @@ -24,15 +26,9 @@ sealed interface HTAmountView where N : Number, N : Comparable { /** * このビューの占有率を返します。 - * @return [Double]値での占有率 + * @return [Fraction]値での占有率 */ - fun getStoredLevelAsDouble(): Double - - /** - * このビューの占有率を返します。 - * @return [Float]値での占有率 - */ - fun getStoredLevelAsFloat(): Float + fun getStoredLevel(): Fraction /** * [Int]値を扱う[HTAmountView]の拡張インターフェース @@ -40,9 +36,7 @@ sealed interface HTAmountView where N : Number, N : Comparable { interface IntSized : HTAmountView { override fun getNeeded(): Int = max(0, getCapacity() - getAmount()) - override fun getStoredLevelAsDouble(): Double = getAmount() / getCapacity().toDouble() - - override fun getStoredLevelAsFloat(): Float = getAmount() / getCapacity().toFloat() + override fun getStoredLevel(): Fraction = fixedFraction(getAmount(), getCapacity()) } /** @@ -55,8 +49,6 @@ sealed interface HTAmountView where N : Number, N : Comparable { override fun getNeeded(): Long = max(0, getCapacity() - getAmount()) - override fun getStoredLevelAsDouble(): Double = getAmount() / getCapacity().toDouble() - - override fun getStoredLevelAsFloat(): Float = getAmount() / getCapacity().toFloat() + override fun getStoredLevel(): Fraction = fixedFraction(getAmount(), getCapacity()) } } diff --git a/src/api/kotlin/hiiragi283/ragium/api/storage/HTStackView.kt b/src/api/kotlin/hiiragi283/ragium/api/storage/HTStackView.kt index 579f59ecd..4eb9f9c2a 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/storage/HTStackView.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/storage/HTStackView.kt @@ -1,6 +1,8 @@ package hiiragi283.ragium.api.storage +import hiiragi283.ragium.api.math.fixedFraction import hiiragi283.ragium.api.stack.ImmutableStack +import org.apache.commons.lang3.math.Fraction import kotlin.math.max /** @@ -27,23 +29,9 @@ interface HTStackView> : HTAmountView.IntSized /** * このスロットの占有率を返します。 - * @return [Double]値での占有率 + * @return [Fraction]値での占有率 */ - fun getStoredLevelAsDouble(stack: STACK?): Double { - val capacity: Int = getCapacity(stack) - if (capacity <= 0) return 0.0 - return getAmount() / capacity.toDouble() - } - - /** - * このスロットの占有率を返します。 - * @return [Float]値での占有率 - */ - fun getStoredLevelAsFloat(stack: STACK?): Float { - val capacity: Int = getCapacity(stack) - if (capacity <= 0) return 0f - return getAmount() / capacity.toFloat() - } + fun getStoredLevel(stack: STACK?): Fraction = fixedFraction(getAmount(), getCapacity(stack)) override fun getAmount(): Int = getStack()?.amount() ?: 0 diff --git a/src/api/kotlin/hiiragi283/ragium/api/text/HTTextUtil.kt b/src/api/kotlin/hiiragi283/ragium/api/text/HTTextUtil.kt index 9ceee5408..a8b3a3965 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/text/HTTextUtil.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/text/HTTextUtil.kt @@ -70,7 +70,7 @@ object HTTextUtil { stack: ImmutableFluidStack?, consumer: Consumer, flag: TooltipFlag, - inGui: Boolean, + isCreative: Boolean, ) { // Empty name if stack is empty if (stack == null) { @@ -78,8 +78,11 @@ object HTTextUtil { return } // Fluid Name and Amount - consumer.accept(RagiumTranslation.STORED_MB.translate(stack, stack.amount())) - if (!inGui) return + if (isCreative) { + RagiumTranslation.STORED.translate(stack, RagiumTranslation.INFINITE) + } else { + RagiumTranslation.STORED_MB.translate(stack, stack.amount()) + }.let(consumer::accept) // Fluid id if advanced if (flag.isAdvanced) { consumer.accept(literalText(stack.holder().registeredName).withStyle(ChatFormatting.DARK_GRAY)) diff --git a/src/main/kotlin/hiiragi283/ragium/client/gui/component/HTEnergyWidget.kt b/src/main/kotlin/hiiragi283/ragium/client/gui/component/HTEnergyWidget.kt index a546b76b9..ca83d6446 100644 --- a/src/main/kotlin/hiiragi283/ragium/client/gui/component/HTEnergyWidget.kt +++ b/src/main/kotlin/hiiragi283/ragium/client/gui/component/HTEnergyWidget.kt @@ -4,6 +4,7 @@ import hiiragi283.ragium.api.RagiumAPI import hiiragi283.ragium.api.storage.HTAmountView import hiiragi283.ragium.api.storage.energy.HTEnergyBattery import hiiragi283.ragium.api.text.HTTextUtil +import hiiragi283.ragium.client.gui.component.base.HTSpriteWidget import net.minecraft.client.Minecraft import net.minecraft.client.gui.GuiGraphics import net.minecraft.client.renderer.texture.TextureAtlasSprite @@ -11,6 +12,8 @@ import net.minecraft.network.chat.Component import net.minecraft.world.item.TooltipFlag import net.neoforged.api.distmarker.Dist import net.neoforged.api.distmarker.OnlyIn +import org.apache.commons.lang3.math.Fraction +import java.util.function.Consumer import java.util.function.IntConsumer @OnlyIn(Dist.CLIENT) @@ -41,18 +44,14 @@ class HTEnergyWidget( override fun getColor(): Int = -1 - override fun getLevel(): Float = battery.getStoredLevelAsFloat() + override fun getLevel(): Fraction = battery.getStoredLevel() - override fun collectTooltips(consumer: (Component) -> Unit, flag: TooltipFlag) { + override fun collectTooltips(consumer: Consumer, flag: TooltipFlag) { HTTextUtil.addEnergyTooltip(battery, consumer) } // HTEnergyWidget // - fun setAmount(amount: Int) { - amountSetter.accept(amount) - } - override fun getAmount(): Int = battery.getAmount() override fun getCapacity(): Int = battery.getCapacity() diff --git a/src/main/kotlin/hiiragi283/ragium/client/gui/component/HTFakeSlotWidget.kt b/src/main/kotlin/hiiragi283/ragium/client/gui/component/HTFakeSlotWidget.kt index 5e1f035a2..937ba1543 100644 --- a/src/main/kotlin/hiiragi283/ragium/client/gui/component/HTFakeSlotWidget.kt +++ b/src/main/kotlin/hiiragi283/ragium/client/gui/component/HTFakeSlotWidget.kt @@ -1,5 +1,6 @@ package hiiragi283.ragium.client.gui.component +import hiiragi283.ragium.client.gui.component.base.HTAbstractWidget import net.minecraft.client.Minecraft import net.minecraft.client.gui.Font import net.minecraft.client.gui.GuiGraphics diff --git a/src/main/kotlin/hiiragi283/ragium/client/gui/component/HTFluidSlotWidget.kt b/src/main/kotlin/hiiragi283/ragium/client/gui/component/HTFluidSlotWidget.kt new file mode 100644 index 000000000..d1165fe50 --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/client/gui/component/HTFluidSlotWidget.kt @@ -0,0 +1,23 @@ +package hiiragi283.ragium.client.gui.component + +import hiiragi283.ragium.api.RagiumAPI +import hiiragi283.ragium.api.gui.component.HTBoundsRenderer +import hiiragi283.ragium.api.storage.fluid.HTFluidView +import hiiragi283.ragium.client.gui.component.base.HTBasicFluidWidget +import net.minecraft.client.gui.GuiGraphics +import net.neoforged.api.distmarker.Dist +import net.neoforged.api.distmarker.OnlyIn + +@OnlyIn(Dist.CLIENT) +class HTFluidSlotWidget(private val view: HTFluidView, x: Int, y: Int) : + HTBasicFluidWidget(x, y, 16, 16), + HTFluidView by view { + companion object { + @JvmStatic + private val BACKGROUND: HTBoundsRenderer = HTBoundsRenderer.fromSprite(RagiumAPI.id("textures", "gui", "fluid_slot.png")) + } + + override fun renderBackground(guiGraphics: GuiGraphics) { + BACKGROUND.render(guiGraphics, getBounds()) + } +} diff --git a/src/main/kotlin/hiiragi283/ragium/client/gui/component/HTFluidTankWidget.kt b/src/main/kotlin/hiiragi283/ragium/client/gui/component/HTFluidTankWidget.kt index 930931fb3..92d85e844 100644 --- a/src/main/kotlin/hiiragi283/ragium/client/gui/component/HTFluidTankWidget.kt +++ b/src/main/kotlin/hiiragi283/ragium/client/gui/component/HTFluidTankWidget.kt @@ -1,75 +1,28 @@ package hiiragi283.ragium.client.gui.component import hiiragi283.ragium.api.RagiumAPI -import hiiragi283.ragium.api.RagiumConst import hiiragi283.ragium.api.gui.component.HTBoundsRenderer -import hiiragi283.ragium.api.gui.component.HTFluidWidget -import hiiragi283.ragium.api.stack.ImmutableFluidStack -import hiiragi283.ragium.api.stack.getStillTexture -import hiiragi283.ragium.api.stack.getTintColor import hiiragi283.ragium.api.storage.fluid.HTFluidView -import hiiragi283.ragium.api.text.HTTextUtil +import hiiragi283.ragium.client.gui.component.base.HTBasicFluidWidget import net.minecraft.client.gui.GuiGraphics -import net.minecraft.client.renderer.texture.TextureAtlasSprite -import net.minecraft.network.chat.Component -import net.minecraft.world.item.TooltipFlag import net.neoforged.api.distmarker.Dist import net.neoforged.api.distmarker.OnlyIn @OnlyIn(Dist.CLIENT) -class HTFluidTankWidget( - private val levelGetter: (HTFluidView) -> Float, - private val background: HTBoundsRenderer, - private val view: HTFluidView, - x: Int, - y: Int, - width: Int, - height: Int, -) : HTSpriteWidget(x, y, width, height, Component.empty()), - HTFluidWidget { +open class HTFluidTankWidget(open val view: HTFluidView, x: Int, y: Int) : + HTBasicFluidWidget( + x, + y, + 16, + 18 * 3 - 2, + ), + HTFluidView by view { companion object { @JvmStatic - fun createSlot(view: HTFluidView, x: Int, y: Int): HTFluidTankWidget = HTFluidTankWidget( - { 1f }, - HTBoundsRenderer.fromSprite(RagiumAPI.id("textures", "gui", "fluid_slot.png")), - view, - x, - y, - 16, - 16, - ) - - @JvmStatic - fun createTank(view: HTFluidView, x: Int, y: Int): HTFluidTankWidget = HTFluidTankWidget( - HTFluidView::getStoredLevelAsFloat, - HTBoundsRenderer.fromSprite(RagiumAPI.id("textures", "gui", "tank.png")), - view, - x, - y, - 16, - 18 * 3 - 2, - ) - } - - override fun shouldRender(): Boolean = getStack() != null - - override fun getSprite(): TextureAtlasSprite? = getSprite(getStack()?.getStillTexture(), RagiumConst.BLOCK_ATLAS) - - override fun getColor(): Int = getStack()?.getTintColor() ?: -1 - - override fun getLevel(): Float = levelGetter(view) - - override fun collectTooltips(consumer: (Component) -> Unit, flag: TooltipFlag) { - HTTextUtil.addFluidTooltip(getStack(), consumer, flag, true) + private val BACKGROUND: HTBoundsRenderer = HTBoundsRenderer.fromSprite(RagiumAPI.id("textures", "gui", "tank.png")) } override fun renderBackground(guiGraphics: GuiGraphics) { - background.render(guiGraphics, getBounds()) + BACKGROUND.render(guiGraphics, getBounds()) } - - // HTFluidWidget // - - override fun getStack(): ImmutableFluidStack? = view.getStack() - - override fun getCapacity(stack: ImmutableFluidStack?): Int = view.getCapacity(stack) } diff --git a/src/main/kotlin/hiiragi283/ragium/client/gui/component/HTProgressWidget.kt b/src/main/kotlin/hiiragi283/ragium/client/gui/component/HTProgressWidget.kt index 4b22225b4..af70bb6fb 100644 --- a/src/main/kotlin/hiiragi283/ragium/client/gui/component/HTProgressWidget.kt +++ b/src/main/kotlin/hiiragi283/ragium/client/gui/component/HTProgressWidget.kt @@ -3,6 +3,7 @@ package hiiragi283.ragium.client.gui.component import hiiragi283.ragium.api.RagiumAPI import hiiragi283.ragium.api.math.times import hiiragi283.ragium.api.registry.vanillaId +import hiiragi283.ragium.client.gui.component.base.HTAbstractWidget import net.minecraft.client.gui.GuiGraphics import net.minecraft.network.chat.Component import net.minecraft.resources.ResourceLocation diff --git a/src/main/kotlin/hiiragi283/ragium/client/gui/component/HTAbstractWidget.kt b/src/main/kotlin/hiiragi283/ragium/client/gui/component/base/HTAbstractWidget.kt similarity index 93% rename from src/main/kotlin/hiiragi283/ragium/client/gui/component/HTAbstractWidget.kt rename to src/main/kotlin/hiiragi283/ragium/client/gui/component/base/HTAbstractWidget.kt index fcd4aaf72..1fa81d434 100644 --- a/src/main/kotlin/hiiragi283/ragium/client/gui/component/HTAbstractWidget.kt +++ b/src/main/kotlin/hiiragi283/ragium/client/gui/component/base/HTAbstractWidget.kt @@ -1,4 +1,4 @@ -package hiiragi283.ragium.client.gui.component +package hiiragi283.ragium.client.gui.component.base import hiiragi283.ragium.api.gui.component.HTWidget import hiiragi283.ragium.api.math.HTBounds diff --git a/src/main/kotlin/hiiragi283/ragium/client/gui/component/base/HTBasicFluidWidget.kt b/src/main/kotlin/hiiragi283/ragium/client/gui/component/base/HTBasicFluidWidget.kt new file mode 100644 index 000000000..43166114b --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/client/gui/component/base/HTBasicFluidWidget.kt @@ -0,0 +1,35 @@ +package hiiragi283.ragium.client.gui.component.base + +import hiiragi283.ragium.api.RagiumConst +import hiiragi283.ragium.api.gui.component.HTFluidWidget +import hiiragi283.ragium.api.stack.getStillTexture +import hiiragi283.ragium.api.stack.getTintColor +import hiiragi283.ragium.api.text.HTTextUtil +import net.minecraft.client.renderer.texture.TextureAtlasSprite +import net.minecraft.network.chat.Component +import net.minecraft.world.item.TooltipFlag +import net.neoforged.api.distmarker.Dist +import net.neoforged.api.distmarker.OnlyIn +import org.apache.commons.lang3.math.Fraction +import java.util.function.Consumer + +@OnlyIn(Dist.CLIENT) +abstract class HTBasicFluidWidget( + x: Int, + y: Int, + width: Int, + height: Int, +) : HTSpriteWidget(x, y, width, height, Component.empty()), + HTFluidWidget { + final override fun shouldRender(): Boolean = getStack() != null + + final override fun getSprite(): TextureAtlasSprite? = getSprite(getStack()?.getStillTexture(), RagiumConst.BLOCK_ATLAS) + + final override fun getColor(): Int = getStack()?.getTintColor() ?: -1 + + override fun getLevel(): Fraction = getStoredLevel() + + override fun collectTooltips(consumer: Consumer, flag: TooltipFlag) { + HTTextUtil.addFluidTooltip(getStack(), consumer, flag, false) + } +} diff --git a/src/main/kotlin/hiiragi283/ragium/client/gui/component/HTSpriteWidget.kt b/src/main/kotlin/hiiragi283/ragium/client/gui/component/base/HTSpriteWidget.kt similarity index 88% rename from src/main/kotlin/hiiragi283/ragium/client/gui/component/HTSpriteWidget.kt rename to src/main/kotlin/hiiragi283/ragium/client/gui/component/base/HTSpriteWidget.kt index dcad00cf6..160ffaa40 100644 --- a/src/main/kotlin/hiiragi283/ragium/client/gui/component/HTSpriteWidget.kt +++ b/src/main/kotlin/hiiragi283/ragium/client/gui/component/base/HTSpriteWidget.kt @@ -1,7 +1,8 @@ -package hiiragi283.ragium.client.gui.component +package hiiragi283.ragium.client.gui.component.base import com.mojang.blaze3d.systems.RenderSystem import hiiragi283.ragium.api.gui.component.HTBackgroundRenderable +import hiiragi283.ragium.api.math.times import hiiragi283.ragium.client.util.HTSpriteRenderHelper import net.minecraft.client.Minecraft import net.minecraft.client.gui.Font @@ -14,6 +15,8 @@ import net.minecraft.world.item.TooltipFlag import net.neoforged.api.distmarker.Dist import net.neoforged.api.distmarker.OnlyIn import net.neoforged.neoforge.client.ClientTooltipFlag +import org.apache.commons.lang3.math.Fraction +import java.util.function.Consumer import kotlin.math.min @OnlyIn(Dist.CLIENT) @@ -59,7 +62,7 @@ abstract class HTSpriteWidget( val minV: Float = sprite.v0 val maxV: Float = sprite.v1 val delta: Float = maxV - minV - val fillLevel: Float = getLevel() * height + val fillLevel: Float = getScaledLevel().toFloat() RenderSystem.setShaderTexture(0, sprite.atlasLocation()) RenderSystem.defaultBlendFunc() @@ -102,7 +105,9 @@ abstract class HTSpriteWidget( protected abstract fun getColor(): Int - protected abstract fun getLevel(): Float + protected open fun getScaledLevel(): Fraction = getLevel() * height - protected abstract fun collectTooltips(consumer: (Component) -> Unit, flag: TooltipFlag) + protected abstract fun getLevel(): Fraction + + protected abstract fun collectTooltips(consumer: Consumer, flag: TooltipFlag) } diff --git a/src/main/kotlin/hiiragi283/ragium/client/gui/screen/HTBlockEntityContainerScreen.kt b/src/main/kotlin/hiiragi283/ragium/client/gui/screen/HTBlockEntityContainerScreen.kt index 41ca0e7d7..1e99ab45c 100644 --- a/src/main/kotlin/hiiragi283/ragium/client/gui/screen/HTBlockEntityContainerScreen.kt +++ b/src/main/kotlin/hiiragi283/ragium/client/gui/screen/HTBlockEntityContainerScreen.kt @@ -1,15 +1,19 @@ package hiiragi283.ragium.client.gui.screen import hiiragi283.ragium.api.RagiumAPI +import hiiragi283.ragium.api.gui.component.HTFluidWidget import hiiragi283.ragium.api.storage.energy.HTEnergyBattery import hiiragi283.ragium.api.storage.fluid.HTFluidView import hiiragi283.ragium.client.gui.component.HTEnergyWidget import hiiragi283.ragium.client.gui.component.HTFakeSlotWidget +import hiiragi283.ragium.client.gui.component.HTFluidSlotWidget import hiiragi283.ragium.client.gui.component.HTFluidTankWidget +import hiiragi283.ragium.client.gui.component.base.HTBasicFluidWidget import hiiragi283.ragium.common.block.entity.HTBlockEntity import hiiragi283.ragium.common.inventory.HTSlotHelper import hiiragi283.ragium.common.inventory.container.HTBlockEntityContainerMenu import hiiragi283.ragium.common.storage.energy.battery.HTBasicEnergyBattery +import net.minecraft.client.gui.components.AbstractWidget import net.minecraft.network.chat.Component import net.minecraft.resources.ResourceLocation import net.minecraft.world.entity.player.Inventory @@ -52,14 +56,29 @@ open class HTBlockEntityContainerScreen : HTContainerScreen< // Extensions // + private val fluidWidgets: MutableList = mutableListOf() + + protected fun addFluidWidget(widget: WIDGET): WIDGET where WIDGET : AbstractWidget, WIDGET : HTFluidWidget { + fluidWidgets.add(widget) + addRenderableWidget(widget) + return widget + } + + override fun clearWidgets() { + super.clearWidgets() + fluidWidgets.clear() + } + + final override fun getFluidWidgets(): List = fluidWidgets + fun createFakeSlot(getter: Supplier, x: Int, y: Int): HTFakeSlotWidget = HTFakeSlotWidget(getter, startX + x, startY + y).apply(::addRenderableWidget) - fun createFluidTank(view: HTFluidView, x: Int, y: Int): HTFluidTankWidget = - HTFluidTankWidget.createTank(view, startX + x, startY + y).apply(::addRenderableWidget) + fun createFluidTank(view: HTFluidView, x: Int, y: Int): HTBasicFluidWidget = + HTFluidTankWidget(view, startX + x, startY + y).apply(::addFluidWidget) - fun createFluidSlot(view: HTFluidView, x: Int, y: Int): HTFluidTankWidget = - HTFluidTankWidget.createSlot(view, startX + x, startY + y).apply(::addRenderableWidget) + fun createFluidSlot(view: HTFluidView, x: Int, y: Int): HTBasicFluidWidget = + HTFluidSlotWidget(view, startX + x, startY + y).apply(::addFluidWidget) fun createEnergyWidget( battery: HTEnergyBattery, diff --git a/src/main/kotlin/hiiragi283/ragium/client/gui/screen/HTFluidCollectorScreen.kt b/src/main/kotlin/hiiragi283/ragium/client/gui/screen/HTFluidCollectorScreen.kt index cc428cf4e..f4f6f4741 100644 --- a/src/main/kotlin/hiiragi283/ragium/client/gui/screen/HTFluidCollectorScreen.kt +++ b/src/main/kotlin/hiiragi283/ragium/client/gui/screen/HTFluidCollectorScreen.kt @@ -1,6 +1,5 @@ package hiiragi283.ragium.client.gui.screen -import hiiragi283.ragium.api.gui.component.HTFluidWidget import hiiragi283.ragium.client.gui.component.HTProgressWidget import hiiragi283.ragium.common.block.entity.device.HTFluidCollectorBlockEntity import hiiragi283.ragium.common.inventory.HTSlotHelper @@ -13,8 +12,6 @@ import net.neoforged.api.distmarker.OnlyIn @OnlyIn(Dist.CLIENT) class HTFluidCollectorScreen(menu: HTBlockEntityContainerMenu, inventory: Inventory, title: Component) : HTBlockEntityContainerScreen(menu, inventory, title) { - private lateinit var fluidWidget: HTFluidWidget - override fun init() { super.init() addRenderableOnly( @@ -25,8 +22,6 @@ class HTFluidCollectorScreen(menu: HTBlockEntityContainerMenu = listOf(fluidWidget) } diff --git a/src/main/kotlin/hiiragi283/ragium/client/gui/screen/HTTankScreen.kt b/src/main/kotlin/hiiragi283/ragium/client/gui/screen/HTTankScreen.kt index 2b75ef75f..dacf85cd8 100644 --- a/src/main/kotlin/hiiragi283/ragium/client/gui/screen/HTTankScreen.kt +++ b/src/main/kotlin/hiiragi283/ragium/client/gui/screen/HTTankScreen.kt @@ -1,23 +1,39 @@ package hiiragi283.ragium.client.gui.screen -import hiiragi283.ragium.api.gui.component.HTFluidWidget +import hiiragi283.ragium.api.math.fraction +import hiiragi283.ragium.api.text.HTTextUtil +import hiiragi283.ragium.client.gui.component.HTFluidTankWidget import hiiragi283.ragium.common.block.entity.storage.HTTankBlockEntity import hiiragi283.ragium.common.inventory.HTSlotHelper import hiiragi283.ragium.common.inventory.container.HTBlockEntityContainerMenu import net.minecraft.network.chat.Component import net.minecraft.world.entity.player.Inventory +import net.minecraft.world.item.TooltipFlag import net.neoforged.api.distmarker.Dist import net.neoforged.api.distmarker.OnlyIn +import org.apache.commons.lang3.math.Fraction +import java.util.function.Consumer @OnlyIn(Dist.CLIENT) class HTTankScreen(menu: HTBlockEntityContainerMenu, inventory: Inventory, title: Component) : HTBlockEntityContainerScreen(createTexture("tank"), menu, inventory, title) { - private lateinit var fluidWidget: HTFluidWidget - override fun init() { super.init() - fluidWidget = createFluidTank(blockEntity.tank, HTSlotHelper.getSlotPosX(4), HTSlotHelper.getSlotPosY(0)) - } + addFluidWidget(object : HTFluidTankWidget( + blockEntity.tank, + startX + HTSlotHelper.getSlotPosX(4), + startY + HTSlotHelper.getSlotPosY(0), + ) { + private val isCreative: Boolean get() = blockEntity.isCreative() - override fun getFluidWidgets(): List = listOf(fluidWidget) + override fun getScaledLevel(): Fraction = when (isCreative) { + true -> fraction(this.height) + false -> super.getScaledLevel() + } + + override fun collectTooltips(consumer: Consumer, flag: TooltipFlag) { + HTTextUtil.addFluidTooltip(getStack(), consumer, flag, isCreative) + } + }) + } } diff --git a/src/main/kotlin/hiiragi283/ragium/client/gui/screen/HTTelepadScreen.kt b/src/main/kotlin/hiiragi283/ragium/client/gui/screen/HTTelepadScreen.kt index c16c337eb..6db77d9fb 100644 --- a/src/main/kotlin/hiiragi283/ragium/client/gui/screen/HTTelepadScreen.kt +++ b/src/main/kotlin/hiiragi283/ragium/client/gui/screen/HTTelepadScreen.kt @@ -1,6 +1,5 @@ package hiiragi283.ragium.client.gui.screen -import hiiragi283.ragium.api.gui.component.HTFluidWidget import hiiragi283.ragium.api.item.component.HTTeleportPos import hiiragi283.ragium.api.registry.createKey import hiiragi283.ragium.client.gui.component.HTNumberEditBox @@ -19,8 +18,6 @@ import org.lwjgl.glfw.GLFW class HTTelepadScreen(menu: HTBlockEntityContainerMenu, inventory: Inventory, title: Component) : HTBlockEntityContainerScreen(menu, inventory, title) { - private lateinit var fluidWidget: HTFluidWidget - private lateinit var editBoxX: HTNumberEditBox.IntRanged private lateinit var editBoxY: HTNumberEditBox.IntRanged private lateinit var editBoxZ: HTNumberEditBox.IntRanged @@ -29,7 +26,7 @@ class HTTelepadScreen(menu: HTBlockEntityContainerMenu, in override fun init() { super.init() // fluid - fluidWidget = createFluidTank(blockEntity.tank, HTSlotHelper.getSlotPosX(0), HTSlotHelper.getSlotPosY(0)) + createFluidTank(blockEntity.tank, HTSlotHelper.getSlotPosX(0), HTSlotHelper.getSlotPosY(0)) // x editBoxX = setupNumberBox(0) // y @@ -111,6 +108,4 @@ class HTTelepadScreen(menu: HTBlockEntityContainerMenu, in val dim: ResourceKey = Registries.DIMENSION.createKey(id) this.blockEntity.teleportPos = HTTeleportPos(dim, x, y, z) } - - override fun getFluidWidgets(): List = listOf(fluidWidget) } diff --git a/src/main/kotlin/hiiragi283/ragium/client/gui/screen/generator/HTCombustionGeneratorScreen.kt b/src/main/kotlin/hiiragi283/ragium/client/gui/screen/generator/HTCombustionGeneratorScreen.kt index eac574bb6..003f0d801 100644 --- a/src/main/kotlin/hiiragi283/ragium/client/gui/screen/generator/HTCombustionGeneratorScreen.kt +++ b/src/main/kotlin/hiiragi283/ragium/client/gui/screen/generator/HTCombustionGeneratorScreen.kt @@ -1,6 +1,5 @@ package hiiragi283.ragium.client.gui.screen.generator -import hiiragi283.ragium.api.gui.component.HTFluidWidget import hiiragi283.ragium.common.block.entity.generator.HTCombustionGeneratorBlockEntity import hiiragi283.ragium.common.inventory.HTSlotHelper import hiiragi283.ragium.common.inventory.container.HTBlockEntityContainerMenu @@ -12,14 +11,9 @@ class HTCombustionGeneratorScreen( inventory: Inventory, title: Component, ) : HTGeneratorScreen(menu, inventory, title) { - private lateinit var fluidWidget: HTFluidWidget - private lateinit var fluidWidget1: HTFluidWidget - override fun init() { super.init() - fluidWidget = createFluidTank(blockEntity.coolantTank, HTSlotHelper.getSlotPosX(2), HTSlotHelper.getSlotPosY(0)) - fluidWidget1 = createFluidTank(blockEntity.fuelTank, HTSlotHelper.getSlotPosX(6), HTSlotHelper.getSlotPosY(0)) + createFluidTank(blockEntity.coolantTank, HTSlotHelper.getSlotPosX(2), HTSlotHelper.getSlotPosY(0)) + createFluidTank(blockEntity.fuelTank, HTSlotHelper.getSlotPosX(6), HTSlotHelper.getSlotPosY(0)) } - - override fun getFluidWidgets(): List = listOf(fluidWidget, fluidWidget1) } diff --git a/src/main/kotlin/hiiragi283/ragium/client/gui/screen/generator/HTMagmaticGeneratorScreen.kt b/src/main/kotlin/hiiragi283/ragium/client/gui/screen/generator/HTMagmaticGeneratorScreen.kt index 31c38611b..af7dc2071 100644 --- a/src/main/kotlin/hiiragi283/ragium/client/gui/screen/generator/HTMagmaticGeneratorScreen.kt +++ b/src/main/kotlin/hiiragi283/ragium/client/gui/screen/generator/HTMagmaticGeneratorScreen.kt @@ -1,6 +1,5 @@ package hiiragi283.ragium.client.gui.screen.generator -import hiiragi283.ragium.api.gui.component.HTFluidWidget import hiiragi283.ragium.common.block.entity.generator.HTMagmaticGeneratorBlockEntity import hiiragi283.ragium.common.inventory.HTSlotHelper import hiiragi283.ragium.common.inventory.container.HTBlockEntityContainerMenu @@ -9,12 +8,8 @@ import net.minecraft.world.entity.player.Inventory class HTMagmaticGeneratorScreen(menu: HTBlockEntityContainerMenu, inventory: Inventory, title: Component) : HTGeneratorScreen(menu, inventory, title) { - private lateinit var fluidWidget: HTFluidWidget - override fun init() { super.init() - fluidWidget = createFluidTank(blockEntity.fuelTank, HTSlotHelper.getSlotPosX(6), HTSlotHelper.getSlotPosY(0)) + createFluidTank(blockEntity.fuelTank, HTSlotHelper.getSlotPosX(6), HTSlotHelper.getSlotPosY(0)) } - - override fun getFluidWidgets(): List = listOf(fluidWidget) } diff --git a/src/main/kotlin/hiiragi283/ragium/client/gui/screen/processor/HTCrusherScreen.kt b/src/main/kotlin/hiiragi283/ragium/client/gui/screen/processor/HTCrusherScreen.kt index b4ff81eee..b0022a7b0 100644 --- a/src/main/kotlin/hiiragi283/ragium/client/gui/screen/processor/HTCrusherScreen.kt +++ b/src/main/kotlin/hiiragi283/ragium/client/gui/screen/processor/HTCrusherScreen.kt @@ -1,6 +1,6 @@ package hiiragi283.ragium.client.gui.screen.processor -import hiiragi283.ragium.client.gui.component.HTFluidTankWidget +import hiiragi283.ragium.client.gui.component.base.HTBasicFluidWidget import hiiragi283.ragium.common.block.entity.processor.base.HTSingleItemInputBlockEntity import hiiragi283.ragium.common.inventory.HTSlotHelper import hiiragi283.ragium.common.inventory.container.HTBlockEntityContainerMenu @@ -17,7 +17,7 @@ class HTCrusherScreen( inventory, title, ) { - override fun createFluidWidget(): HTFluidTankWidget = + override fun createFluidWidget(): HTBasicFluidWidget = createFluidSlot(blockEntity.inputTank, HTSlotHelper.getSlotPosX(2), HTSlotHelper.getSlotPosY(2)) override fun updateVisibility() { diff --git a/src/main/kotlin/hiiragi283/ragium/client/gui/screen/processor/HTMixerScreen.kt b/src/main/kotlin/hiiragi283/ragium/client/gui/screen/processor/HTMixerScreen.kt index d0ee52aff..fce4834b7 100644 --- a/src/main/kotlin/hiiragi283/ragium/client/gui/screen/processor/HTMixerScreen.kt +++ b/src/main/kotlin/hiiragi283/ragium/client/gui/screen/processor/HTMixerScreen.kt @@ -1,6 +1,5 @@ package hiiragi283.ragium.client.gui.screen.processor -import hiiragi283.ragium.api.gui.component.HTFluidWidget import hiiragi283.ragium.common.block.entity.processor.HTMixerBlockEntity import hiiragi283.ragium.common.inventory.HTSlotHelper import hiiragi283.ragium.common.inventory.container.HTBlockEntityContainerMenu @@ -12,14 +11,9 @@ import net.neoforged.api.distmarker.OnlyIn @OnlyIn(Dist.CLIENT) class HTMixerScreen(menu: HTBlockEntityContainerMenu, inventory: Inventory, title: Component) : HTProcessorScreen(menu, inventory, title) { - private lateinit var fluidWidget: HTFluidWidget - private lateinit var fluidWidget1: HTFluidWidget - override fun init() { super.init() - fluidWidget = createFluidSlot(blockEntity.inputTank, HTSlotHelper.getSlotPosX(2), HTSlotHelper.getSlotPosY(2)) - fluidWidget1 = createFluidSlot(blockEntity.outputTank, HTSlotHelper.getSlotPosX(5.5), HTSlotHelper.getSlotPosY(2)) + createFluidSlot(blockEntity.inputTank, HTSlotHelper.getSlotPosX(2), HTSlotHelper.getSlotPosY(2)) + createFluidSlot(blockEntity.outputTank, HTSlotHelper.getSlotPosX(5.5), HTSlotHelper.getSlotPosY(2)) } - - override fun getFluidWidgets(): List = listOf(fluidWidget, fluidWidget1) } diff --git a/src/main/kotlin/hiiragi283/ragium/client/gui/screen/processor/HTMobCrusherScreen.kt b/src/main/kotlin/hiiragi283/ragium/client/gui/screen/processor/HTMobCrusherScreen.kt index 5885a9fcd..c97903a58 100644 --- a/src/main/kotlin/hiiragi283/ragium/client/gui/screen/processor/HTMobCrusherScreen.kt +++ b/src/main/kotlin/hiiragi283/ragium/client/gui/screen/processor/HTMobCrusherScreen.kt @@ -1,7 +1,7 @@ package hiiragi283.ragium.client.gui.screen.processor -import hiiragi283.ragium.client.gui.component.HTFluidTankWidget import hiiragi283.ragium.client.gui.component.HTProgressWidget +import hiiragi283.ragium.client.gui.component.base.HTBasicFluidWidget import hiiragi283.ragium.common.block.entity.processor.HTMobCrusherBlockEntity import hiiragi283.ragium.common.inventory.HTSlotHelper import hiiragi283.ragium.common.inventory.container.HTBlockEntityContainerMenu @@ -10,7 +10,7 @@ import net.minecraft.world.entity.player.Inventory class HTMobCrusherScreen(menu: HTBlockEntityContainerMenu, inventory: Inventory, title: Component) : HTSingleFluidProcessorScreen(menu, inventory, title) { - override fun createFluidWidget(): HTFluidTankWidget = + override fun createFluidWidget(): HTBasicFluidWidget = createFluidTank(blockEntity.outputTank, HTSlotHelper.getSlotPosX(6.5), HTSlotHelper.getSlotPosY(0)) override fun addProgressBar(consumer: (HTProgressWidget) -> Unit) {} diff --git a/src/main/kotlin/hiiragi283/ragium/client/gui/screen/processor/HTRefineryScreen.kt b/src/main/kotlin/hiiragi283/ragium/client/gui/screen/processor/HTRefineryScreen.kt index bfb764df2..59b70601d 100644 --- a/src/main/kotlin/hiiragi283/ragium/client/gui/screen/processor/HTRefineryScreen.kt +++ b/src/main/kotlin/hiiragi283/ragium/client/gui/screen/processor/HTRefineryScreen.kt @@ -1,6 +1,5 @@ package hiiragi283.ragium.client.gui.screen.processor -import hiiragi283.ragium.api.gui.component.HTFluidWidget import hiiragi283.ragium.common.block.entity.processor.HTRefineryBlockEntity import hiiragi283.ragium.common.inventory.HTSlotHelper import hiiragi283.ragium.common.inventory.container.HTBlockEntityContainerMenu @@ -12,14 +11,9 @@ import net.neoforged.api.distmarker.OnlyIn @OnlyIn(Dist.CLIENT) class HTRefineryScreen(menu: HTBlockEntityContainerMenu, inventory: Inventory, title: Component) : HTProcessorScreen(menu, inventory, title) { - private lateinit var fluidWidget: HTFluidWidget - private lateinit var fluidWidget1: HTFluidWidget - override fun init() { super.init() - fluidWidget = createFluidTank(blockEntity.inputTank, HTSlotHelper.getSlotPosX(2), HTSlotHelper.getSlotPosY(0)) - fluidWidget1 = createFluidTank(blockEntity.outputTank, HTSlotHelper.getSlotPosX(6), HTSlotHelper.getSlotPosY(0)) + createFluidTank(blockEntity.inputTank, HTSlotHelper.getSlotPosX(2), HTSlotHelper.getSlotPosY(0)) + createFluidTank(blockEntity.outputTank, HTSlotHelper.getSlotPosX(6), HTSlotHelper.getSlotPosY(0)) } - - override fun getFluidWidgets(): List = listOf(fluidWidget, fluidWidget1) } diff --git a/src/main/kotlin/hiiragi283/ragium/client/gui/screen/processor/HTSimulatorScreen.kt b/src/main/kotlin/hiiragi283/ragium/client/gui/screen/processor/HTSimulatorScreen.kt index 67e3a3806..d1c2d943a 100644 --- a/src/main/kotlin/hiiragi283/ragium/client/gui/screen/processor/HTSimulatorScreen.kt +++ b/src/main/kotlin/hiiragi283/ragium/client/gui/screen/processor/HTSimulatorScreen.kt @@ -1,6 +1,6 @@ package hiiragi283.ragium.client.gui.screen.processor -import hiiragi283.ragium.client.gui.component.HTFluidTankWidget +import hiiragi283.ragium.client.gui.component.base.HTBasicFluidWidget import hiiragi283.ragium.common.block.entity.processor.HTSimulatorBlockEntity import hiiragi283.ragium.common.inventory.HTSlotHelper import hiiragi283.ragium.common.inventory.container.HTBlockEntityContainerMenu @@ -31,6 +31,6 @@ class HTSimulatorScreen(menu: HTBlockEntityContainerMenu ) } - override fun createFluidWidget(): HTFluidTankWidget = + override fun createFluidWidget(): HTBasicFluidWidget = createFluidSlot(blockEntity.outputTank, HTSlotHelper.getSlotPosX(5.5), HTSlotHelper.getSlotPosY(2)) } diff --git a/src/main/kotlin/hiiragi283/ragium/client/gui/screen/processor/HTSingleFluidProcessorScreen.kt b/src/main/kotlin/hiiragi283/ragium/client/gui/screen/processor/HTSingleFluidProcessorScreen.kt index 37f0a2bdb..554d6da17 100644 --- a/src/main/kotlin/hiiragi283/ragium/client/gui/screen/processor/HTSingleFluidProcessorScreen.kt +++ b/src/main/kotlin/hiiragi283/ragium/client/gui/screen/processor/HTSingleFluidProcessorScreen.kt @@ -1,7 +1,6 @@ package hiiragi283.ragium.client.gui.screen.processor -import hiiragi283.ragium.api.gui.component.HTFluidWidget -import hiiragi283.ragium.client.gui.component.HTFluidTankWidget +import hiiragi283.ragium.client.gui.component.base.HTBasicFluidWidget import hiiragi283.ragium.common.block.entity.processor.HTMelterBlockEntity import hiiragi283.ragium.common.block.entity.processor.HTProcessorBlockEntity import hiiragi283.ragium.common.block.entity.processor.base.HTAbstractCombinerBlockEntity @@ -67,7 +66,7 @@ abstract class HTSingleFluidProcessorScreen> : ) } - lateinit var fluidWidget: HTFluidTankWidget + lateinit var fluidWidget: HTBasicFluidWidget private set override fun init() { @@ -75,16 +74,14 @@ abstract class HTSingleFluidProcessorScreen> : fluidWidget = createFluidWidget() } - protected abstract fun createFluidWidget(): HTFluidTankWidget - - final override fun getFluidWidgets(): List = listOf(fluidWidget) + protected abstract fun createFluidWidget(): HTBasicFluidWidget private class Impl>( - private val factory: HTSingleFluidProcessorScreen.() -> HTFluidTankWidget, + private val factory: HTSingleFluidProcessorScreen.() -> HTBasicFluidWidget, menu: HTBlockEntityContainerMenu, inventory: Inventory, title: Component, ) : HTSingleFluidProcessorScreen(menu, inventory, title) { - override fun createFluidWidget(): HTFluidTankWidget = factory() + override fun createFluidWidget(): HTBasicFluidWidget = factory() } } diff --git a/src/main/kotlin/hiiragi283/ragium/client/renderer/block/HTRefineryRenderer.kt b/src/main/kotlin/hiiragi283/ragium/client/renderer/block/HTRefineryRenderer.kt index f4cb0a234..e6a6a482d 100644 --- a/src/main/kotlin/hiiragi283/ragium/client/renderer/block/HTRefineryRenderer.kt +++ b/src/main/kotlin/hiiragi283/ragium/client/renderer/block/HTRefineryRenderer.kt @@ -48,7 +48,7 @@ class HTRefineryRenderer(context: BlockEntityRendererProvider.Context) : HTBlock ) { val stack: ImmutableFluidStack = tank.getStack() ?: return val sprite: TextureAtlasSprite = HTSpriteRenderHelper.getFluidSprite(stack) ?: return - val level: Float = tank.getStoredLevelAsFloat() + val level: Float = tank.getStoredLevel().toFloat() if (stack.fluidType().isLighterThanAir) { poseStack.translate(0f, 1f - level, 0f) } diff --git a/src/main/kotlin/hiiragi283/ragium/client/renderer/block/HTSingleFluidMachineRenderer.kt b/src/main/kotlin/hiiragi283/ragium/client/renderer/block/HTSingleFluidMachineRenderer.kt index 63e8e6a9d..27aeb66b6 100644 --- a/src/main/kotlin/hiiragi283/ragium/client/renderer/block/HTSingleFluidMachineRenderer.kt +++ b/src/main/kotlin/hiiragi283/ragium/client/renderer/block/HTSingleFluidMachineRenderer.kt @@ -25,7 +25,7 @@ class HTSingleFluidMachineRenderer(context: BlockEntityRendererProvider.Context) poseStack.pushPose() poseStack.translate(1 / 16f, 1 / 2f, 1 / 16f) - val level: Float = tank.getStoredLevelAsFloat() + val level: Float = tank.getStoredLevel().toFloat() if (stack.fluidType().isLighterThanAir) { poseStack.translate(0f, 1f - (level / 2f), 0f) } diff --git a/src/main/kotlin/hiiragi283/ragium/client/renderer/block/HTTankRenderer.kt b/src/main/kotlin/hiiragi283/ragium/client/renderer/block/HTTankRenderer.kt index fa13e88bd..712727325 100644 --- a/src/main/kotlin/hiiragi283/ragium/client/renderer/block/HTTankRenderer.kt +++ b/src/main/kotlin/hiiragi283/ragium/client/renderer/block/HTTankRenderer.kt @@ -25,7 +25,7 @@ class HTTankRenderer(context: BlockEntityRendererProvider.Context) : HTBlockEnti poseStack.pushPose() poseStack.translate(2.5f / 16f, 0f, 2.5f / 16f) - val level: Float = tank.getStoredLevelAsFloat() + val level: Float = tank.getStoredLevel().toFloat() if (stack.fluidType().isLighterThanAir) { poseStack.translate(0f, 1f - (level / 2f), 0f) } diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/ExtendedBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/ExtendedBlockEntity.kt index ac4eba062..11d456966 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/ExtendedBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/ExtendedBlockEntity.kt @@ -36,6 +36,7 @@ abstract class ExtendedBlockEntity(type: HTDeferredBlockEntityType<*>, pos: Bloc final override fun handleUpdateTag(tag: CompoundTag, provider: HolderLookup.Provider) { super.loadAdditional(tag, provider) handleUpdateTag(RagiumPlatform.INSTANCE.createValueInput(provider, tag)) + requestModelDataUpdate() } final override fun onDataPacket(net: Connection, pkt: ClientboundBlockEntityDataPacket, provider: HolderLookup.Provider) { @@ -89,11 +90,7 @@ abstract class ExtendedBlockEntity(type: HTDeferredBlockEntityType<*>, pos: Bloc level.blockEntityChanged(blockPos) lastSaveTime = time } - if (level.isClientSide) { - requestModelDataUpdate() - } else { - if (updateComparator) markDirtyComparator() - } + if (updateComparator && !level.isClientSide) markDirtyComparator() } protected open fun markDirtyComparator() {} diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTBlockEntity.kt index d6de6745b..a366c638e 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTBlockEntity.kt @@ -188,9 +188,9 @@ abstract class HTBlockEntity(val blockHolder: Holder, pos: BlockPos, stat } } // Custom Name - this.customName = input.read("custom_name", ComponentSerialization.CODEC) + input.readAndSet("custom_name", ComponentSerialization.CODEC, ::customName::set) // Owner - this.ownerId = input.read(RagiumConst.OWNER, UUIDUtil.CODEC) + input.readAndSet(RagiumConst.OWNER, UUIDUtil.CODEC, ::ownerId::set) } override fun applyImplicitComponents(componentInput: DataComponentInput) { diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTConfigurableBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTConfigurableBlockEntity.kt index 1edfc3a57..49a1a7655 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTConfigurableBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTConfigurableBlockEntity.kt @@ -23,6 +23,7 @@ import net.minecraft.core.Direction import net.minecraft.core.Holder import net.minecraft.world.level.block.Block import net.minecraft.world.level.block.state.BlockState +import java.util.EnumMap /** * 搬入出の面を制御可能な[HTBlockEntity]の拡張クラス @@ -42,7 +43,7 @@ abstract class HTConfigurableBlockEntity(blockHolder: Holder, pos: BlockP BiCodecs .mapOf(VanillaBiCodecs.DIRECTION, HTAccessConfig.CODEC) .validate { map: Map -> - if (map.isEmpty() || map.all { (_, config) -> config == HTAccessConfig.BOTH }) { + if (map.isEmpty() || map.all { (_, config: HTAccessConfig) -> config == HTAccessConfig.BOTH }) { mapOf() } else { map @@ -88,7 +89,7 @@ abstract class HTConfigurableBlockEntity(blockHolder: Holder, pos: BlockP // HTAccessConfiguration // - private val accessConfigCache: MutableMap = hashMapOf() + private val accessConfigCache: MutableMap = EnumMap(Direction::class.java) final override fun getAccessConfig(side: Direction): HTAccessConfig = accessConfigCache.computeIfAbsent(side) { _: Direction -> HTAccessConfig.BOTH } diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTImitationSpawnerBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTImitationSpawnerBlockEntity.kt index ea0399df4..9e8183c7f 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTImitationSpawnerBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTImitationSpawnerBlockEntity.kt @@ -24,7 +24,9 @@ class HTImitationSpawnerBlockEntity(pos: BlockPos, state: BlockState) : override fun loadAdditional(tag: CompoundTag, registries: HolderLookup.Provider) { super.loadAdditional(tag, registries) - spawnerMob = RagiumPlatform.INSTANCE.createValueInput(registries, tag).read("spawner", HTSpawnerMob.CODEC) + RagiumPlatform.INSTANCE + .createValueInput(registries, tag) + .readAndSet("spawner", HTSpawnerMob.CODEC, ::spawnerMob::set) } override fun saveAdditional(tag: CompoundTag, registries: HolderLookup.Provider) { @@ -53,9 +55,11 @@ class HTImitationSpawnerBlockEntity(pos: BlockPos, state: BlockState) : override fun initReducedUpdateTag(output: HTValueOutput) { super.initReducedUpdateTag(output) + output.store("spawner", HTSpawnerMob.CODEC, spawnerMob) } override fun handleUpdateTag(input: HTValueInput) { super.handleUpdateTag(input) + input.readAndSet("spawner", HTSpawnerMob.CODEC, ::spawnerMob::set) } } diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTMachineBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTMachineBlockEntity.kt index 289b3e0b0..2f0f0c7f3 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTMachineBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTMachineBlockEntity.kt @@ -65,19 +65,30 @@ abstract class HTMachineBlockEntity(blockHolder: Holder, pos: BlockPos, s this.isActive = input.getBoolean("is_active", false) } + override fun initReducedUpdateTag(output: HTValueOutput) { + super.initReducedUpdateTag(output) + output.putBoolean("is_active", this.isActive) + } + + override fun handleUpdateTag(input: HTValueInput) { + super.handleUpdateTag(input) + this.isActive = input.getBoolean("is_active", false) + } + // Ticking // + private var lastActive = false var isActive: Boolean = false protected set final override fun onUpdateServer(level: ServerLevel, pos: BlockPos, state: BlockState): Boolean { val result: Boolean = onUpdateMachine(level, pos, state) - // 以前の結果と異なる場合は強制的に同期させる + // 以前の結果と異なる場合は更新する if (result != this.isActive) { - isActive = result - return true + this.lastActive = this.isActive + this.isActive = result } - return result + return this.lastActive } protected abstract fun onUpdateMachine(level: ServerLevel, pos: BlockPos, state: BlockState): Boolean diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTDeviceBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTDeviceBlockEntity.kt index d3f457911..be034e4e1 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTDeviceBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTDeviceBlockEntity.kt @@ -1,7 +1,6 @@ package hiiragi283.ragium.common.block.entity.device -import hiiragi283.ragium.api.math.fraction -import hiiragi283.ragium.api.math.minus +import hiiragi283.ragium.api.math.fixedFraction import hiiragi283.ragium.common.block.entity.HTConfigurableBlockEntity import hiiragi283.ragium.common.block.entity.HTMachineBlockEntity import hiiragi283.ragium.common.inventory.container.HTContainerMenu @@ -41,11 +40,6 @@ abstract class HTDeviceBlockEntity(blockHolder: Holder, pos: BlockPos, st protected open fun getTickRate(): Int = 20 - fun getProgress(): Fraction { - val totalTick: Int = ticks - val maxTicks = 20 - val rawFraction: Fraction = fraction(totalTick, maxTicks) - return rawFraction - rawFraction.properWhole - } + fun getProgress(): Fraction = fixedFraction(ticks, 20) } } diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTFluidCollectorBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTFluidCollectorBlockEntity.kt index e9ce5d8f3..56f30abf7 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTFluidCollectorBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTFluidCollectorBlockEntity.kt @@ -43,6 +43,10 @@ class HTFluidCollectorBlockEntity(pos: BlockPos, state: BlockState) : ) } + override fun markDirtyComparator() { + level?.updateNeighbourForOutputSignal(blockPos, blockState.block) + } + override fun getComparatorOutput(state: BlockState, level: Level, pos: BlockPos): Int = HTStackSlotHelper.calculateRedstoneLevel(outputTank) diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTTelepadBlockentity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTTelepadBlockentity.kt index 594988a8d..d673a2568 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTTelepadBlockentity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTTelepadBlockentity.kt @@ -70,7 +70,7 @@ class HTTelepadBlockentity(pos: BlockPos, state: BlockState) : HTDeviceBlockEnti override fun readValue(input: HTValueInput) { super.readValue(input) - teleportPos = input.read("teleport_pos", HTTeleportPos.CODEC) + input.readAndSet("teleport_pos", HTTeleportPos.CODEC, ::teleportPos::set) } /*override fun onRightClicked(context: HTBlockInteractContext): InteractionResult = when { 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 edb7add1b..bc29385eb 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 @@ -69,7 +69,7 @@ class HTMelterBlockEntity(pos: BlockPos, state: BlockState) : override fun handleUpdateTag(input: HTValueInput) { super.handleUpdateTag(input) - input.read(RagiumConst.FLUID, ImmutableFluidStack.CODEC).let(outputTank::setStackUnchecked) + input.readAndSet(RagiumConst.FLUID, ImmutableFluidStack.CODEC, outputTank::setStackUnchecked) } // Ticking // 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 100d5b4f9..7b1ba77a5 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 @@ -5,8 +5,7 @@ import hiiragi283.ragium.api.data.recipe.HTResultHelper import hiiragi283.ragium.api.data.recipe.ingredient.HTFluidIngredientCreator import hiiragi283.ragium.api.data.recipe.ingredient.HTItemIngredientCreator import hiiragi283.ragium.api.math.div -import hiiragi283.ragium.api.math.fraction -import hiiragi283.ragium.api.math.minus +import hiiragi283.ragium.api.math.fixedFraction import hiiragi283.ragium.api.math.times import hiiragi283.ragium.api.recipe.HTAbstractRecipe import hiiragi283.ragium.api.recipe.HTRecipeCache @@ -59,13 +58,7 @@ abstract class HTProcessorBlockEntity(blockHolder: Ho menu.track(HTIntSyncSlot.create(::requiredEnergy)) } - fun getProgress(): Fraction { - val totalTick: Int = usedEnergy - val maxTicks: Int = requiredEnergy - if (maxTicks <= 0) return Fraction.ZERO - val rawFraction: Fraction = fraction(totalTick, maxTicks) - return rawFraction - rawFraction.properWhole - } + fun getProgress(): Fraction = fixedFraction(usedEnergy, requiredEnergy) final override fun onUpdateMachine(level: ServerLevel, pos: BlockPos, state: BlockState): Boolean { // アウトプットが埋まっていないか判定する 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 88a07b57f..4969c538b 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 @@ -81,8 +81,8 @@ class HTRefineryBlockEntity(pos: BlockPos, state: BlockState) : override fun handleUpdateTag(input: HTValueInput) { super.handleUpdateTag(input) - input.read("${RagiumConst.FLUID}_input", ImmutableFluidStack.CODEC).let(inputTank::setStackUnchecked) - input.read("${RagiumConst.FLUID}_output", ImmutableFluidStack.CODEC).let(outputTank::setStackUnchecked) + input.readAndSet("${RagiumConst.FLUID}_input", ImmutableFluidStack.CODEC, inputTank::setStackUnchecked) + input.readAndSet("${RagiumConst.FLUID}_output", ImmutableFluidStack.CODEC, outputTank::setStackUnchecked) } // Ticking // diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTCrateBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTCrateBlockEntity.kt index 8c559a853..8b7f482f6 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTCrateBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTCrateBlockEntity.kt @@ -1,6 +1,8 @@ package hiiragi283.ragium.common.block.entity.storage +import hiiragi283.ragium.api.RagiumConst import hiiragi283.ragium.api.function.HTPredicates +import hiiragi283.ragium.api.serialization.value.HTValueOutput import hiiragi283.ragium.api.stack.ImmutableItemStack import hiiragi283.ragium.api.storage.HTStorageAccess import hiiragi283.ragium.api.storage.HTStorageAction @@ -21,6 +23,7 @@ import net.minecraft.server.level.ServerLevel import net.minecraft.world.level.Level import net.minecraft.world.level.block.Block import net.minecraft.world.level.block.state.BlockState +import org.apache.commons.lang3.math.Fraction open class HTCrateBlockEntity(blockHolder: Holder, pos: BlockPos, state: BlockState) : HTUpgradableBlockEntity(blockHolder, pos, state) { @@ -35,12 +38,25 @@ open class HTCrateBlockEntity(blockHolder: Holder, pos: BlockPos, state: protected fun getCapacity(): Int = HTUpgradeHelper.getItemCapacity(this, RagiumConfig.COMMON.crateCapacity.asInt) + override fun markDirtyComparator() { + level?.updateNeighbourForOutputSignal(blockPos, blockState.block) + } + final override fun getComparatorOutput(state: BlockState, level: Level, pos: BlockPos): Int = HTStackSlotHelper.calculateRedstoneLevel(slot) // Ticking // - override fun onUpdateServer(level: ServerLevel, pos: BlockPos, state: BlockState): Boolean = false + private var oldScale: Fraction = Fraction.ZERO + + override fun onUpdateServer(level: ServerLevel, pos: BlockPos, state: BlockState): Boolean { + val scale: Fraction = slot.getStoredLevel() + if (scale != this.oldScale) { + this.oldScale = scale + return true + } + return false + } // CrateItemSlot // @@ -60,6 +76,11 @@ open class HTCrateBlockEntity(blockHolder: Holder, pos: BlockPos, state: ) { private val isCreative: Boolean get() = this@HTCrateBlockEntity.isCreative() + override fun getStack(): ImmutableItemStack? = when (isCreative) { + true -> super.getStack()?.copyWithAmount(Int.MAX_VALUE) + false -> super.getStack() + } + override fun insert(stack: ImmutableItemStack?, action: HTStorageAction, access: HTStorageAccess): ImmutableItemStack? { val remainder: ImmutableItemStack? if (isCreative && this.getStack() == null && action.execute && access != HTStorageAccess.EXTERNAL) { @@ -76,6 +97,9 @@ open class HTCrateBlockEntity(blockHolder: Holder, pos: BlockPos, state: override fun extract(amount: Int, action: HTStorageAction, access: HTStorageAccess): ImmutableItemStack? = super.extract(amount, action.combine(!isCreative), access) - override fun getCapacity(stack: ImmutableItemStack?): Int = this@HTCrateBlockEntity.getCapacity() + override fun getCapacity(stack: ImmutableItemStack?): Int = when (isCreative) { + true -> Int.MAX_VALUE + false -> this@HTCrateBlockEntity.getCapacity() + } } } diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTTankBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTTankBlockEntity.kt index 44fd6655e..0d9d26c66 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTTankBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTTankBlockEntity.kt @@ -25,6 +25,7 @@ import net.minecraft.server.level.ServerLevel import net.minecraft.world.level.Level import net.minecraft.world.level.block.Block import net.minecraft.world.level.block.state.BlockState +import org.apache.commons.lang3.math.Fraction /** * @see mekanism.common.tile.TileEntityFluidTank @@ -59,6 +60,10 @@ open class HTTankBlockEntity(blockHolder: Holder, pos: BlockPos, state: B ) } + override fun markDirtyComparator() { + level?.updateNeighbourForOutputSignal(blockPos, blockState.block) + } + final override fun getComparatorOutput(state: BlockState, level: Level, pos: BlockPos): Int = HTStackSlotHelper.calculateRedstoneLevel(tank) @@ -71,13 +76,22 @@ open class HTTankBlockEntity(blockHolder: Holder, pos: BlockPos, state: B override fun handleUpdateTag(input: HTValueInput) { super.handleUpdateTag(input) - input.read(RagiumConst.FLUID, ImmutableFluidStack.CODEC).let(tank::setStackUnchecked) + input.readAndSet(RagiumConst.FLUID, ImmutableFluidStack.CODEC, tank::setStackUnchecked) } // Ticking // - override fun onUpdateServer(level: ServerLevel, pos: BlockPos, state: BlockState): Boolean = - HTStackSlotHelper.moveFluid(slot, slot::setStackUnchecked, tank) + var oldScale: Fraction = Fraction.ZERO + + override fun onUpdateServer(level: ServerLevel, pos: BlockPos, state: BlockState): Boolean { + if (HTStackSlotHelper.moveFluid(slot, slot::setStackUnchecked, tank)) return true + val scale: Fraction = tank.getStoredLevel() + if (scale != this.oldScale) { + this.oldScale = scale + return true + } + return false + } // TankFluidTank // @@ -94,6 +108,11 @@ open class HTTankBlockEntity(blockHolder: Holder, pos: BlockPos, state: B ) { private val isCreative: Boolean get() = this@HTTankBlockEntity.isCreative() + override fun getStack(): ImmutableFluidStack? = when (isCreative) { + true -> super.getStack()?.copyWithAmount(Int.MAX_VALUE) + false -> super.getStack() + } + override fun insert(stack: ImmutableFluidStack?, action: HTStorageAction, access: HTStorageAccess): ImmutableFluidStack? { val remainder: ImmutableFluidStack? if (isCreative && this.getStack() == null && action.execute && access != HTStorageAccess.EXTERNAL) { @@ -110,6 +129,9 @@ open class HTTankBlockEntity(blockHolder: Holder, pos: BlockPos, state: B override fun extract(amount: Int, action: HTStorageAction, access: HTStorageAccess): ImmutableFluidStack? = super.extract(amount, action.combine(!isCreative), access) - override fun getCapacity(stack: ImmutableFluidStack?): Int = this@HTTankBlockEntity.getCapacity() + override fun getCapacity(stack: ImmutableFluidStack?): Int = when (isCreative) { + true -> Int.MAX_VALUE + false -> this@HTTankBlockEntity.getCapacity() + } } } diff --git a/src/main/kotlin/hiiragi283/ragium/common/item/base/HTEnergyItem.kt b/src/main/kotlin/hiiragi283/ragium/common/item/base/HTEnergyItem.kt index 93de3b31e..10dcd3f3a 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/item/base/HTEnergyItem.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/item/base/HTEnergyItem.kt @@ -1,13 +1,13 @@ package hiiragi283.ragium.common.item.base import hiiragi283.ragium.api.capability.HTEnergyCapabilities +import hiiragi283.ragium.api.math.times import hiiragi283.ragium.api.storage.energy.HTEnergyBattery import hiiragi283.ragium.api.text.HTTextUtil import net.minecraft.network.chat.Component import net.minecraft.world.item.Item import net.minecraft.world.item.ItemStack import net.minecraft.world.item.TooltipFlag -import kotlin.math.roundToInt /** * @see mekanism.common.item.ItemEnergized @@ -19,7 +19,7 @@ open class HTEnergyItem(properties: Properties) : Item(properties) { override fun getBarWidth(stack: ItemStack): Int { val battery: HTEnergyBattery = getBattery(stack) ?: return 0 - return (13f * battery.getStoredLevelAsFloat()).roundToInt() + return (13 * battery.getStoredLevel()).toInt() } override fun getBarColor(stack: ItemStack): Int = 0xff003f diff --git a/src/main/kotlin/hiiragi283/ragium/common/storage/fluid/tank/HTBasicFluidTank.kt b/src/main/kotlin/hiiragi283/ragium/common/storage/fluid/tank/HTBasicFluidTank.kt index d30586b8e..a6f8426a6 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/storage/fluid/tank/HTBasicFluidTank.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/storage/fluid/tank/HTBasicFluidTank.kt @@ -89,7 +89,7 @@ open class HTBasicFluidTank protected constructor( } override fun deserialize(input: HTValueInput) { - input.read(RagiumConst.FLUID, ImmutableFluidStack.CODEC).let(::setStackUnchecked) + input.readAndSet(RagiumConst.FLUID, ImmutableFluidStack.CODEC, ::setStackUnchecked) } final override fun onContentsChanged() { diff --git a/src/main/kotlin/hiiragi283/ragium/common/storage/item/slot/HTBasicItemSlot.kt b/src/main/kotlin/hiiragi283/ragium/common/storage/item/slot/HTBasicItemSlot.kt index a9150aab7..f2a32fec7 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/storage/item/slot/HTBasicItemSlot.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/storage/item/slot/HTBasicItemSlot.kt @@ -127,7 +127,7 @@ open class HTBasicItemSlot protected constructor( } override fun deserialize(input: HTValueInput) { - input.read(RagiumConst.ITEM, ImmutableItemStack.CODEC).let(::setStackUnchecked) + input.readAndSet(RagiumConst.ITEM, ImmutableItemStack.CODEC, ::setStackUnchecked) } final override fun onContentsChanged() { diff --git a/src/main/kotlin/hiiragi283/ragium/util/HTStackSlotHelper.kt b/src/main/kotlin/hiiragi283/ragium/util/HTStackSlotHelper.kt index 9beb446c0..6f8484979 100644 --- a/src/main/kotlin/hiiragi283/ragium/util/HTStackSlotHelper.kt +++ b/src/main/kotlin/hiiragi283/ragium/util/HTStackSlotHelper.kt @@ -131,7 +131,7 @@ object HTStackSlotHelper { @JvmStatic fun calculateRedstoneLevel(view: HTAmountView<*>): Int = - Mth.lerpDiscrete(view.getStoredLevelAsFloat(), Redstone.SIGNAL_NONE, Redstone.SIGNAL_MAX) + Mth.lerpDiscrete(view.getStoredLevel().toFloat(), Redstone.SIGNAL_NONE, Redstone.SIGNAL_MAX) // Item // From 2390614ba39136c256cea04889c12c6827402d9e Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Mon, 15 Dec 2025 00:34:04 +0900 Subject: [PATCH 40/49] feat!: remove Open Crate --- .../data/client/RagiumBlockStateProvider.kt | 3 +- .../data/client/RagiumEnglishProvider.kt | 3 -- .../data/client/RagiumJapaneseProvider.kt | 3 -- .../recipe/RagiumMachineRecipeProvider.kt | 51 ++++++++---------- .../server/tag/RagiumBlockTagsProvider.kt | 1 - .../processor/HTMultiSmelterBlockEntity.kt | 2 +- .../entity/storage/HTCrateBlockEntity.kt | 8 ++- .../entity/storage/HTOpenCrateBlockEntity.kt | 50 ----------------- .../common/text/RagiumCommonTranslation.kt | 2 - .../ragium/setup/RagiumBlockEntityTypes.kt | 6 --- .../ragium/setup/RagiumBlockTypes.kt | 5 -- .../hiiragi283/ragium/setup/RagiumBlocks.kt | 15 ++---- .../textures/block/basic_machine_frame.png | Bin 0 -> 172 bytes 13 files changed, 34 insertions(+), 115 deletions(-) delete mode 100644 src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTOpenCrateBlockEntity.kt create mode 100644 src/main/resources/assets/ragium/textures/block/basic_machine_frame.png diff --git a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumBlockStateProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumBlockStateProvider.kt index e218ca66a..9965a99c5 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumBlockStateProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumBlockStateProvider.kt @@ -172,6 +172,7 @@ class RagiumBlockStateProvider(context: HTDataGenContext) : BlockStateProvider(c } val basicCasing: ResourceLocation = RagiumAPI.id("block", "basic_machine_casing") + val basicFrame: ResourceLocation = RagiumAPI.id("block", "basic_machine_frame") val bricks: ResourceLocation = vanillaId("block", "bricks") val advancedCasing: ResourceLocation = RagiumAPI.id("block", "advanced_machine_casing") @@ -226,7 +227,7 @@ class RagiumBlockStateProvider(context: HTDataGenContext) : BlockStateProvider(c ) // Storages - cutoutSimpleBlock(RagiumBlocks.CRATE, vanillaId("block", "glass")) + cutoutSimpleBlock(RagiumBlocks.CRATE, basicFrame) altModelBlock(RagiumBlocks.TANK) // Fluids diff --git a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt index d8fe0e780..2173fcf3f 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt @@ -177,8 +177,6 @@ class RagiumEnglishProvider(output: PackOutput) : HTLanguageProvider.English(out add(RagiumBlocks.CEU, "C.E.U.") // Storage add(RagiumBlocks.CRATE, "Variable Crate") - add(RagiumBlocks.OPEN_CRATE, "Open Crate") - add(RagiumBlocks.TANK, "Variable Tank") } @@ -465,7 +463,6 @@ class RagiumEnglishProvider(output: PackOutput) : HTLanguageProvider.English(out add(RagiumCommonTranslation.CEU, "A device which provides unlimited amount of energy.") add(RagiumCommonTranslation.CRATE, "A item storage which slot is extendable by upgrade.") - add(RagiumCommonTranslation.OPEN_CRATE, "A item storage which drops inserted items below.") add(RagiumCommonTranslation.TANK, "A fluid storage which capacity is extendable by upgrade.") add(RagiumCommonTranslation.CONFIG_ENERGY_CAPACITY, "Energy Capacity") diff --git a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt index 96cfc06e3..95460f6c7 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt @@ -168,8 +168,6 @@ class RagiumJapaneseProvider(output: PackOutput) : HTLanguageProvider.Japanese(o add(RagiumBlocks.CEU, "C.E.U.") // Storage add(RagiumBlocks.CRATE, "可変クレート") - add(RagiumBlocks.OPEN_CRATE, "オープンクレート") - add(RagiumBlocks.TANK, "可変タンク") } @@ -466,7 +464,6 @@ class RagiumJapaneseProvider(output: PackOutput) : HTLanguageProvider.Japanese(o add(RagiumCommonTranslation.CEU, "無制限にエネルギーを供給する設備です。") add(RagiumCommonTranslation.CRATE, "アップグレードでスロット数を拡張可能なアイテムストレージです。") - add(RagiumCommonTranslation.OPEN_CRATE, "搬入されたアイテムを真下に落とすストレージです。") add(RagiumCommonTranslation.TANK, "アップグレードで容量を拡張可能な液体ストレージです。") add(RagiumCommonTranslation.CONFIG_ENERGY_CAPACITY, "エネルギー容量") diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumMachineRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumMachineRecipeProvider.kt index 47386233a..d43fd1153 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumMachineRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumMachineRecipeProvider.kt @@ -2,6 +2,7 @@ package hiiragi283.ragium.data.server.recipe import hiiragi283.ragium.api.data.recipe.HTRecipeProvider import hiiragi283.ragium.api.material.HTMaterialLike +import hiiragi283.ragium.api.registry.HTItemHolderLike import hiiragi283.ragium.api.tag.RagiumCommonTags import hiiragi283.ragium.api.tag.RagiumModTags import hiiragi283.ragium.common.HTUpgradeType @@ -17,6 +18,9 @@ import hiiragi283.ragium.setup.RagiumBlocks import hiiragi283.ragium.setup.RagiumDataComponents import hiiragi283.ragium.setup.RagiumFluidContents import hiiragi283.ragium.setup.RagiumItems +import net.minecraft.core.component.DataComponentType +import net.minecraft.tags.TagKey +import net.minecraft.world.item.Item import net.minecraft.world.item.Items import net.minecraft.world.item.crafting.CraftingBookCategory import net.minecraft.world.level.ItemLike @@ -383,37 +387,24 @@ object RagiumMachineRecipeProvider : HTRecipeProvider.Direct() { @JvmStatic private fun storages() { - // Crate - resetComponent(RagiumBlocks.CRATE, RagiumDataComponents.ITEM) - HTShapedRecipeBuilder - .create(RagiumBlocks.CRATE) - .crossLayered() - .define('A', CommonMaterialPrefixes.INGOT, RagiumMaterialKeys.RAGI_ALLOY) - .define('B', CommonMaterialPrefixes.PLATE, CommonMaterialKeys.RUBBER) - .define('C', Tags.Items.GLASS_BLOCKS) - .define('D', Tags.Items.CHESTS) - .save(output) - // Open Crate - HTShapedRecipeBuilder - .create(RagiumBlocks.OPEN_CRATE) - .pattern( - "AAA", - "ABA", - "A A", - ).define('A', CommonMaterialPrefixes.PLATE, CommonMaterialKeys.RUBBER) - .define('B', Items.HOPPER) - .save(output) - // Tank - resetComponent(RagiumBlocks.TANK, RagiumDataComponents.FLUID) - HTShapedRecipeBuilder - .create(RagiumBlocks.TANK) - .crossLayered() - .define('A', CommonMaterialPrefixes.INGOT, RagiumMaterialKeys.RAGI_ALLOY) - .define('B', CommonMaterialPrefixes.PLATE, CommonMaterialKeys.RUBBER) - .define('C', Tags.Items.GLASS_BLOCKS) - .define('D', Tags.Items.BUCKETS_EMPTY) - .save(output) + // Crate, Tank + listOf( + Triple(RagiumBlocks.CRATE, Tags.Items.CHESTS, RagiumDataComponents.ITEM), + Triple(RagiumBlocks.TANK, Tags.Items.BUCKETS_EMPTY, RagiumDataComponents.FLUID), + ).forEach { (block: HTItemHolderLike, core: TagKey, component: DataComponentType<*>) -> + HTShapedRecipeBuilder + .create(block) + .crossLayered() + .define('A', CommonMaterialPrefixes.INGOT, RagiumMaterialKeys.RAGI_ALLOY) + .define('B', CommonMaterialPrefixes.PLATE, CommonMaterialKeys.RUBBER) + .define('C', Tags.Items.GLASS_BLOCKS) + .define('D', core) + .save(output) + + resetComponent(block, component) + } + // Tank with Minecart HTShapelessRecipeBuilder .create(RagiumItems.TANK_MINECART) .addIngredient(RagiumBlocks.TANK) diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/tag/RagiumBlockTagsProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/tag/RagiumBlockTagsProvider.kt index 351cfec9d..617a668f1 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/tag/RagiumBlockTagsProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/tag/RagiumBlockTagsProvider.kt @@ -121,7 +121,6 @@ class RagiumBlockTagsProvider(context: HTDataGenContext) : HTTagsProvider add(RagiumBlocks.CEU) // Storage add(RagiumBlocks.CRATE) - add(RagiumBlocks.OPEN_CRATE) add(RagiumBlocks.TANK) }.forEach(pickaxe::add) 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 f688a0072..be68595bf 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 @@ -28,7 +28,7 @@ class HTMultiSmelterBlockEntity(pos: BlockPos, state: BlockState) : ) { override fun getMatchedRecipe(input: HTRecipeInput, level: ServerLevel): HTVanillaCookingRecipe? { val cache: HTRecipeCache = getRecipeCache() - val singleInput = input.toSingleItem() ?: return null + val singleInput: SingleRecipeInput = 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 diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTCrateBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTCrateBlockEntity.kt index 8b7f482f6..98bf9d219 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTCrateBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTCrateBlockEntity.kt @@ -1,9 +1,8 @@ package hiiragi283.ragium.common.block.entity.storage -import hiiragi283.ragium.api.RagiumConst import hiiragi283.ragium.api.function.HTPredicates -import hiiragi283.ragium.api.serialization.value.HTValueOutput import hiiragi283.ragium.api.stack.ImmutableItemStack +import hiiragi283.ragium.api.stack.maxStackSize import hiiragi283.ragium.api.storage.HTStorageAccess import hiiragi283.ragium.api.storage.HTStorageAction import hiiragi283.ragium.api.storage.holder.HTSlotInfo @@ -101,5 +100,10 @@ open class HTCrateBlockEntity(blockHolder: Holder, pos: BlockPos, state: true -> Int.MAX_VALUE false -> this@HTCrateBlockEntity.getCapacity() } + + override fun outputRate(access: HTStorageAccess): Int = when { + access == HTStorageAccess.MANUAL && isCreative -> getStack()?.maxStackSize() ?: 0 + else -> super.outputRate(access) + } } } diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTOpenCrateBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTOpenCrateBlockEntity.kt deleted file mode 100644 index 45fed7812..000000000 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTOpenCrateBlockEntity.kt +++ /dev/null @@ -1,50 +0,0 @@ -package hiiragi283.ragium.common.block.entity.storage - -import hiiragi283.ragium.api.serialization.value.HTValueSerializable -import hiiragi283.ragium.api.stack.ImmutableItemStack -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.HTItemSlot -import hiiragi283.ragium.api.util.HTContentListener -import hiiragi283.ragium.common.block.entity.HTConfigurableBlockEntity -import hiiragi283.ragium.common.storage.holder.HTBasicItemSlotHolder -import hiiragi283.ragium.setup.RagiumBlocks -import hiiragi283.ragium.util.HTItemDropHelper -import net.minecraft.core.BlockPos -import net.minecraft.server.level.ServerLevel -import net.minecraft.world.level.Level -import net.minecraft.world.level.block.state.BlockState - -class HTOpenCrateBlockEntity(pos: BlockPos, state: BlockState) : HTConfigurableBlockEntity(RagiumBlocks.OPEN_CRATE, pos, state) { - private lateinit var slot: HTItemSlot - - override fun initializeItemSlots(builder: HTBasicItemSlotHolder.Builder, listener: HTContentListener) { - slot = builder.addSlot(HTSlotInfo.INPUT, OpenItemSlot()) - } - - override fun onUpdateServer(level: ServerLevel, pos: BlockPos, state: BlockState): Boolean = false - - private inner class OpenItemSlot : - HTItemSlot, - HTContentListener.Empty, - HTValueSerializable.Empty { - override fun isValid(stack: ImmutableItemStack): Boolean = true - - override fun insert(stack: ImmutableItemStack?, action: HTStorageAction, access: HTStorageAccess): ImmutableItemStack? { - val level: Level = this@HTOpenCrateBlockEntity.level ?: return stack - val pos: BlockPos = this@HTOpenCrateBlockEntity.blockPos - if (action.execute) { - HTItemDropHelper.dropStackAt(level, pos.below(), stack) - } - return null - } - - // 搬出はサポートしない - override fun extract(amount: Int, action: HTStorageAction, access: HTStorageAccess): ImmutableItemStack? = null - - override fun getStack(): ImmutableItemStack? = null - - override fun getCapacity(stack: ImmutableItemStack?): Int = Int.MAX_VALUE - } -} diff --git a/src/main/kotlin/hiiragi283/ragium/common/text/RagiumCommonTranslation.kt b/src/main/kotlin/hiiragi283/ragium/common/text/RagiumCommonTranslation.kt index 5efd19836..70f7f570e 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/text/RagiumCommonTranslation.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/text/RagiumCommonTranslation.kt @@ -61,8 +61,6 @@ enum class RagiumCommonTranslation(type: String, vararg path: String) : HTTransl // Blocks - Storages CRATE("description", "crate"), - OPEN_CRATE("description", "open_crate"), - TANK("description", "tank"), // Config diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlockEntityTypes.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlockEntityTypes.kt index df7be1b84..879baffcb 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlockEntityTypes.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlockEntityTypes.kt @@ -41,7 +41,6 @@ import hiiragi283.ragium.common.block.entity.processor.HTPulverizerBlockEntity import hiiragi283.ragium.common.block.entity.processor.HTRefineryBlockEntity import hiiragi283.ragium.common.block.entity.processor.HTSimulatorBlockEntity import hiiragi283.ragium.common.block.entity.storage.HTCrateBlockEntity -import hiiragi283.ragium.common.block.entity.storage.HTOpenCrateBlockEntity import hiiragi283.ragium.common.block.entity.storage.HTTankBlockEntity import net.minecraft.world.level.block.Block import net.minecraft.world.level.block.entity.BlockEntityType @@ -242,9 +241,6 @@ object RagiumBlockEntityTypes { @JvmField val CRATE: HTDeferredBlockEntityType = registerTick("crate", ::HTCrateBlockEntity) - @JvmField - val OPEN_CRATE: HTDeferredBlockEntityType = REGISTER.registerType("open_crate", ::HTOpenCrateBlockEntity) - @JvmField val TANK: HTDeferredBlockEntityType = registerTick("tank", ::HTTankBlockEntity) @@ -312,8 +308,6 @@ object RagiumBlockEntityTypes { registerHandler(event, CEU.get()) // Storage registerHandler(event, CRATE.get()) - registerHandler(event, OPEN_CRATE.get()) - registerHandler(event, TANK.get()) RagiumAPI.LOGGER.info("Registered Block Capabilities!") diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlockTypes.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlockTypes.kt index 261f2a338..3daa93c7a 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlockTypes.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlockTypes.kt @@ -288,11 +288,6 @@ object RagiumBlockTypes { .addMenu { RagiumMenuTypes.CRATE } .build(RagiumCommonTranslation.CRATE) - @JvmField - val OPEN_CRATE: HTEntityBlockType = HTEntityBlockType - .builder { RagiumBlockEntityTypes.OPEN_CRATE } - .build(RagiumCommonTranslation.OPEN_CRATE) - @JvmField val TANK: HTEntityBlockType = HTEntityBlockType .builder { RagiumBlockEntityTypes.TANK } diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlocks.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlocks.kt index d6df368db..a4afd1ccb 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlocks.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlocks.kt @@ -90,6 +90,10 @@ object RagiumBlocks { // Collector REGISTER.addAlias("water_collector", "fluid_collector") REGISTER.addAlias("exp_collector", "fluid_collector") + + REGISTER.addAlias("fisher", "item_collector") + REGISTER.addAlias("item_buffer", "item_collector") + REGISTER.addAlias("mob_capturer", "item_collector") // Drum, Crate listOf( "small", @@ -100,10 +104,6 @@ object RagiumBlocks { REGISTER.addAlias("${it}_drum", "tank") REGISTER.addAlias("${it}_crate", "crate") } - - REGISTER.addAlias("fisher", "item_collector") - REGISTER.addAlias("item_buffer", "item_collector") - REGISTER.addAlias("mob_capturer", "item_collector") } @JvmStatic @@ -617,13 +617,6 @@ object RagiumBlocks { ::HTDescriptionBlockItem, ) - @JvmField - val OPEN_CRATE: HTBasicDeferredBlock = registerSimpleEntity( - "open_crate", - RagiumBlockTypes.OPEN_CRATE, - machine().workInProgress(), - ) - @JvmField val TANK: HTDeferredBlock = REGISTER.register( "tank", diff --git a/src/main/resources/assets/ragium/textures/block/basic_machine_frame.png b/src/main/resources/assets/ragium/textures/block/basic_machine_frame.png new file mode 100644 index 0000000000000000000000000000000000000000..e36287eb32aef53e4c1f495c9af2545d75b826a4 GIT binary patch literal 172 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`iJmTwAr*7pOy0=bV8FwouOw~2 zC2Q>B;d8JlvPntQSfH~>aKglsEQY>aF;AcQ=bbyfh0CpI*M};dmkI`9z0AxLmvfZt z*|=Nk;P=W?t{>X Date: Mon, 15 Dec 2025 01:26:34 +0900 Subject: [PATCH 41/49] feat!: removed E.N.I. and C.E.U. feat: added new block Variable Battery --- .../hiiragi283/ragium/api/item/HTBlockItem.kt | 10 +- .../storage/attachments/HTAttachedEnergy.kt | 2 +- .../api/storage/energy/HTEnergyBattery.kt | 8 +- .../ragium/api/upgrade/HTUpgradeHelper.kt | 3 + .../data/client/RagiumBlockStateProvider.kt | 3 - .../data/client/RagiumEnglishProvider.kt | 7 +- .../data/client/RagiumJapaneseProvider.kt | 7 +- .../recipe/RagiumMachineRecipeProvider.kt | 12 +-- .../server/tag/RagiumBlockTagsProvider.kt | 5 +- .../data/server/tag/RagiumItemTagsProvider.kt | 2 + .../hiiragi283/ragium/client/RagiumClient.kt | 4 +- .../client/gui/component/HTEnergyWidget.kt | 38 ++----- .../client/gui/component/HTFluidTankWidget.kt | 2 +- .../client/gui/screen/HTBatteryScreen.kt | 32 ++++++ .../screen/HTBlockEntityContainerScreen.kt | 10 -- .../gui/screen/HTEnergyNetworkAccessScreen.kt | 22 ---- .../HTEnergyNetworkAccessBlockEntity.kt | 102 ------------------ .../entity/storage/HTBatteryBlockEntity.kt | 93 ++++++++++++++++ .../common/block/storage/HTBatteryBlock.kt | 7 ++ .../common/item/block/HTBatteryBlockItem.kt | 20 ++++ .../common/item/block/HTCrateBlockItem.kt | 5 + .../common/item/block/HTMachineBlockItem.kt | 4 +- .../common/item/block/HTStorageBlockItem.kt | 41 +++++++ .../common/item/block/HTTankBlockItem.kt | 21 +--- .../common/text/RagiumCommonTranslation.kt | 1 + .../ragium/config/RagiumCommonConfig.kt | 4 + .../ragium/setup/RagiumBlockEntityTypes.kt | 26 ++--- .../ragium/setup/RagiumBlockTypes.kt | 22 ++-- .../hiiragi283/ragium/setup/RagiumBlocks.kt | 27 +++-- .../hiiragi283/ragium/setup/RagiumItems.kt | 9 +- .../ragium/setup/RagiumMenuTypes.kt | 22 ++-- .../textures/block/creative_energy_unit.png | Bin 265 -> 0 bytes .../block/energy_network_interface.png | Bin 234 -> 0 bytes 33 files changed, 298 insertions(+), 273 deletions(-) create mode 100644 src/main/kotlin/hiiragi283/ragium/client/gui/screen/HTBatteryScreen.kt delete mode 100644 src/main/kotlin/hiiragi283/ragium/client/gui/screen/HTEnergyNetworkAccessScreen.kt delete mode 100644 src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTEnergyNetworkAccessBlockEntity.kt create mode 100644 src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTBatteryBlockEntity.kt create mode 100644 src/main/kotlin/hiiragi283/ragium/common/block/storage/HTBatteryBlock.kt create mode 100644 src/main/kotlin/hiiragi283/ragium/common/item/block/HTBatteryBlockItem.kt create mode 100644 src/main/kotlin/hiiragi283/ragium/common/item/block/HTCrateBlockItem.kt create mode 100644 src/main/kotlin/hiiragi283/ragium/common/item/block/HTStorageBlockItem.kt delete mode 100644 src/main/resources/assets/ragium/textures/block/creative_energy_unit.png delete mode 100644 src/main/resources/assets/ragium/textures/block/energy_network_interface.png diff --git a/src/api/kotlin/hiiragi283/ragium/api/item/HTBlockItem.kt b/src/api/kotlin/hiiragi283/ragium/api/item/HTBlockItem.kt index 4c7c9c3fc..bdd8b2397 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/item/HTBlockItem.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/item/HTBlockItem.kt @@ -1,7 +1,7 @@ package hiiragi283.ragium.api.item import hiiragi283.ragium.api.text.translatableText -import hiiragi283.ragium.api.tier.HTTierProvider +import net.minecraft.ChatFormatting import net.minecraft.network.chat.Component import net.minecraft.network.chat.MutableComponent import net.minecraft.world.item.BlockItem @@ -15,13 +15,13 @@ open class HTBlockItem(block: BLOCK, properties: Properties) : Bl @Suppress("UNCHECKED_CAST") override fun getBlock(): BLOCK = super.getBlock() as BLOCK - open fun getTier(): HTTierProvider? = null + protected open fun getNameColor(stack: ItemStack): ChatFormatting? = null override fun getName(stack: ItemStack): Component { var name: MutableComponent = translatableText(getDescriptionId(stack)) - val tier: HTTierProvider? = getTier() - if (tier != null) { - name = name.withStyle(tier.getBaseTier().color) + val color: ChatFormatting? = getNameColor(stack) + if (color != null) { + name = name.withStyle(color) } return name } diff --git a/src/api/kotlin/hiiragi283/ragium/api/storage/attachments/HTAttachedEnergy.kt b/src/api/kotlin/hiiragi283/ragium/api/storage/attachments/HTAttachedEnergy.kt index a2b604f19..43d37582f 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/storage/attachments/HTAttachedEnergy.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/storage/attachments/HTAttachedEnergy.kt @@ -11,7 +11,7 @@ import io.netty.buffer.ByteBuf data class HTAttachedEnergy(override val containers: List) : HTAttachedContainers { companion object { @JvmField - val CODEC: BiCodec = BiCodecs.POSITIVE_INT + val CODEC: BiCodec = BiCodecs.NON_NEGATIVE_INT .listOf() .xmap(::HTAttachedEnergy, HTAttachedEnergy::containers) diff --git a/src/api/kotlin/hiiragi283/ragium/api/storage/energy/HTEnergyBattery.kt b/src/api/kotlin/hiiragi283/ragium/api/storage/energy/HTEnergyBattery.kt index ea7338d5e..1351c3d32 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/storage/energy/HTEnergyBattery.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/storage/energy/HTEnergyBattery.kt @@ -24,7 +24,7 @@ interface HTEnergyBattery : override fun insert(amount: Int, action: HTStorageAction, access: HTStorageAccess): Int { if (amount <= 0 || !canInsert(access)) return 0 - val needed: Int = min(getInsertRate(access), getNeeded()) + val needed: Int = min(inputRate(access), getNeeded()) if (needed <= 0) return 0 val toAdd: Int = min(amount, needed) if (action.execute) { @@ -36,7 +36,7 @@ interface HTEnergyBattery : override fun extract(amount: Int, action: HTStorageAction, access: HTStorageAccess): Int { if (isEmpty() || amount <= 0 || !canExtract(access)) return 0 - val toRemove: Int = min(min(getExtractRate(access), getAmount()), amount) + val toRemove: Int = min(min(outputRate(access), getAmount()), amount) if (toRemove > 0 && action.execute) { setAmount(getAmount() - toRemove) onContentsChanged() @@ -48,9 +48,9 @@ interface HTEnergyBattery : protected open fun canExtract(access: HTStorageAccess): Boolean = true - protected open fun getInsertRate(access: HTStorageAccess): Int = Int.MAX_VALUE + protected open fun inputRate(access: HTStorageAccess): Int = Int.MAX_VALUE - protected open fun getExtractRate(access: HTStorageAccess): Int = Int.MAX_VALUE + protected open fun outputRate(access: HTStorageAccess): Int = Int.MAX_VALUE override fun toString(): String = "HTEnergyBattery(amount=${getAmount()}, capacity=${getCapacity()})" } diff --git a/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeHelper.kt b/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeHelper.kt index dda9a7fe2..11a7f9166 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeHelper.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/upgrade/HTUpgradeHelper.kt @@ -39,6 +39,9 @@ data object HTUpgradeHelper { @JvmStatic fun getHandler(stack: ImmutableItemStack): HTUpgradeHandler? = stack.getCapability(RagiumCapabilities.UPGRADABLE_ITEM) + @JvmStatic + fun isCreative(stack: ItemStack): Boolean = getHandler(stack)?.isCreative() ?: false + @JvmStatic fun getItemCapacity(handler: HTUpgradeHandler, base: Int): Int = handler.modifyValue(HTUpgradeKeys.ITEM_CAPACITY) { base * it * handler.getBaseMultiplier() diff --git a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumBlockStateProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumBlockStateProvider.kt index 9965a99c5..61e07ce2f 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumBlockStateProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumBlockStateProvider.kt @@ -55,12 +55,9 @@ class RagiumBlockStateProvider(context: HTDataGenContext) : BlockStateProvider(c add(RagiumBlocks.ITEM_COLLECTOR) add(RagiumBlocks.DIM_ANCHOR) - add(RagiumBlocks.ENI) add(RagiumBlocks.TELEPAD) - add(RagiumBlocks.CEU) - // Decoration addAll(RagiumBlocks.DECORATION_MAP.values) }.forEach(::simpleBlockAndItem) diff --git a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt index 2173fcf3f..dbd32d9aa 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt @@ -170,12 +170,10 @@ class RagiumEnglishProvider(output: PackOutput) : HTLanguageProvider.English(out add(RagiumBlocks.STONE_COLLECTOR, "Stone Collector") add(RagiumBlocks.DIM_ANCHOR, "Dimensional Anchor") - add(RagiumBlocks.ENI, "E.N.I.") add(RagiumBlocks.TELEPAD, "Telepad") - - add(RagiumBlocks.CEU, "C.E.U.") // Storage + add(RagiumBlocks.BATTERY, "Variable Battery") add(RagiumBlocks.CRATE, "Variable Crate") add(RagiumBlocks.TANK, "Variable Tank") } @@ -462,7 +460,8 @@ class RagiumEnglishProvider(output: PackOutput) : HTLanguageProvider.English(out add(RagiumCommonTranslation.CEU, "A device which provides unlimited amount of energy.") - add(RagiumCommonTranslation.CRATE, "A item storage which slot is extendable by upgrade.") + add(RagiumCommonTranslation.BATTERY, "A energy storage which capacity is extendable by upgrade.") + add(RagiumCommonTranslation.CRATE, "A item storage which capacity is extendable by upgrade.") add(RagiumCommonTranslation.TANK, "A fluid storage which capacity is extendable by upgrade.") add(RagiumCommonTranslation.CONFIG_ENERGY_CAPACITY, "Energy Capacity") diff --git a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt index 95460f6c7..53c8e264a 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt @@ -161,12 +161,10 @@ class RagiumJapaneseProvider(output: PackOutput) : HTLanguageProvider.Japanese(o add(RagiumBlocks.STONE_COLLECTOR, "岩石収集機") add(RagiumBlocks.DIM_ANCHOR, "次元アンカー") - add(RagiumBlocks.ENI, "E.N.I.") add(RagiumBlocks.TELEPAD, "テレパッド") - - add(RagiumBlocks.CEU, "C.E.U.") // Storage + add(RagiumBlocks.BATTERY, "可変バッテリー") add(RagiumBlocks.CRATE, "可変クレート") add(RagiumBlocks.TANK, "可変タンク") } @@ -463,7 +461,8 @@ class RagiumJapaneseProvider(output: PackOutput) : HTLanguageProvider.Japanese(o add(RagiumCommonTranslation.CEU, "無制限にエネルギーを供給する設備です。") - add(RagiumCommonTranslation.CRATE, "アップグレードでスロット数を拡張可能なアイテムストレージです。") + add(RagiumCommonTranslation.BATTERY, "アップグレードで容量を拡張可能なエネルギーストレージです。") + add(RagiumCommonTranslation.CRATE, "アップグレードで容量を拡張可能なアイテムストレージです。") add(RagiumCommonTranslation.TANK, "アップグレードで容量を拡張可能な液体ストレージです。") add(RagiumCommonTranslation.CONFIG_ENERGY_CAPACITY, "エネルギー容量") diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumMachineRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumMachineRecipeProvider.kt index d43fd1153..40c8f1c80 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumMachineRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumMachineRecipeProvider.kt @@ -302,14 +302,6 @@ object RagiumMachineRecipeProvider : HTRecipeProvider.Direct() { .addIngredient(CommonMaterialPrefixes.GEM, RagiumMaterialKeys.WARPED_CRYSTAL) .addIngredient(CommonMaterialPrefixes.GEM, RagiumMaterialKeys.RAGI_CRYSTAL) .save(output) - - HTShapelessRecipeBuilder - .create(RagiumBlocks.ENI) - .addIngredient(RagiumBlocks.DEVICE_CASING) - .addIngredient(CommonMaterialPrefixes.GEAR, RagiumMaterialKeys.AZURE_STEEL) - .addIngredient(CommonMaterialPrefixes.STORAGE_BLOCK, VanillaMaterialKeys.DIAMOND) - .addIngredient(CommonMaterialPrefixes.GEM, RagiumMaterialKeys.RAGI_CRYSTAL) - .save(output) // Ultimate HTShapelessRecipeBuilder .create(RagiumBlocks.TELEPAD) @@ -387,8 +379,10 @@ object RagiumMachineRecipeProvider : HTRecipeProvider.Direct() { @JvmStatic private fun storages() { - // Crate, Tank + // Battery, Crate, Tank + val ragiCrystal: TagKey = CommonMaterialPrefixes.GEM.itemTagKey(RagiumMaterialKeys.RAGI_CRYSTAL) listOf( + Triple(RagiumBlocks.BATTERY, ragiCrystal, RagiumDataComponents.ENERGY), Triple(RagiumBlocks.CRATE, Tags.Items.CHESTS, RagiumDataComponents.ITEM), Triple(RagiumBlocks.TANK, Tags.Items.BUCKETS_EMPTY, RagiumDataComponents.FLUID), ).forEach { (block: HTItemHolderLike, core: TagKey, component: DataComponentType<*>) -> diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/tag/RagiumBlockTagsProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/tag/RagiumBlockTagsProvider.kt index 617a668f1..7d606df7d 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/tag/RagiumBlockTagsProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/tag/RagiumBlockTagsProvider.kt @@ -114,14 +114,11 @@ class RagiumBlockTagsProvider(context: HTDataGenContext) : HTTagsProvider add(RagiumBlocks.STONE_COLLECTOR) add(RagiumBlocks.DIM_ANCHOR) - add(RagiumBlocks.ENI) add(RagiumBlocks.TELEPAD) - - add(RagiumBlocks.CEU) // Storage + add(RagiumBlocks.BATTERY) add(RagiumBlocks.CRATE) - add(RagiumBlocks.TANK) }.forEach(pickaxe::add) diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/tag/RagiumItemTagsProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/tag/RagiumItemTagsProvider.kt index 80597871a..bc561aeb7 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/tag/RagiumItemTagsProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/tag/RagiumItemTagsProvider.kt @@ -303,6 +303,8 @@ class RagiumItemTagsProvider(private val blockTags: CompletableFuture, flag: TooltipFlag) { HTTextUtil.addEnergyTooltip(battery, consumer) } - - // HTEnergyWidget // - - override fun getAmount(): Int = battery.getAmount() - - override fun getCapacity(): Int = battery.getCapacity() } diff --git a/src/main/kotlin/hiiragi283/ragium/client/gui/component/HTFluidTankWidget.kt b/src/main/kotlin/hiiragi283/ragium/client/gui/component/HTFluidTankWidget.kt index 92d85e844..d8b49e194 100644 --- a/src/main/kotlin/hiiragi283/ragium/client/gui/component/HTFluidTankWidget.kt +++ b/src/main/kotlin/hiiragi283/ragium/client/gui/component/HTFluidTankWidget.kt @@ -9,7 +9,7 @@ import net.neoforged.api.distmarker.Dist import net.neoforged.api.distmarker.OnlyIn @OnlyIn(Dist.CLIENT) -open class HTFluidTankWidget(open val view: HTFluidView, x: Int, y: Int) : +open class HTFluidTankWidget(protected open val view: HTFluidView, x: Int, y: Int) : HTBasicFluidWidget( x, y, diff --git a/src/main/kotlin/hiiragi283/ragium/client/gui/screen/HTBatteryScreen.kt b/src/main/kotlin/hiiragi283/ragium/client/gui/screen/HTBatteryScreen.kt new file mode 100644 index 000000000..b34ae4ae3 --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/client/gui/screen/HTBatteryScreen.kt @@ -0,0 +1,32 @@ +package hiiragi283.ragium.client.gui.screen + +import hiiragi283.ragium.api.math.fraction +import hiiragi283.ragium.client.gui.component.HTEnergyWidget +import hiiragi283.ragium.common.block.entity.storage.HTBatteryBlockEntity +import hiiragi283.ragium.common.inventory.HTSlotHelper +import hiiragi283.ragium.common.inventory.container.HTBlockEntityContainerMenu +import net.minecraft.network.chat.Component +import net.minecraft.world.entity.player.Inventory +import net.neoforged.api.distmarker.Dist +import net.neoforged.api.distmarker.OnlyIn +import org.apache.commons.lang3.math.Fraction + +@OnlyIn(Dist.CLIENT) +class HTBatteryScreen(menu: HTBlockEntityContainerMenu, inventory: Inventory, title: Component) : + HTBlockEntityContainerScreen(createTexture("battery"), menu, inventory, title) { + override fun init() { + super.init() + addRenderableWidget(object : HTEnergyWidget( + blockEntity.battery, + startX + HTSlotHelper.getSlotPosX(4), + startY + HTSlotHelper.getSlotPosY(0), + ) { + private val isCreative: Boolean get() = blockEntity.isCreative() + + override fun getScaledLevel(): Fraction = when (isCreative) { + true -> fraction(this.height) + false -> super.getScaledLevel() + } + }) + } +} diff --git a/src/main/kotlin/hiiragi283/ragium/client/gui/screen/HTBlockEntityContainerScreen.kt b/src/main/kotlin/hiiragi283/ragium/client/gui/screen/HTBlockEntityContainerScreen.kt index 1e99ab45c..001077c3b 100644 --- a/src/main/kotlin/hiiragi283/ragium/client/gui/screen/HTBlockEntityContainerScreen.kt +++ b/src/main/kotlin/hiiragi283/ragium/client/gui/screen/HTBlockEntityContainerScreen.kt @@ -12,13 +12,11 @@ import hiiragi283.ragium.client.gui.component.base.HTBasicFluidWidget import hiiragi283.ragium.common.block.entity.HTBlockEntity import hiiragi283.ragium.common.inventory.HTSlotHelper import hiiragi283.ragium.common.inventory.container.HTBlockEntityContainerMenu -import hiiragi283.ragium.common.storage.energy.battery.HTBasicEnergyBattery import net.minecraft.client.gui.components.AbstractWidget import net.minecraft.network.chat.Component import net.minecraft.resources.ResourceLocation import net.minecraft.world.entity.player.Inventory import net.minecraft.world.item.ItemStack -import java.util.function.IntConsumer import java.util.function.Supplier open class HTBlockEntityContainerScreen : HTContainerScreen> { @@ -82,19 +80,11 @@ open class HTBlockEntityContainerScreen : HTContainerScreen< fun createEnergyWidget( battery: HTEnergyBattery, - amountSetter: IntConsumer, x: Int = HTSlotHelper.getSlotPosX(0), y: Int = HTSlotHelper.getSlotPosY(0), ): HTEnergyWidget = HTEnergyWidget( battery, - amountSetter, startX + x, startY + y, ).apply(::addRenderableWidget) - - fun createEnergyWidget( - battery: HTBasicEnergyBattery, - x: Int = HTSlotHelper.getSlotPosX(0), - y: Int = HTSlotHelper.getSlotPosY(0), - ): HTEnergyWidget = createEnergyWidget(battery, battery::setAmountUnchecked, x, y) } diff --git a/src/main/kotlin/hiiragi283/ragium/client/gui/screen/HTEnergyNetworkAccessScreen.kt b/src/main/kotlin/hiiragi283/ragium/client/gui/screen/HTEnergyNetworkAccessScreen.kt deleted file mode 100644 index 9472b65f6..000000000 --- a/src/main/kotlin/hiiragi283/ragium/client/gui/screen/HTEnergyNetworkAccessScreen.kt +++ /dev/null @@ -1,22 +0,0 @@ -package hiiragi283.ragium.client.gui.screen - -import hiiragi283.ragium.common.block.entity.device.HTEnergyNetworkAccessBlockEntity -import hiiragi283.ragium.common.inventory.HTSlotHelper -import hiiragi283.ragium.common.inventory.container.HTBlockEntityContainerMenu -import net.minecraft.network.chat.Component -import net.minecraft.world.entity.player.Inventory -import net.neoforged.api.distmarker.Dist -import net.neoforged.api.distmarker.OnlyIn - -@OnlyIn(Dist.CLIENT) -class HTEnergyNetworkAccessScreen( - menu: HTBlockEntityContainerMenu, - inventory: Inventory, - title: Component, -) : HTBlockEntityContainerScreen(menu, inventory, title) { - override fun init() { - super.init() - // Energy Widget - createEnergyWidget(blockEntity.battery, {}, HTSlotHelper.getSlotPosX(4)) - } -} diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTEnergyNetworkAccessBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTEnergyNetworkAccessBlockEntity.kt deleted file mode 100644 index 4a4d7a3d0..000000000 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTEnergyNetworkAccessBlockEntity.kt +++ /dev/null @@ -1,102 +0,0 @@ -package hiiragi283.ragium.common.block.entity.device - -import hiiragi283.ragium.api.RagiumPlatform -import hiiragi283.ragium.api.serialization.value.HTValueSerializable -import hiiragi283.ragium.api.storage.HTStorageAccess -import hiiragi283.ragium.api.storage.HTStorageAction -import hiiragi283.ragium.api.storage.energy.HTEnergyBattery -import hiiragi283.ragium.api.storage.holder.HTSlotInfo -import hiiragi283.ragium.api.util.HTContentListener -import hiiragi283.ragium.common.inventory.HTSlotHelper -import hiiragi283.ragium.common.storage.energy.HTEnergyCache -import hiiragi283.ragium.common.storage.energy.battery.HTEnergyBatteryWrapper -import hiiragi283.ragium.common.storage.holder.HTBasicEnergyBatteryHolder -import hiiragi283.ragium.common.storage.holder.HTBasicItemSlotHolder -import hiiragi283.ragium.common.storage.item.slot.HTEnergyItemSlot -import hiiragi283.ragium.setup.RagiumBlocks -import hiiragi283.ragium.util.HTStackSlotHelper -import net.minecraft.core.BlockPos -import net.minecraft.core.Direction -import net.minecraft.core.Holder -import net.minecraft.server.level.ServerLevel -import net.minecraft.world.level.Level -import net.minecraft.world.level.block.Block -import net.minecraft.world.level.block.state.BlockState - -sealed class HTEnergyNetworkAccessBlockEntity(blockHolder: Holder, pos: BlockPos, state: BlockState) : - HTDeviceBlockEntity.Tickable(blockHolder, pos, state) { - lateinit var battery: HTEnergyBattery - private set - - final override fun initializeEnergyBattery(builder: HTBasicEnergyBatteryHolder.Builder, listener: HTContentListener) { - battery = builder.addSlot(HTSlotInfo.BOTH, createBattery(listener)) - } - - protected abstract fun createBattery(listener: HTContentListener): HTEnergyBattery - - private lateinit var fillSlot: HTEnergyItemSlot - private lateinit var drainSlot: HTEnergyItemSlot - - final override fun initializeItemSlots(builder: HTBasicItemSlotHolder.Builder, listener: HTContentListener) { - // extract - fillSlot = builder.addSlot( - HTSlotInfo.CATALYST, - HTEnergyItemSlot.fill(this.battery, listener, HTSlotHelper.getSlotPosX(2), HTSlotHelper.getSlotPosY(1)), - ) - // insert - drainSlot = builder.addSlot( - HTSlotInfo.CATALYST, - HTEnergyItemSlot.drain(this.battery, listener, HTSlotHelper.getSlotPosX(6), HTSlotHelper.getSlotPosY(1)), - ) - } - - override fun actionServer(level: ServerLevel, pos: BlockPos, state: BlockState): Boolean { - // 左のスロットから電力を吸い取る - val doInserted: Boolean = fillSlot.fillBattery() - // 右のスロットに電力を渡す - val doDrained: Boolean = drainSlot.drainBattery() - return doInserted || doDrained - } - - override fun getTickRate(): Int = 1 - - protected abstract val transferRate: Int - - // Creative // - - class Creative(pos: BlockPos, state: BlockState) : HTEnergyNetworkAccessBlockEntity(RagiumBlocks.CEU, pos, state) { - private val energyCache: HTEnergyCache = HTEnergyCache() - - override fun createBattery(listener: HTContentListener): HTEnergyBattery = - object : HTEnergyBattery, HTContentListener.Empty, HTValueSerializable.Empty { - override fun insert(amount: Int, action: HTStorageAction, access: HTStorageAccess): Int = amount - - override fun extract(amount: Int, action: HTStorageAction, access: HTStorageAccess): Int = amount - - override fun getAmount(): Int = 0 - - override fun getCapacity(): Int = Int.MAX_VALUE - } - - override val transferRate: Int = Int.MAX_VALUE - - override fun onUpdateMachine(level: ServerLevel, pos: BlockPos, state: BlockState): Boolean { - for (direction: Direction in Direction.entries) { - energyCache.getBattery(level, pos, direction)?.insert(Int.MAX_VALUE, HTStorageAction.EXECUTE, HTStorageAccess.EXTERNAL) - } - return super.onUpdateMachine(level, pos, state) - } - } - - // Simple // - - class Simple(pos: BlockPos, state: BlockState) : HTEnergyNetworkAccessBlockEntity(RagiumBlocks.ENI, pos, state) { - override fun createBattery(listener: HTContentListener): HTEnergyBattery = - HTEnergyBatteryWrapper { RagiumPlatform.INSTANCE.getEnergyNetwork(this.getLevel()) } - - override val transferRate: Int = 1000 - - override fun getComparatorOutput(state: BlockState, level: Level, pos: BlockPos): Int = - HTStackSlotHelper.calculateRedstoneLevel(battery) - } -} diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTBatteryBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTBatteryBlockEntity.kt new file mode 100644 index 000000000..a4ec0aa19 --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTBatteryBlockEntity.kt @@ -0,0 +1,93 @@ +package hiiragi283.ragium.common.block.entity.storage + +import hiiragi283.ragium.api.function.HTPredicates +import hiiragi283.ragium.api.storage.HTStorageAccess +import hiiragi283.ragium.api.storage.HTStorageAction +import hiiragi283.ragium.api.storage.holder.HTSlotInfo +import hiiragi283.ragium.api.upgrade.HTUpgradeHelper +import hiiragi283.ragium.api.util.HTContentListener +import hiiragi283.ragium.common.block.entity.HTUpgradableBlockEntity +import hiiragi283.ragium.common.storage.energy.battery.HTBasicEnergyBattery +import hiiragi283.ragium.common.storage.holder.HTBasicEnergyBatteryHolder +import hiiragi283.ragium.config.RagiumConfig +import hiiragi283.ragium.setup.RagiumBlocks +import hiiragi283.ragium.util.HTStackSlotHelper +import net.minecraft.core.BlockPos +import net.minecraft.core.Holder +import net.minecraft.server.level.ServerLevel +import net.minecraft.world.level.Level +import net.minecraft.world.level.block.Block +import net.minecraft.world.level.block.state.BlockState +import org.apache.commons.lang3.math.Fraction + +open class HTBatteryBlockEntity(blockHolder: Holder, pos: BlockPos, state: BlockState) : + HTUpgradableBlockEntity(blockHolder, pos, state) { + constructor(pos: BlockPos, state: BlockState) : this(RagiumBlocks.BATTERY, pos, state) + + lateinit var battery: HTBasicEnergyBattery + private set + + override fun initializeEnergyBattery(builder: HTBasicEnergyBatteryHolder.Builder, listener: HTContentListener) { + battery = builder.addSlot(HTSlotInfo.BOTH, BatteryEnergyBattery(listener)) + } + + protected fun getCapacity(): Int = HTUpgradeHelper.getEnergyCapacity(this, RagiumConfig.COMMON.batteryCapacity.asInt) + + override fun markDirtyComparator() { + level?.updateNeighbourForOutputSignal(blockPos, blockState.block) + } + + final override fun getComparatorOutput(state: BlockState, level: Level, pos: BlockPos): Int = + HTStackSlotHelper.calculateRedstoneLevel(battery) + + // Ticking // + + private var oldScale: Fraction = Fraction.ZERO + + override fun onUpdateServer(level: ServerLevel, pos: BlockPos, state: BlockState): Boolean { + val scale: Fraction = battery.getStoredLevel() + if (scale != this.oldScale) { + this.oldScale = scale + return true + } + return false + } + + // BatteryEnergyBattery // + + protected inner class BatteryEnergyBattery(listener: HTContentListener) : + HTBasicEnergyBattery( + getCapacity(), + HTPredicates.alwaysTrue(), + HTPredicates.alwaysTrue(), + listener, + ) { + private val isCreative: Boolean get() = this@HTBatteryBlockEntity.isCreative() + + override fun getAmount(): Int = when (isCreative) { + true -> Int.MAX_VALUE + false -> super.getAmount() + } + + override fun getCapacity(): Int = when (isCreative) { + true -> Int.MAX_VALUE + false -> this@HTBatteryBlockEntity.getCapacity() + } + + override fun insert(amount: Int, action: HTStorageAction, access: HTStorageAccess): Int { + val inserted: Int + if (isCreative && this.getAmount() == 0 && action.execute && access != HTStorageAccess.EXTERNAL) { + inserted = super.insert(amount, HTStorageAction.SIMULATE, access) + if (inserted == amount) { + setAmountUnchecked(getCapacity()) + } + } else { + inserted = super.insert(amount, action.combine(!isCreative), access) + } + return inserted + } + + override fun extract(amount: Int, action: HTStorageAction, access: HTStorageAccess): Int = + super.extract(amount, action.combine(!isCreative), access) + } +} diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/storage/HTBatteryBlock.kt b/src/main/kotlin/hiiragi283/ragium/common/block/storage/HTBatteryBlock.kt new file mode 100644 index 000000000..949e2e552 --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/block/storage/HTBatteryBlock.kt @@ -0,0 +1,7 @@ +package hiiragi283.ragium.common.block.storage + +import hiiragi283.ragium.api.block.type.HTEntityBlockType +import hiiragi283.ragium.common.block.HTTypedEntityBlock +import hiiragi283.ragium.setup.RagiumBlockTypes + +class HTBatteryBlock(properties: Properties) : HTTypedEntityBlock(RagiumBlockTypes.BATTERY, properties) diff --git a/src/main/kotlin/hiiragi283/ragium/common/item/block/HTBatteryBlockItem.kt b/src/main/kotlin/hiiragi283/ragium/common/item/block/HTBatteryBlockItem.kt new file mode 100644 index 000000000..815e0dcda --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/item/block/HTBatteryBlockItem.kt @@ -0,0 +1,20 @@ +package hiiragi283.ragium.common.item.block + +import hiiragi283.ragium.common.block.storage.HTBatteryBlock +import net.minecraft.network.chat.Component +import net.minecraft.world.item.ItemStack +import net.minecraft.world.item.TooltipFlag + +class HTBatteryBlockItem(block: HTBatteryBlock, properties: Properties) : HTStorageBlockItem(block, properties) { + /** + * @see mekanism.common.item.block.ItemBlockEnergyCube.addStats + */ + override fun addStats( + stack: ItemStack, + context: TooltipContext, + tooltips: MutableList, + flag: TooltipFlag + ) { + super.addStats(stack, context, tooltips, flag) + } +} diff --git a/src/main/kotlin/hiiragi283/ragium/common/item/block/HTCrateBlockItem.kt b/src/main/kotlin/hiiragi283/ragium/common/item/block/HTCrateBlockItem.kt new file mode 100644 index 000000000..dcea15154 --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/item/block/HTCrateBlockItem.kt @@ -0,0 +1,5 @@ +package hiiragi283.ragium.common.item.block + +import hiiragi283.ragium.common.block.storage.HTCrateBlock + +class HTCrateBlockItem(block: HTCrateBlock, properties: Properties) : HTStorageBlockItem(block, properties) diff --git a/src/main/kotlin/hiiragi283/ragium/common/item/block/HTMachineBlockItem.kt b/src/main/kotlin/hiiragi283/ragium/common/item/block/HTMachineBlockItem.kt index 449795567..3650b8452 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/item/block/HTMachineBlockItem.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/item/block/HTMachineBlockItem.kt @@ -4,8 +4,10 @@ import hiiragi283.ragium.api.block.attribute.getAttributeTier import hiiragi283.ragium.api.item.HTDescriptionBlockItem import hiiragi283.ragium.common.block.HTTypedEntityBlock import hiiragi283.ragium.common.tier.HTMachineTier +import net.minecraft.ChatFormatting +import net.minecraft.world.item.ItemStack class HTMachineBlockItem(block: HTTypedEntityBlock<*>, properties: Properties) : HTDescriptionBlockItem>(block, properties) { - override fun getTier(): HTMachineTier? = block.getAttributeTier() + override fun getNameColor(stack: ItemStack): ChatFormatting? = block.getAttributeTier()?.getBaseTier()?.color } diff --git a/src/main/kotlin/hiiragi283/ragium/common/item/block/HTStorageBlockItem.kt b/src/main/kotlin/hiiragi283/ragium/common/item/block/HTStorageBlockItem.kt new file mode 100644 index 000000000..db848b76e --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/item/block/HTStorageBlockItem.kt @@ -0,0 +1,41 @@ +package hiiragi283.ragium.common.item.block + +import hiiragi283.ragium.api.block.HTBlockWithDescription +import hiiragi283.ragium.api.item.HTDescriptionBlockItem +import hiiragi283.ragium.api.item.HTSubCreativeTabContents +import hiiragi283.ragium.api.item.createItemStack +import hiiragi283.ragium.api.registry.HTItemHolderLike +import hiiragi283.ragium.api.storage.attachments.HTAttachedItems +import hiiragi283.ragium.api.upgrade.HTUpgradeHelper +import hiiragi283.ragium.common.HTUpgradeType +import hiiragi283.ragium.setup.RagiumDataComponents +import net.minecraft.ChatFormatting +import net.minecraft.world.item.CreativeModeTab +import net.minecraft.world.item.ItemStack +import net.minecraft.world.level.block.Block +import java.util.function.Consumer + +abstract class HTStorageBlockItem(block: BLOCK, properties: Properties) : + HTDescriptionBlockItem(block, properties), + HTSubCreativeTabContents + where BLOCK : Block, BLOCK : HTBlockWithDescription { + final override fun isFoil(stack: ItemStack): Boolean = super.isFoil(stack) || HTUpgradeHelper.isCreative(stack) + + final override fun getNameColor(stack: ItemStack): ChatFormatting? = when { + HTUpgradeHelper.isCreative(stack) -> ChatFormatting.LIGHT_PURPLE + else -> super.getNameColor(stack) + } + + final override fun addItems( + baseItem: HTItemHolderLike, + parameters: CreativeModeTab.ItemDisplayParameters, + consumer: Consumer, + ) { + // Creative Version + createItemStack( + baseItem, + RagiumDataComponents.MACHINE_UPGRADES, + HTAttachedItems(listOf(HTUpgradeType.CREATIVE.toImmutableStack(1))), + ).let(consumer::accept) + } +} diff --git a/src/main/kotlin/hiiragi283/ragium/common/item/block/HTTankBlockItem.kt b/src/main/kotlin/hiiragi283/ragium/common/item/block/HTTankBlockItem.kt index 1ec7450b3..49b360262 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/item/block/HTTankBlockItem.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/item/block/HTTankBlockItem.kt @@ -1,27 +1,19 @@ package hiiragi283.ragium.common.item.block import hiiragi283.ragium.api.capability.HTFluidCapabilities -import hiiragi283.ragium.api.item.HTDescriptionBlockItem import hiiragi283.ragium.api.item.HTSubCreativeTabContents -import hiiragi283.ragium.api.item.createItemStack -import hiiragi283.ragium.api.registry.HTItemHolderLike import hiiragi283.ragium.api.stack.ImmutableFluidStack -import hiiragi283.ragium.api.storage.attachments.HTAttachedItems import hiiragi283.ragium.api.storage.fluid.HTFluidView import hiiragi283.ragium.api.text.RagiumTranslation import hiiragi283.ragium.api.upgrade.HTUpgradeHelper -import hiiragi283.ragium.common.HTUpgradeType import hiiragi283.ragium.common.block.storage.HTTankBlock -import hiiragi283.ragium.setup.RagiumDataComponents import net.minecraft.ChatFormatting import net.minecraft.network.chat.Component -import net.minecraft.world.item.CreativeModeTab import net.minecraft.world.item.ItemStack import net.minecraft.world.item.TooltipFlag -import java.util.function.Consumer class HTTankBlockItem(block: HTTankBlock, properties: Properties) : - HTDescriptionBlockItem(block, properties), + HTStorageBlockItem(block, properties), HTSubCreativeTabContents { /** * @see mekanism.common.item.block.machine.ItemBlockFluidTank.addStats @@ -32,7 +24,7 @@ class HTTankBlockItem(block: HTTankBlock, properties: Properties) : tooltips: MutableList, flag: TooltipFlag, ) { - val isCreative: Boolean = HTUpgradeHelper.getHandler(stack)?.isCreative() ?: false + val isCreative: Boolean = HTUpgradeHelper.isCreative(stack) val view: HTFluidView = HTFluidCapabilities.getFluidView(stack, 0) ?: return // Fluid Name val stack: ImmutableFluidStack? = view.getStack() @@ -65,13 +57,4 @@ class HTTankBlockItem(block: HTTankBlock, properties: Properties) : ) }.let(tooltips::add) } - - override fun addItems(baseItem: HTItemHolderLike, parameters: CreativeModeTab.ItemDisplayParameters, consumer: Consumer) { - // Creative Tank - createItemStack( - baseItem, - RagiumDataComponents.MACHINE_UPGRADES, - HTAttachedItems(listOf(HTUpgradeType.CREATIVE.toImmutableStack(1))), - ).let(consumer::accept) - } } diff --git a/src/main/kotlin/hiiragi283/ragium/common/text/RagiumCommonTranslation.kt b/src/main/kotlin/hiiragi283/ragium/common/text/RagiumCommonTranslation.kt index 70f7f570e..c8bd14903 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/text/RagiumCommonTranslation.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/text/RagiumCommonTranslation.kt @@ -60,6 +60,7 @@ enum class RagiumCommonTranslation(type: String, vararg path: String) : HTTransl CEU("description", "creative_energy_unit"), // Blocks - Storages + BATTERY("description", "battery"), CRATE("description", "crate"), TANK("description", "tank"), diff --git a/src/main/kotlin/hiiragi283/ragium/config/RagiumCommonConfig.kt b/src/main/kotlin/hiiragi283/ragium/config/RagiumCommonConfig.kt index 8d697dab4..78825afc3 100644 --- a/src/main/kotlin/hiiragi283/ragium/config/RagiumCommonConfig.kt +++ b/src/main/kotlin/hiiragi283/ragium/config/RagiumCommonConfig.kt @@ -57,6 +57,9 @@ class RagiumCommonConfig(builder: ModConfigSpec.Builder) { val milkCollectorMultiplier: HTIntConfigValue // Storage + @JvmField + val batteryCapacity: HTIntConfigValue + @JvmField val crateCapacity: HTIntConfigValue @@ -108,6 +111,7 @@ class RagiumCommonConfig(builder: ModConfigSpec.Builder) { builder.pop() // Storage builder.push("storage") + batteryCapacity = builder.definePositiveInt("battery_capacity", 1_024_000) crateCapacity = builder.definePositiveInt("crate_capacity", 32 * 64) tankCapacity = builder.definePositiveInt("tank_capacity", 16000) builder.pop() diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlockEntityTypes.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlockEntityTypes.kt index 879baffcb..8bdbcc948 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlockEntityTypes.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlockEntityTypes.kt @@ -13,7 +13,6 @@ import hiiragi283.ragium.api.storage.HTHandlerProvider import hiiragi283.ragium.common.block.entity.HTBlockEntity import hiiragi283.ragium.common.block.entity.HTImitationSpawnerBlockEntity import hiiragi283.ragium.common.block.entity.device.HTDimensionalAnchorBlockEntity -import hiiragi283.ragium.common.block.entity.device.HTEnergyNetworkAccessBlockEntity import hiiragi283.ragium.common.block.entity.device.HTFluidCollectorBlockEntity import hiiragi283.ragium.common.block.entity.device.HTItemCollectorBlockEntity import hiiragi283.ragium.common.block.entity.device.HTStoneCollectorBlockEntity @@ -40,6 +39,7 @@ import hiiragi283.ragium.common.block.entity.processor.HTMultiSmelterBlockEntity import hiiragi283.ragium.common.block.entity.processor.HTPulverizerBlockEntity import hiiragi283.ragium.common.block.entity.processor.HTRefineryBlockEntity import hiiragi283.ragium.common.block.entity.processor.HTSimulatorBlockEntity +import hiiragi283.ragium.common.block.entity.storage.HTBatteryBlockEntity import hiiragi283.ragium.common.block.entity.storage.HTCrateBlockEntity import hiiragi283.ragium.common.block.entity.storage.HTTankBlockEntity import net.minecraft.world.level.block.Block @@ -71,6 +71,9 @@ object RagiumBlockEntityTypes { REGISTER.addAlias("${it}_crate", "crate") } + REGISTER.addAlias("energy_network_interface", "battery") + REGISTER.addAlias("creative_energy_unit", "battery") + REGISTER.register(eventBus) eventBus.addListener(::addSupportedBlocks) @@ -216,12 +219,6 @@ object RagiumBlockEntityTypes { ::HTDimensionalAnchorBlockEntity, ) - @JvmField - val ENI: HTDeferredBlockEntityType = registerTick( - "energy_network_interface", - HTEnergyNetworkAccessBlockEntity::Simple, - ) - // Ultimate @JvmField val TELEPAD: HTDeferredBlockEntityType = REGISTER.registerType( @@ -229,15 +226,11 @@ object RagiumBlockEntityTypes { ::HTTelepadBlockentity, ) - // Creative - @JvmField - val CEU: HTDeferredBlockEntityType = registerTick( - "creative_energy_unit", - HTEnergyNetworkAccessBlockEntity::Creative, - ) - // Storage // + @JvmField + val BATTERY: HTDeferredBlockEntityType = registerTick("battery", ::HTBatteryBlockEntity) + @JvmField val CRATE: HTDeferredBlockEntityType = registerTick("crate", ::HTCrateBlockEntity) @@ -301,12 +294,9 @@ object RagiumBlockEntityTypes { registerHandler(event, STONE_COLLECTOR.get()) - registerHandler(event, ENI.get()) - registerHandler(event, TELEPAD.get()) - - registerHandler(event, CEU.get()) // Storage + registerHandler(event, BATTERY.get()) registerHandler(event, CRATE.get()) registerHandler(event, TANK.get()) diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlockTypes.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlockTypes.kt index 3daa93c7a..7b41afa33 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlockTypes.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlockTypes.kt @@ -258,13 +258,7 @@ object RagiumBlockTypes { .addTier(HTMachineTier.ELITE) .build(RagiumCommonTranslation.DIM_ANCHOR) - @JvmField - val ENI: HTEntityBlockType = HTEntityBlockType - .builder { RagiumBlockEntityTypes.ENI } - .addMenu { RagiumMenuTypes.ENERGY_NETWORK_ACCESS } - .addTier(HTMachineTier.ELITE) - .build(RagiumCommonTranslation.ENI) - + // Ultimate @JvmField val TELEPAD: HTEntityBlockType = HTEntityBlockType .builder { RagiumBlockEntityTypes.TELEPAD } @@ -272,16 +266,14 @@ object RagiumBlockTypes { .addTier(HTMachineTier.ULTIMATE) .build() - // Creative - @JvmField - val CEU: HTEntityBlockType = HTEntityBlockType - .builder { RagiumBlockEntityTypes.CEU } - .addMenu { RagiumMenuTypes.ENERGY_NETWORK_ACCESS } - .addTier(HTMachineTier.CREATIVE) - .build(RagiumCommonTranslation.CEU) - // Storage // + @JvmField + val BATTERY: HTEntityBlockType = HTEntityBlockType + .builder { RagiumBlockEntityTypes.BATTERY } + .addMenu { RagiumMenuTypes.BATTERY } + .build(RagiumCommonTranslation.BATTERY) + @JvmField val CRATE: HTEntityBlockType = HTEntityBlockType .builder { RagiumBlockEntityTypes.CRATE } diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlocks.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlocks.kt index a4afd1ccb..d1cf1d9fb 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlocks.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlocks.kt @@ -33,8 +33,11 @@ import hiiragi283.ragium.common.block.glass.HTGlassBlock import hiiragi283.ragium.common.block.glass.HTObsidianGlass import hiiragi283.ragium.common.block.glass.HTQuartzGlassBlock import hiiragi283.ragium.common.block.glass.HTWarpedGlassBlock +import hiiragi283.ragium.common.block.storage.HTBatteryBlock import hiiragi283.ragium.common.block.storage.HTCrateBlock import hiiragi283.ragium.common.block.storage.HTTankBlock +import hiiragi283.ragium.common.item.block.HTBatteryBlockItem +import hiiragi283.ragium.common.item.block.HTCrateBlockItem import hiiragi283.ragium.common.item.block.HTExpBerriesItem import hiiragi283.ragium.common.item.block.HTImitationSpawnerBlockItem import hiiragi283.ragium.common.item.block.HTMachineBlockItem @@ -104,6 +107,9 @@ object RagiumBlocks { REGISTER.addAlias("${it}_drum", "tank") REGISTER.addAlias("${it}_crate", "crate") } + // ENI, CEU + REGISTER.addAlias("energy_network_interface", "battery") + REGISTER.addAlias("creative_energy_unit", "battery") } @JvmStatic @@ -593,28 +599,27 @@ object RagiumBlocks { val DIM_ANCHOR: HTDeferredBlock = registerMachineTier("dimensional_anchor", RagiumBlockTypes.DIM_ANCHOR, machine()) - @JvmField - val ENI: HTDeferredBlock = - registerMachineTier("energy_network_interface", RagiumBlockTypes.ENI, machine()) - // Ultimate @JvmField val TELEPAD: HTDeferredBlock = registerMachineTier("telepad", RagiumBlockTypes.TELEPAD, machine().workInProgress()) - // Creative - @JvmField - val CEU: HTDeferredBlock = - registerMachineTier("creative_energy_unit", RagiumBlockTypes.CEU, machine()) - // Storages // @JvmField - val CRATE: HTDescriptionDeferredBlock = REGISTER.register( + val BATTERY: HTDeferredBlock = REGISTER.register( + "battery", + copyOf(Blocks.IRON_BLOCK).noOcclusion(), + ::HTBatteryBlock, + ::HTBatteryBlockItem, + ) + + @JvmField + val CRATE: HTDeferredBlock = REGISTER.register( "crate", copyOf(Blocks.COPPER_BLOCK).noOcclusion(), ::HTCrateBlock, - ::HTDescriptionBlockItem, + ::HTCrateBlockItem, ) @JvmField diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumItems.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumItems.kt index a96c8e71a..4cafe78ad 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumItems.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumItems.kt @@ -648,7 +648,14 @@ object RagiumItems { // Machine @JvmField val MACHINE_UPGRADES: Map = HTUpgradeType.entries.associateWith { type: HTUpgradeType -> - REGISTER.registerSimpleItem("${type.serializedName}_upgrade") + val tier: HTBaseTier = when (type.group) { + HTUpgradeType.Group.CREATIVE -> HTBaseTier.CREATIVE + HTUpgradeType.Group.GENERATOR -> HTBaseTier.ULTIMATE + HTUpgradeType.Group.PROCESSOR -> HTBaseTier.ELITE + HTUpgradeType.Group.DEVICE -> HTBaseTier.ADVANCED + HTUpgradeType.Group.STORAGE -> HTBaseTier.BASIC + } + REGISTER.registerItemWith("${type.serializedName}_upgrade", tier, ::HTTierBasedItem) } // Event // diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumMenuTypes.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumMenuTypes.kt index 0d3f60c7a..d421eff07 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumMenuTypes.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumMenuTypes.kt @@ -7,7 +7,6 @@ import hiiragi283.ragium.api.storage.item.HTItemHandler import hiiragi283.ragium.api.world.getTypedBlockEntity import hiiragi283.ragium.common.block.entity.HTBlockEntity import hiiragi283.ragium.common.block.entity.HTConfigurableBlockEntity -import hiiragi283.ragium.common.block.entity.device.HTEnergyNetworkAccessBlockEntity import hiiragi283.ragium.common.block.entity.device.HTFluidCollectorBlockEntity import hiiragi283.ragium.common.block.entity.device.HTItemCollectorBlockEntity import hiiragi283.ragium.common.block.entity.device.HTTelepadBlockentity @@ -28,6 +27,7 @@ import hiiragi283.ragium.common.block.entity.processor.HTRefineryBlockEntity import hiiragi283.ragium.common.block.entity.processor.HTSimulatorBlockEntity import hiiragi283.ragium.common.block.entity.processor.base.HTAbstractSmelterBlockEntity import hiiragi283.ragium.common.block.entity.processor.base.HTSingleItemInputBlockEntity +import hiiragi283.ragium.common.block.entity.storage.HTBatteryBlockEntity import hiiragi283.ragium.common.block.entity.storage.HTCrateBlockEntity import hiiragi283.ragium.common.block.entity.storage.HTTankBlockEntity import hiiragi283.ragium.common.inventory.container.HTAccessConfigurationMenu @@ -49,12 +49,6 @@ object RagiumMenuTypes { @JvmField val REGISTER = HTDeferredMenuTypeRegister(RagiumAPI.MOD_ID) - @JvmField - val CRATE: DeferredBEMenu = registerBE("crate") - - @JvmField - val TANK: DeferredBEMenu = registerBE("tank") - @JvmField val ACCESS_CONFIG: HTDeferredMenuType.WithContext = REGISTER.registerType("access_configuration", ::HTAccessConfigurationMenu, ::getBlockEntityFromBuf) @@ -129,9 +123,6 @@ object RagiumMenuTypes { // Device // - @JvmField - val ENERGY_NETWORK_ACCESS: DeferredBEMenu = registerBE("energy_network_access") - @JvmField val FLUID_COLLECTOR: DeferredBEMenu = registerBE("fluid_collector") @@ -141,6 +132,17 @@ object RagiumMenuTypes { @JvmField val TELEPAD: DeferredBEMenu = registerBE("telepad") + // Storage // + + @JvmField + val BATTERY: DeferredBEMenu = registerBE("battery") + + @JvmField + val CRATE: DeferredBEMenu = registerBE("crate") + + @JvmField + val TANK: DeferredBEMenu = registerBE("tank") + // Extensions // /** diff --git a/src/main/resources/assets/ragium/textures/block/creative_energy_unit.png b/src/main/resources/assets/ragium/textures/block/creative_energy_unit.png deleted file mode 100644 index 2749d7b5917f4a579d010b4fbdd2e5e3801f4b04..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 265 zcmV+k0rvihP)ym2ZuI<&190@ zM7;N|1cLu|xWl&19QJ(uH1CIn>)C3*ox<_;3wCo{3j^?!vgqlZ@P*C`sw<}LpBGcL z1gq9Acce+Ghf}H!U|K-MzTF6rR$1M&lK~haO@YFbGgB(Tu0Li*po5K2TV%W`wIX7|Npzti3qNphlvMx_tpG7bl|{;$H)2AI=*w5Kl!hZ8^dHy}c1&q2rA8t0JnHf23YY&Wynl)nyqkp~637Mui+z2 hypUt@ Date: Mon, 15 Dec 2025 02:09:08 +0900 Subject: [PATCH 42/49] feat: added new block Universal Buffer --- .../hiiragi283/ragium/api/text/Components.kt | 8 -- .../hiiragi283/ragium/api/text/HTTextUtil.kt | 19 ++- .../ragium/api/text/RagiumTranslation.kt | 6 - .../api/data/lang/HTLanguageProvider.kt | 4 - .../data/client/RagiumEnglishProvider.kt | 4 +- .../data/client/RagiumJapaneseProvider.kt | 4 +- .../recipe/RagiumMachineRecipeProvider.kt | 14 ++ .../server/tag/RagiumBlockTagsProvider.kt | 2 + .../data/server/tag/RagiumItemTagsProvider.kt | 2 + .../client/gui/component/HTEnergyWidget.kt | 2 +- .../ragium/common/block/HTDeviceBlock.kt | 5 + .../ragium/common/block/HTMachineBlock.kt | 5 + .../ragium/common/block/HTTypedEntityBlock.kt | 2 - .../entity/storage/HTBufferBlockEntity.kt | 69 +++++++++ .../common/block/storage/HTBufferBlock.kt | 7 + .../ragium/common/item/base/HTEnergyItem.kt | 3 +- .../common/item/block/HTBatteryBlockItem.kt | 36 ++++- .../common/item/block/HTBufferBlockItem.kt | 5 + .../energy/battery/HTMachineEnergyBattery.kt | 4 +- .../common/text/RagiumCommonTranslation.kt | 1 + .../ragium/setup/RagiumBlockEntityTypes.kt | 6 + .../ragium/setup/RagiumBlockTypes.kt | 6 + .../hiiragi283/ragium/setup/RagiumBlocks.kt | 134 ++++++++++-------- .../hiiragi283/ragium/setup/RagiumItems.kt | 8 ++ 24 files changed, 261 insertions(+), 95 deletions(-) create mode 100644 src/main/kotlin/hiiragi283/ragium/common/block/HTDeviceBlock.kt create mode 100644 src/main/kotlin/hiiragi283/ragium/common/block/HTMachineBlock.kt create mode 100644 src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTBufferBlockEntity.kt create mode 100644 src/main/kotlin/hiiragi283/ragium/common/block/storage/HTBufferBlock.kt create mode 100644 src/main/kotlin/hiiragi283/ragium/common/item/block/HTBufferBlockItem.kt diff --git a/src/api/kotlin/hiiragi283/ragium/api/text/Components.kt b/src/api/kotlin/hiiragi283/ragium/api/text/Components.kt index d1ff6fc03..567d08c48 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/text/Components.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/text/Components.kt @@ -1,6 +1,5 @@ package hiiragi283.ragium.api.text -import hiiragi283.ragium.api.storage.energy.HTEnergyBattery import net.minecraft.network.chat.Component import net.minecraft.network.chat.MutableComponent import net.minecraft.resources.ResourceKey @@ -52,10 +51,3 @@ fun levelText(key: ResourceKey): MutableComponent { val location: ResourceLocation = key.location() return translatableText(location.toLanguageKey(ILevelExtension.TRANSLATION_PREFIX), location.toString()) } - -private fun energyText(amount: Int, capacity: Int): MutableComponent = RagiumTranslation.FRACTION.translate( - RagiumTranslation.STORED_FE.translate(amount), - RagiumTranslation.STORED_FE.translate(capacity), -) - -fun energyText(battery: HTEnergyBattery): MutableComponent = energyText(battery.getAmount(), battery.getCapacity()) diff --git a/src/api/kotlin/hiiragi283/ragium/api/text/HTTextUtil.kt b/src/api/kotlin/hiiragi283/ragium/api/text/HTTextUtil.kt index a8b3a3965..b0fc62a0c 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/text/HTTextUtil.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/text/HTTextUtil.kt @@ -4,7 +4,6 @@ package hiiragi283.ragium.api.text import hiiragi283.ragium.api.RagiumConst import hiiragi283.ragium.api.stack.ImmutableFluidStack -import hiiragi283.ragium.api.storage.energy.HTEnergyBattery import net.minecraft.ChatFormatting import net.minecraft.network.chat.ClickEvent import net.minecraft.network.chat.Component @@ -61,8 +60,22 @@ object HTTextUtil { // Tooltips // @JvmStatic - fun addEnergyTooltip(battery: HTEnergyBattery, consumer: Consumer) { - battery.let(::energyText).let(consumer::accept) + fun addEnergyTooltip( + amount: Int, + consumer: Consumer, + isCreative: Boolean, + ) { + // Empty name if amount is not positive + if (amount <= 0) { + consumer.accept(RagiumTranslation.EMPTY.translate()) + return + } + // Fluid Name and Amount + if (isCreative) { + RagiumTranslation.STORED_FE.translate(RagiumTranslation.INFINITE) + } else { + RagiumTranslation.STORED_FE.translate(amount) + }.let(consumer::accept) } @JvmStatic diff --git a/src/api/kotlin/hiiragi283/ragium/api/text/RagiumTranslation.kt b/src/api/kotlin/hiiragi283/ragium/api/text/RagiumTranslation.kt index 2d6d4f530..e952bbf19 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/text/RagiumTranslation.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/text/RagiumTranslation.kt @@ -40,14 +40,8 @@ enum class RagiumTranslation(type: String, vararg path: String) : HTTranslation STORED_FE("gui", "stored", "fe"), FRACTION("gui", "fraction"), - PERCENTAGE("gui", "percentage"), TICK("gui", "tick"), - PER_MB("gui", "per", "mb"), - PER_TICK("gui", "per", "tick"), - - BURN_TIME("gui", "burn_tick"), - // Item Description TOOLTIP_BLOCK_POS("tooltip", "block_pos"), TOOLTIP_CHARGE_POWER("tooltip", "blast_power"), diff --git a/src/data/kotlin/hiiragi283/ragium/api/data/lang/HTLanguageProvider.kt b/src/data/kotlin/hiiragi283/ragium/api/data/lang/HTLanguageProvider.kt index 4d7517d97..6761509e1 100644 --- a/src/data/kotlin/hiiragi283/ragium/api/data/lang/HTLanguageProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/api/data/lang/HTLanguageProvider.kt @@ -116,11 +116,7 @@ abstract class HTLanguageProvider(output: PackOutput, val type: HTLanguageType) add(RagiumTranslation.STORED_FE, $$"%1$s FE") add(RagiumTranslation.FRACTION, $$"%1$s / %2$s") - add(RagiumTranslation.PERCENTAGE, $$"%1$s %") add(RagiumTranslation.TICK, $$"%1$s ticks") - - add(RagiumTranslation.PER_MB, $$"%1$s / mb") - add(RagiumTranslation.PER_TICK, $$"%1$s / ticks") } // Collection diff --git a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt index dbd32d9aa..73458cba4 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt @@ -176,6 +176,7 @@ class RagiumEnglishProvider(output: PackOutput) : HTLanguageProvider.English(out add(RagiumBlocks.BATTERY, "Variable Battery") add(RagiumBlocks.CRATE, "Variable Crate") add(RagiumBlocks.TANK, "Variable Tank") + add(RagiumBlocks.BUFFER, "Universal Buffer") } private fun enchantment() { @@ -399,8 +400,6 @@ class RagiumEnglishProvider(output: PackOutput) : HTLanguageProvider.English(out add(RagiumTranslation.MISSING_SERVER, "Could not find current server") add(RagiumTranslation.MISSING_REGISTRY, $$"Missing registry: %1$s") add(RagiumTranslation.MISSING_KEY, $$"Missing key: %1$s") - // API - GUI - add(RagiumTranslation.BURN_TIME, $$"Burn Time: %1$s ticks") // API - Item add(RagiumTranslation.TOOLTIP_BLOCK_POS, $$"Position: [%1$s, %2$s, %3$s]") add(RagiumTranslation.TOOLTIP_CHARGE_POWER, $$"Power: %1$s") @@ -463,6 +462,7 @@ class RagiumEnglishProvider(output: PackOutput) : HTLanguageProvider.English(out add(RagiumCommonTranslation.BATTERY, "A energy storage which capacity is extendable by upgrade.") add(RagiumCommonTranslation.CRATE, "A item storage which capacity is extendable by upgrade.") add(RagiumCommonTranslation.TANK, "A fluid storage which capacity is extendable by upgrade.") + add(RagiumCommonTranslation.BUFFER, "A combined storage with 9 slots, 3 tanks, and 1 battery.") add(RagiumCommonTranslation.CONFIG_ENERGY_CAPACITY, "Energy Capacity") add(RagiumCommonTranslation.CONFIG_ENERGY_RATE, "Energy Rate") diff --git a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt index 53c8e264a..6dd56b0d6 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt @@ -167,6 +167,7 @@ class RagiumJapaneseProvider(output: PackOutput) : HTLanguageProvider.Japanese(o add(RagiumBlocks.BATTERY, "可変バッテリー") add(RagiumBlocks.CRATE, "可変クレート") add(RagiumBlocks.TANK, "可変タンク") + add(RagiumBlocks.BUFFER, "万能バッファ") } private fun enchantment() { @@ -400,8 +401,6 @@ class RagiumJapaneseProvider(output: PackOutput) : HTLanguageProvider.Japanese(o add(RagiumTranslation.MISSING_SERVER, "サーバーが見つかりません") add(RagiumTranslation.MISSING_REGISTRY, $$"不明なレジストリ: %1$s") add(RagiumTranslation.MISSING_KEY, $$"不明なキー: %1$s") - // API - GUI - add(RagiumTranslation.BURN_TIME, $$"燃焼時間: %1$s ticks") // API - Item add(RagiumTranslation.TOOLTIP_BLOCK_POS, $$"座標: [%1$s, %2$s, %3$s]") add(RagiumTranslation.TOOLTIP_CHARGE_POWER, $$"威力: %1$s") @@ -464,6 +463,7 @@ class RagiumJapaneseProvider(output: PackOutput) : HTLanguageProvider.Japanese(o add(RagiumCommonTranslation.BATTERY, "アップグレードで容量を拡張可能なエネルギーストレージです。") add(RagiumCommonTranslation.CRATE, "アップグレードで容量を拡張可能なアイテムストレージです。") add(RagiumCommonTranslation.TANK, "アップグレードで容量を拡張可能な液体ストレージです。") + add(RagiumCommonTranslation.BUFFER, "9つのスロット,3つのタンク,1つのバッテリーを併せ持つストレージです。") add(RagiumCommonTranslation.CONFIG_ENERGY_CAPACITY, "エネルギー容量") add(RagiumCommonTranslation.CONFIG_ENERGY_RATE, "エネルギー使用速度") diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumMachineRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumMachineRecipeProvider.kt index 40c8f1c80..159395b74 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumMachineRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumMachineRecipeProvider.kt @@ -398,6 +398,20 @@ object RagiumMachineRecipeProvider : HTRecipeProvider.Direct() { resetComponent(block, component) } + // Buffer + HTShapedRecipeBuilder + .create(RagiumBlocks.BUFFER) + .pattern( + "ABA", + "CDE", + "ABA", + ).define('A', CommonMaterialPrefixes.INGOT, RagiumMaterialKeys.ADVANCED_RAGI_ALLOY) + .define('B', RagiumModTags.Items.PLASTICS) + .define('C', CommonMaterialPrefixes.GEM, RagiumMaterialKeys.RAGI_CRYSTAL) + .define('D', Tags.Items.CHESTS) + .define('E', Tags.Items.BUCKETS_EMPTY) + .save(output) + // Tank with Minecart HTShapelessRecipeBuilder .create(RagiumItems.TANK_MINECART) diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/tag/RagiumBlockTagsProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/tag/RagiumBlockTagsProvider.kt index 7d606df7d..9e84f255e 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/tag/RagiumBlockTagsProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/tag/RagiumBlockTagsProvider.kt @@ -120,6 +120,8 @@ class RagiumBlockTagsProvider(context: HTDataGenContext) : HTTagsProvider add(RagiumBlocks.BATTERY) add(RagiumBlocks.CRATE) add(RagiumBlocks.TANK) + + add(RagiumBlocks.BUFFER) }.forEach(pickaxe::add) pickaxe diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/tag/RagiumItemTagsProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/tag/RagiumItemTagsProvider.kt index bc561aeb7..a0bba8267 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/tag/RagiumItemTagsProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/tag/RagiumItemTagsProvider.kt @@ -305,6 +305,7 @@ class RagiumItemTagsProvider(private val blockTags: CompletableFuture, flag: TooltipFlag) { - HTTextUtil.addEnergyTooltip(battery, consumer) + HTTextUtil.addEnergyTooltip(battery.getAmount(), consumer, false) } } diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/HTDeviceBlock.kt b/src/main/kotlin/hiiragi283/ragium/common/block/HTDeviceBlock.kt new file mode 100644 index 000000000..d7b86932c --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/block/HTDeviceBlock.kt @@ -0,0 +1,5 @@ +package hiiragi283.ragium.common.block + +import hiiragi283.ragium.api.block.type.HTEntityBlockType + +class HTDeviceBlock(type: HTEntityBlockType, properties: Properties) : HTTypedEntityBlock(type, properties) diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/HTMachineBlock.kt b/src/main/kotlin/hiiragi283/ragium/common/block/HTMachineBlock.kt new file mode 100644 index 000000000..95a2d43bb --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/block/HTMachineBlock.kt @@ -0,0 +1,5 @@ +package hiiragi283.ragium.common.block + +import hiiragi283.ragium.common.block.type.HTMachineBlockType + +class HTMachineBlock(type: HTMachineBlockType, properties: Properties) : HTTypedEntityBlock(type, properties) diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/HTTypedEntityBlock.kt b/src/main/kotlin/hiiragi283/ragium/common/block/HTTypedEntityBlock.kt index 9401a740d..ba81ab26c 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/HTTypedEntityBlock.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/HTTypedEntityBlock.kt @@ -31,8 +31,6 @@ import net.minecraft.world.phys.HitResult import net.neoforged.neoforge.common.Tags import java.util.function.UnaryOperator -typealias HTSimpleTypedEntityBlock = HTTypedEntityBlock - /** * @see mekanism.common.block.prefab.BlockTile */ diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTBufferBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTBufferBlockEntity.kt new file mode 100644 index 000000000..e4e25eeee --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTBufferBlockEntity.kt @@ -0,0 +1,69 @@ +package hiiragi283.ragium.common.block.entity.storage + +import hiiragi283.ragium.api.stack.ImmutableFluidStack +import hiiragi283.ragium.api.storage.holder.HTSlotInfo +import hiiragi283.ragium.api.util.HTContentListener +import hiiragi283.ragium.common.block.entity.HTUpgradableBlockEntity +import hiiragi283.ragium.common.storage.energy.battery.HTBasicEnergyBattery +import hiiragi283.ragium.common.storage.fluid.tank.HTBasicFluidTank +import hiiragi283.ragium.common.storage.holder.HTBasicFluidTankHolder +import hiiragi283.ragium.common.storage.item.slot.HTBasicItemSlot +import hiiragi283.ragium.setup.RagiumBlocks +import net.minecraft.core.BlockPos +import net.minecraft.core.Holder +import net.minecraft.server.level.ServerLevel +import net.minecraft.world.level.block.Block +import net.minecraft.world.level.block.state.BlockState +import org.apache.commons.lang3.math.Fraction + +open class HTBufferBlockEntity(blockHolder: Holder, pos: BlockPos, state: BlockState) : + HTUpgradableBlockEntity(blockHolder, pos, state) { + constructor(pos: BlockPos, state: BlockState) : this(RagiumBlocks.BUFFER, pos, state) + + lateinit var battery: HTBasicEnergyBattery + private set + lateinit var tanks: List + private set + lateinit var slots: List + private set + + override fun initializeFluidTanks(builder: HTBasicFluidTankHolder.Builder, listener: HTContentListener) { + tanks = arrayOf(0, 1, 2).map { i: Int -> + builder.addSlot( + HTSlotInfo.BOTH, + HTBasicFluidTank.create(listener, 4000, filter = { stack: ImmutableFluidStack -> + for (j: Int in tanks.indices) { + if (i == j) continue + val tankIn: HTBasicFluidTank = tanks[j] + if (tankIn.isSameStack(stack)) { + return@create false + } + } + true + }) + ) + } + } + + // Ticking // + + private val oldScales: Array = Array(4) { Fraction.ZERO } + + override fun onUpdateServer(level: ServerLevel, pos: BlockPos, state: BlockState): Boolean { + val list: List<() -> Fraction> = listOf( + battery::getStoredLevel, + tanks[0]::getStoredLevel, + tanks[1]::getStoredLevel, + tanks[2]::getStoredLevel, + ) + var needSync = false + for (i: Int in list.indices) { + val scale: Fraction = list[i]() + if (scale != this.oldScales[i]) { + this.oldScales[i] = scale + needSync = true + } + } + return needSync + } +} diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/storage/HTBufferBlock.kt b/src/main/kotlin/hiiragi283/ragium/common/block/storage/HTBufferBlock.kt new file mode 100644 index 000000000..65a995733 --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/block/storage/HTBufferBlock.kt @@ -0,0 +1,7 @@ +package hiiragi283.ragium.common.block.storage + +import hiiragi283.ragium.api.block.type.HTEntityBlockType +import hiiragi283.ragium.common.block.HTTypedEntityBlock +import hiiragi283.ragium.setup.RagiumBlockTypes + +class HTBufferBlock(properties: Properties) : HTTypedEntityBlock(RagiumBlockTypes.BUFFER, properties) diff --git a/src/main/kotlin/hiiragi283/ragium/common/item/base/HTEnergyItem.kt b/src/main/kotlin/hiiragi283/ragium/common/item/base/HTEnergyItem.kt index 10dcd3f3a..de57bd9da 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/item/base/HTEnergyItem.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/item/base/HTEnergyItem.kt @@ -4,6 +4,7 @@ import hiiragi283.ragium.api.capability.HTEnergyCapabilities import hiiragi283.ragium.api.math.times import hiiragi283.ragium.api.storage.energy.HTEnergyBattery import hiiragi283.ragium.api.text.HTTextUtil +import hiiragi283.ragium.api.upgrade.HTUpgradeHelper import net.minecraft.network.chat.Component import net.minecraft.world.item.Item import net.minecraft.world.item.ItemStack @@ -31,6 +32,6 @@ open class HTEnergyItem(properties: Properties) : Item(properties) { flag: TooltipFlag, ) { val battery: HTEnergyBattery = getBattery(stack) ?: return - HTTextUtil.addEnergyTooltip(battery, tooltips::add) + HTTextUtil.addEnergyTooltip(battery.getAmount(), tooltips::add, HTUpgradeHelper.isCreative(stack)) } } diff --git a/src/main/kotlin/hiiragi283/ragium/common/item/block/HTBatteryBlockItem.kt b/src/main/kotlin/hiiragi283/ragium/common/item/block/HTBatteryBlockItem.kt index 815e0dcda..e90169b10 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/item/block/HTBatteryBlockItem.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/item/block/HTBatteryBlockItem.kt @@ -1,6 +1,11 @@ package hiiragi283.ragium.common.item.block +import hiiragi283.ragium.api.capability.HTEnergyCapabilities +import hiiragi283.ragium.api.storage.HTAmountSlot +import hiiragi283.ragium.api.text.RagiumTranslation +import hiiragi283.ragium.api.upgrade.HTUpgradeHelper import hiiragi283.ragium.common.block.storage.HTBatteryBlock +import net.minecraft.ChatFormatting import net.minecraft.network.chat.Component import net.minecraft.world.item.ItemStack import net.minecraft.world.item.TooltipFlag @@ -13,8 +18,35 @@ class HTBatteryBlockItem(block: HTBatteryBlock, properties: Properties) : HTStor stack: ItemStack, context: TooltipContext, tooltips: MutableList, - flag: TooltipFlag + flag: TooltipFlag, ) { - super.addStats(stack, context, tooltips, flag) + val isCreative: Boolean = HTUpgradeHelper.isCreative(stack) + val view: HTAmountSlot.IntSized = HTEnergyCapabilities.getBattery(stack) ?: return + // Energy Amount + val amount: Int = view.getAmount() + when { + amount <= 0 -> RagiumTranslation.EMPTY.translateColored(ChatFormatting.DARK_RED) + isCreative -> RagiumTranslation.STORED_FE.translateColored( + ChatFormatting.GRAY, + RagiumTranslation.INFINITE, + ) + else -> RagiumTranslation.STORED_FE.translateColored( + ChatFormatting.GRAY, + amount, + ) + }.let(tooltips::add) + // Energy Capacity + when (isCreative) { + true -> RagiumTranslation.CAPACITY.translateColored( + ChatFormatting.BLUE, + ChatFormatting.GRAY, + RagiumTranslation.INFINITE, + ) + false -> RagiumTranslation.CAPACITY_FE.translateColored( + ChatFormatting.BLUE, + ChatFormatting.GRAY, + view.getCapacity(), + ) + }.let(tooltips::add) } } diff --git a/src/main/kotlin/hiiragi283/ragium/common/item/block/HTBufferBlockItem.kt b/src/main/kotlin/hiiragi283/ragium/common/item/block/HTBufferBlockItem.kt new file mode 100644 index 000000000..90e2e8721 --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/item/block/HTBufferBlockItem.kt @@ -0,0 +1,5 @@ +package hiiragi283.ragium.common.item.block + +import hiiragi283.ragium.common.block.storage.HTBufferBlock + +class HTBufferBlockItem(block: HTBufferBlock, properties: Properties) : HTStorageBlockItem(block, properties) diff --git a/src/main/kotlin/hiiragi283/ragium/common/storage/energy/battery/HTMachineEnergyBattery.kt b/src/main/kotlin/hiiragi283/ragium/common/storage/energy/battery/HTMachineEnergyBattery.kt index 28043d79d..1e5ea63db 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/storage/energy/battery/HTMachineEnergyBattery.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/storage/energy/battery/HTMachineEnergyBattery.kt @@ -43,9 +43,7 @@ sealed class HTMachineEnergyBattery( var currentEnergyPerTick: Int = this.baseEnergyPerTick - override fun getCapacity(): Int = HTUpgradeHelper.getEnergyCapacity(blockEntity, getBaseCapacity()) - - fun getBaseCapacity(): Int = super.getCapacity() + override fun getCapacity(): Int = HTUpgradeHelper.getEnergyCapacity(blockEntity, super.getCapacity()) class Processor(attribute: HTEnergyBlockAttribute, listener: HTContentListener?, blockEntity: HTProcessorBlockEntity<*, *>) : HTMachineEnergyBattery>( diff --git a/src/main/kotlin/hiiragi283/ragium/common/text/RagiumCommonTranslation.kt b/src/main/kotlin/hiiragi283/ragium/common/text/RagiumCommonTranslation.kt index c8bd14903..f0608db0e 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/text/RagiumCommonTranslation.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/text/RagiumCommonTranslation.kt @@ -63,6 +63,7 @@ enum class RagiumCommonTranslation(type: String, vararg path: String) : HTTransl BATTERY("description", "battery"), CRATE("description", "crate"), TANK("description", "tank"), + BUFFER("description", "buffer"), // Config CONFIG_ENERGY_CAPACITY("config", "energy_capacity"), diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlockEntityTypes.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlockEntityTypes.kt index 8bdbcc948..391a45f77 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlockEntityTypes.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlockEntityTypes.kt @@ -40,6 +40,7 @@ import hiiragi283.ragium.common.block.entity.processor.HTPulverizerBlockEntity import hiiragi283.ragium.common.block.entity.processor.HTRefineryBlockEntity import hiiragi283.ragium.common.block.entity.processor.HTSimulatorBlockEntity import hiiragi283.ragium.common.block.entity.storage.HTBatteryBlockEntity +import hiiragi283.ragium.common.block.entity.storage.HTBufferBlockEntity import hiiragi283.ragium.common.block.entity.storage.HTCrateBlockEntity import hiiragi283.ragium.common.block.entity.storage.HTTankBlockEntity import net.minecraft.world.level.block.Block @@ -237,6 +238,9 @@ object RagiumBlockEntityTypes { @JvmField val TANK: HTDeferredBlockEntityType = registerTick("tank", ::HTTankBlockEntity) + @JvmField + val BUFFER: HTDeferredBlockEntityType = registerTick("buffer", ::HTBufferBlockEntity) + // Event // // Supported Blocks @@ -300,6 +304,8 @@ object RagiumBlockEntityTypes { registerHandler(event, CRATE.get()) registerHandler(event, TANK.get()) + registerHandler(event, BUFFER.get()) + RagiumAPI.LOGGER.info("Registered Block Capabilities!") } diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlockTypes.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlockTypes.kt index 7b41afa33..6c77fb19f 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlockTypes.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlockTypes.kt @@ -286,4 +286,10 @@ object RagiumBlockTypes { .addMenu { RagiumMenuTypes.TANK } .addShape(Block.box(2.0, 0.0, 2.0, 14.0, 16.0, 14.0)) .build(RagiumCommonTranslation.TANK) + + @JvmField + val BUFFER: HTEntityBlockType = HTEntityBlockType + .builder { RagiumBlockEntityTypes.BUFFER } + // .addMenu { RagiumMenuTypes.BUFFER } + .build(RagiumCommonTranslation.BUFFER) } diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlocks.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlocks.kt index d1cf1d9fb..0039fb8b6 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlocks.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlocks.kt @@ -20,13 +20,13 @@ import hiiragi283.ragium.api.registry.impl.HTSimpleDeferredBlock import hiiragi283.ragium.common.HTDecorationType import hiiragi283.ragium.common.block.HTBuddingQuartzBlock import hiiragi283.ragium.common.block.HTCrimsonSoilBlock +import hiiragi283.ragium.common.block.HTDeviceBlock import hiiragi283.ragium.common.block.HTEnchantPowerBlock import hiiragi283.ragium.common.block.HTExpBerriesBushBlock import hiiragi283.ragium.common.block.HTImitationSpawnerBlock -import hiiragi283.ragium.common.block.HTSimpleTypedEntityBlock +import hiiragi283.ragium.common.block.HTMachineBlock import hiiragi283.ragium.common.block.HTSpongeCakeBlock import hiiragi283.ragium.common.block.HTSweetBerriesCakeBlock -import hiiragi283.ragium.common.block.HTTypedEntityBlock import hiiragi283.ragium.common.block.HTWarpedWartBlock import hiiragi283.ragium.common.block.glass.HTCrimsonGlassBlock import hiiragi283.ragium.common.block.glass.HTGlassBlock @@ -34,9 +34,12 @@ import hiiragi283.ragium.common.block.glass.HTObsidianGlass import hiiragi283.ragium.common.block.glass.HTQuartzGlassBlock import hiiragi283.ragium.common.block.glass.HTWarpedGlassBlock import hiiragi283.ragium.common.block.storage.HTBatteryBlock +import hiiragi283.ragium.common.block.storage.HTBufferBlock import hiiragi283.ragium.common.block.storage.HTCrateBlock import hiiragi283.ragium.common.block.storage.HTTankBlock +import hiiragi283.ragium.common.block.type.HTMachineBlockType import hiiragi283.ragium.common.item.block.HTBatteryBlockItem +import hiiragi283.ragium.common.item.block.HTBufferBlockItem import hiiragi283.ragium.common.item.block.HTCrateBlockItem import hiiragi283.ragium.common.item.block.HTExpBerriesItem import hiiragi283.ragium.common.item.block.HTImitationSpawnerBlockItem @@ -113,19 +116,20 @@ object RagiumBlocks { } @JvmStatic - fun registerMachineTier( + fun registerMachine( name: String, - blockType: HTEntityBlockType, + blockType: HTMachineBlockType, properties: BlockBehaviour.Properties, - ): HTDeferredBlock = - REGISTER.registerTyped(name, blockType, properties, ::HTTypedEntityBlock, ::HTMachineBlockItem) + ): HTDeferredBlock = + REGISTER.registerTyped(name, blockType, properties, ::HTMachineBlock, ::HTMachineBlockItem) @JvmStatic - fun registerSimpleEntity( + fun registerDevice( name: String, blockType: HTEntityBlockType, properties: BlockBehaviour.Properties, - ): HTBasicDeferredBlock = REGISTER.registerSimple(name, { HTTypedEntityBlock(blockType, properties) }) + ): HTDeferredBlock = + REGISTER.registerTyped(name, blockType, properties, ::HTDeviceBlock, ::HTMachineBlockItem) @JvmStatic private fun copyOf(block: Block): BlockBehaviour.Properties = BlockBehaviour.Properties.ofFullCopy(block) @@ -435,7 +439,7 @@ object RagiumBlocks { // Basic @JvmField - val THERMAL_GENERATOR: HTDeferredBlock = registerMachineTier( + val THERMAL_GENERATOR: HTDeferredBlock = registerMachine( "thermal_generator", RagiumBlockTypes.THERMAL_GENERATOR, machine().noOcclusion(), @@ -443,14 +447,14 @@ object RagiumBlocks { // Advanced @JvmField - val CULINARY_GENERATOR: HTDeferredBlock = registerMachineTier( + val CULINARY_GENERATOR: HTDeferredBlock = registerMachine( "culinary_generator", RagiumBlockTypes.CULINARY_GENERATOR, machine().noOcclusion(), ) @JvmField - val MAGMATIC_GENERATOR: HTDeferredBlock = registerMachineTier( + val MAGMATIC_GENERATOR: HTDeferredBlock = registerMachine( "magmatic_generator", RagiumBlockTypes.MAGMATIC_GENERATOR, machine().noOcclusion(), @@ -458,7 +462,7 @@ object RagiumBlocks { // Elite @JvmField - val COMBUSTION_GENERATOR: HTDeferredBlock = registerMachineTier( + val COMBUSTION_GENERATOR: HTDeferredBlock = registerMachine( "combustion_generator", RagiumBlockTypes.COMBUSTION_GENERATOR, machine().noOcclusion(), @@ -475,7 +479,7 @@ object RagiumBlocks { ) @JvmField - val SOLAR_PANEL_CONTROLLER: HTDeferredBlock = registerMachineTier( + val SOLAR_PANEL_CONTROLLER: HTDeferredBlock = registerMachine( "solar_panel_controller", RagiumBlockTypes.SOLAR_PANEL_CONTROLLER, machine().noOcclusion(), @@ -483,14 +487,14 @@ object RagiumBlocks { // Ultimate @JvmField - val ENCHANTMENT_GENERATOR: HTDeferredBlock = registerMachineTier( + val ENCHANTMENT_GENERATOR: HTDeferredBlock = registerMachine( "enchantment_generator", RagiumBlockTypes.ENCHANTMENT_GENERATOR, machine().noOcclusion().workInProgress(), ) @JvmField - val NUCLEAR_REACTOR: HTDeferredBlock = registerMachineTier( + val NUCLEAR_REACTOR: HTDeferredBlock = registerMachine( "nuclear_reactor", RagiumBlockTypes.NUCLEAR_REACTOR, machine().noOcclusion().workInProgress(), @@ -500,79 +504,79 @@ object RagiumBlocks { // Basic @JvmField - val ALLOY_SMELTER: HTDeferredBlock = - registerMachineTier("alloy_smelter", RagiumBlockTypes.ALLOY_SMELTER, machine()) + val ALLOY_SMELTER: HTDeferredBlock = + registerMachine("alloy_smelter", RagiumBlockTypes.ALLOY_SMELTER, machine()) @JvmField - val BLOCK_BREAKER: HTDeferredBlock = - registerMachineTier("block_breaker", RagiumBlockTypes.BLOCK_BREAKER, machine()) + val BLOCK_BREAKER: HTDeferredBlock = + registerMachine("block_breaker", RagiumBlockTypes.BLOCK_BREAKER, machine()) @JvmField - val COMPRESSOR: HTDeferredBlock = - registerMachineTier("compressor", RagiumBlockTypes.COMPRESSOR, machine()) + val COMPRESSOR: HTDeferredBlock = + registerMachine("compressor", RagiumBlockTypes.COMPRESSOR, machine()) @JvmField - val CUTTING_MACHINE: HTDeferredBlock = - registerMachineTier("cutting_machine", RagiumBlockTypes.CUTTING_MACHINE, machine()) + val CUTTING_MACHINE: HTDeferredBlock = + registerMachine("cutting_machine", RagiumBlockTypes.CUTTING_MACHINE, machine()) @JvmField - val ELECTRIC_FURNACE: HTDeferredBlock = - registerMachineTier("electric_furnace", RagiumBlockTypes.ELECTRIC_FURNACE, machine()) + val ELECTRIC_FURNACE: HTDeferredBlock = + registerMachine("electric_furnace", RagiumBlockTypes.ELECTRIC_FURNACE, machine()) @JvmField - val EXTRACTOR: HTDeferredBlock = - registerMachineTier("extractor", RagiumBlockTypes.EXTRACTOR, machine()) + val EXTRACTOR: HTDeferredBlock = + registerMachine("extractor", RagiumBlockTypes.EXTRACTOR, machine()) @JvmField - val PULVERIZER: HTDeferredBlock = - registerMachineTier("pulverizer", RagiumBlockTypes.PULVERIZER, machine()) + val PULVERIZER: HTDeferredBlock = + registerMachine("pulverizer", RagiumBlockTypes.PULVERIZER, machine()) // Advanced @JvmField - val CRUSHER: HTDeferredBlock = - registerMachineTier("crusher", RagiumBlockTypes.CRUSHER, machine()) + val CRUSHER: HTDeferredBlock = + registerMachine("crusher", RagiumBlockTypes.CRUSHER, machine()) @JvmField - val MELTER: HTDeferredBlock = - registerMachineTier("melter", RagiumBlockTypes.MELTER, machine().noOcclusion()) + val MELTER: HTDeferredBlock = + registerMachine("melter", RagiumBlockTypes.MELTER, machine().noOcclusion()) @JvmField - val MIXER: HTDeferredBlock = - registerMachineTier("mixer", RagiumBlockTypes.MIXER, machine()) + val MIXER: HTDeferredBlock = + registerMachine("mixer", RagiumBlockTypes.MIXER, machine()) @JvmField - val REFINERY: HTDeferredBlock = - registerMachineTier("refinery", RagiumBlockTypes.REFINERY, machine().noOcclusion()) + val REFINERY: HTDeferredBlock = + registerMachine("refinery", RagiumBlockTypes.REFINERY, machine().noOcclusion()) // Elite @JvmField - val BREWERY: HTDeferredBlock = - registerMachineTier("brewery", RagiumBlockTypes.BREWERY, machine()) + val BREWERY: HTDeferredBlock = + registerMachine("brewery", RagiumBlockTypes.BREWERY, machine()) @JvmField - val ADVANCED_MIXER: HTDeferredBlock = - registerMachineTier("advanced_mixer", RagiumBlockTypes.ADVANCED_MIXER, machine()) + val ADVANCED_MIXER: HTDeferredBlock = + registerMachine("advanced_mixer", RagiumBlockTypes.ADVANCED_MIXER, machine()) @JvmField - val MULTI_SMELTER: HTDeferredBlock = - registerMachineTier("multi_smelter", RagiumBlockTypes.MULTI_SMELTER, machine()) + val MULTI_SMELTER: HTDeferredBlock = + registerMachine("multi_smelter", RagiumBlockTypes.MULTI_SMELTER, machine()) @JvmField - val PLANTER: HTDeferredBlock = - registerMachineTier("planter", RagiumBlockTypes.PLANTER, machine().noOcclusion().workInProgress()) + val PLANTER: HTDeferredBlock = + registerMachine("planter", RagiumBlockTypes.PLANTER, machine().noOcclusion().workInProgress()) // Ultimate @JvmField - val ENCHANTER: HTDeferredBlock = - registerMachineTier("enchanter", RagiumBlockTypes.ENCHANTER, machine().noOcclusion()) + val ENCHANTER: HTDeferredBlock = + registerMachine("enchanter", RagiumBlockTypes.ENCHANTER, machine().noOcclusion()) @JvmField - val MOB_CRUSHER: HTDeferredBlock = - registerMachineTier("mob_crusher", RagiumBlockTypes.MOB_CRUSHER, machine().noOcclusion()) + val MOB_CRUSHER: HTDeferredBlock = + registerMachine("mob_crusher", RagiumBlockTypes.MOB_CRUSHER, machine().noOcclusion()) @JvmField - val SIMULATOR: HTDeferredBlock = - registerMachineTier("simulator", RagiumBlockTypes.SIMULATOR, machine().noOcclusion()) + val SIMULATOR: HTDeferredBlock = + registerMachine("simulator", RagiumBlockTypes.SIMULATOR, machine().noOcclusion()) // Device // @@ -582,27 +586,27 @@ object RagiumBlocks { // Basic @JvmField - val FLUID_COLLECTOR: HTDeferredBlock = - registerMachineTier("fluid_collector", RagiumBlockTypes.FLUID_COLLECTOR, machine()) + val FLUID_COLLECTOR: HTDeferredBlock = + registerDevice("fluid_collector", RagiumBlockTypes.FLUID_COLLECTOR, machine()) @JvmField - val ITEM_COLLECTOR: HTDeferredBlock = - registerMachineTier("item_collector", RagiumBlockTypes.ITEM_COLLECTOR, machine()) + val ITEM_COLLECTOR: HTDeferredBlock = + registerDevice("item_collector", RagiumBlockTypes.ITEM_COLLECTOR, machine()) // Advanced @JvmField - val STONE_COLLECTOR: HTDeferredBlock = - registerMachineTier("stone_collector", RagiumBlockTypes.STONE_COLLECTOR, machine().workInProgress()) + val STONE_COLLECTOR: HTDeferredBlock = + registerDevice("stone_collector", RagiumBlockTypes.STONE_COLLECTOR, machine().workInProgress()) // Elite @JvmField - val DIM_ANCHOR: HTDeferredBlock = - registerMachineTier("dimensional_anchor", RagiumBlockTypes.DIM_ANCHOR, machine()) + val DIM_ANCHOR: HTDeferredBlock = + registerDevice("dimensional_anchor", RagiumBlockTypes.DIM_ANCHOR, machine()) // Ultimate @JvmField - val TELEPAD: HTDeferredBlock = - registerMachineTier("telepad", RagiumBlockTypes.TELEPAD, machine().workInProgress()) + val TELEPAD: HTDeferredBlock = + registerDevice("telepad", RagiumBlockTypes.TELEPAD, machine().workInProgress()) // Storages // @@ -629,4 +633,12 @@ object RagiumBlocks { ::HTTankBlock, ::HTTankBlockItem, ) + + @JvmField + val BUFFER: HTDeferredBlock = REGISTER.register( + "buffer", + copyOf(Blocks.COPPER_BLOCK).noOcclusion().workInProgress(), + ::HTBufferBlock, + ::HTBufferBlockItem, + ) } diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumItems.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumItems.kt index 4cafe78ad..f10e9a98c 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumItems.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumItems.kt @@ -701,6 +701,14 @@ object RagiumItems { ) // Energy + registerEnergy( + event, + { context: HTComponentHandler.ContainerContext -> + val capacity: Int = HTUpgradeHelper.getEnergyCapacity(context.attachedTo, RagiumConfig.COMMON.batteryCapacity.asInt) + HTComponentEnergyBattery.create(context, capacity) + }, + RagiumBlocks.BATTERY, + ) registerEnergy( event, { context: HTComponentHandler.ContainerContext -> From 2adee9203606c9fde5be342e36678bb5dafdbf6e Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Mon, 15 Dec 2025 03:00:42 +0900 Subject: [PATCH 43/49] feat: added sequenced assembly recipes for Create integration --- .../hiiragi283/ragium/api/text/HTTextUtil.kt | 6 +- .../recipe/RagiumChemistryRecipeProvider.kt | 8 +- .../server/recipe/RagiumFoodRecipeProvider.kt | 2 +- .../recipe/RagiumSimulatingRecipeProvider.kt | 12 +-- .../compat/RagiumCreateRecipeProvider.kt | 100 +++++++++++++++++- .../material/RagiumMaterialRecipeData.kt | 11 -- .../entity/storage/HTBufferBlockEntity.kt | 4 +- 7 files changed, 116 insertions(+), 27 deletions(-) diff --git a/src/api/kotlin/hiiragi283/ragium/api/text/HTTextUtil.kt b/src/api/kotlin/hiiragi283/ragium/api/text/HTTextUtil.kt index b0fc62a0c..9d8e52557 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/text/HTTextUtil.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/text/HTTextUtil.kt @@ -60,11 +60,7 @@ object HTTextUtil { // Tooltips // @JvmStatic - fun addEnergyTooltip( - amount: Int, - consumer: Consumer, - isCreative: Boolean, - ) { + fun addEnergyTooltip(amount: Int, consumer: Consumer, isCreative: Boolean) { // Empty name if amount is not positive if (amount <= 0) { consumer.accept(RagiumTranslation.EMPTY.translate()) diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumChemistryRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumChemistryRecipeProvider.kt index c6674f8c9..278317a30 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumChemistryRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumChemistryRecipeProvider.kt @@ -637,7 +637,13 @@ object RagiumChemistryRecipeProvider : HTRecipeProvider.Direct() { // Raw Rubber + Sulfur -> Rubber alloyFromData(RagiumMaterialRecipeData.RUBBER_SHEET) // Latex + Sulfur + Coal -> Rubber - mixFromData(RagiumMaterialRecipeData.BLACK_RUBBER_SHEET) + HTMixingRecipeBuilder + .create() + .addIngredient(itemCreator.fromTagKey(CommonMaterialPrefixes.DUST, VanillaMaterialKeys.COAL)) + .addIngredient(itemCreator.fromTagKey(CommonMaterialPrefixes.DUST, CommonMaterialKeys.Gems.SULFUR)) + .addIngredient(fluidCreator.fromHolder(RagiumFluidContents.LATEX, 1000)) + .setResult(resultHelper.item(CommonMaterialPrefixes.PLATE, CommonMaterialKeys.RUBBER, 4)) + .save(output) } @JvmStatic diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumFoodRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumFoodRecipeProvider.kt index ff57ee5d1..26d8cae45 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumFoodRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumFoodRecipeProvider.kt @@ -56,7 +56,7 @@ object RagiumFoodRecipeProvider : HTRecipeProvider.Direct() { .addIngredient(itemCreator.fromTagKey(CommonMaterialPrefixes.STORAGE_BLOCK, FoodMaterialKeys.CHOCOLATE, 64)) .addIngredient(itemCreator.fromItem(Items.HONEY_BLOCK, 64)) .addIngredient(itemCreator.fromItem(RagiumItems.IRIDESCENT_POWDER)) - .addIngredient(fluidCreator.fromHolder(RagiumFluidContents.CREAM, 8000)) + .addIngredient(fluidCreator.fromHolder(RagiumFluidContents.CREAM, 64_000)) .setResult(resultHelper.item(RagiumItems.AMBROSIA)) .save(output) diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumSimulatingRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumSimulatingRecipeProvider.kt index 620645944..599923692 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumSimulatingRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumSimulatingRecipeProvider.kt @@ -114,10 +114,10 @@ object RagiumSimulatingRecipeProvider : HTRecipeProvider.Direct() { HTMixingRecipeBuilder .create() .addIngredient(itemCreator.fromItem(RagiumItems.ELDER_HEART)) - .addIngredient(itemCreator.fromItem(Items.PRISMARINE_SHARD, 64)) - .addIngredient(itemCreator.fromTagKey(Tags.Items.GEMS_PRISMARINE, 64)) - .addIngredient(itemCreator.fromTagKey(CommonMaterialPrefixes.GEM, VanillaMaterialKeys.LAPIS, 64)) - .addIngredient(fluidCreator.water(8000)) + .addIngredient(itemCreator.fromItem(Items.PRISMARINE_SHARD, 16)) + .addIngredient(itemCreator.fromTagKey(Tags.Items.GEMS_PRISMARINE, 16)) + .addIngredient(itemCreator.fromTagKey(CommonMaterialPrefixes.GEM, VanillaMaterialKeys.LAPIS, 16)) + .addIngredient(fluidCreator.water(16_000)) .setResult(resultHelper.item(Items.HEART_OF_THE_SEA)) .save(output) // Dragon Breath @@ -200,8 +200,8 @@ object RagiumSimulatingRecipeProvider : HTRecipeProvider.Direct() { .addIngredient(itemCreator.fromItem(RagiumItems.WITHER_STAR)) .addIngredient(itemCreator.fromItem(Items.GHAST_TEAR, 16)) .addIngredient(itemCreator.fromTagKey(CommonMaterialPrefixes.SCRAP, VanillaMaterialKeys.NETHERITE, 16)) - .addIngredient(itemCreator.fromTagKey(CommonMaterialPrefixes.GEM, VanillaMaterialKeys.QUARTZ, 64)) - .addIngredient(fluidCreator.fromHolder(RagiumFluidContents.ELDRITCH_FLUX, 8000)) + .addIngredient(itemCreator.fromTagKey(CommonMaterialPrefixes.STORAGE_BLOCK, VanillaMaterialKeys.QUARTZ, 16)) + .addIngredient(fluidCreator.fromHolder(RagiumFluidContents.ELDRITCH_FLUX, 16_000)) .setResult(resultHelper.item(Items.NETHER_STAR)) .save(output) diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumCreateRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumCreateRecipeProvider.kt index 5094e5a93..ea19a852a 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumCreateRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumCreateRecipeProvider.kt @@ -3,39 +3,59 @@ package hiiragi283.ragium.data.server.recipe.compat import com.simibubi.create.AllItems import com.simibubi.create.AllRecipeTypes import com.simibubi.create.AllTags +import com.simibubi.create.content.fluids.transfer.FillingRecipe import com.simibubi.create.content.kinetics.crusher.CrushingRecipe +import com.simibubi.create.content.kinetics.deployer.DeployerApplicationRecipe import com.simibubi.create.content.kinetics.mixer.MixingRecipe +import com.simibubi.create.content.kinetics.press.PressingRecipe import com.simibubi.create.content.processing.recipe.HeatCondition +import com.simibubi.create.content.processing.recipe.ProcessingRecipe +import com.simibubi.create.content.processing.recipe.ProcessingRecipeBuilder +import com.simibubi.create.content.processing.recipe.ProcessingRecipeParams import com.simibubi.create.content.processing.recipe.StandardProcessingRecipe +import com.simibubi.create.content.processing.sequenced.SequencedAssemblyRecipeBuilder import com.simibubi.create.foundation.recipe.IRecipeTypeInfo +import hiiragi283.ragium.api.RagiumAPI import hiiragi283.ragium.api.RagiumConst import hiiragi283.ragium.api.data.recipe.HTRecipeData import hiiragi283.ragium.api.data.recipe.HTRecipeProvider import hiiragi283.ragium.api.function.IdToFunction +import hiiragi283.ragium.api.function.identity import hiiragi283.ragium.api.material.HTMaterialKey +import hiiragi283.ragium.api.material.HTMaterialLike import hiiragi283.ragium.api.material.prefix.HTMaterialPrefix +import hiiragi283.ragium.api.material.prefix.HTPrefixLike +import hiiragi283.ragium.api.registry.HTFluidHolderLike import hiiragi283.ragium.api.registry.HTItemHolderLike import hiiragi283.ragium.common.HTMoldType import hiiragi283.ragium.common.data.recipe.HTMixingRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTShapelessRecipeBuilder +import hiiragi283.ragium.common.material.CommonMaterialKeys import hiiragi283.ragium.common.material.CommonMaterialPrefixes +import hiiragi283.ragium.common.material.FoodMaterialKeys import hiiragi283.ragium.common.material.RagiumMaterialKeys +import hiiragi283.ragium.common.material.VanillaMaterialKeys import hiiragi283.ragium.common.variant.HTOreVariant import hiiragi283.ragium.impl.data.recipe.material.FoodMaterialRecipeData import hiiragi283.ragium.impl.data.recipe.material.RagiumMaterialRecipeData import hiiragi283.ragium.impl.data.recipe.material.VanillaMaterialRecipeData import hiiragi283.ragium.setup.RagiumBlocks +import hiiragi283.ragium.setup.RagiumFluidContents import hiiragi283.ragium.setup.RagiumIntegrationItems import hiiragi283.ragium.setup.RagiumItems import net.minecraft.resources.ResourceLocation +import net.minecraft.tags.TagKey +import net.minecraft.world.item.Item import net.minecraft.world.item.ItemStack import net.minecraft.world.item.Items import net.minecraft.world.item.crafting.CraftingBookCategory import net.minecraft.world.level.ItemLike +import net.neoforged.neoforge.common.Tags import net.neoforged.neoforge.common.crafting.SizedIngredient object RagiumCreateRecipeProvider : HTRecipeProvider.Integration(RagiumConst.CREATE) { override fun buildRecipeInternal() { + assembling() crushing { createBuilder(AllRecipeTypes.CRUSHING, it) } mixing { createBuilder(AllRecipeTypes.MIXING, it) } @@ -64,6 +84,52 @@ object RagiumCreateRecipeProvider : HTRecipeProvider.Integration(RagiumConst.CRE ): StandardProcessingRecipe.Builder = StandardProcessingRecipe.Builder(recipeType.getSerializer>().factory(), id) + @JvmStatic + private fun assembling() { + // Latex + Sulfur + Coal -> Rubber Sheet + SequencedAssemblyRecipeBuilder(RagiumAPI.id("rubber_sheet")) + .require(CommonMaterialPrefixes.DUST, CommonMaterialKeys.Gems.SULFUR) + .transitionTo(RagiumItems.getPlate(CommonMaterialKeys.RUBBER)) + .addOutput(RagiumItems.getPlate(CommonMaterialKeys.RUBBER).toStack(4), 1f) + .loops(1) + .addFillingStep(RagiumFluidContents.LATEX, 1000) + .addApplyStep(CommonMaterialPrefixes.DUST, VanillaMaterialKeys.COAL) + .build(output) + + // Ambrosia + SequencedAssemblyRecipeBuilder(RagiumAPI.id("ambrosia")) + .require(RagiumItems.IRIDESCENT_POWDER) + .transitionTo(RagiumItems.AMBROSIA) + .addOutput(RagiumItems.AMBROSIA, 1f) + .loops(64) + .addFillingStep(RagiumFluidContents.CREAM, 1000) + .addApplyStep(CommonMaterialPrefixes.STORAGE_BLOCK, FoodMaterialKeys.CHOCOLATE) + .addApplyStep(Items.HONEY_BLOCK) + .build(output) + // Heart of the Sea + SequencedAssemblyRecipeBuilder(RagiumAPI.id("heart_of_the_sea")) + .require(RagiumItems.ELDER_HEART) + .transitionTo(Items.HEART_OF_THE_SEA) + .addOutput(Items.HEART_OF_THE_SEA, 1f) + .loops(16) + .addFillingStep(HTFluidHolderLike.WATER, 1000) + .addApplyStep(Items.PRISMARINE_SHARD) + .addApplyStep(Tags.Items.GEMS_PRISMARINE) + .addApplyStep(CommonMaterialPrefixes.GEM, VanillaMaterialKeys.LAPIS) + .build(output) + // Nether Star + SequencedAssemblyRecipeBuilder(RagiumAPI.id("nether_star")) + .require(RagiumItems.WITHER_STAR) + .transitionTo(Items.NETHER_STAR) + .addOutput(Items.NETHER_STAR, 1f) + .loops(16) + .addFillingStep(RagiumFluidContents.ELDRITCH_FLUX, 500) + .addApplyStep(Items.GHAST_TEAR) + .addApplyStep(CommonMaterialPrefixes.SCRAP, VanillaMaterialKeys.NETHERITE) + .addApplyStep(CommonMaterialPrefixes.STORAGE_BLOCK, VanillaMaterialKeys.QUARTZ) + .build(output) + } + @JvmStatic private fun crushing(factory: IdToFunction>) { RagiumBlocks.ORES.forEach { (variant: HTOreVariant, key: HTMaterialKey, ore: HTItemHolderLike) -> @@ -140,6 +206,38 @@ object RagiumCreateRecipeProvider : HTRecipeProvider.Integration(RagiumConst.CRE fromData(RagiumMaterialRecipeData.NIGHT_METAL, HeatCondition.HEATED) fromData(RagiumMaterialRecipeData.IRIDESCENT_POWDER, HeatCondition.SUPERHEATED) - fromData(RagiumMaterialRecipeData.BLACK_RUBBER_SHEET, HeatCondition.HEATED) + factory + .apply(RagiumAPI.id("rubber_sheet")) + .require(CommonMaterialPrefixes.DUST, CommonMaterialKeys.Gems.SULFUR) + .require(CommonMaterialPrefixes.DUST, VanillaMaterialKeys.COAL) + .require(CommonMaterialPrefixes.PLATE, CommonMaterialKeys.RAW_RUBBER) + .require(CommonMaterialPrefixes.PLATE, CommonMaterialKeys.RAW_RUBBER) + .output(RagiumItems.getPlate(CommonMaterialKeys.RUBBER), 4) + .requiresHeat(HeatCondition.HEATED) + .build(output) } + + // Extensions // + + fun

, S : ProcessingRecipeBuilder> S.require( + prefix: HTPrefixLike, + material: HTMaterialLike, + ): S = this.require(prefix.itemTagKey(material)) + + fun SequencedAssemblyRecipeBuilder.require(prefix: HTPrefixLike, material: HTMaterialLike): SequencedAssemblyRecipeBuilder = + this.require(prefix.itemTagKey(material)) + + fun SequencedAssemblyRecipeBuilder.addFillingStep(holder: HTFluidHolderLike, amount: Int): SequencedAssemblyRecipeBuilder = + this.addStep(::FillingRecipe) { it.require(holder.getFluidTag(), amount) } + + fun SequencedAssemblyRecipeBuilder.addApplyStep(item: ItemLike): SequencedAssemblyRecipeBuilder = + this.addStep(::DeployerApplicationRecipe) { it.require(item) } + + fun SequencedAssemblyRecipeBuilder.addApplyStep(prefix: HTPrefixLike, material: HTMaterialLike): SequencedAssemblyRecipeBuilder = + this.addStep(::DeployerApplicationRecipe) { it.require(prefix, material) } + + fun SequencedAssemblyRecipeBuilder.addApplyStep(tagKey: TagKey): SequencedAssemblyRecipeBuilder = + this.addStep(::DeployerApplicationRecipe) { it.require(tagKey) } + + fun SequencedAssemblyRecipeBuilder.addPressStep(): SequencedAssemblyRecipeBuilder = this.addStep(::PressingRecipe, identity()) } diff --git a/src/data/kotlin/hiiragi283/ragium/impl/data/recipe/material/RagiumMaterialRecipeData.kt b/src/data/kotlin/hiiragi283/ragium/impl/data/recipe/material/RagiumMaterialRecipeData.kt index 2892cc16e..34da411e0 100644 --- a/src/data/kotlin/hiiragi283/ragium/impl/data/recipe/material/RagiumMaterialRecipeData.kt +++ b/src/data/kotlin/hiiragi283/ragium/impl/data/recipe/material/RagiumMaterialRecipeData.kt @@ -163,17 +163,6 @@ data object RagiumMaterialRecipeData { addOutput(RagiumItems.getPlate(CommonMaterialKeys.RUBBER), CommonMaterialPrefixes.PLATE, CommonMaterialKeys.RUBBER, 2) } - @JvmField - val BLACK_RUBBER_SHEET: HTRecipeData = HTRecipeData.create { - addInput(CommonMaterialPrefixes.DUST, VanillaMaterialKeys.COAL) - addInput(CommonMaterialPrefixes.DUST, CommonMaterialKeys.Gems.SULFUR) - addInput(RagiumFluidContents.LATEX, 1000) - - addOutput(RagiumItems.getPlate(CommonMaterialKeys.RUBBER), CommonMaterialPrefixes.PLATE, CommonMaterialKeys.RUBBER, 4) - - setSuffix("_with_carbon") - } - // Other // @JvmField diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTBufferBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTBufferBlockEntity.kt index e4e25eeee..106428b1a 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTBufferBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTBufferBlockEntity.kt @@ -26,7 +26,7 @@ open class HTBufferBlockEntity(blockHolder: Holder, pos: BlockPos, state: private set lateinit var slots: List private set - + override fun initializeFluidTanks(builder: HTBasicFluidTankHolder.Builder, listener: HTContentListener) { tanks = arrayOf(0, 1, 2).map { i: Int -> builder.addSlot( @@ -40,7 +40,7 @@ open class HTBufferBlockEntity(blockHolder: Holder, pos: BlockPos, state: } } true - }) + }), ) } } From 82a26e3c53db74a8235070bc7cc14f1722a3782f Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Mon, 15 Dec 2025 03:06:18 +0900 Subject: [PATCH 44/49] fix: added menu for Advanced Mixer --- .../hiiragi283/ragium/client/RagiumClient.kt | 2 ++ .../screen/processor/HTAdvancedMixerScreen.kt | 20 +++++++++++++++++++ .../processor/HTAdvancedMixerBlockEntity.kt | 13 ++++++++++-- .../ragium/setup/RagiumBlockTypes.kt | 1 + .../ragium/setup/RagiumMenuTypes.kt | 4 ++++ 5 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 src/main/kotlin/hiiragi283/ragium/client/gui/screen/processor/HTAdvancedMixerScreen.kt diff --git a/src/main/kotlin/hiiragi283/ragium/client/RagiumClient.kt b/src/main/kotlin/hiiragi283/ragium/client/RagiumClient.kt index ecbf74bee..91401e95d 100644 --- a/src/main/kotlin/hiiragi283/ragium/client/RagiumClient.kt +++ b/src/main/kotlin/hiiragi283/ragium/client/RagiumClient.kt @@ -23,6 +23,7 @@ import hiiragi283.ragium.client.gui.screen.HTTelepadScreen import hiiragi283.ragium.client.gui.screen.generator.HTCombustionGeneratorScreen import hiiragi283.ragium.client.gui.screen.generator.HTGeneratorScreen import hiiragi283.ragium.client.gui.screen.generator.HTMagmaticGeneratorScreen +import hiiragi283.ragium.client.gui.screen.processor.HTAdvancedMixerScreen import hiiragi283.ragium.client.gui.screen.processor.HTCrusherScreen import hiiragi283.ragium.client.gui.screen.processor.HTMixerScreen import hiiragi283.ragium.client.gui.screen.processor.HTMobCrusherScreen @@ -265,6 +266,7 @@ class RagiumClient(eventBus: IEventBus, container: ModContainer) { event.register(RagiumMenuTypes.UNIVERSAL_BUNDLE.get(), ::HTGenericScreen) event.register(RagiumMenuTypes.ALLOY_SMELTER, ::HTProcessorScreen) + event.register(RagiumMenuTypes.ADVANCED_MIXER, ::HTAdvancedMixerScreen) event.register(RagiumMenuTypes.BATTERY, ::HTBatteryScreen) event.register(RagiumMenuTypes.BREWERY, HTSingleFluidProcessorScreen.Companion::combine) event.register(RagiumMenuTypes.COMBUSTION_GENERATOR, ::HTCombustionGeneratorScreen) diff --git a/src/main/kotlin/hiiragi283/ragium/client/gui/screen/processor/HTAdvancedMixerScreen.kt b/src/main/kotlin/hiiragi283/ragium/client/gui/screen/processor/HTAdvancedMixerScreen.kt new file mode 100644 index 000000000..7b19a6589 --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/client/gui/screen/processor/HTAdvancedMixerScreen.kt @@ -0,0 +1,20 @@ +package hiiragi283.ragium.client.gui.screen.processor + +import hiiragi283.ragium.common.block.entity.processor.HTAdvancedMixerBlockEntity +import hiiragi283.ragium.common.inventory.HTSlotHelper +import hiiragi283.ragium.common.inventory.container.HTBlockEntityContainerMenu +import net.minecraft.network.chat.Component +import net.minecraft.world.entity.player.Inventory +import net.neoforged.api.distmarker.Dist +import net.neoforged.api.distmarker.OnlyIn + +@OnlyIn(Dist.CLIENT) +class HTAdvancedMixerScreen(menu: HTBlockEntityContainerMenu, inventory: Inventory, title: Component) : + HTProcessorScreen(menu, inventory, title) { + override fun init() { + super.init() + createFluidSlot(blockEntity.firstInputTank, HTSlotHelper.getSlotPosX(2), HTSlotHelper.getSlotPosY(2)) + createFluidSlot(blockEntity.secondInputTank, HTSlotHelper.getSlotPosX(3), HTSlotHelper.getSlotPosY(2)) + createFluidSlot(blockEntity.outputTank, HTSlotHelper.getSlotPosX(5.5), HTSlotHelper.getSlotPosY(2)) + } +} 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 c3cc864a9..8c217fdde 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 @@ -1,6 +1,7 @@ package hiiragi283.ragium.common.block.entity.processor import hiiragi283.ragium.api.block.attribute.getFluidAttribute +import hiiragi283.ragium.api.function.negate import hiiragi283.ragium.api.recipe.RagiumRecipeTypes import hiiragi283.ragium.api.recipe.input.HTRecipeInput import hiiragi283.ragium.api.recipe.multi.HTComplexRecipe @@ -34,11 +35,19 @@ class HTAdvancedMixerBlockEntity(pos: BlockPos, state: BlockState) : // input firstInputTank = builder.addSlot( HTSlotInfo.INPUT, - HTVariableFluidTank.input(listener, blockHolder.getFluidAttribute().getFirstInputTank(this)), + HTVariableFluidTank.input( + listener, + blockHolder.getFluidAttribute().getFirstInputTank(this), + canInsert = secondInputTank::isSameStack.negate() + ), ) secondInputTank = builder.addSlot( HTSlotInfo.INPUT, - HTVariableFluidTank.input(listener, blockHolder.getFluidAttribute().getSecondInputTank(this)), + HTVariableFluidTank.input( + listener, + blockHolder.getFluidAttribute().getSecondInputTank(this), + canInsert = firstInputTank::isSameStack.negate() + ), ) } diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlockTypes.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlockTypes.kt index 6c77fb19f..c00c811c1 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlockTypes.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlockTypes.kt @@ -176,6 +176,7 @@ object RagiumBlockTypes { .builder { RagiumBlockEntityTypes.ADVANCED_MIXER } .add(HTDirectionalBlockAttribute.HORIZONTAL) .addMachineTier(HTMachineTier.ELITE, RagiumConfig.COMMON.processor.advancedMixer) + .addMenu { RagiumMenuTypes.ADVANCED_MIXER } .build(RagiumCommonTranslation.MIXER) @JvmField diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumMenuTypes.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumMenuTypes.kt index d421eff07..8a53279eb 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumMenuTypes.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumMenuTypes.kt @@ -13,6 +13,7 @@ import hiiragi283.ragium.common.block.entity.device.HTTelepadBlockentity import hiiragi283.ragium.common.block.entity.generator.HTCombustionGeneratorBlockEntity import hiiragi283.ragium.common.block.entity.generator.HTMagmaticGeneratorBlockEntity import hiiragi283.ragium.common.block.entity.generator.base.HTItemGeneratorBlockEntity +import hiiragi283.ragium.common.block.entity.processor.HTAdvancedMixerBlockEntity import hiiragi283.ragium.common.block.entity.processor.HTAlloySmelterBlockEntity import hiiragi283.ragium.common.block.entity.processor.HTBreweryBlockEntity import hiiragi283.ragium.common.block.entity.processor.HTCompressorBlockEntity @@ -81,6 +82,9 @@ object RagiumMenuTypes { @JvmField val ALLOY_SMELTER: DeferredBEMenu = registerBE("alloy_smelter") + @JvmField + val ADVANCED_MIXER: DeferredBEMenu = registerBE("advanced_mixer") + @JvmField val BREWERY: DeferredBEMenu = registerBE("brewery") From 8b7209bb5723c5209a58249010f742831435fc64 Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Mon, 15 Dec 2025 04:13:12 +0900 Subject: [PATCH 45/49] refactor!: redesigned around Compressing and Extracting recipe --- .../ragium/api/recipe/RagiumRecipeTypes.kt | 10 +- .../api/recipe/fluid/HTExtractingRecipe.kt | 11 ++ .../api/recipe/fluid/HTSimulatingRecipe.kt | 13 ++ .../api/recipe/multi/HTCompressingRecipe.kt | 25 ++++ .../recipe/multi/HTItemWithCatalystRecipe.kt | 11 -- .../api/data/recipe/HTRecipeProvider.kt | 47 ++++--- .../recipe/RagiumChemistryRecipeProvider.kt | 121 +++++++++--------- .../recipe/RagiumCompressingRecipeProvider.kt | 47 ++++--- .../recipe/RagiumCrushingRecipeProvider.kt | 18 +-- .../server/recipe/RagiumFoodRecipeProvider.kt | 6 +- .../recipe/compat/RagiumAARecipeProvider.kt | 10 +- .../recipe/compat/RagiumAE2RecipeProvider.kt | 2 +- .../client/integration/emi/RagiumEmiPlugin.kt | 9 +- .../recipe/custom/HTExpExtractingEmiRecipe.kt | 4 +- .../processor/HTCompressingEmiRecipe.kt | 29 +++++ .../recipe/processor/HTExtractingEmiRecipe.kt | 33 +++++ .../processor/HTItemWithCatalystEmiRecipe.kt | 51 -------- .../recipe/processor/HTSimulatingEmiRecipe.kt | 2 +- .../hiiragi283/ragium/client/RagiumClient.kt | 4 +- .../processor/HTSingleFluidProcessorScreen.kt | 8 +- .../hiiragi283/ragium/common/HTMoldType.kt | 8 ++ .../processor/HTAdvancedMixerBlockEntity.kt | 8 +- .../processor/HTCompressorBlockEntity.kt | 53 ++++++-- .../processor/HTExtractorBlockEntity.kt | 52 +++++--- .../processor/HTSimulatorBlockEntity.kt | 6 +- .../base/HTItemWithCatalystBlockEntity.kt | 53 -------- .../data/recipe/HTCompressingRecipeBuilder.kt | 45 +++++++ .../data/recipe/HTExtractingRecipeBuilder.kt | 16 +++ .../recipe/HTItemWithCatalystRecipeBuilder.kt | 62 --------- .../data/recipe/HTSimulatingRecipeBuilder.kt | 6 +- .../event/RagiumRuntimeRecipeHandler.kt | 18 +-- .../common/recipe/HTBasicCompressingRecipe.kt | 20 +++ .../common/recipe/HTBasicExtractingRecipe.kt | 19 +++ .../{base => }/HTBasicSimulatingRecipe.kt | 11 +- .../common/recipe/HTBlockSimulatingRecipe.kt | 1 - .../common/recipe/HTCompressingRecipe.kt | 27 ---- .../common/recipe/HTEntitySimulatingRecipe.kt | 1 - .../common/recipe/HTExtractingRecipe.kt | 27 ---- .../base/HTBasicItemWithCatalystRecipe.kt | 16 --- .../ragium/setup/RagiumRecipeBiCodecs.kt | 32 +++-- .../ragium/setup/RagiumRecipeSerializers.kt | 12 +- 41 files changed, 490 insertions(+), 464 deletions(-) create mode 100644 src/api/kotlin/hiiragi283/ragium/api/recipe/fluid/HTExtractingRecipe.kt create mode 100644 src/api/kotlin/hiiragi283/ragium/api/recipe/fluid/HTSimulatingRecipe.kt create mode 100644 src/api/kotlin/hiiragi283/ragium/api/recipe/multi/HTCompressingRecipe.kt delete mode 100644 src/api/kotlin/hiiragi283/ragium/api/recipe/multi/HTItemWithCatalystRecipe.kt create mode 100644 src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTCompressingEmiRecipe.kt create mode 100644 src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTExtractingEmiRecipe.kt delete mode 100644 src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTItemWithCatalystEmiRecipe.kt delete mode 100644 src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/base/HTItemWithCatalystBlockEntity.kt create mode 100644 src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTCompressingRecipeBuilder.kt create mode 100644 src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTExtractingRecipeBuilder.kt delete mode 100644 src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTItemWithCatalystRecipeBuilder.kt create mode 100644 src/main/kotlin/hiiragi283/ragium/common/recipe/HTBasicCompressingRecipe.kt create mode 100644 src/main/kotlin/hiiragi283/ragium/common/recipe/HTBasicExtractingRecipe.kt rename src/main/kotlin/hiiragi283/ragium/common/recipe/{base => }/HTBasicSimulatingRecipe.kt (72%) delete mode 100644 src/main/kotlin/hiiragi283/ragium/common/recipe/HTCompressingRecipe.kt delete mode 100644 src/main/kotlin/hiiragi283/ragium/common/recipe/HTExtractingRecipe.kt delete mode 100644 src/main/kotlin/hiiragi283/ragium/common/recipe/base/HTBasicItemWithCatalystRecipe.kt diff --git a/src/api/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeTypes.kt b/src/api/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeTypes.kt index fff9297a3..5baafc4e8 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeTypes.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeTypes.kt @@ -4,13 +4,15 @@ 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.fluid.HTExtractingRecipe import hiiragi283.ragium.api.recipe.fluid.HTMeltingRecipe import hiiragi283.ragium.api.recipe.fluid.HTRefiningRecipe +import hiiragi283.ragium.api.recipe.fluid.HTSimulatingRecipe 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.HTCompressingRecipe import hiiragi283.ragium.api.recipe.multi.HTFluidWithCatalystRecipe -import hiiragi283.ragium.api.recipe.multi.HTItemWithCatalystRecipe import hiiragi283.ragium.api.recipe.multi.HTRockGeneratingRecipe import hiiragi283.ragium.api.recipe.multi.HTShapelessInputsRecipe import hiiragi283.ragium.api.registry.impl.HTDeferredRecipeType @@ -25,7 +27,7 @@ object RagiumRecipeTypes { 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) @@ -37,7 +39,7 @@ object RagiumRecipeTypes { 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) @@ -55,7 +57,7 @@ object RagiumRecipeTypes { val ROCK_GENERATING: HTDeferredRecipeType = create(RagiumConst.ROCK_GENERATING) @JvmField - val SIMULATING: HTDeferredRecipeType = create(RagiumConst.SIMULATING) + val SIMULATING: HTDeferredRecipeType = create(RagiumConst.SIMULATING) @JvmField val SOLIDIFYING: HTDeferredRecipeType = create(RagiumConst.SOLIDIFYING) diff --git a/src/api/kotlin/hiiragi283/ragium/api/recipe/fluid/HTExtractingRecipe.kt b/src/api/kotlin/hiiragi283/ragium/api/recipe/fluid/HTExtractingRecipe.kt new file mode 100644 index 000000000..ac02785ba --- /dev/null +++ b/src/api/kotlin/hiiragi283/ragium/api/recipe/fluid/HTExtractingRecipe.kt @@ -0,0 +1,11 @@ +package hiiragi283.ragium.api.recipe.fluid + +import hiiragi283.ragium.api.recipe.HTSingleItemInputRecipe +import hiiragi283.ragium.api.recipe.RagiumRecipeTypes +import net.minecraft.world.item.crafting.RecipeType + +interface HTExtractingRecipe : + HTFluidRecipe, + HTSingleItemInputRecipe { + override fun getType(): RecipeType<*> = RagiumRecipeTypes.EXTRACTING.get() +} diff --git a/src/api/kotlin/hiiragi283/ragium/api/recipe/fluid/HTSimulatingRecipe.kt b/src/api/kotlin/hiiragi283/ragium/api/recipe/fluid/HTSimulatingRecipe.kt new file mode 100644 index 000000000..4589c3e3e --- /dev/null +++ b/src/api/kotlin/hiiragi283/ragium/api/recipe/fluid/HTSimulatingRecipe.kt @@ -0,0 +1,13 @@ +package hiiragi283.ragium.api.recipe.fluid + +import hiiragi283.ragium.api.recipe.RagiumRecipeTypes +import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient + +/** + * 単一のアイテムと触媒から複数の完成品(アイテム,液体)を生産するレシピ + */ +interface HTSimulatingRecipe : + HTFluidRecipe, + HTItemIngredient.CountGetter { + override fun getType(): RecipeType<*> = RagiumRecipeTypes.SIMULATING.get() +} diff --git a/src/api/kotlin/hiiragi283/ragium/api/recipe/multi/HTCompressingRecipe.kt b/src/api/kotlin/hiiragi283/ragium/api/recipe/multi/HTCompressingRecipe.kt new file mode 100644 index 000000000..62a64c4c7 --- /dev/null +++ b/src/api/kotlin/hiiragi283/ragium/api/recipe/multi/HTCompressingRecipe.kt @@ -0,0 +1,25 @@ +package hiiragi283.ragium.api.recipe.multi + +import hiiragi283.ragium.api.recipe.HTRecipe +import hiiragi283.ragium.api.recipe.RagiumRecipeTypes +import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient +import hiiragi283.ragium.api.recipe.input.HTRecipeInput +import hiiragi283.ragium.api.stack.ImmutableItemStack +import net.minecraft.world.item.crafting.RecipeType +import net.minecraft.world.level.Level +import java.util.function.BiPredicate + +interface HTCompressingRecipe : + HTRecipe, + BiPredicate, + HTItemIngredient.CountGetter { + override fun matches(input: HTRecipeInput, level: Level): Boolean { + val first: ImmutableItemStack = input.item(0) ?: return false + val second: ImmutableItemStack = input.item(1) ?: return false + return test(first, second) + } + + abstract override fun test(first: ImmutableItemStack, second: ImmutableItemStack): Boolean + + override fun getType(): RecipeType<*> = RagiumRecipeTypes.COMPRESSING.get() +} diff --git a/src/api/kotlin/hiiragi283/ragium/api/recipe/multi/HTItemWithCatalystRecipe.kt b/src/api/kotlin/hiiragi283/ragium/api/recipe/multi/HTItemWithCatalystRecipe.kt deleted file mode 100644 index b6812b1e4..000000000 --- a/src/api/kotlin/hiiragi283/ragium/api/recipe/multi/HTItemWithCatalystRecipe.kt +++ /dev/null @@ -1,11 +0,0 @@ -package hiiragi283.ragium.api.recipe.multi - -import hiiragi283.ragium.api.recipe.fluid.HTFluidRecipe -import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient - -/** - * 単一のアイテムと触媒から単一のアイテムを生産するレシピ - */ -interface HTItemWithCatalystRecipe : - HTFluidRecipe, - HTItemIngredient.CountGetter diff --git a/src/data/kotlin/hiiragi283/ragium/api/data/recipe/HTRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/api/data/recipe/HTRecipeProvider.kt index d89752c4e..d0c60a88b 100644 --- a/src/data/kotlin/hiiragi283/ragium/api/data/recipe/HTRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/api/data/recipe/HTRecipeProvider.kt @@ -20,9 +20,10 @@ import hiiragi283.ragium.api.tag.RagiumModTags import hiiragi283.ragium.api.util.Ior import hiiragi283.ragium.common.HTMoldType import hiiragi283.ragium.common.crafting.HTClearComponentRecipe +import hiiragi283.ragium.common.data.recipe.HTCompressingRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTExtractingRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTFluidRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTFluidWithCatalystRecipeBuilder -import hiiragi283.ragium.common.data.recipe.HTItemWithCatalystRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTMixingRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTPlantingRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTShapelessInputsRecipeBuilder @@ -212,32 +213,36 @@ sealed class HTRecipeProvider { } protected fun compressingTo(mold: HTMoldType, ingredient: HTItemIngredient, result: HTItemResult) { - HTItemWithCatalystRecipeBuilder - .compressing( - ingredient, - result, - itemCreator.fromItem(mold), - ).saveSuffixed(output, "_with_mold") + HTCompressingRecipeBuilder(ingredient, mold, result).save(output) } - protected fun crushAndCompress( - base: ItemLike, - crushed: ItemLike, - crushedCount: Int, - catalyst: HTItemIngredient? = null, - ) { + protected fun crushAndCompressBlock(block: ItemLike, crushed: ItemLike, crushedCount: Int) { + // Crushing + HTSingleExtraItemRecipeBuilder + .crushing( + itemCreator.fromItem(block), + resultHelper.item(crushed, crushedCount), + ).saveSuffixed(output, "_from_block") + // Compressing + HTCompressingRecipeBuilder + .block( + itemCreator.fromItem(crushed, crushedCount), + resultHelper.item(block), + ).saveSuffixed(output, "_from_crushed") + } + + protected fun crushAndCompressRod(rod: ItemLike, crushed: ItemLike, crushedCount: Int) { // Crushing HTSingleExtraItemRecipeBuilder .crushing( - itemCreator.fromItem(base), + itemCreator.fromItem(rod), resultHelper.item(crushed, crushedCount), - ).saveSuffixed(output, "_from_base") + ).saveSuffixed(output, "_from_rod") // Compressing - HTItemWithCatalystRecipeBuilder - .compressing( + HTCompressingRecipeBuilder + .rod( itemCreator.fromItem(crushed, crushedCount), - resultHelper.item(base), - catalyst, + resultHelper.item(rod), ).saveSuffixed(output, "_from_crushed") } @@ -264,8 +269,8 @@ sealed class HTRecipeProvider { amount: Int = 250, ) { // Extracting - HTItemWithCatalystRecipeBuilder - .extracting(itemCreator.fromItem(filled)) + HTExtractingRecipeBuilder + .create(itemCreator.fromItem(filled)) .setResult(resultHelper.item(empty)) .setResult(resultHelper.fluid(fluid.getFluid(), amount)) .saveSuffixed(output, "_from_${filled.getPath()}") diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumChemistryRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumChemistryRecipeProvider.kt index 278317a30..06104ffd5 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumChemistryRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumChemistryRecipeProvider.kt @@ -9,10 +9,11 @@ import hiiragi283.ragium.api.registry.HTFluidHolderLike import hiiragi283.ragium.api.registry.toHolderLike import hiiragi283.ragium.api.tag.RagiumModTags import hiiragi283.ragium.common.HTMoldType +import hiiragi283.ragium.common.data.recipe.HTCompressingRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTCookingRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTExtractingRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTFluidRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTFluidWithCatalystRecipeBuilder -import hiiragi283.ragium.common.data.recipe.HTItemWithCatalystRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTMixingRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTShapedRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTShapelessInputsRecipeBuilder @@ -50,57 +51,57 @@ object RagiumChemistryRecipeProvider : HTRecipeProvider.Direct() { @JvmStatic private fun extracting() { // Vanilla - HTItemWithCatalystRecipeBuilder - .extracting(itemCreator.fromTagKey(Tags.Items.GRAVELS)) + HTExtractingRecipeBuilder + .create(itemCreator.fromTagKey(Tags.Items.GRAVELS)) .setResult(resultHelper.item(Items.FLINT)) .saveSuffixed(output, "_from_gravel") - HTItemWithCatalystRecipeBuilder - .extracting(itemCreator.fromTagKey(Tags.Items.SANDSTONE_RED_BLOCKS)) + HTExtractingRecipeBuilder + .create(itemCreator.fromTagKey(Tags.Items.SANDSTONE_RED_BLOCKS)) .setResult(resultHelper.item(Items.REDSTONE)) .saveSuffixed(output, "_from_red_sandstone") - HTItemWithCatalystRecipeBuilder - .extracting(itemCreator.fromItem(Items.BROWN_MUSHROOM_BLOCK)) + HTExtractingRecipeBuilder + .create(itemCreator.fromItem(Items.BROWN_MUSHROOM_BLOCK)) .setResult(resultHelper.item(Items.BROWN_MUSHROOM, 3)) .saveSuffixed(output, "_from_block") - HTItemWithCatalystRecipeBuilder - .extracting(itemCreator.fromItem(Items.RED_MUSHROOM_BLOCK)) + HTExtractingRecipeBuilder + .create(itemCreator.fromItem(Items.RED_MUSHROOM_BLOCK)) .setResult(resultHelper.item(Items.RED_MUSHROOM, 3)) .saveSuffixed(output, "_from_block") // Ragium - HTItemWithCatalystRecipeBuilder - .extracting(itemCreator.fromItem(Items.MAGMA_CREAM, 3)) + HTExtractingRecipeBuilder + .create(itemCreator.fromItem(Items.MAGMA_CREAM, 3)) .setResult(resultHelper.item(RagiumItems.MAGMA_SHARD)) .save(output) - HTItemWithCatalystRecipeBuilder - .extracting(itemCreator.fromItem(Items.DRIED_KELP)) + HTExtractingRecipeBuilder + .create(itemCreator.fromItem(Items.DRIED_KELP)) .setResult(resultHelper.item(CommonMaterialPrefixes.DUST, CommonMaterialKeys.Gems.SALT)) .tagCondition(CommonMaterialPrefixes.DUST, CommonMaterialKeys.Gems.SALT) .saveSuffixed(output, "_from_kelp") - HTItemWithCatalystRecipeBuilder - .extracting(itemCreator.fromTagKey(Tags.Items.SANDSTONE_UNCOLORED_BLOCKS)) + HTExtractingRecipeBuilder + .create(itemCreator.fromTagKey(Tags.Items.SANDSTONE_UNCOLORED_BLOCKS)) .setResult(resultHelper.item(CommonMaterialPrefixes.DUST, CommonMaterialKeys.Gems.SALTPETER)) .tagCondition(CommonMaterialPrefixes.DUST, CommonMaterialKeys.Gems.SALTPETER) .saveSuffixed(output, "_from_sandstone") - HTItemWithCatalystRecipeBuilder - .extracting(itemCreator.fromItem(Items.WIND_CHARGE)) + HTExtractingRecipeBuilder + .create(itemCreator.fromItem(Items.WIND_CHARGE)) .setResult(resultHelper.item(CommonMaterialPrefixes.DUST, CommonMaterialKeys.Gems.SALTPETER)) .tagCondition(CommonMaterialPrefixes.DUST, CommonMaterialKeys.Gems.SALTPETER) .saveSuffixed(output, "_from_breeze") - HTItemWithCatalystRecipeBuilder - .extracting(itemCreator.fromTagKey(Tags.Items.GUNPOWDERS)) + HTExtractingRecipeBuilder + .create(itemCreator.fromTagKey(Tags.Items.GUNPOWDERS)) .setResult(resultHelper.item(CommonMaterialPrefixes.DUST, CommonMaterialKeys.Gems.SULFUR)) .tagCondition(CommonMaterialPrefixes.DUST, CommonMaterialKeys.Gems.SULFUR) .saveSuffixed(output, "_from_gunpowder") - HTItemWithCatalystRecipeBuilder - .extracting(itemCreator.fromItem(Items.BLAZE_POWDER)) + HTExtractingRecipeBuilder + .create(itemCreator.fromItem(Items.BLAZE_POWDER)) .setResult(resultHelper.item(CommonMaterialPrefixes.DUST, CommonMaterialKeys.Gems.SULFUR)) .tagCondition(CommonMaterialPrefixes.DUST, CommonMaterialKeys.Gems.SULFUR) .saveSuffixed(output, "_from_blaze") @@ -112,19 +113,19 @@ object RagiumChemistryRecipeProvider : HTRecipeProvider.Direct() { @JvmStatic private fun dyes() { // Charcoal -> Brown - HTItemWithCatalystRecipeBuilder - .extracting(itemCreator.fromTagKey(CommonMaterialPrefixes.DUST, VanillaMaterialKeys.CHARCOAL)) + HTExtractingRecipeBuilder + .create(itemCreator.fromTagKey(CommonMaterialPrefixes.DUST, VanillaMaterialKeys.CHARCOAL)) .setResult(resultHelper.item(Items.BROWN_DYE)) .saveSuffixed(output, "_from_charcoal") // Coal -> Black - HTItemWithCatalystRecipeBuilder - .extracting(itemCreator.fromTagKey(CommonMaterialPrefixes.DUST, VanillaMaterialKeys.COAL)) + HTExtractingRecipeBuilder + .create(itemCreator.fromTagKey(CommonMaterialPrefixes.DUST, VanillaMaterialKeys.COAL)) .setResult(resultHelper.item(Items.BLACK_DYE)) .saveSuffixed(output, "_from_coal") for (material: HTColorMaterial in HTColorMaterial.entries) { - HTItemWithCatalystRecipeBuilder - .extracting(itemCreator.fromTagKey(CommonMaterialPrefixes.RAW_MATERIAL_DYE, material)) + HTExtractingRecipeBuilder + .create(itemCreator.fromTagKey(CommonMaterialPrefixes.RAW_MATERIAL_DYE, material)) .setResult(resultHelper.item(DyeItem.byColor(material.dyeColor), 2)) .saveSuffixed(output, "_from_${material.asMaterialName()}") } @@ -216,8 +217,8 @@ object RagiumChemistryRecipeProvider : HTRecipeProvider.Direct() { // Exp Bottle extractAndInfuse(Items.GLASS_BOTTLE, Items.EXPERIENCE_BOTTLE.toHolderLike(), RagiumFluidContents.EXPERIENCE) // Exp Berries -> Liquid Exp - HTItemWithCatalystRecipeBuilder - .extracting(itemCreator.fromItem(RagiumBlocks.EXP_BERRIES)) + HTExtractingRecipeBuilder + .create(itemCreator.fromItem(RagiumBlocks.EXP_BERRIES)) .setResult(resultHelper.fluid(RagiumFluidContents.EXPERIENCE, 50)) .saveSuffixed(output, "_from_berries") @@ -409,32 +410,29 @@ object RagiumChemistryRecipeProvider : HTRecipeProvider.Direct() { @JvmStatic private fun cokes() { // Log -> Charcoal + Creosote - HTItemWithCatalystRecipeBuilder - .compressing( - itemCreator.fromTagKey(ItemTags.LOGS_THAT_BURN), - resultHelper.item(CommonMaterialPrefixes.FUEL, VanillaMaterialKeys.CHARCOAL), - fluidResult = resultHelper.fluid(RagiumFluidContents.CREOSOTE, 125), - ).saveSuffixed(output, "_from_logs") + HTExtractingRecipeBuilder + .create(itemCreator.fromTagKey(ItemTags.LOGS_THAT_BURN)) + .setResult(resultHelper.item(CommonMaterialPrefixes.FUEL, VanillaMaterialKeys.CHARCOAL)) + .setResult(resultHelper.fluid(RagiumFluidContents.CREOSOTE, 125)) + .saveSuffixed(output, "_from_logs") // Compressed Sawdust -> Charcoal + Creosote - HTItemWithCatalystRecipeBuilder - .compressing( + HTCompressingRecipeBuilder + .block( itemCreator.fromItem(RagiumItems.COMPRESSED_SAWDUST), resultHelper.item(CommonMaterialPrefixes.FUEL, VanillaMaterialKeys.CHARCOAL), ).saveSuffixed(output, "_from_compressed") // Sugar -> Charcoal - HTItemWithCatalystRecipeBuilder - .compressing( - itemCreator.fromItem(Items.SUGAR, 12), - resultHelper.item(CommonMaterialPrefixes.FUEL, VanillaMaterialKeys.CHARCOAL), - ).saveSuffixed(output, "_from_sugar") + HTExtractingRecipeBuilder + .create(itemCreator.fromItem(Items.SUGAR, 12)) + .setResult(resultHelper.item(CommonMaterialPrefixes.FUEL, VanillaMaterialKeys.CHARCOAL)) + .saveSuffixed(output, "_from_sugar") // Coal -> Coal Coke + Creosote - HTItemWithCatalystRecipeBuilder - .compressing( - itemCreator.fromTagKey(CommonMaterialPrefixes.FUEL, VanillaMaterialKeys.COAL), - resultHelper.item(CommonMaterialPrefixes.FUEL, CommonMaterialKeys.COAL_COKE), - fluidResult = resultHelper.fluid(RagiumFluidContents.CREOSOTE, 250), - ).saveSuffixed(output, "_from_coal") + HTExtractingRecipeBuilder + .create(itemCreator.fromTagKey(CommonMaterialPrefixes.FUEL, VanillaMaterialKeys.COAL)) + .setResult(resultHelper.item(CommonMaterialPrefixes.FUEL, CommonMaterialKeys.COAL_COKE)) + .setResult(resultHelper.fluid(RagiumFluidContents.CREOSOTE, 250)) + .saveSuffixed(output, "_from_coal") // Creosote -> Tar + Lubricant HTFluidRecipeBuilder .refining( @@ -507,12 +505,11 @@ object RagiumChemistryRecipeProvider : HTRecipeProvider.Direct() { .saveSuffixed(output, "_from_crude_oil") // Plastic Plate - HTItemWithCatalystRecipeBuilder - .compressing( + HTCompressingRecipeBuilder + .plate( itemCreator.fromTagKey(RagiumModTags.Items.POLYMER_RESIN), resultHelper.item(CommonMaterialPrefixes.PLATE, CommonMaterialKeys.PLASTIC), - itemCreator.fromItem(HTMoldType.PLATE), - ).saveSuffixed(output, "_with_mold") + ).saveSuffixed(output, "_from_resin") // Synthetic Fiber / Leather mapOf( RagiumItems.SYNTHETIC_FIBER to Tags.Items.STRINGS, @@ -542,8 +539,8 @@ object RagiumChemistryRecipeProvider : HTRecipeProvider.Direct() { @JvmStatic private fun sap() { // Spruce Log -> Spruce Resin - HTItemWithCatalystRecipeBuilder - .extracting(itemCreator.fromTagKey(ItemTags.SPRUCE_LOGS)) + HTExtractingRecipeBuilder + .create(itemCreator.fromTagKey(ItemTags.SPRUCE_LOGS)) .setResult(resultHelper.item(CommonMaterialPrefixes.DUST, VanillaMaterialKeys.WOOD, 4)) .setResult(resultHelper.fluid(RagiumFluidContents.SPRUCE_RESIN, 250)) .saveSuffixed(output, "_from_log") @@ -562,8 +559,8 @@ object RagiumChemistryRecipeProvider : HTRecipeProvider.Direct() { val sap: HTBasicFluidContent? = data.sap // Base -> Sap if (base != null && sap != null) { - HTItemWithCatalystRecipeBuilder - .extracting(itemCreator.fromTagKey(base)) + HTExtractingRecipeBuilder + .create(itemCreator.fromTagKey(base)) .setResult(resultHelper.item(CommonMaterialPrefixes.DUST, VanillaMaterialKeys.WOOD, 4)) .setResult(resultHelper.fluid(sap, RagiumConst.LOG_TO_SAP)) .save(output) @@ -617,8 +614,8 @@ object RagiumChemistryRecipeProvider : HTRecipeProvider.Direct() { .define('B', Tags.Items.BUCKETS_EMPTY) .saveSuffixed(output, "_with_dandelion") // Acacia / Jungle Log -> Latex - HTItemWithCatalystRecipeBuilder - .extracting(itemCreator.fromTagKeys(listOf(ItemTags.ACACIA_LOGS, ItemTags.JUNGLE_LOGS))) + HTExtractingRecipeBuilder + .create(itemCreator.fromTagKeys(listOf(ItemTags.ACACIA_LOGS, ItemTags.JUNGLE_LOGS))) .setResult(resultHelper.item(CommonMaterialPrefixes.DUST, VanillaMaterialKeys.WOOD, 4)) .setResult(resultHelper.fluid(RagiumFluidContents.LATEX, 250)) .saveSuffixed(output, "_from_log") @@ -671,13 +668,13 @@ object RagiumChemistryRecipeProvider : HTRecipeProvider.Direct() { .setResult(resultHelper.item(Items.POISONOUS_POTATO)) .save(output) // Potato Sprouts - HTItemWithCatalystRecipeBuilder - .extracting(itemCreator.fromItem(Items.POISONOUS_POTATO)) + HTExtractingRecipeBuilder + .create(itemCreator.fromItem(Items.POISONOUS_POTATO)) .setResult(resultHelper.item(RagiumItems.POTATO_SPROUTS)) .save(output) // Green Cake - HTItemWithCatalystRecipeBuilder - .compressing( + HTCompressingRecipeBuilder + .block( itemCreator.fromItem(RagiumItems.POTATO_SPROUTS, 16), resultHelper.item(RagiumItems.GREEN_CAKE), ).save(output) diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumCompressingRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumCompressingRecipeProvider.kt index f4a41200f..d120c4583 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumCompressingRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumCompressingRecipeProvider.kt @@ -2,7 +2,7 @@ package hiiragi283.ragium.data.server.recipe import hiiragi283.ragium.api.data.recipe.HTRecipeProvider import hiiragi283.ragium.common.HTMoldType -import hiiragi283.ragium.common.data.recipe.HTItemWithCatalystRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTCompressingRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTShapedRecipeBuilder import hiiragi283.ragium.common.material.CommonMaterialPrefixes import hiiragi283.ragium.common.material.RagiumMaterialKeys @@ -14,60 +14,60 @@ import net.neoforged.neoforge.common.Tags object RagiumCompressingRecipeProvider : HTRecipeProvider.Direct() { override fun buildRecipeInternal() { // Sand -> Sandstone - HTItemWithCatalystRecipeBuilder - .compressing( + HTCompressingRecipeBuilder + .block( itemCreator.fromTagKey(Tags.Items.SANDS_COLORLESS, 4), resultHelper.item(Items.SANDSTONE), ).save(output) - HTItemWithCatalystRecipeBuilder - .compressing( + HTCompressingRecipeBuilder + .block( itemCreator.fromTagKey(Tags.Items.SANDS_RED, 4), resultHelper.item(Items.RED_SANDSTONE), ).save(output) // Clay -> Mud - HTItemWithCatalystRecipeBuilder - .compressing( + HTCompressingRecipeBuilder + .block( itemCreator.fromItem(Items.CLAY), resultHelper.item(Items.MUD), ).save(output) // Mud -> Packed Mud - HTItemWithCatalystRecipeBuilder - .compressing( + HTCompressingRecipeBuilder + .block( itemCreator.fromItem(Items.MUD), resultHelper.item(Items.PACKED_MUD), ).save(output) // Snow -> Ice - HTItemWithCatalystRecipeBuilder - .compressing( + HTCompressingRecipeBuilder + .block( itemCreator.fromItem(Items.SNOW_BLOCK, 4), resultHelper.item(Items.ICE), ).save(output) // Moss - HTItemWithCatalystRecipeBuilder - .compressing( + HTCompressingRecipeBuilder + .block( itemCreator.fromItems(listOf(Items.VINE, Items.MOSS_CARPET), count = 8), resultHelper.item(Items.MOSS_BLOCK), ).save(output) // Sculk - HTItemWithCatalystRecipeBuilder - .compressing( + HTCompressingRecipeBuilder + .block( itemCreator.fromItem(Items.SCULK_VEIN, 8), resultHelper.item(Items.SCULK), ).save(output) // Paper - HTItemWithCatalystRecipeBuilder - .compressing( + HTCompressingRecipeBuilder + .plate( itemCreator.fromTagKey(Tags.Items.CROPS_SUGAR_CANE), resultHelper.item(Items.PAPER, 2), ).save(output) // Sawdust -> Compressed - HTItemWithCatalystRecipeBuilder - .compressing( + HTCompressingRecipeBuilder + .ingot( itemCreator.fromTagKey(CommonMaterialPrefixes.DUST, VanillaMaterialKeys.WOOD, 8), resultHelper.item(RagiumItems.COMPRESSED_SAWDUST), ).save(output) @@ -75,8 +75,8 @@ object RagiumCompressingRecipeProvider : HTRecipeProvider.Direct() { compressingTo(HTMoldType.PLATE, VanillaMaterialKeys.WOOD, CommonMaterialPrefixes.DUST) // Coal -> Diamond - HTItemWithCatalystRecipeBuilder - .compressing( + HTCompressingRecipeBuilder + .ingot( itemCreator.fromTagKey(CommonMaterialPrefixes.DUST, VanillaMaterialKeys.COAL, 8), resultHelper.item(RagiumItems.COAL_CHIP), ).save(output) @@ -88,11 +88,10 @@ object RagiumCompressingRecipeProvider : HTRecipeProvider.Direct() { .define('B', CommonMaterialPrefixes.NUGGET, RagiumMaterialKeys.NIGHT_METAL) .save(output) - HTItemWithCatalystRecipeBuilder - .compressing( + HTCompressingRecipeBuilder + .gem( itemCreator.fromItem(RagiumItems.COAL_CHUNK), resultHelper.item(CommonMaterialPrefixes.GEM, VanillaMaterialKeys.DIAMOND), - itemCreator.fromItem(HTMoldType.GEM), ).saveSuffixed(output, "_from_coal") } } diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumCrushingRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumCrushingRecipeProvider.kt index 6ff3c9111..4e30e422b 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumCrushingRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumCrushingRecipeProvider.kt @@ -1,7 +1,7 @@ package hiiragi283.ragium.data.server.recipe import hiiragi283.ragium.api.data.recipe.HTRecipeProvider -import hiiragi283.ragium.common.data.recipe.HTItemWithCatalystRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTCompressingRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTSingleExtraItemRecipeBuilder import hiiragi283.ragium.common.material.CommonMaterialKeys import hiiragi283.ragium.common.material.CommonMaterialPrefixes @@ -34,7 +34,7 @@ object RagiumCrushingRecipeProvider : HTRecipeProvider.Direct() { resultHelper.item(Items.STRING, 4), ).saveSuffixed(output, "_from_web") - crushAndCompress(Items.MAGMA_BLOCK, Items.MAGMA_CREAM, 4) + crushAndCompressBlock(Items.MAGMA_BLOCK, Items.MAGMA_CREAM, 4) HTSingleExtraItemRecipeBuilder .crushing( @@ -50,11 +50,11 @@ object RagiumCrushingRecipeProvider : HTRecipeProvider.Direct() { ).saveSuffixed(output, "_from_cane") // Bone <-> Bone Meal - crushAndCompress(Items.BONE, Items.BONE_MEAL, 4) + crushAndCompressRod(Items.BONE, Items.BONE_MEAL, 4) // Blaze Rod <-> Blaze Powder - crushAndCompress(Items.BLAZE_ROD, Items.BLAZE_POWDER, 4) + crushAndCompressRod(Items.BLAZE_ROD, Items.BLAZE_POWDER, 4) // Breeze Rod <-> Wind Charge - crushAndCompress(Items.BREEZE_ROD, Items.WIND_CHARGE, 6) + crushAndCompressRod(Items.BREEZE_ROD, Items.WIND_CHARGE, 6) HTSingleExtraItemRecipeBuilder .crushing( @@ -234,13 +234,13 @@ object RagiumCrushingRecipeProvider : HTRecipeProvider.Direct() { resultHelper.item(Items.PACKED_ICE, 9), ).saveSuffixed(output, "_from_blue") // Ice -> Packed -> Blue - HTItemWithCatalystRecipeBuilder - .compressing( + HTCompressingRecipeBuilder + .block( itemCreator.fromItem(Items.ICE, 4), resultHelper.item(Items.PACKED_ICE), ).saveSuffixed(output, "_from_ice") - HTItemWithCatalystRecipeBuilder - .compressing( + HTCompressingRecipeBuilder + .block( itemCreator.fromItem(Items.PACKED_ICE, 4), resultHelper.item(Items.BLUE_ICE), ).saveSuffixed(output, "_from_packed") diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumFoodRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumFoodRecipeProvider.kt index 26d8cae45..e05161e09 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumFoodRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumFoodRecipeProvider.kt @@ -10,8 +10,8 @@ import hiiragi283.ragium.common.HTDecorationType import hiiragi283.ragium.common.HTMoldType import hiiragi283.ragium.common.crafting.HTIceCreamSodaRecipe import hiiragi283.ragium.common.data.recipe.HTCookingRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTExtractingRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTFluidRecipeBuilder -import hiiragi283.ragium.common.data.recipe.HTItemWithCatalystRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTMixingRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTShapedRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTShapelessRecipeBuilder @@ -78,8 +78,8 @@ object RagiumFoodRecipeProvider : HTRecipeProvider.Direct() { .define('B', CommonMaterialPrefixes.DUST, RagiumMaterialKeys.RAGINITE) .save(output) // Ragi-Cherry Juice - HTItemWithCatalystRecipeBuilder - .extracting(itemCreator.fromTagKey(CommonMaterialPrefixes.FOOD, FoodMaterialKeys.RAGI_CHERRY)) + HTExtractingRecipeBuilder + .create(itemCreator.fromTagKey(CommonMaterialPrefixes.FOOD, FoodMaterialKeys.RAGI_CHERRY)) .setResult(resultHelper.fluid(RagiumFluidContents.RAGI_CHERRY_JUICE, 125)) .save(output) diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumAARecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumAARecipeProvider.kt index deb5361d1..b7aedc283 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumAARecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumAARecipeProvider.kt @@ -5,8 +5,8 @@ import de.ellpeck.actuallyadditions.mod.fluids.InitFluids import de.ellpeck.actuallyadditions.mod.items.ActuallyItems import hiiragi283.ragium.api.RagiumConst import hiiragi283.ragium.api.data.recipe.HTRecipeProvider +import hiiragi283.ragium.common.data.recipe.HTExtractingRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTFluidRecipeBuilder -import hiiragi283.ragium.common.data.recipe.HTItemWithCatalystRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTMixingRecipeBuilder import hiiragi283.ragium.setup.RagiumFluidContents @@ -20,8 +20,8 @@ object RagiumAARecipeProvider : HTRecipeProvider.Integration(RagiumConst.ACTUALL .setResult(resultHelper.item(ActuallyItems.RICE_SLIMEBALL)) .save(output) // Solidified Exp -> Liquid Exp - HTItemWithCatalystRecipeBuilder - .extracting(itemCreator.fromItem(ActuallyItems.SOLIDIFIED_EXPERIENCE)) + HTExtractingRecipeBuilder + .create(itemCreator.fromItem(ActuallyItems.SOLIDIFIED_EXPERIENCE)) .setResult(resultHelper.fluid(RagiumFluidContents.EXPERIENCE, 8 * 20)) .saveSuffixed(output, "_from_solidified_aa") @@ -36,8 +36,8 @@ object RagiumAARecipeProvider : HTRecipeProvider.Integration(RagiumConst.ACTUALL @JvmStatic private fun canola() { // Canola -> Canola Oil - HTItemWithCatalystRecipeBuilder - .extracting(itemCreator.fromTagKey(ActuallyTags.Items.CROPS_CANOLA)) + HTExtractingRecipeBuilder + .create(itemCreator.fromTagKey(ActuallyTags.Items.CROPS_CANOLA)) .setResult(resultHelper.fluid(InitFluids.CANOLA_OIL.get(), 80)) .save(output) // Canola Oil -> Refined diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumAE2RecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumAE2RecipeProvider.kt index 60560b900..55ef0368a 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumAE2RecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumAE2RecipeProvider.kt @@ -45,7 +45,7 @@ object RagiumAE2RecipeProvider : HTRecipeProvider.Integration(RagiumConst.AE2) { resultHelper.item(AEBlocks.SKY_STONE_BLOCK), ).save(output) - crushAndCompress(AEBlocks.SKY_STONE_BLOCK, AEItems.SKY_DUST, 1) + crushAndCompressBlock(AEBlocks.SKY_STONE_BLOCK, AEItems.SKY_DUST, 1) // Processor combineWithRedstone( 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 6763d0290..172c143d3 100644 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/RagiumEmiPlugin.kt +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/RagiumEmiPlugin.kt @@ -38,8 +38,9 @@ import hiiragi283.ragium.client.integration.emi.recipe.generator.HTCoolantEmiRec import hiiragi283.ragium.client.integration.emi.recipe.generator.HTFuelGeneratorEmiRecipe import hiiragi283.ragium.client.integration.emi.recipe.processor.HTAlloyingEmiRecipe import hiiragi283.ragium.client.integration.emi.recipe.processor.HTBrewingEmiRecipe +import hiiragi283.ragium.client.integration.emi.recipe.processor.HTCompressingEmiRecipe import hiiragi283.ragium.client.integration.emi.recipe.processor.HTEnchantingEmiRecipe -import hiiragi283.ragium.client.integration.emi.recipe.processor.HTItemWithCatalystEmiRecipe +import hiiragi283.ragium.client.integration.emi.recipe.processor.HTExtractingEmiRecipe import hiiragi283.ragium.client.integration.emi.recipe.processor.HTMeltingEmiRecipe import hiiragi283.ragium.client.integration.emi.recipe.processor.HTMixingEmiRecipe import hiiragi283.ragium.client.integration.emi.recipe.processor.HTPlantingEmiRecipe @@ -294,12 +295,12 @@ class RagiumEmiPlugin : EmiPlugin { private fun addProcessors(registry: EmiRegistry) { // Basic addRegistryRecipes(registry, RagiumRecipeTypes.ALLOYING, ::HTAlloyingEmiRecipe) - addRegistryRecipes(registry, RagiumRecipeTypes.COMPRESSING, HTItemWithCatalystEmiRecipe::compressing) + addRegistryRecipes(registry, RagiumRecipeTypes.COMPRESSING, ::HTCompressingEmiRecipe) addRegistryRecipes(registry, RagiumRecipeTypes.CRUSHING, HTSingleExtraItemEmiRecipe::crushing) addRegistryRecipes(registry, RagiumRecipeTypes.CUTTING, HTSingleExtraItemEmiRecipe::cutting) - addRegistryRecipes(registry, RagiumRecipeTypes.EXTRACTING, HTItemWithCatalystEmiRecipe::extracting) + addRegistryRecipes(registry, RagiumRecipeTypes.EXTRACTING, ::HTExtractingEmiRecipe) - addItemStackRecipes(registry, "crude_bio", HTExtractorBlockEntity::createComposting, HTItemWithCatalystEmiRecipe::composting) + addItemStackRecipes(registry, "crude_bio", HTExtractorBlockEntity::createComposting, ::HTExtractingEmiRecipe) registry.addRecipeSafe(RagiumAPI.id("/${RagiumConst.EXTRACTING}", "experience_from_items"), ::HTExpExtractingEmiRecipe) // Advanced addRegistryRecipes(registry, RagiumRecipeTypes.MELTING, ::HTMeltingEmiRecipe) diff --git a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/custom/HTExpExtractingEmiRecipe.kt b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/custom/HTExpExtractingEmiRecipe.kt index c1f7d8163..3253db87f 100644 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/custom/HTExpExtractingEmiRecipe.kt +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/custom/HTExpExtractingEmiRecipe.kt @@ -1,7 +1,6 @@ package hiiragi283.ragium.client.integration.emi.recipe.custom import dev.emi.emi.EmiUtil -import dev.emi.emi.api.stack.EmiStack import dev.emi.emi.api.widget.WidgetHolder import hiiragi283.ragium.client.integration.emi.addArrow import hiiragi283.ragium.client.integration.emi.category.RagiumEmiRecipeCategories @@ -20,8 +19,7 @@ class HTExpExtractingEmiRecipe(id: ResourceLocation) : HTEmiRecipe(RagiumE widgets.addArrow(getPosition(2.5), getPosition(1)) // Input - widgets.addGeneratedSlot({ HTEnchantEmiRecipeHelper.getTool(it, 0) }, UNIQUE_ID, getPosition(1), getPosition(0)) - widgets.addSlot(EmiStack.EMPTY, getPosition(1), getPosition(2)).catalyst(true) + widgets.addGeneratedSlot({ HTEnchantEmiRecipeHelper.getTool(it, 0) }, UNIQUE_ID, getPosition(1), getPosition(1)) // Output widgets.addGeneratedOutput({ HTEnchantEmiRecipeHelper.getTool(it, 1) }, UNIQUE_ID, getPosition(4.5), getPosition(0) + 4, true) widgets.addSlot(RagiumFluidContents.EXPERIENCE.toFluidEmi(), getPosition(4.5), getPosition(2)) diff --git a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTCompressingEmiRecipe.kt b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTCompressingEmiRecipe.kt new file mode 100644 index 000000000..8fd45f930 --- /dev/null +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTCompressingEmiRecipe.kt @@ -0,0 +1,29 @@ +package hiiragi283.ragium.client.integration.emi.recipe.processor + +import dev.emi.emi.api.widget.WidgetHolder +import hiiragi283.ragium.client.integration.emi.addArrow +import hiiragi283.ragium.client.integration.emi.category.RagiumEmiRecipeCategories +import hiiragi283.ragium.client.integration.emi.recipe.HTEmiHolderRecipe +import hiiragi283.ragium.client.integration.emi.toEmi +import hiiragi283.ragium.common.recipe.HTBasicCompressingRecipe +import net.minecraft.world.item.crafting.RecipeHolder + +class HTCompressingEmiRecipe(holder: RecipeHolder) : + HTEmiHolderRecipe(RagiumEmiRecipeCategories.COMPRESSING, holder) { + init { + addInput(recipe.ingredient) + addCatalyst(recipe.mold.toEmi()) + + addOutputs(recipe.result) + } + + override fun addWidgets(widgets: WidgetHolder) { + widgets.addArrow(getPosition(2.5), getPosition(1)) + + // Input + widgets.addSlot(input(0), getPosition(1), getPosition(0)) + widgets.addCatalyst(0, getPosition(1), getPosition(2)) + // output + widgets.addOutput(0, getPosition(4.5), getPosition(1), true) + } +} diff --git a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTExtractingEmiRecipe.kt b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTExtractingEmiRecipe.kt new file mode 100644 index 000000000..d9b9de819 --- /dev/null +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTExtractingEmiRecipe.kt @@ -0,0 +1,33 @@ +package hiiragi283.ragium.client.integration.emi.recipe.processor + +import dev.emi.emi.api.widget.WidgetHolder +import hiiragi283.ragium.client.integration.emi.addArrow +import hiiragi283.ragium.client.integration.emi.category.RagiumEmiRecipeCategories +import hiiragi283.ragium.client.integration.emi.recipe.base.HTMultiOutputsEmiRecipe +import hiiragi283.ragium.common.recipe.HTBasicExtractingRecipe +import net.minecraft.resources.ResourceLocation +import net.minecraft.world.item.crafting.RecipeHolder + +class HTExtractingEmiRecipe : HTMultiOutputsEmiRecipe { + constructor(id: ResourceLocation, recipe: HTBasicExtractingRecipe) : super( + RagiumEmiRecipeCategories.EXTRACTING, + id, + recipe, + ) + + constructor(holder: RecipeHolder) : super( + RagiumEmiRecipeCategories.EXTRACTING, + holder, + ) + + override fun initInputs() { + addInput(recipe.ingredient) + } + + override fun initInputSlots(widgets: WidgetHolder) { + widgets.addArrow(getPosition(2.5), getPosition(1)) + + // Input + widgets.addSlot(input(0), getPosition(1), getPosition(1)) + } +} diff --git a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTItemWithCatalystEmiRecipe.kt b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTItemWithCatalystEmiRecipe.kt deleted file mode 100644 index cd1f32de9..000000000 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTItemWithCatalystEmiRecipe.kt +++ /dev/null @@ -1,51 +0,0 @@ -package hiiragi283.ragium.client.integration.emi.recipe.processor - -import dev.emi.emi.api.widget.WidgetHolder -import hiiragi283.ragium.client.integration.emi.addArrow -import hiiragi283.ragium.client.integration.emi.category.HTEmiRecipeCategory -import hiiragi283.ragium.client.integration.emi.category.RagiumEmiRecipeCategories -import hiiragi283.ragium.client.integration.emi.recipe.base.HTMultiOutputsEmiRecipe -import hiiragi283.ragium.common.recipe.base.HTBasicItemWithCatalystRecipe -import net.minecraft.resources.ResourceLocation -import net.minecraft.world.item.crafting.RecipeHolder -import kotlin.jvm.optionals.getOrNull - -class HTItemWithCatalystEmiRecipe : HTMultiOutputsEmiRecipe { - constructor(category: HTEmiRecipeCategory, id: ResourceLocation, recipe: HTBasicItemWithCatalystRecipe) : super( - category, - id, - recipe, - ) - - constructor(category: HTEmiRecipeCategory, holder: RecipeHolder) : super( - category, - holder, - ) - - companion object { - @JvmStatic - fun compressing(holder: RecipeHolder): HTItemWithCatalystEmiRecipe = - HTItemWithCatalystEmiRecipe(RagiumEmiRecipeCategories.COMPRESSING, holder) - - @JvmStatic - fun composting(id: ResourceLocation, recipe: HTBasicItemWithCatalystRecipe): HTItemWithCatalystEmiRecipe = - HTItemWithCatalystEmiRecipe(RagiumEmiRecipeCategories.COMPOSTING, id, recipe) - - @JvmStatic - fun extracting(holder: RecipeHolder): HTItemWithCatalystEmiRecipe = - HTItemWithCatalystEmiRecipe(RagiumEmiRecipeCategories.EXTRACTING, holder) - } - - override fun initInputs() { - addInput(recipe.required) - addCatalyst(recipe.optional.getOrNull()) - } - - override fun initInputSlots(widgets: WidgetHolder) { - widgets.addArrow(getPosition(2.5), getPosition(1)) - - // Input - widgets.addSlot(input(0), getPosition(1), getPosition(0)) - widgets.addCatalyst(0, getPosition(1), getPosition(2)) - } -} diff --git a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTSimulatingEmiRecipe.kt b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTSimulatingEmiRecipe.kt index 859a55b1d..ce907a5ac 100644 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTSimulatingEmiRecipe.kt +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTSimulatingEmiRecipe.kt @@ -10,7 +10,7 @@ import hiiragi283.ragium.client.integration.emi.toItemEmi import hiiragi283.ragium.common.block.HTImitationSpawnerBlock import hiiragi283.ragium.common.recipe.HTBlockSimulatingRecipe import hiiragi283.ragium.common.recipe.HTEntitySimulatingRecipe -import hiiragi283.ragium.common.recipe.base.HTBasicSimulatingRecipe +import hiiragi283.ragium.common.recipe.HTBasicSimulatingRecipe import hiiragi283.ragium.common.text.RagiumCommonTranslation import net.minecraft.ChatFormatting import net.minecraft.core.Holder diff --git a/src/main/kotlin/hiiragi283/ragium/client/RagiumClient.kt b/src/main/kotlin/hiiragi283/ragium/client/RagiumClient.kt index 91401e95d..ef0518dcc 100644 --- a/src/main/kotlin/hiiragi283/ragium/client/RagiumClient.kt +++ b/src/main/kotlin/hiiragi283/ragium/client/RagiumClient.kt @@ -270,11 +270,11 @@ class RagiumClient(eventBus: IEventBus, container: ModContainer) { event.register(RagiumMenuTypes.BATTERY, ::HTBatteryScreen) event.register(RagiumMenuTypes.BREWERY, HTSingleFluidProcessorScreen.Companion::combine) event.register(RagiumMenuTypes.COMBUSTION_GENERATOR, ::HTCombustionGeneratorScreen) - event.register(RagiumMenuTypes.COMPRESSOR, HTSingleFluidProcessorScreen.Companion::itemWithCatalyst) + event.register(RagiumMenuTypes.COMPRESSOR, ::HTProcessorScreen) event.register(RagiumMenuTypes.CRATE, ::HTBlockEntityContainerScreen) event.register(RagiumMenuTypes.CUTTING_MACHINE, ::HTProcessorScreen) event.register(RagiumMenuTypes.ENCHANTER, HTSingleFluidProcessorScreen.Companion::combine) - event.register(RagiumMenuTypes.EXTRACTOR, HTSingleFluidProcessorScreen.Companion::itemWithCatalyst) + event.register(RagiumMenuTypes.EXTRACTOR, HTSingleFluidProcessorScreen.Companion::extractor) event.register(RagiumMenuTypes.FLUID_COLLECTOR, ::HTFluidCollectorScreen) event.register(RagiumMenuTypes.ITEM_COLLECTOR, ::HTBlockEntityContainerScreen) event.register(RagiumMenuTypes.ITEM_GENERATOR, HTGeneratorScreen.createFactory("item_generator")) diff --git a/src/main/kotlin/hiiragi283/ragium/client/gui/screen/processor/HTSingleFluidProcessorScreen.kt b/src/main/kotlin/hiiragi283/ragium/client/gui/screen/processor/HTSingleFluidProcessorScreen.kt index 554d6da17..80ca001c0 100644 --- a/src/main/kotlin/hiiragi283/ragium/client/gui/screen/processor/HTSingleFluidProcessorScreen.kt +++ b/src/main/kotlin/hiiragi283/ragium/client/gui/screen/processor/HTSingleFluidProcessorScreen.kt @@ -1,10 +1,10 @@ package hiiragi283.ragium.client.gui.screen.processor import hiiragi283.ragium.client.gui.component.base.HTBasicFluidWidget +import hiiragi283.ragium.common.block.entity.processor.HTExtractorBlockEntity import hiiragi283.ragium.common.block.entity.processor.HTMelterBlockEntity import hiiragi283.ragium.common.block.entity.processor.HTProcessorBlockEntity import hiiragi283.ragium.common.block.entity.processor.base.HTAbstractCombinerBlockEntity -import hiiragi283.ragium.common.block.entity.processor.base.HTItemWithCatalystBlockEntity import hiiragi283.ragium.common.inventory.HTSlotHelper import hiiragi283.ragium.common.inventory.container.HTBlockEntityContainerMenu import net.minecraft.network.chat.Component @@ -42,11 +42,11 @@ abstract class HTSingleFluidProcessorScreen> : ) @JvmStatic - fun itemWithCatalyst( - menu: HTBlockEntityContainerMenu, + fun extractor( + menu: HTBlockEntityContainerMenu, inventory: Inventory, title: Component, - ): HTSingleFluidProcessorScreen = Impl( + ): HTSingleFluidProcessorScreen = Impl( { createFluidSlot(blockEntity.outputTank, HTSlotHelper.getSlotPosX(5.5), HTSlotHelper.getSlotPosY(2)) }, menu, inventory, diff --git a/src/main/kotlin/hiiragi283/ragium/common/HTMoldType.kt b/src/main/kotlin/hiiragi283/ragium/common/HTMoldType.kt index 6b3367f84..4bfa1fe96 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/HTMoldType.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/HTMoldType.kt @@ -4,8 +4,11 @@ import hiiragi283.ragium.api.data.lang.HTLangName import hiiragi283.ragium.api.data.lang.HTLanguageType import hiiragi283.ragium.api.material.prefix.HTPrefixLike import hiiragi283.ragium.api.registry.HTItemHolderLike +import hiiragi283.ragium.api.serialization.codec.BiCodec +import hiiragi283.ragium.api.serialization.codec.BiCodecs import hiiragi283.ragium.common.material.CommonMaterialPrefixes import hiiragi283.ragium.setup.RagiumItems +import io.netty.buffer.ByteBuf import net.minecraft.util.StringRepresentable enum class HTMoldType(private val enPattern: String, private val jaPattern: String) : @@ -20,6 +23,11 @@ enum class HTMoldType(private val enPattern: String, private val jaPattern: Stri PLATE("Plate", "板材"), ; + companion object { + @JvmField + val CODEC: BiCodec = BiCodecs.stringEnum(HTMoldType::getSerializedName) + } + val prefix: HTPrefixLike? get() = when (this) { BLANK -> null 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 8c217fdde..6d9baf75a 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 @@ -36,17 +36,17 @@ class HTAdvancedMixerBlockEntity(pos: BlockPos, state: BlockState) : firstInputTank = builder.addSlot( HTSlotInfo.INPUT, HTVariableFluidTank.input( - listener, + listener, blockHolder.getFluidAttribute().getFirstInputTank(this), - canInsert = secondInputTank::isSameStack.negate() + canInsert = secondInputTank::isSameStack.negate(), ), ) secondInputTank = builder.addSlot( HTSlotInfo.INPUT, HTVariableFluidTank.input( - listener, + listener, blockHolder.getFluidAttribute().getSecondInputTank(this), - canInsert = firstInputTank::isSameStack.negate() + canInsert = firstInputTank::isSameStack.negate(), ), ) } 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 e64182f38..2090d9f1f 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,12 +1,17 @@ package hiiragi283.ragium.common.block.entity.processor -import hiiragi283.ragium.api.recipe.HTRecipeCache import hiiragi283.ragium.api.recipe.RagiumRecipeTypes 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.common.recipe.HTFinderRecipeCache +import hiiragi283.ragium.api.recipe.multi.HTCompressingRecipe +import hiiragi283.ragium.api.storage.HTStorageAccess +import hiiragi283.ragium.api.storage.HTStorageAction +import hiiragi283.ragium.api.storage.holder.HTSlotInfo +import hiiragi283.ragium.api.util.HTContentListener +import hiiragi283.ragium.common.inventory.HTSlotHelper +import hiiragi283.ragium.common.storage.holder.HTBasicItemSlotHolder +import hiiragi283.ragium.common.storage.item.slot.HTBasicItemSlot import hiiragi283.ragium.setup.RagiumBlocks +import hiiragi283.ragium.util.HTStackSlotHelper import net.minecraft.core.BlockPos import net.minecraft.server.level.ServerLevel import net.minecraft.sounds.SoundEvents @@ -14,24 +19,52 @@ import net.minecraft.sounds.SoundSource import net.minecraft.world.level.block.state.BlockState class HTCompressorBlockEntity(pos: BlockPos, state: BlockState) : - HTItemWithCatalystBlockEntity( + HTProcessorBlockEntity.Cached( + RagiumRecipeTypes.COMPRESSING, RagiumBlocks.COMPRESSOR, pos, state, ) { - private val recipeCache: HTRecipeCache = HTFinderRecipeCache(RagiumRecipeTypes.COMPRESSING) + lateinit var inputSlot: HTBasicItemSlot + private set + lateinit var catalystSlot: HTBasicItemSlot + private set + lateinit var outputSlot: HTBasicItemSlot + private set - override fun getMatchedRecipe(input: HTRecipeInput, level: ServerLevel): HTItemWithCatalystRecipe? = - recipeCache.getFirstRecipe(input, level) + override fun initializeItemSlots(builder: HTBasicItemSlotHolder.Builder, listener: HTContentListener) { + // input + inputSlot = singleInput(builder, listener) + // catalyst + catalystSlot = builder.addSlot( + HTSlotInfo.CATALYST, + HTBasicItemSlot.input(listener, HTSlotHelper.getSlotPosX(2), HTSlotHelper.getSlotPosY(2), 1), + ) + // output + outputSlot = upperOutput(builder, listener) + } + + override fun buildRecipeInput(builder: HTRecipeInput.Builder) { + builder.items += inputSlot.getStack() + builder.items += catalystSlot.getStack() + } + + override fun shouldCheckRecipe(level: ServerLevel, pos: BlockPos): Boolean = outputSlot.getNeeded() > 0 + + override fun canProgressRecipe(level: ServerLevel, input: HTRecipeInput, recipe: HTCompressingRecipe): Boolean = + HTStackSlotHelper.canInsertStack(outputSlot, input, level, recipe::assembleItem) override fun completeRecipe( level: ServerLevel, pos: BlockPos, state: BlockState, input: HTRecipeInput, - recipe: HTItemWithCatalystRecipe, + recipe: HTCompressingRecipe, ) { - super.completeRecipe(level, pos, state, input, recipe) + // 実際にアウトプットに搬出する + outputSlot.insert(recipe.assembleItem(input, level.registryAccess()), HTStorageAction.EXECUTE, HTStorageAccess.INTERNAL) + // 実際にインプットを減らす + inputSlot.extract(recipe.getRequiredCount(), HTStorageAction.EXECUTE, HTStorageAccess.INTERNAL) // SEを鳴らす level.playSound(null, pos, SoundEvents.ANVIL_PLACE, SoundSource.BLOCKS, 0.25f, 0.5f) } 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 84c48f0c4..09cf7a18a 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 @@ -3,16 +3,22 @@ package hiiragi283.ragium.common.block.entity.processor import hiiragi283.ragium.api.data.recipe.HTResultHelper import hiiragi283.ragium.api.math.times import hiiragi283.ragium.api.math.toFraction -import hiiragi283.ragium.api.recipe.HTRecipeCache import hiiragi283.ragium.api.recipe.RagiumRecipeTypes +import hiiragi283.ragium.api.recipe.fluid.HTExtractingRecipe import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient import hiiragi283.ragium.api.recipe.input.HTRecipeInput -import hiiragi283.ragium.api.recipe.multi.HTItemWithCatalystRecipe import hiiragi283.ragium.api.stack.ImmutableFluidStack +import hiiragi283.ragium.api.storage.HTStorageAccess +import hiiragi283.ragium.api.storage.HTStorageAction +import hiiragi283.ragium.api.storage.holder.HTSlotInfo +import hiiragi283.ragium.api.util.HTContentListener import hiiragi283.ragium.api.util.Ior -import hiiragi283.ragium.common.block.entity.processor.base.HTItemWithCatalystBlockEntity -import hiiragi283.ragium.common.recipe.HTExtractingRecipe +import hiiragi283.ragium.common.block.entity.processor.base.HTComplexBlockEntity +import hiiragi283.ragium.common.inventory.HTSlotHelper +import hiiragi283.ragium.common.recipe.HTBasicExtractingRecipe import hiiragi283.ragium.common.recipe.HTFinderRecipeCache +import hiiragi283.ragium.common.storage.holder.HTBasicItemSlotHolder +import hiiragi283.ragium.common.storage.item.slot.HTBasicItemSlot import hiiragi283.ragium.common.upgrade.RagiumUpgradeKeys import hiiragi283.ragium.setup.RagiumBlocks import hiiragi283.ragium.setup.RagiumFluidContents @@ -27,10 +33,9 @@ import net.minecraft.world.item.enchantment.EnchantmentHelper import net.minecraft.world.item.enchantment.ItemEnchantments import net.minecraft.world.level.block.ComposterBlock import net.minecraft.world.level.block.state.BlockState -import java.util.* class HTExtractorBlockEntity(pos: BlockPos, state: BlockState) : - HTItemWithCatalystBlockEntity( + HTComplexBlockEntity( RagiumBlocks.EXTRACTOR, pos, state, @@ -43,22 +48,38 @@ class HTExtractorBlockEntity(pos: BlockPos, state: BlockState) : } @JvmStatic - fun createComposting(item: ItemStack): HTExtractingRecipe? { + fun createComposting(item: ItemStack): HTBasicExtractingRecipe? { val chance: Float = ComposterBlock.getValue(item) if (chance <= 0f) return null val crudeBio: ImmutableFluidStack = getCrudeBio(chance) ?: return null - return HTExtractingRecipe( + return HTBasicExtractingRecipe( HTItemIngredient(Ingredient.of(item), 1), - Optional.empty(), Ior.Right(HTResultHelper.fluid(crudeBio)), ) } } - private val recipeCache: HTRecipeCache = + lateinit var inputSlot: HTBasicItemSlot + private set + + override fun initializeItemSlots(builder: HTBasicItemSlotHolder.Builder, listener: HTContentListener) { + // input + inputSlot = builder.addSlot( + HTSlotInfo.INPUT, + HTBasicItemSlot.input(listener, HTSlotHelper.getSlotPosX(2), HTSlotHelper.getSlotPosY(1)), + ) + // output + outputSlot = upperOutput(builder, listener) + } + + override fun buildRecipeInput(builder: HTRecipeInput.Builder) { + builder.items += inputSlot.getStack() + } + + private val recipeCache: HTFinderRecipeCache = HTFinderRecipeCache(RagiumRecipeTypes.EXTRACTING) - override fun getMatchedRecipe(input: HTRecipeInput, level: ServerLevel): HTItemWithCatalystRecipe? = when { + override fun getMatchedRecipe(input: HTRecipeInput, level: ServerLevel): HTExtractingRecipe? = when { hasUpgrade(RagiumUpgradeKeys.COMPOST_BIO) -> input .item(0) @@ -68,7 +89,7 @@ class HTExtractorBlockEntity(pos: BlockPos, state: BlockState) : else -> recipeCache.getFirstRecipe(input, level) } - private fun expExtracting(input: HTRecipeInput): HTItemWithCatalystRecipe? { + private fun expExtracting(input: HTRecipeInput): HTExtractingRecipe? { val stack: ItemStack = input.item(0)?.unwrap() ?: return null val enchantments: ItemEnchantments = EnchantmentHelper.getEnchantmentsForCrafting(stack) if (enchantments.isEmpty) return null @@ -78,9 +99,8 @@ class HTExtractorBlockEntity(pos: BlockPos, state: BlockState) : .let(RagiumFluidContents.EXPERIENCE::toImmutableStack) ?: return null stack.remove(EnchantmentHelper.getComponentType(stack)) - return HTExtractingRecipe( + return HTBasicExtractingRecipe( HTItemIngredient(Ingredient.of(stack), 1), - Optional.empty(), Ior.Both(resultHelper.item(stack), resultHelper.fluid(expFluid)), ) } @@ -90,9 +110,11 @@ class HTExtractorBlockEntity(pos: BlockPos, state: BlockState) : pos: BlockPos, state: BlockState, input: HTRecipeInput, - recipe: HTItemWithCatalystRecipe, + recipe: HTExtractingRecipe, ) { super.completeRecipe(level, pos, state, input, recipe) + // 実際にインプットを減らす + inputSlot.extract(recipe.getRequiredCount(), HTStorageAction.EXECUTE, HTStorageAccess.INTERNAL) // SEを鳴らす level.playSound(null, pos, SoundEvents.SPONGE_ABSORB, SoundSource.BLOCKS, 1f, 0.5f) } 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 3b33530e2..d57f7d5e1 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,8 +1,8 @@ package hiiragi283.ragium.common.block.entity.processor import hiiragi283.ragium.api.recipe.RagiumRecipeTypes +import hiiragi283.ragium.api.recipe.fluid.HTSimulatingRecipe import hiiragi283.ragium.api.recipe.input.HTRecipeInput -import hiiragi283.ragium.api.recipe.multi.HTItemWithCatalystRecipe import hiiragi283.ragium.api.storage.HTStorageAccess import hiiragi283.ragium.api.storage.HTStorageAction import hiiragi283.ragium.api.util.HTContentListener @@ -17,7 +17,7 @@ import net.minecraft.sounds.SoundSource import net.minecraft.world.level.block.state.BlockState class HTSimulatorBlockEntity(pos: BlockPos, state: BlockState) : - HTComplexBlockEntity.Cached( + HTComplexBlockEntity.Cached( RagiumRecipeTypes.SIMULATING, RagiumBlocks.SIMULATOR, pos, @@ -44,7 +44,7 @@ class HTSimulatorBlockEntity(pos: BlockPos, state: BlockState) : pos: BlockPos, state: BlockState, input: HTRecipeInput, - recipe: HTItemWithCatalystRecipe, + recipe: HTSimulatingRecipe, ) { super.completeRecipe(level, pos, state, input, recipe) // 実際にインプットを減らす diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/base/HTItemWithCatalystBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/base/HTItemWithCatalystBlockEntity.kt deleted file mode 100644 index ab4552262..000000000 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/base/HTItemWithCatalystBlockEntity.kt +++ /dev/null @@ -1,53 +0,0 @@ -package hiiragi283.ragium.common.block.entity.processor.base - -import hiiragi283.ragium.api.recipe.input.HTRecipeInput -import hiiragi283.ragium.api.recipe.multi.HTItemWithCatalystRecipe -import hiiragi283.ragium.api.storage.HTStorageAccess -import hiiragi283.ragium.api.storage.HTStorageAction -import hiiragi283.ragium.api.storage.holder.HTSlotInfo -import hiiragi283.ragium.api.util.HTContentListener -import hiiragi283.ragium.common.inventory.HTSlotHelper -import hiiragi283.ragium.common.storage.holder.HTBasicItemSlotHolder -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.level.block.Block -import net.minecraft.world.level.block.state.BlockState - -abstract class HTItemWithCatalystBlockEntity(blockHolder: Holder, pos: BlockPos, state: BlockState) : - HTComplexBlockEntity(blockHolder, pos, state) { - lateinit var inputSlot: HTBasicItemSlot - private set - lateinit var catalystSlot: HTBasicItemSlot - private set - - final override fun initializeItemSlots(builder: HTBasicItemSlotHolder.Builder, listener: HTContentListener) { - // input - inputSlot = singleInput(builder, listener) - // catalyst - catalystSlot = builder.addSlot( - HTSlotInfo.CATALYST, - HTBasicItemSlot.input(listener, HTSlotHelper.getSlotPosX(2), HTSlotHelper.getSlotPosY(2), 1), - ) - // output - outputSlot = upperOutput(builder, listener) - } - - final override fun buildRecipeInput(builder: HTRecipeInput.Builder) { - builder.items += inputSlot.getStack() - builder.items += catalystSlot.getStack() - } - - override fun completeRecipe( - level: ServerLevel, - pos: BlockPos, - state: BlockState, - input: HTRecipeInput, - recipe: HTItemWithCatalystRecipe, - ) { - super.completeRecipe(level, pos, state, input, recipe) - // 実際にインプットを減らす - inputSlot.extract(recipe.getRequiredCount(), HTStorageAction.EXECUTE, HTStorageAccess.INTERNAL) - } -} diff --git a/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTCompressingRecipeBuilder.kt b/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTCompressingRecipeBuilder.kt new file mode 100644 index 000000000..d7e6d5b26 --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTCompressingRecipeBuilder.kt @@ -0,0 +1,45 @@ +package hiiragi283.ragium.common.data.recipe + +import hiiragi283.ragium.api.RagiumConst +import hiiragi283.ragium.api.data.recipe.HTRecipeBuilder +import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient +import hiiragi283.ragium.api.recipe.result.HTItemResult +import hiiragi283.ragium.common.HTMoldType +import hiiragi283.ragium.common.recipe.HTBasicCompressingRecipe +import net.minecraft.resources.ResourceLocation + +class HTCompressingRecipeBuilder( + private val ingredient: HTItemIngredient, + private val mold: HTMoldType, + private val result: HTItemResult, +) : HTRecipeBuilder(RagiumConst.COMPRESSING) { + companion object { + @JvmStatic + fun block(ingredient: HTItemIngredient, result: HTItemResult): HTCompressingRecipeBuilder = + HTCompressingRecipeBuilder(ingredient, HTMoldType.STORAGE_BLOCK, result) + + @JvmStatic + fun gem(ingredient: HTItemIngredient, result: HTItemResult): HTCompressingRecipeBuilder = + HTCompressingRecipeBuilder(ingredient, HTMoldType.GEM, result) + + @JvmStatic + fun gear(ingredient: HTItemIngredient, result: HTItemResult): HTCompressingRecipeBuilder = + HTCompressingRecipeBuilder(ingredient, HTMoldType.GEAR, result) + + @JvmStatic + fun ingot(ingredient: HTItemIngredient, result: HTItemResult): HTCompressingRecipeBuilder = + HTCompressingRecipeBuilder(ingredient, HTMoldType.INGOT, result) + + @JvmStatic + fun plate(ingredient: HTItemIngredient, result: HTItemResult): HTCompressingRecipeBuilder = + HTCompressingRecipeBuilder(ingredient, HTMoldType.PLATE, result) + + @JvmStatic + fun rod(ingredient: HTItemIngredient, result: HTItemResult): HTCompressingRecipeBuilder = + HTCompressingRecipeBuilder(ingredient, HTMoldType.PLATE, result) + } + + override fun getPrimalId(): ResourceLocation = result.id + + override fun createRecipe(): HTBasicCompressingRecipe = HTBasicCompressingRecipe(ingredient, mold, result) +} diff --git a/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTExtractingRecipeBuilder.kt b/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTExtractingRecipeBuilder.kt new file mode 100644 index 000000000..f06ee23c2 --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTExtractingRecipeBuilder.kt @@ -0,0 +1,16 @@ +package hiiragi283.ragium.common.data.recipe + +import hiiragi283.ragium.api.RagiumConst +import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient +import hiiragi283.ragium.common.data.recipe.base.HTComplexResultRecipeBuilder +import hiiragi283.ragium.common.recipe.HTBasicExtractingRecipe + +class HTExtractingRecipeBuilder(private val ingredient: HTItemIngredient) : + HTComplexResultRecipeBuilder(RagiumConst.EXTRACTING) { + companion object { + @JvmStatic + fun create(ingredient: HTItemIngredient): HTExtractingRecipeBuilder = HTExtractingRecipeBuilder(ingredient) + } + + override fun createRecipe(): HTBasicExtractingRecipe = HTBasicExtractingRecipe(ingredient, toIorResult()) +} diff --git a/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTItemWithCatalystRecipeBuilder.kt b/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTItemWithCatalystRecipeBuilder.kt deleted file mode 100644 index 319b23894..000000000 --- a/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTItemWithCatalystRecipeBuilder.kt +++ /dev/null @@ -1,62 +0,0 @@ -package hiiragi283.ragium.common.data.recipe - -import hiiragi283.ragium.api.RagiumConst -import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient -import hiiragi283.ragium.api.recipe.multi.HTItemWithCatalystRecipe -import hiiragi283.ragium.api.recipe.result.HTFluidResult -import hiiragi283.ragium.api.recipe.result.HTItemResult -import hiiragi283.ragium.api.util.Ior -import hiiragi283.ragium.api.util.wrapOptional -import hiiragi283.ragium.common.data.recipe.base.HTComplexResultRecipeBuilder -import hiiragi283.ragium.common.recipe.HTCompressingRecipe -import hiiragi283.ragium.common.recipe.HTExtractingRecipe -import java.util.Optional - -class HTItemWithCatalystRecipeBuilder( - prefix: String, - private val factory: Factory<*>, - val required: HTItemIngredient, - val optional: Optional, -) : HTComplexResultRecipeBuilder(prefix) { - companion object { - @JvmStatic - fun compressing( - ingredient: HTItemIngredient, - itemResult: HTItemResult?, - catalyst: HTItemIngredient? = null, - fluidResult: HTFluidResult? = null, - ): HTItemWithCatalystRecipeBuilder { - val builder = HTItemWithCatalystRecipeBuilder( - RagiumConst.COMPRESSING, - ::HTCompressingRecipe, - ingredient, - catalyst, - ) - builder.setResult(itemResult) - builder.setResult(fluidResult) - return builder - } - - @JvmStatic - fun extracting(ingredient: HTItemIngredient, catalyst: HTItemIngredient? = null): HTItemWithCatalystRecipeBuilder = - HTItemWithCatalystRecipeBuilder( - RagiumConst.EXTRACTING, - ::HTExtractingRecipe, - ingredient, - catalyst, - ) - } - - constructor( - prefix: String, - factory: Factory<*>, - required: HTItemIngredient, - optional: HTItemIngredient?, - ) : this(prefix, factory, required, optional.wrapOptional()) - - override fun createRecipe(): HTItemWithCatalystRecipe = factory.create(required, optional, toIorResult()) - - fun interface Factory { - fun create(required: HTItemIngredient, optional: Optional, results: Ior): RECIPE - } -} diff --git a/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTSimulatingRecipeBuilder.kt b/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTSimulatingRecipeBuilder.kt index 2ca273f61..02a50fa64 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTSimulatingRecipeBuilder.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTSimulatingRecipeBuilder.kt @@ -1,8 +1,8 @@ package hiiragi283.ragium.common.data.recipe import hiiragi283.ragium.api.RagiumConst +import hiiragi283.ragium.api.recipe.fluid.HTSimulatingRecipe import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient -import hiiragi283.ragium.api.recipe.multi.HTItemWithCatalystRecipe import hiiragi283.ragium.api.recipe.result.HTFluidResult import hiiragi283.ragium.api.recipe.result.HTItemResult import hiiragi283.ragium.api.util.Ior @@ -41,9 +41,9 @@ class HTSimulatingRecipeBuilder( ) } - override fun createRecipe(): HTItemWithCatalystRecipe = factory.create(ingredient, catalyst, toIorResult()) + override fun createRecipe(): HTSimulatingRecipe = factory.create(ingredient, catalyst, toIorResult()) - fun interface Factory { + fun interface Factory { fun create(ingredient: Optional, catalyst: T, results: Ior): RECIPE } } diff --git a/src/main/kotlin/hiiragi283/ragium/common/event/RagiumRuntimeRecipeHandler.kt b/src/main/kotlin/hiiragi283/ragium/common/event/RagiumRuntimeRecipeHandler.kt index bc2d7aa0f..8f28a20cf 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/event/RagiumRuntimeRecipeHandler.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/event/RagiumRuntimeRecipeHandler.kt @@ -14,8 +14,7 @@ import hiiragi283.ragium.api.recipe.HTRegisterRuntimeRecipeEvent import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient import hiiragi283.ragium.api.registry.idOrThrow import hiiragi283.ragium.api.tag.RagiumModTags -import hiiragi283.ragium.common.HTMoldType -import hiiragi283.ragium.common.data.recipe.HTItemWithCatalystRecipeBuilder +import hiiragi283.ragium.common.data.recipe.HTCompressingRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTMixingRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTShapelessInputsRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTSingleExtraItemRecipeBuilder @@ -176,20 +175,18 @@ object RagiumRuntimeRecipeHandler { private fun compressingMetal(event: HTRegisterRuntimeRecipeEvent, key: HTMaterialKey) { // Gear if (event.isPresentTag(CommonMaterialPrefixes.GEAR, key)) { - HTItemWithCatalystRecipeBuilder - .compressing( + HTCompressingRecipeBuilder + .gear( event.itemCreator.fromTagKey(CommonMaterialPrefixes.INGOT, key), event.resultHelper.item(CommonMaterialPrefixes.GEAR, key), - event.itemCreator.fromItem(HTMoldType.GEAR), ).saveSuffixed(event.output, "_from_ingot") } // Plate if (event.isPresentTag(CommonMaterialPrefixes.PLATE, key)) { - HTItemWithCatalystRecipeBuilder - .compressing( + HTCompressingRecipeBuilder + .plate( event.itemCreator.fromTagKey(CommonMaterialPrefixes.INGOT, key), event.resultHelper.item(CommonMaterialPrefixes.PLATE, key), - event.itemCreator.fromItem(HTMoldType.PLATE), ).saveSuffixed(event.output, "_from_ingot") } } @@ -199,11 +196,10 @@ object RagiumRuntimeRecipeHandler { if (!event.isPresentTag(CommonMaterialPrefixes.DUST, key)) return if (!event.isPresentTag(outputPrefix, key)) return - HTItemWithCatalystRecipeBuilder - .compressing( + HTCompressingRecipeBuilder + .gem( event.itemCreator.fromTagKey(CommonMaterialPrefixes.DUST, key), event.resultHelper.item(outputPrefix, key), - event.itemCreator.fromItem(HTMoldType.GEM), ).saveSuffixed(event.output, "_from_dust") } diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/HTBasicCompressingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/HTBasicCompressingRecipe.kt new file mode 100644 index 000000000..44b182670 --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/HTBasicCompressingRecipe.kt @@ -0,0 +1,20 @@ +package hiiragi283.ragium.common.recipe + +import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient +import hiiragi283.ragium.api.recipe.multi.HTCompressingRecipe +import hiiragi283.ragium.api.recipe.result.HTItemResult +import hiiragi283.ragium.api.stack.ImmutableItemStack +import hiiragi283.ragium.common.HTMoldType +import hiiragi283.ragium.common.recipe.base.HTBasicSingleOutputRecipe +import hiiragi283.ragium.setup.RagiumRecipeSerializers +import net.minecraft.world.item.crafting.RecipeSerializer + +class HTBasicCompressingRecipe(val ingredient: HTItemIngredient, val mold: HTMoldType, result: HTItemResult) : + HTBasicSingleOutputRecipe(result), + HTCompressingRecipe { + override fun test(first: ImmutableItemStack, second: ImmutableItemStack): Boolean = ingredient.test(first) && second.isOf(mold.asItem()) + + override fun getSerializer(): RecipeSerializer<*> = RagiumRecipeSerializers.COMPRESSING + + override fun getRequiredCount(): Int = ingredient.getRequiredAmount() +} diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/HTBasicExtractingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/HTBasicExtractingRecipe.kt new file mode 100644 index 000000000..8e6a8ba4e --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/HTBasicExtractingRecipe.kt @@ -0,0 +1,19 @@ +package hiiragi283.ragium.common.recipe + +import hiiragi283.ragium.api.recipe.fluid.HTExtractingRecipe +import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient +import hiiragi283.ragium.api.recipe.result.HTComplexResult +import hiiragi283.ragium.api.stack.ImmutableItemStack +import hiiragi283.ragium.common.recipe.base.HTBasicComplexOutputRecipe +import hiiragi283.ragium.setup.RagiumRecipeSerializers +import net.minecraft.world.item.crafting.RecipeSerializer + +class HTBasicExtractingRecipe(val ingredient: HTItemIngredient, results: HTComplexResult) : + HTBasicComplexOutputRecipe(results), + HTExtractingRecipe { + override fun getSerializer(): RecipeSerializer<*> = RagiumRecipeSerializers.EXTRACTING + + override fun test(stack: ImmutableItemStack): Boolean = ingredient.test(stack) + + override fun getRequiredCount(): Int = ingredient.getRequiredAmount() +} diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/base/HTBasicSimulatingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/HTBasicSimulatingRecipe.kt similarity index 72% rename from src/main/kotlin/hiiragi283/ragium/common/recipe/base/HTBasicSimulatingRecipe.kt rename to src/main/kotlin/hiiragi283/ragium/common/recipe/HTBasicSimulatingRecipe.kt index 66d5600ab..cb3d9fdbe 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/recipe/base/HTBasicSimulatingRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/HTBasicSimulatingRecipe.kt @@ -1,17 +1,16 @@ -package hiiragi283.ragium.common.recipe.base +package hiiragi283.ragium.common.recipe -import hiiragi283.ragium.api.recipe.RagiumRecipeTypes +import hiiragi283.ragium.api.recipe.fluid.HTSimulatingRecipe import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient import hiiragi283.ragium.api.recipe.input.HTRecipeInput -import hiiragi283.ragium.api.recipe.multi.HTItemWithCatalystRecipe import hiiragi283.ragium.api.recipe.result.HTComplexResult -import net.minecraft.world.item.crafting.RecipeType +import hiiragi283.ragium.common.recipe.base.HTBasicComplexOutputRecipe import net.minecraft.world.level.Level import java.util.Optional abstract class HTBasicSimulatingRecipe(val ingredient: Optional, val catalyst: T, results: HTComplexResult) : HTBasicComplexOutputRecipe(results), - HTItemWithCatalystRecipe { + HTSimulatingRecipe { final override fun matches(input: HTRecipeInput, level: Level): Boolean { val bool1: Boolean = testCatalyst(input, level) val bool2: Boolean = input.testItem(0, ingredient) @@ -21,6 +20,4 @@ abstract class HTBasicSimulatingRecipe(val ingredient: Optional = RagiumRecipeTypes.SIMULATING.get() } diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/HTBlockSimulatingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/HTBlockSimulatingRecipe.kt index 113cb2ca1..bca84ce27 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/recipe/HTBlockSimulatingRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/HTBlockSimulatingRecipe.kt @@ -3,7 +3,6 @@ package hiiragi283.ragium.common.recipe import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient import hiiragi283.ragium.api.recipe.input.HTRecipeInput import hiiragi283.ragium.api.recipe.result.HTComplexResult -import hiiragi283.ragium.common.recipe.base.HTBasicSimulatingRecipe import hiiragi283.ragium.setup.RagiumRecipeSerializers import net.minecraft.core.HolderSet import net.minecraft.world.item.crafting.RecipeSerializer diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/HTCompressingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/HTCompressingRecipe.kt deleted file mode 100644 index 2575e2aa3..000000000 --- a/src/main/kotlin/hiiragi283/ragium/common/recipe/HTCompressingRecipe.kt +++ /dev/null @@ -1,27 +0,0 @@ -package hiiragi283.ragium.common.recipe - -import hiiragi283.ragium.api.recipe.RagiumRecipeTypes -import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient -import hiiragi283.ragium.api.recipe.input.HTRecipeInput -import hiiragi283.ragium.api.recipe.result.HTComplexResult -import hiiragi283.ragium.common.recipe.base.HTBasicItemWithCatalystRecipe -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 HTCompressingRecipe(ingredient: HTItemIngredient, catalyst: Optional, results: HTComplexResult) : - HTBasicItemWithCatalystRecipe(ingredient, catalyst, results) { - 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 - } - - override fun getSerializer(): RecipeSerializer<*> = RagiumRecipeSerializers.COMPRESSING - - override fun getType(): RecipeType<*> = RagiumRecipeTypes.COMPRESSING.get() - - override fun getRequiredCount(): Int = required.getRequiredAmount() -} diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/HTEntitySimulatingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/HTEntitySimulatingRecipe.kt index 050468efb..901190ff4 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/recipe/HTEntitySimulatingRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/HTEntitySimulatingRecipe.kt @@ -4,7 +4,6 @@ import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient import hiiragi283.ragium.api.recipe.input.HTRecipeInput import hiiragi283.ragium.api.recipe.result.HTComplexResult import hiiragi283.ragium.common.block.entity.HTImitationSpawnerBlockEntity -import hiiragi283.ragium.common.recipe.base.HTBasicSimulatingRecipe import hiiragi283.ragium.setup.RagiumRecipeSerializers import net.minecraft.core.HolderSet import net.minecraft.world.entity.EntityType diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/HTExtractingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/HTExtractingRecipe.kt deleted file mode 100644 index 732a2ce36..000000000 --- a/src/main/kotlin/hiiragi283/ragium/common/recipe/HTExtractingRecipe.kt +++ /dev/null @@ -1,27 +0,0 @@ -package hiiragi283.ragium.common.recipe - -import hiiragi283.ragium.api.recipe.RagiumRecipeTypes -import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient -import hiiragi283.ragium.api.recipe.input.HTRecipeInput -import hiiragi283.ragium.api.recipe.result.HTComplexResult -import hiiragi283.ragium.common.recipe.base.HTBasicItemWithCatalystRecipe -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 HTExtractingRecipe(ingredient: HTItemIngredient, catalyst: Optional, results: HTComplexResult) : - HTBasicItemWithCatalystRecipe(ingredient, catalyst, results) { - 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 - } - - override fun getSerializer(): RecipeSerializer<*> = RagiumRecipeSerializers.EXTRACTING - - override fun getType(): RecipeType<*> = RagiumRecipeTypes.EXTRACTING.get() - - override fun getRequiredCount(): Int = required.getRequiredAmount() -} diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/base/HTBasicItemWithCatalystRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/base/HTBasicItemWithCatalystRecipe.kt deleted file mode 100644 index 48a82382a..000000000 --- a/src/main/kotlin/hiiragi283/ragium/common/recipe/base/HTBasicItemWithCatalystRecipe.kt +++ /dev/null @@ -1,16 +0,0 @@ -package hiiragi283.ragium.common.recipe.base - -import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient -import hiiragi283.ragium.api.recipe.multi.HTItemWithCatalystRecipe -import hiiragi283.ragium.api.recipe.result.HTComplexResult -import java.util.Optional - -/** - * [HTItemWithCatalystRecipe]の抽象クラス - */ -abstract class HTBasicItemWithCatalystRecipe( - val required: HTItemIngredient, - val optional: Optional, - results: HTComplexResult, -) : HTBasicComplexOutputRecipe(results), - HTItemWithCatalystRecipe diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeBiCodecs.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeBiCodecs.kt index 735c375be..da7e745d8 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeBiCodecs.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeBiCodecs.kt @@ -16,18 +16,19 @@ import hiiragi283.ragium.api.serialization.codec.MapBiCodec import hiiragi283.ragium.api.serialization.codec.MapBiCodecs import hiiragi283.ragium.api.serialization.codec.ParameterCodec import hiiragi283.ragium.api.serialization.codec.VanillaBiCodecs +import hiiragi283.ragium.common.HTMoldType import hiiragi283.ragium.common.data.recipe.HTCombineRecipeBuilder -import hiiragi283.ragium.common.data.recipe.HTItemWithCatalystRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTSimulatingRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTSingleExtraItemRecipeBuilder +import hiiragi283.ragium.common.recipe.HTBasicCompressingRecipe +import hiiragi283.ragium.common.recipe.HTBasicExtractingRecipe import hiiragi283.ragium.common.recipe.HTBasicMeltingRecipe import hiiragi283.ragium.common.recipe.HTBasicRefiningRecipe import hiiragi283.ragium.common.recipe.HTMixingRecipe import hiiragi283.ragium.common.recipe.HTSimpleMixingRecipe import hiiragi283.ragium.common.recipe.HTSolidifyingRecipe import hiiragi283.ragium.common.recipe.base.HTBasicCombineRecipe -import hiiragi283.ragium.common.recipe.base.HTBasicItemWithCatalystRecipe -import hiiragi283.ragium.common.recipe.base.HTBasicSimulatingRecipe +import hiiragi283.ragium.common.recipe.HTBasicSimulatingRecipe import hiiragi283.ragium.common.recipe.base.HTBasicSingleExtraItemRecipe import hiiragi283.ragium.common.recipe.base.HTBasicSingleOutputRecipe import net.minecraft.core.HolderSet @@ -41,6 +42,21 @@ object RagiumRecipeBiCodecs { HTFluidResult.CODEC.optionalFieldOf(RagiumConst.FLUID_RESULT), ) + @JvmField + val COMPRESSING: MapBiCodec = MapBiCodec.composite( + HTItemIngredient.CODEC.fieldOf(RagiumConst.INGREDIENT).forGetter(HTBasicCompressingRecipe::ingredient), + HTMoldType.CODEC.fieldOf("mold").forGetter(HTBasicCompressingRecipe::mold), + HTItemResult.CODEC.fieldOf(RagiumConst.RESULT).forGetter(HTBasicCompressingRecipe::result), + ::HTBasicCompressingRecipe, + ) + + @JvmField + val EXTRACTING: MapBiCodec = MapBiCodec.composite( + HTItemIngredient.CODEC.fieldOf(RagiumConst.INGREDIENT).forGetter(HTBasicExtractingRecipe::ingredient), + RESULTS.forGetter(HTBasicExtractingRecipe::results), + ::HTBasicExtractingRecipe, + ) + @JvmField val MELTING: MapBiCodec = MapBiCodec.composite( HTItemIngredient.CODEC.fieldOf(RagiumConst.INGREDIENT).forGetter(HTBasicMeltingRecipe::ingredient), @@ -129,16 +145,6 @@ object RagiumRecipeBiCodecs { factory::create, ) - @JvmStatic - fun itemWithCatalyst( - factory: HTItemWithCatalystRecipeBuilder.Factory, - ): MapBiCodec = MapBiCodec.composite( - HTItemIngredient.CODEC.fieldOf("required").forGetter(HTBasicItemWithCatalystRecipe::required), - HTItemIngredient.CODEC.optionalFieldOf("optional").forGetter(HTBasicItemWithCatalystRecipe::optional), - RESULTS.forGetter(HTBasicItemWithCatalystRecipe::results), - factory::create, - ) - @JvmStatic fun itemToExtra( factory: HTSingleExtraItemRecipeBuilder.Factory, diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeSerializers.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeSerializers.kt index f0a17094f..e0f41fbaa 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeSerializers.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeSerializers.kt @@ -16,16 +16,16 @@ import hiiragi283.ragium.common.crafting.HTIceCreamSodaRecipe import hiiragi283.ragium.common.crafting.HTPotionDropRecipe import hiiragi283.ragium.common.crafting.HTUpgradeChargeRecipe import hiiragi283.ragium.common.recipe.HTAlloyingRecipe +import hiiragi283.ragium.common.recipe.HTBasicCompressingRecipe +import hiiragi283.ragium.common.recipe.HTBasicExtractingRecipe import hiiragi283.ragium.common.recipe.HTBasicMeltingRecipe import hiiragi283.ragium.common.recipe.HTBasicRefiningRecipe import hiiragi283.ragium.common.recipe.HTBlockSimulatingRecipe import hiiragi283.ragium.common.recipe.HTBrewingRecipe -import hiiragi283.ragium.common.recipe.HTCompressingRecipe import hiiragi283.ragium.common.recipe.HTCrushingRecipe import hiiragi283.ragium.common.recipe.HTCuttingRecipe import hiiragi283.ragium.common.recipe.HTEnchantingRecipe import hiiragi283.ragium.common.recipe.HTEntitySimulatingRecipe -import hiiragi283.ragium.common.recipe.HTExtractingRecipe import hiiragi283.ragium.common.recipe.HTMixingRecipe import hiiragi283.ragium.common.recipe.HTSimpleMixingRecipe import hiiragi283.ragium.common.recipe.HTSolidifyingRecipe @@ -111,9 +111,9 @@ object RagiumRecipeSerializers { ) @JvmField - val COMPRESSING: RecipeSerializer = register( + val COMPRESSING: RecipeSerializer = register( RagiumConst.COMPRESSING, - RagiumRecipeBiCodecs.itemWithCatalyst(::HTCompressingRecipe), + RagiumRecipeBiCodecs.COMPRESSING, ) @JvmField @@ -138,9 +138,9 @@ object RagiumRecipeSerializers { ) @JvmField - val EXTRACTING: RecipeSerializer = register( + val EXTRACTING: RecipeSerializer = register( RagiumConst.EXTRACTING, - RagiumRecipeBiCodecs.itemWithCatalyst(::HTExtractingRecipe), + RagiumRecipeBiCodecs.EXTRACTING, ) @JvmField From bc5d3f4fac518343987a1b18f550a97791181cc1 Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Mon, 15 Dec 2025 04:18:25 +0900 Subject: [PATCH 46/49] refactor: renamed some class around HTAlloyingRecipe --- .../ragium/api/recipe/RagiumRecipeTypes.kt | 4 +- ...essInputsRecipe.kt => HTAlloyingRecipe.kt} | 2 +- .../api/data/recipe/HTRecipeProvider.kt | 21 +++++------ .../recipe/RagiumChemistryRecipeProvider.kt | 6 +-- .../recipe/RagiumDecorationRecipeProvider.kt | 37 +++++++++---------- .../recipe/RagiumEngineeringRecipeProvider.kt | 34 ++++++++--------- .../recipe/compat/RagiumAE2RecipeProvider.kt | 6 +-- .../recipe/processor/HTAlloyingEmiRecipe.kt | 6 +-- .../recipe/processor/HTSimulatingEmiRecipe.kt | 2 +- .../processor/HTAlloySmelterBlockEntity.kt | 8 ++-- .../data/recipe/HTAlloyingRecipeBuilder.kt | 21 +++++++++++ .../recipe/HTShapelessInputsRecipeBuilder.kt | 34 ----------------- .../event/RagiumRuntimeRecipeHandler.kt | 6 +-- ...yingRecipe.kt => HTBasicAlloyingRecipe.kt} | 11 +++++- .../base/HTBasicShapelessInputsRecipe.kt | 13 ------- .../ragium/setup/RagiumRecipeBiCodecs.kt | 2 +- .../ragium/setup/RagiumRecipeSerializers.kt | 8 ++-- 17 files changed, 100 insertions(+), 121 deletions(-) rename src/api/kotlin/hiiragi283/ragium/api/recipe/multi/{HTShapelessInputsRecipe.kt => HTAlloyingRecipe.kt} (86%) create mode 100644 src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTAlloyingRecipeBuilder.kt delete mode 100644 src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTShapelessInputsRecipeBuilder.kt rename src/main/kotlin/hiiragi283/ragium/common/recipe/{HTAlloyingRecipe.kt => HTBasicAlloyingRecipe.kt} (51%) delete mode 100644 src/main/kotlin/hiiragi283/ragium/common/recipe/base/HTBasicShapelessInputsRecipe.kt diff --git a/src/api/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeTypes.kt b/src/api/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeTypes.kt index 5baafc4e8..fe592ef37 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeTypes.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeTypes.kt @@ -9,19 +9,19 @@ import hiiragi283.ragium.api.recipe.fluid.HTMeltingRecipe import hiiragi283.ragium.api.recipe.fluid.HTRefiningRecipe import hiiragi283.ragium.api.recipe.fluid.HTSimulatingRecipe import hiiragi283.ragium.api.recipe.input.HTRecipeInput +import hiiragi283.ragium.api.recipe.multi.HTAlloyingRecipe import hiiragi283.ragium.api.recipe.multi.HTCombineRecipe import hiiragi283.ragium.api.recipe.multi.HTComplexRecipe import hiiragi283.ragium.api.recipe.multi.HTCompressingRecipe import hiiragi283.ragium.api.recipe.multi.HTFluidWithCatalystRecipe import hiiragi283.ragium.api.recipe.multi.HTRockGeneratingRecipe -import hiiragi283.ragium.api.recipe.multi.HTShapelessInputsRecipe import hiiragi283.ragium.api.registry.impl.HTDeferredRecipeType import net.minecraft.world.item.crafting.Recipe import net.minecraft.world.item.crafting.RecipeInput object RagiumRecipeTypes { @JvmField - val ALLOYING: HTDeferredRecipeType = create(RagiumConst.ALLOYING) + val ALLOYING: HTDeferredRecipeType = create(RagiumConst.ALLOYING) @JvmField val BREWING: HTDeferredRecipeType = create(RagiumConst.BREWING) diff --git a/src/api/kotlin/hiiragi283/ragium/api/recipe/multi/HTShapelessInputsRecipe.kt b/src/api/kotlin/hiiragi283/ragium/api/recipe/multi/HTAlloyingRecipe.kt similarity index 86% rename from src/api/kotlin/hiiragi283/ragium/api/recipe/multi/HTShapelessInputsRecipe.kt rename to src/api/kotlin/hiiragi283/ragium/api/recipe/multi/HTAlloyingRecipe.kt index 21edbf181..d2c9c8242 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/recipe/multi/HTShapelessInputsRecipe.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/recipe/multi/HTAlloyingRecipe.kt @@ -8,6 +8,6 @@ import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient * * 材料の並びは不定 */ -interface HTShapelessInputsRecipe : HTRecipe { +interface HTAlloyingRecipe : HTRecipe { val ingredients: List } diff --git a/src/data/kotlin/hiiragi283/ragium/api/data/recipe/HTRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/api/data/recipe/HTRecipeProvider.kt index d0c60a88b..5fc182c4d 100644 --- a/src/data/kotlin/hiiragi283/ragium/api/data/recipe/HTRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/api/data/recipe/HTRecipeProvider.kt @@ -20,13 +20,13 @@ import hiiragi283.ragium.api.tag.RagiumModTags import hiiragi283.ragium.api.util.Ior import hiiragi283.ragium.common.HTMoldType import hiiragi283.ragium.common.crafting.HTClearComponentRecipe +import hiiragi283.ragium.common.data.recipe.HTAlloyingRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTCompressingRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTExtractingRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTFluidRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTFluidWithCatalystRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTMixingRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTPlantingRecipeBuilder -import hiiragi283.ragium.common.data.recipe.HTShapelessInputsRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTShapelessRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTSingleExtraItemRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTSmithingRecipeBuilder @@ -187,17 +187,16 @@ sealed class HTRecipeProvider { // Alloying fun alloyFromData(data: HTRecipeData, applyCondition: Boolean = false) { - HTShapelessInputsRecipeBuilder - .alloying( - data.getItemResults()[0].first, - data.getItemIngredients(itemCreator), - ).apply { - if (applyCondition) { - for ((entry: Ior>) in data.itemOutputs) { - entry.getRight()?.let(this::tagCondition) - } + HTAlloyingRecipeBuilder( + data.getItemIngredients(itemCreator), + data.getItemResults()[0].first, + ).apply { + if (applyCondition) { + for ((entry: Ior>) in data.itemOutputs) { + entry.getRight()?.let(this::tagCondition) } - }.saveModified(output, data.operator) + } + }.saveModified(output, data.operator) } // Compressing diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumChemistryRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumChemistryRecipeProvider.kt index 06104ffd5..8baf76672 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumChemistryRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumChemistryRecipeProvider.kt @@ -9,6 +9,7 @@ import hiiragi283.ragium.api.registry.HTFluidHolderLike import hiiragi283.ragium.api.registry.toHolderLike import hiiragi283.ragium.api.tag.RagiumModTags import hiiragi283.ragium.common.HTMoldType +import hiiragi283.ragium.common.data.recipe.HTAlloyingRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTCompressingRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTCookingRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTExtractingRecipeBuilder @@ -16,7 +17,6 @@ import hiiragi283.ragium.common.data.recipe.HTFluidRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTFluidWithCatalystRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTMixingRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTShapedRecipeBuilder -import hiiragi283.ragium.common.data.recipe.HTShapelessInputsRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTShapelessRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTSingleExtraItemRecipeBuilder import hiiragi283.ragium.common.material.CommonMaterialKeys @@ -230,8 +230,8 @@ object RagiumChemistryRecipeProvider : HTRecipeProvider.Direct() { .setResult(resultHelper.item(Items.ENCHANTED_GOLDEN_APPLE)) .save(output) // Exp Berries - HTShapelessInputsRecipeBuilder - .alloying( + HTAlloyingRecipeBuilder + .create( resultHelper.item(RagiumBlocks.EXP_BERRIES), itemCreator.fromTagKey(Tags.Items.FOODS_BERRY), itemCreator.fromTagKey(CommonMaterialPrefixes.GEM, RagiumMaterialKeys.ELDRITCH_PEARL, 4), diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumDecorationRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumDecorationRecipeProvider.kt index 571f9a207..0ddfcaf76 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumDecorationRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumDecorationRecipeProvider.kt @@ -3,10 +3,10 @@ package hiiragi283.ragium.data.server.recipe import hiiragi283.ragium.api.data.recipe.HTRecipeProvider import hiiragi283.ragium.api.material.HTMaterialKey import hiiragi283.ragium.common.HTDecorationType +import hiiragi283.ragium.common.data.recipe.HTAlloyingRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTCookingRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTMixingRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTShapedRecipeBuilder -import hiiragi283.ragium.common.data.recipe.HTShapelessInputsRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTSingleExtraItemRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTStonecuttingRecipeBuilder import hiiragi283.ragium.common.material.CommonMaterialKeys @@ -138,24 +138,23 @@ object RagiumDecorationRecipeProvider : HTRecipeProvider.Direct() { RagiumBlocks.GLASSES.forEach { (variant: HTGlassVariant, key: HTMaterialKey, block: ItemLike) -> when (variant) { HTGlassVariant.DEFAULT -> - HTShapelessInputsRecipeBuilder - .alloying( - resultHelper.item(block, 2), - when (key) { - VanillaMaterialKeys.QUARTZ -> listOf( - itemCreator.fromTagKey(CommonMaterialPrefixes.DUST, VanillaMaterialKeys.QUARTZ), - itemCreator.fromTagKey(ItemTags.SMELTS_TO_GLASS), - ) - VanillaMaterialKeys.OBSIDIAN -> listOf( - itemCreator.fromTagKey(CommonMaterialPrefixes.INGOT, RagiumMaterialKeys.NIGHT_METAL), - itemCreator.fromTagKey(Tags.Items.OBSIDIANS_NORMAL), - ) - else -> listOf( - itemCreator.fromTagKey(CommonMaterialPrefixes.GEM, key), - itemCreator.fromTagKey(CommonMaterialPrefixes.GLASS_BLOCK, VanillaMaterialKeys.OBSIDIAN, 2), - ) - }, - ).save(output) + HTAlloyingRecipeBuilder( + when (key) { + VanillaMaterialKeys.QUARTZ -> listOf( + itemCreator.fromTagKey(CommonMaterialPrefixes.DUST, VanillaMaterialKeys.QUARTZ), + itemCreator.fromTagKey(ItemTags.SMELTS_TO_GLASS), + ) + VanillaMaterialKeys.OBSIDIAN -> listOf( + itemCreator.fromTagKey(CommonMaterialPrefixes.INGOT, RagiumMaterialKeys.NIGHT_METAL), + itemCreator.fromTagKey(Tags.Items.OBSIDIANS_NORMAL), + ) + else -> listOf( + itemCreator.fromTagKey(CommonMaterialPrefixes.GEM, key), + itemCreator.fromTagKey(CommonMaterialPrefixes.GLASS_BLOCK, VanillaMaterialKeys.OBSIDIAN, 2), + ) + }, + resultHelper.item(block, 2), + ).save(output) HTGlassVariant.TINTED -> { // Normal -> Tinted diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumEngineeringRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumEngineeringRecipeProvider.kt index 7b475df5f..33f66a986 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumEngineeringRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumEngineeringRecipeProvider.kt @@ -8,8 +8,8 @@ import hiiragi283.ragium.api.tag.RagiumModTags import hiiragi283.ragium.common.HTMoldType import hiiragi283.ragium.common.crafting.HTEternalUpgradeRecipe import hiiragi283.ragium.common.crafting.HTGravitationalUpgradeRecipe +import hiiragi283.ragium.common.data.recipe.HTAlloyingRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTShapedRecipeBuilder -import hiiragi283.ragium.common.data.recipe.HTShapelessInputsRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTStonecuttingRecipeBuilder import hiiragi283.ragium.common.material.CommonMaterialPrefixes import hiiragi283.ragium.common.material.HTColorMaterial @@ -73,8 +73,8 @@ object RagiumEngineeringRecipeProvider : HTRecipeProvider.Direct() { @JvmStatic private fun circuits() { // Circuit Boards - HTShapelessInputsRecipeBuilder - .alloying( + HTAlloyingRecipeBuilder + .create( resultHelper.item(RagiumItems.CIRCUIT_BOARD, 4), itemCreator.fromTagKey(RagiumModTags.Items.PLASTICS), itemCreator.fromTagKey(CommonMaterialPrefixes.DUST, VanillaMaterialKeys.QUARTZ), @@ -102,8 +102,8 @@ object RagiumEngineeringRecipeProvider : HTRecipeProvider.Direct() { .define('C', RagiumItems.CIRCUIT_BOARD) .saveSuffixed(output, "_with_plastic") - HTShapelessInputsRecipeBuilder - .alloying( + HTAlloyingRecipeBuilder + .create( resultHelper.item(RagiumItems.BASIC_CIRCUIT, 4), itemCreator.fromTagKey(CommonMaterialPrefixes.INGOT, VanillaMaterialKeys.COPPER, 2), itemCreator.fromTagKey(CommonMaterialPrefixes.DUST, RagiumMaterialKeys.RAGINITE), @@ -128,8 +128,8 @@ object RagiumEngineeringRecipeProvider : HTRecipeProvider.Direct() { define('C', RagiumItems.CIRCUIT_BOARD) } - HTShapelessInputsRecipeBuilder - .alloying( + HTAlloyingRecipeBuilder + .create( resultHelper.item(RagiumItems.ADVANCED_CIRCUIT, 2), itemCreator.fromTagKey(CommonMaterialPrefixes.INGOT, VanillaMaterialKeys.GOLD, 2), itemCreator.fromTagKey(CommonMaterialPrefixes.DUST, RagiumMaterialKeys.AZURE), @@ -212,23 +212,23 @@ object RagiumEngineeringRecipeProvider : HTRecipeProvider.Direct() { .setCategory(CraftingBookCategory.REDSTONE) .save(output) - HTShapelessInputsRecipeBuilder - .alloying( + HTAlloyingRecipeBuilder + .create( resultHelper.item(RagiumItems.REDSTONE_BOARD, 4), itemCreator.fromTagKey(CommonMaterialPrefixes.DUST, VanillaMaterialKeys.REDSTONE), itemCreator.fromItem(Items.SMOOTH_STONE_SLAB), ).save(output) // Repeater - HTShapelessInputsRecipeBuilder - .alloying( + HTAlloyingRecipeBuilder + .create( resultHelper.item(Items.REPEATER, 2), itemCreator.fromItem(Items.REDSTONE_TORCH), itemCreator.fromTagKey(CommonMaterialPrefixes.DUST, VanillaMaterialKeys.REDSTONE), itemCreator.fromItem(RagiumItems.REDSTONE_BOARD), ).save(output) // Comparator - HTShapelessInputsRecipeBuilder - .alloying( + HTAlloyingRecipeBuilder + .create( resultHelper.item(Items.COMPARATOR, 2), itemCreator.fromItem(Items.REDSTONE_TORCH), itemCreator.fromTagKey(CommonMaterialPrefixes.GEM, VanillaMaterialKeys.QUARTZ), @@ -239,8 +239,8 @@ object RagiumEngineeringRecipeProvider : HTRecipeProvider.Direct() { @JvmStatic private fun diode() { // LED - HTShapelessInputsRecipeBuilder - .alloying( + HTAlloyingRecipeBuilder + .create( resultHelper.item(RagiumItems.LED, 4), itemCreator.fromTagKey(CommonMaterialPrefixes.INGOT, VanillaMaterialKeys.COPPER), itemCreator.fromItem(RagiumItems.LUMINOUS_PASTE), @@ -265,8 +265,8 @@ object RagiumEngineeringRecipeProvider : HTRecipeProvider.Direct() { } // Solar Panel - HTShapelessInputsRecipeBuilder - .alloying( + HTAlloyingRecipeBuilder + .create( resultHelper.item(RagiumItems.SOLAR_PANEL), itemCreator.fromTagKey(RagiumModTags.Items.PLASTICS), itemCreator.fromItem(RagiumItems.LUMINOUS_PASTE, 2), diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumAE2RecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumAE2RecipeProvider.kt index 55ef0368a..fbe465f8c 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumAE2RecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumAE2RecipeProvider.kt @@ -7,9 +7,9 @@ import hiiragi283.ragium.api.RagiumConst import hiiragi283.ragium.api.data.recipe.HTRecipeProvider import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient import hiiragi283.ragium.api.recipe.result.HTItemResult +import hiiragi283.ragium.common.data.recipe.HTAlloyingRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTMixingRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTRockGeneratingRecipeBuilder -import hiiragi283.ragium.common.data.recipe.HTShapelessInputsRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTSimulatingRecipeBuilder import hiiragi283.ragium.common.material.CommonMaterialPrefixes import hiiragi283.ragium.common.material.ModMaterialKeys @@ -78,8 +78,8 @@ object RagiumAE2RecipeProvider : HTRecipeProvider.Integration(RagiumConst.AE2) { @JvmStatic private fun combineWithRedstone(result: HTItemResult, left: HTItemIngredient, right: HTItemIngredient) { - HTShapelessInputsRecipeBuilder - .alloying( + HTAlloyingRecipeBuilder + .create( result, left, itemCreator.fromTagKey(CommonMaterialPrefixes.DUST, VanillaMaterialKeys.REDSTONE), diff --git a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTAlloyingEmiRecipe.kt b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTAlloyingEmiRecipe.kt index 017f81827..28e58d120 100644 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTAlloyingEmiRecipe.kt +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTAlloyingEmiRecipe.kt @@ -5,11 +5,11 @@ import dev.emi.emi.api.widget.WidgetHolder import hiiragi283.ragium.client.integration.emi.addArrow import hiiragi283.ragium.client.integration.emi.category.RagiumEmiRecipeCategories import hiiragi283.ragium.client.integration.emi.recipe.HTEmiHolderRecipe -import hiiragi283.ragium.common.recipe.HTAlloyingRecipe +import hiiragi283.ragium.common.recipe.HTBasicAlloyingRecipe import net.minecraft.world.item.crafting.RecipeHolder -class HTAlloyingEmiRecipe(holder: RecipeHolder) : - HTEmiHolderRecipe(RagiumEmiRecipeCategories.ALLOYING, holder) { +class HTAlloyingEmiRecipe(holder: RecipeHolder) : + HTEmiHolderRecipe(RagiumEmiRecipeCategories.ALLOYING, holder) { init { recipe.ingredients.forEach(::addInput) diff --git a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTSimulatingEmiRecipe.kt b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTSimulatingEmiRecipe.kt index ce907a5ac..830d3e15a 100644 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTSimulatingEmiRecipe.kt +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/processor/HTSimulatingEmiRecipe.kt @@ -8,9 +8,9 @@ import hiiragi283.ragium.client.integration.emi.recipe.HTEmiHolderRecipe import hiiragi283.ragium.client.integration.emi.toEmi import hiiragi283.ragium.client.integration.emi.toItemEmi import hiiragi283.ragium.common.block.HTImitationSpawnerBlock +import hiiragi283.ragium.common.recipe.HTBasicSimulatingRecipe import hiiragi283.ragium.common.recipe.HTBlockSimulatingRecipe import hiiragi283.ragium.common.recipe.HTEntitySimulatingRecipe -import hiiragi283.ragium.common.recipe.HTBasicSimulatingRecipe import hiiragi283.ragium.common.text.RagiumCommonTranslation import net.minecraft.ChatFormatting import net.minecraft.core.Holder 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 cf3ae4419..9910d43eb 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 @@ -3,7 +3,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.HTRecipeInput -import hiiragi283.ragium.api.recipe.multi.HTShapelessInputsRecipe +import hiiragi283.ragium.api.recipe.multi.HTAlloyingRecipe import hiiragi283.ragium.api.storage.HTStorageAccess import hiiragi283.ragium.api.storage.HTStorageAction import hiiragi283.ragium.api.storage.holder.HTSlotInfo @@ -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, @@ -49,7 +49,7 @@ class HTAlloySmelterBlockEntity(pos: BlockPos, state: BlockState) : builder.items.addAll(inputSlots.map(HTBasicItemSlot::getStack)) } - override fun canProgressRecipe(level: ServerLevel, input: HTRecipeInput, recipe: HTShapelessInputsRecipe): Boolean = + override fun canProgressRecipe(level: ServerLevel, input: HTRecipeInput, recipe: HTAlloyingRecipe): Boolean = HTStackSlotHelper.canInsertStack(outputSlot, input, level, recipe::assembleItem) override fun completeRecipe( @@ -57,7 +57,7 @@ class HTAlloySmelterBlockEntity(pos: BlockPos, state: BlockState) : pos: BlockPos, state: BlockState, input: HTRecipeInput, - recipe: HTShapelessInputsRecipe, + recipe: HTAlloyingRecipe, ) { // 実際にアウトプットに搬出する outputSlot.insert(recipe.assembleItem(input, level.registryAccess()), HTStorageAction.EXECUTE, HTStorageAccess.INTERNAL) diff --git a/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTAlloyingRecipeBuilder.kt b/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTAlloyingRecipeBuilder.kt new file mode 100644 index 000000000..70dc92347 --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTAlloyingRecipeBuilder.kt @@ -0,0 +1,21 @@ +package hiiragi283.ragium.common.data.recipe + +import hiiragi283.ragium.api.RagiumConst +import hiiragi283.ragium.api.data.recipe.HTRecipeBuilder +import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient +import hiiragi283.ragium.api.recipe.result.HTItemResult +import hiiragi283.ragium.common.recipe.HTBasicAlloyingRecipe +import net.minecraft.resources.ResourceLocation + +class HTAlloyingRecipeBuilder(private val ingredients: List, private val result: HTItemResult) : + HTRecipeBuilder(RagiumConst.ALLOYING) { + companion object { + @JvmStatic + fun create(result: HTItemResult, vararg ingredients: HTItemIngredient): HTAlloyingRecipeBuilder = + HTAlloyingRecipeBuilder(listOf(*ingredients), result) + } + + override fun getPrimalId(): ResourceLocation = result.id + + override fun createRecipe(): HTBasicAlloyingRecipe = HTBasicAlloyingRecipe(ingredients, result) +} diff --git a/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTShapelessInputsRecipeBuilder.kt b/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTShapelessInputsRecipeBuilder.kt deleted file mode 100644 index b81def5c8..000000000 --- a/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTShapelessInputsRecipeBuilder.kt +++ /dev/null @@ -1,34 +0,0 @@ -package hiiragi283.ragium.common.data.recipe - -import hiiragi283.ragium.api.RagiumConst -import hiiragi283.ragium.api.data.recipe.HTRecipeBuilder -import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient -import hiiragi283.ragium.api.recipe.multi.HTShapelessInputsRecipe -import hiiragi283.ragium.api.recipe.result.HTItemResult -import hiiragi283.ragium.common.recipe.HTAlloyingRecipe -import net.minecraft.resources.ResourceLocation - -class HTShapelessInputsRecipeBuilder( - prefix: String, - private val factory: Factory<*>, - private val ingredients: List, - private val result: HTItemResult, -) : HTRecipeBuilder(prefix) { - companion object { - @JvmStatic - fun alloying(result: HTItemResult, vararg ingredients: HTItemIngredient): HTShapelessInputsRecipeBuilder = - alloying(result, listOf(*ingredients)) - - @JvmStatic - fun alloying(result: HTItemResult, ingredients: List): HTShapelessInputsRecipeBuilder = - HTShapelessInputsRecipeBuilder(RagiumConst.ALLOYING, ::HTAlloyingRecipe, ingredients, result) - } - - override fun getPrimalId(): ResourceLocation = result.id - - override fun createRecipe(): HTShapelessInputsRecipe = factory.create(ingredients, result) - - fun interface Factory { - fun create(ingredients: List, result: HTItemResult): RECIPE - } -} diff --git a/src/main/kotlin/hiiragi283/ragium/common/event/RagiumRuntimeRecipeHandler.kt b/src/main/kotlin/hiiragi283/ragium/common/event/RagiumRuntimeRecipeHandler.kt index 8f28a20cf..0827ef443 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/event/RagiumRuntimeRecipeHandler.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/event/RagiumRuntimeRecipeHandler.kt @@ -14,9 +14,9 @@ import hiiragi283.ragium.api.recipe.HTRegisterRuntimeRecipeEvent import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient import hiiragi283.ragium.api.registry.idOrThrow import hiiragi283.ragium.api.tag.RagiumModTags +import hiiragi283.ragium.common.data.recipe.HTAlloyingRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTCompressingRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTMixingRecipeBuilder -import hiiragi283.ragium.common.data.recipe.HTShapelessInputsRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTSingleExtraItemRecipeBuilder import hiiragi283.ragium.common.material.CommonMaterialPrefixes import hiiragi283.ragium.common.recipe.HTBrewingRecipe @@ -92,8 +92,8 @@ object RagiumRuntimeRecipeHandler { if (!event.isPresentTag(CommonMaterialPrefixes.INGOT, key)) return if (event.isPresentTag(prefix, key)) { - HTShapelessInputsRecipeBuilder - .alloying( + HTAlloyingRecipeBuilder + .create( event.resultHelper.item(CommonMaterialPrefixes.INGOT, key, outputCount * outputMultiplier), event.itemCreator.fromTagKey(prefix, key, inputCount), event.itemCreator.fromTagKey(flux, fluxCount), diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/HTAlloyingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/HTBasicAlloyingRecipe.kt similarity index 51% rename from src/main/kotlin/hiiragi283/ragium/common/recipe/HTAlloyingRecipe.kt rename to src/main/kotlin/hiiragi283/ragium/common/recipe/HTBasicAlloyingRecipe.kt index 629b2cb2b..be47979c0 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/recipe/HTAlloyingRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/HTBasicAlloyingRecipe.kt @@ -2,13 +2,20 @@ package hiiragi283.ragium.common.recipe import hiiragi283.ragium.api.recipe.RagiumRecipeTypes import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient +import hiiragi283.ragium.api.recipe.input.HTRecipeInput +import hiiragi283.ragium.api.recipe.multi.HTAlloyingRecipe import hiiragi283.ragium.api.recipe.result.HTItemResult -import hiiragi283.ragium.common.recipe.base.HTBasicShapelessInputsRecipe +import hiiragi283.ragium.common.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 HTBasicAlloyingRecipe(override val ingredients: List, result: HTItemResult) : + HTBasicSingleOutputRecipe(result), + HTAlloyingRecipe { + override fun matches(input: HTRecipeInput, level: Level): Boolean = HTRecipeInput.hasMatchingSlots(ingredients, input.items) -class HTAlloyingRecipe(ingredients: List, result: HTItemResult) : HTBasicShapelessInputsRecipe(ingredients, result) { override fun getSerializer(): RecipeSerializer<*> = RagiumRecipeSerializers.ALLOYING override fun getType(): RecipeType<*> = RagiumRecipeTypes.ALLOYING.get() diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/base/HTBasicShapelessInputsRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/base/HTBasicShapelessInputsRecipe.kt deleted file mode 100644 index 1b1b3cb2c..000000000 --- a/src/main/kotlin/hiiragi283/ragium/common/recipe/base/HTBasicShapelessInputsRecipe.kt +++ /dev/null @@ -1,13 +0,0 @@ -package hiiragi283.ragium.common.recipe.base - -import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient -import hiiragi283.ragium.api.recipe.input.HTRecipeInput -import hiiragi283.ragium.api.recipe.multi.HTShapelessInputsRecipe -import hiiragi283.ragium.api.recipe.result.HTItemResult -import net.minecraft.world.level.Level - -abstract class HTBasicShapelessInputsRecipe(final override val ingredients: List, result: HTItemResult) : - HTBasicSingleOutputRecipe(result), - HTShapelessInputsRecipe { - final override fun matches(input: HTRecipeInput, level: Level): Boolean = HTRecipeInput.hasMatchingSlots(ingredients, input.items) -} diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeBiCodecs.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeBiCodecs.kt index da7e745d8..a7b9d1bd7 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeBiCodecs.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeBiCodecs.kt @@ -24,11 +24,11 @@ import hiiragi283.ragium.common.recipe.HTBasicCompressingRecipe import hiiragi283.ragium.common.recipe.HTBasicExtractingRecipe import hiiragi283.ragium.common.recipe.HTBasicMeltingRecipe import hiiragi283.ragium.common.recipe.HTBasicRefiningRecipe +import hiiragi283.ragium.common.recipe.HTBasicSimulatingRecipe import hiiragi283.ragium.common.recipe.HTMixingRecipe import hiiragi283.ragium.common.recipe.HTSimpleMixingRecipe import hiiragi283.ragium.common.recipe.HTSolidifyingRecipe import hiiragi283.ragium.common.recipe.base.HTBasicCombineRecipe -import hiiragi283.ragium.common.recipe.HTBasicSimulatingRecipe import hiiragi283.ragium.common.recipe.base.HTBasicSingleExtraItemRecipe import hiiragi283.ragium.common.recipe.base.HTBasicSingleOutputRecipe import net.minecraft.core.HolderSet diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeSerializers.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeSerializers.kt index e0f41fbaa..65a708177 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeSerializers.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeSerializers.kt @@ -15,7 +15,7 @@ import hiiragi283.ragium.common.crafting.HTGravitationalUpgradeRecipe import hiiragi283.ragium.common.crafting.HTIceCreamSodaRecipe import hiiragi283.ragium.common.crafting.HTPotionDropRecipe import hiiragi283.ragium.common.crafting.HTUpgradeChargeRecipe -import hiiragi283.ragium.common.recipe.HTAlloyingRecipe +import hiiragi283.ragium.common.recipe.HTBasicAlloyingRecipe import hiiragi283.ragium.common.recipe.HTBasicCompressingRecipe import hiiragi283.ragium.common.recipe.HTBasicExtractingRecipe import hiiragi283.ragium.common.recipe.HTBasicMeltingRecipe @@ -90,14 +90,14 @@ object RagiumRecipeSerializers { // Machine // @JvmField - val ALLOYING: RecipeSerializer = register( + val ALLOYING: RecipeSerializer = register( RagiumConst.ALLOYING, RagiumRecipeBiCodecs.singleOutput( - ::HTAlloyingRecipe, + ::HTBasicAlloyingRecipe, HTItemIngredient.CODEC .listOf(2, 3) .fieldOf("ingredients") - .forGetter(HTAlloyingRecipe::ingredients), + .forGetter(HTBasicAlloyingRecipe::ingredients), ), ) From 296a35c8f3a76b8b6f1e5f225e77ef61b027972b Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Mon, 15 Dec 2025 05:09:53 +0900 Subject: [PATCH 47/49] refactor!: redesigned HTRockGeneratingRecipe --- .../hiiragi283/ragium/api/RagiumPlatform.kt | 3 - .../api/data/map/HTRockGenerationData.kt | 21 ++++ .../ragium/api/data/map/RagiumDataMapTypes.kt | 9 ++ .../ragium/api/recipe/RagiumRecipeTypes.kt | 4 - .../api/recipe/fluid/HTSimulatingRecipe.kt | 1 + .../recipe/multi/HTRockGeneratingRecipe.kt | 52 --------- .../data/client/RagiumEnglishProvider.kt | 2 +- .../data/client/RagiumJapaneseProvider.kt | 2 +- .../data/server/RagiumDataMapProvider.kt | 23 +++- .../data/server/RagiumRecipeProvider.kt | 2 - .../RagiumRockGeneratingRecipeProvider.kt | 106 ------------------ .../recipe/compat/RagiumAE2RecipeProvider.kt | 8 -- .../client/integration/emi/RagiumEmiPlugin.kt | 19 +++- .../emi/category/RagiumEmiRecipeCategories.kt | 7 +- .../emi/data/HTRockGenerationEmiData.kt | 6 + .../device/HTRockGeneratingEmiRecipe.kt | 24 ++-- .../kotlin/hiiragi283/ragium/RagiumCommon.kt | 1 + .../device/HTStoneCollectorBlockEntity.kt | 102 +++++------------ .../recipe/HTRockGeneratingRecipeBuilder.kt | 45 -------- .../common/text/RagiumCommonTranslation.kt | 1 + .../ragium/impl/RagiumPlatformImpl.kt | 3 - .../hiiragi283/ragium/setup/RagiumBlocks.kt | 2 +- .../ragium/setup/RagiumMiscRegister.kt | 1 - .../ragium/setup/RagiumRecipeBiCodecs.kt | 11 -- .../ragium/setup/RagiumRecipeSerializers.kt | 7 -- 25 files changed, 123 insertions(+), 339 deletions(-) create mode 100644 src/api/kotlin/hiiragi283/ragium/api/data/map/HTRockGenerationData.kt delete mode 100644 src/api/kotlin/hiiragi283/ragium/api/recipe/multi/HTRockGeneratingRecipe.kt delete mode 100644 src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumRockGeneratingRecipeProvider.kt create mode 100644 src/integration/kotlin/hiiragi283/ragium/client/integration/emi/data/HTRockGenerationEmiData.kt delete mode 100644 src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTRockGeneratingRecipeBuilder.kt diff --git a/src/api/kotlin/hiiragi283/ragium/api/RagiumPlatform.kt b/src/api/kotlin/hiiragi283/ragium/api/RagiumPlatform.kt index d25687291..d01a3aff4 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/RagiumPlatform.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/RagiumPlatform.kt @@ -7,7 +7,6 @@ import hiiragi283.ragium.api.material.HTMaterialDefinition import hiiragi283.ragium.api.material.HTMaterialKey import hiiragi283.ragium.api.material.prefix.HTMaterialPrefix import hiiragi283.ragium.api.recipe.extra.HTPlantingRecipe -import hiiragi283.ragium.api.recipe.multi.HTRockGeneratingRecipe import hiiragi283.ragium.api.registry.RegistryKey import hiiragi283.ragium.api.serialization.value.HTValueInput import hiiragi283.ragium.api.serialization.value.HTValueOutput @@ -53,8 +52,6 @@ interface RagiumPlatform { fun getPlantingRecipeSerializer(): RecipeSerializer - fun getRockGeneratingRecipeSerializer(): RecipeSerializer - // Server // fun getCurrentServer(): MinecraftServer? diff --git a/src/api/kotlin/hiiragi283/ragium/api/data/map/HTRockGenerationData.kt b/src/api/kotlin/hiiragi283/ragium/api/data/map/HTRockGenerationData.kt new file mode 100644 index 000000000..b7d3b59af --- /dev/null +++ b/src/api/kotlin/hiiragi283/ragium/api/data/map/HTRockGenerationData.kt @@ -0,0 +1,21 @@ +package hiiragi283.ragium.api.data.map + +import hiiragi283.ragium.api.serialization.codec.BiCodec +import hiiragi283.ragium.api.serialization.codec.BiCodecs +import io.netty.buffer.ByteBuf +import org.apache.commons.lang3.math.Fraction + +@JvmRecord +data class HTRockGenerationData(val waterChance: Fraction, val lavaChance: Fraction) { + companion object { + @JvmStatic + private val FRACTION_CODEC: BiCodec = BiCodecs.fractionRange(Fraction.ZERO, Fraction.ONE) + + @JvmField + val CODEC: BiCodec = BiCodec.composite( + FRACTION_CODEC.fieldOf("water_chance").forGetter(HTRockGenerationData::waterChance), + FRACTION_CODEC.fieldOf("lava_chance").forGetter(HTRockGenerationData::lavaChance), + ::HTRockGenerationData, + ) + } +} diff --git a/src/api/kotlin/hiiragi283/ragium/api/data/map/RagiumDataMapTypes.kt b/src/api/kotlin/hiiragi283/ragium/api/data/map/RagiumDataMapTypes.kt index 7dfae1297..dbfee37b1 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/data/map/RagiumDataMapTypes.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/data/map/RagiumDataMapTypes.kt @@ -13,6 +13,8 @@ import net.minecraft.world.entity.Entity import net.minecraft.world.entity.EntityType import net.minecraft.world.item.Item import net.minecraft.world.item.ItemStack +import net.minecraft.world.level.block.Block +import net.minecraft.world.level.block.state.BlockState import net.minecraft.world.level.material.Fluid import net.neoforged.neoforge.registries.datamaps.DataMapType @@ -21,6 +23,11 @@ import net.neoforged.neoforge.registries.datamaps.DataMapType * @see mekanism.api.datamaps.IMekanismDataMapTypes */ object RagiumDataMapTypes { + // Block + @JvmField + val ROCK_CHANCE: DataMapType = + create("rock_generation", Registries.BLOCK, HTRockGenerationData.CODEC) + // Entity Type @JvmField val MOB_HEAD: DataMapType, HTMobHead> = create("mob_head", Registries.ENTITY_TYPE, HTMobHead.CODEC) @@ -46,6 +53,8 @@ object RagiumDataMapTypes { // Extensions // + fun getRockData(state: BlockState): HTRockGenerationData? = state.blockHolder.getData(ROCK_CHANCE) + /** * 指定した[entity]からエンチャントでドロップするモブの頭を取得します。 */ diff --git a/src/api/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeTypes.kt b/src/api/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeTypes.kt index fe592ef37..40885ac16 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeTypes.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeTypes.kt @@ -14,7 +14,6 @@ import hiiragi283.ragium.api.recipe.multi.HTCombineRecipe import hiiragi283.ragium.api.recipe.multi.HTComplexRecipe import hiiragi283.ragium.api.recipe.multi.HTCompressingRecipe import hiiragi283.ragium.api.recipe.multi.HTFluidWithCatalystRecipe -import hiiragi283.ragium.api.recipe.multi.HTRockGeneratingRecipe import hiiragi283.ragium.api.registry.impl.HTDeferredRecipeType import net.minecraft.world.item.crafting.Recipe import net.minecraft.world.item.crafting.RecipeInput @@ -53,9 +52,6 @@ object RagiumRecipeTypes { @JvmField val REFINING: HTDeferredRecipeType = create(RagiumConst.REFINING) - @JvmField - val ROCK_GENERATING: HTDeferredRecipeType = create(RagiumConst.ROCK_GENERATING) - @JvmField val SIMULATING: HTDeferredRecipeType = create(RagiumConst.SIMULATING) diff --git a/src/api/kotlin/hiiragi283/ragium/api/recipe/fluid/HTSimulatingRecipe.kt b/src/api/kotlin/hiiragi283/ragium/api/recipe/fluid/HTSimulatingRecipe.kt index 4589c3e3e..20856d837 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/recipe/fluid/HTSimulatingRecipe.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/recipe/fluid/HTSimulatingRecipe.kt @@ -2,6 +2,7 @@ package hiiragi283.ragium.api.recipe.fluid import hiiragi283.ragium.api.recipe.RagiumRecipeTypes import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient +import net.minecraft.world.item.crafting.RecipeType /** * 単一のアイテムと触媒から複数の完成品(アイテム,液体)を生産するレシピ diff --git a/src/api/kotlin/hiiragi283/ragium/api/recipe/multi/HTRockGeneratingRecipe.kt b/src/api/kotlin/hiiragi283/ragium/api/recipe/multi/HTRockGeneratingRecipe.kt deleted file mode 100644 index d0048f815..000000000 --- a/src/api/kotlin/hiiragi283/ragium/api/recipe/multi/HTRockGeneratingRecipe.kt +++ /dev/null @@ -1,52 +0,0 @@ -package hiiragi283.ragium.api.recipe.multi - -import com.mojang.datafixers.util.Either -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.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( - val left: HTFluidIngredient, - val right: Either, - val bottom: Optional, - val result: HTItemResult, -) : HTComplexRecipe { - override fun getRequiredCount(index: Int): Int = when (index) { - 1 -> right.left().map(HTItemIngredient::getRequiredAmount) - else -> Optional.empty() - }.orElse(0) - - override fun getRequiredAmount(index: Int): Int = when (index) { - 0 -> left.getRequiredAmount() - 1 -> right.right().map(HTFluidIngredient::getRequiredAmount).orElse(0) - else -> 0 - } - - override fun assembleFluid(input: HTRecipeInput, provider: HolderLookup.Provider): ImmutableFluidStack? = null - - 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 -> input.testItem(0, ingredient) }, - { ingredient: HTFluidIngredient -> input.testFluid(1, ingredient) }, - ) - val bool3: Boolean = input.testCatalyst(1, bottom) - return bool1 && bool2 && bool3 - } - - override fun getSerializer(): RecipeSerializer<*> = RagiumPlatform.INSTANCE.getRockGeneratingRecipeSerializer() - - override fun getType(): RecipeType<*> = RagiumRecipeTypes.ROCK_GENERATING.get() -} diff --git a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt index 73458cba4..7d6090990 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt @@ -352,7 +352,6 @@ class RagiumEnglishProvider(output: PackOutput) : HTLanguageProvider.English(out add(RagiumRecipeTypes.MIXING, "Mixing") add(RagiumRecipeTypes.PLANTING, "Planting") add(RagiumRecipeTypes.REFINING, "Refining") - add(RagiumRecipeTypes.ROCK_GENERATING, "Rock Generating") add(RagiumRecipeTypes.SIMULATING, "Simulating") add(RagiumRecipeTypes.SOLIDIFYING, "Solidifying") } @@ -505,6 +504,7 @@ class RagiumEnglishProvider(output: PackOutput) : HTLanguageProvider.English(out private fun emi() { add(RagiumCommonTranslation.EMI_MACHINE_UPGRADE_TITLE, "Machine Upgrades") add(RagiumCommonTranslation.EMI_COMPOSTING_TITLE, "Composting") + add(RagiumCommonTranslation.EMI_ROCK_GENERATING, "Rock Generating") add(RagiumCommonTranslation.EMI_BLOCK_CATALYST, "Placed below the block.") } diff --git a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt index 6dd56b0d6..70d95c170 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt @@ -353,7 +353,6 @@ class RagiumJapaneseProvider(output: PackOutput) : HTLanguageProvider.Japanese(o add(RagiumRecipeTypes.MIXING, "混合") add(RagiumRecipeTypes.PLANTING, "栽培") add(RagiumRecipeTypes.REFINING, "精製") - add(RagiumRecipeTypes.ROCK_GENERATING, "岩石生成") add(RagiumRecipeTypes.SIMULATING, "シミュレーション") add(RagiumRecipeTypes.SOLIDIFYING, "成型") } @@ -509,6 +508,7 @@ class RagiumJapaneseProvider(output: PackOutput) : HTLanguageProvider.Japanese(o private fun emi() { add(RagiumCommonTranslation.EMI_MACHINE_UPGRADE_TITLE, "機械のアップグレード") add(RagiumCommonTranslation.EMI_COMPOSTING_TITLE, "コンポスト") + add(RagiumCommonTranslation.EMI_ROCK_GENERATING, "岩石生成") add(RagiumCommonTranslation.EMI_BLOCK_CATALYST, "ブロックの下に設置します。") } diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/RagiumDataMapProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/RagiumDataMapProvider.kt index 37192eade..fc94f5417 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/RagiumDataMapProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/RagiumDataMapProvider.kt @@ -1,5 +1,6 @@ package hiiragi283.ragium.data.server +import appeng.core.definitions.AEBlocks import com.enderio.base.common.init.EIOBlocks import de.ellpeck.actuallyadditions.mod.fluids.InitFluids import hiiragi283.ragium.api.RagiumConst @@ -8,6 +9,7 @@ import hiiragi283.ragium.api.data.HTDataGenContext import hiiragi283.ragium.api.data.map.HTFluidCoolantData import hiiragi283.ragium.api.data.map.HTFluidFuelData import hiiragi283.ragium.api.data.map.HTMobHead +import hiiragi283.ragium.api.data.map.HTRockGenerationData import hiiragi283.ragium.api.data.map.HTUpgradeData import hiiragi283.ragium.api.data.map.RagiumDataMapTypes import hiiragi283.ragium.api.data.map.equip.HTMobEffectEquipAction @@ -34,20 +36,20 @@ import hiiragi283.ragium.setup.RagiumBlocks import hiiragi283.ragium.setup.RagiumFluidContents import hiiragi283.ragium.setup.RagiumItems import net.minecraft.core.HolderLookup -import net.minecraft.core.HolderSet import net.minecraft.core.registries.Registries -import net.minecraft.tags.TagKey import net.minecraft.world.effect.MobEffects import net.minecraft.world.entity.EntityType import net.minecraft.world.item.Item import net.minecraft.world.item.Items import net.minecraft.world.level.material.Fluid +import net.neoforged.neoforge.common.Tags import net.neoforged.neoforge.common.conditions.ICondition import net.neoforged.neoforge.common.conditions.ModLoadedCondition import net.neoforged.neoforge.common.data.DataMapProvider import net.neoforged.neoforge.registries.datamaps.builtin.Compostable import net.neoforged.neoforge.registries.datamaps.builtin.FurnaceFuel import net.neoforged.neoforge.registries.datamaps.builtin.NeoForgeDataMaps +import org.apache.commons.lang3.math.Fraction import plus.dragons.createenchantmentindustry.common.registry.CEIDataMaps @Suppress("DEPRECATION") @@ -55,14 +57,14 @@ class RagiumDataMapProvider(context: HTDataGenContext) : DataMapProvider(context private lateinit var provider: HolderLookup.Provider private val itemCreator: HTItemIngredientCreator = RagiumPlatform.INSTANCE.itemCreator() - private fun holderSet(tagKey: TagKey): HolderSet = provider.lookupOrThrow(tagKey.registry()).getOrThrow(tagKey) - override fun gather(provider: HolderLookup.Provider) { this.provider = provider compostables() furnaceFuels() + rockGeneration() + mobHead() coolants() @@ -94,6 +96,19 @@ class RagiumDataMapProvider(context: HTDataGenContext) : DataMapProvider(context // Ragium // + private fun rockGeneration() { + builder(RagiumDataMapTypes.ROCK_CHANCE) + .add(Tags.Blocks.COBBLESTONES, HTRockGenerationData(Fraction.ZERO, Fraction.ZERO), false) + .add(Tags.Blocks.STONES, HTRockGenerationData(Fraction.ONE, Fraction.ZERO), false) + // AE2 + .add( + AEBlocks.SKY_STONE_BLOCK.id(), + HTRockGenerationData(Fraction.ZERO, Fraction.ONE_HALF), + false, + ModLoadedCondition(RagiumConst.AE2), + ) + } + private fun mobHead() { builder(RagiumDataMapTypes.MOB_HEAD) .add(EntityType.SKELETON, HTMobHead(Items.SKELETON_SKULL)) diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/RagiumRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/RagiumRecipeProvider.kt index a5dd4a331..33dbcdcc1 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/RagiumRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/RagiumRecipeProvider.kt @@ -11,7 +11,6 @@ import hiiragi283.ragium.data.server.recipe.RagiumFoodRecipeProvider import hiiragi283.ragium.data.server.recipe.RagiumMachineRecipeProvider import hiiragi283.ragium.data.server.recipe.RagiumMaterialRecipeProvider import hiiragi283.ragium.data.server.recipe.RagiumPlantingRecipeProvider -import hiiragi283.ragium.data.server.recipe.RagiumRockGeneratingRecipeProvider import hiiragi283.ragium.data.server.recipe.RagiumSimulatingRecipeProvider import hiiragi283.ragium.data.server.recipe.RagiumToolRecipeProvider import hiiragi283.ragium.data.server.recipe.compat.RagiumAARecipeProvider @@ -41,7 +40,6 @@ class RagiumRecipeProvider(context: HTDataGenContext) : RecipeProvider(context.o RagiumMachineRecipeProvider.buildRecipes(recipeOutput, holderLookup) RagiumMaterialRecipeProvider.buildRecipes(recipeOutput, holderLookup) RagiumPlantingRecipeProvider.buildRecipes(recipeOutput, holderLookup) - RagiumRockGeneratingRecipeProvider.buildRecipes(recipeOutput, holderLookup) RagiumSimulatingRecipeProvider.buildRecipes(recipeOutput, holderLookup) RagiumToolRecipeProvider.buildRecipes(recipeOutput, holderLookup) diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumRockGeneratingRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumRockGeneratingRecipeProvider.kt deleted file mode 100644 index fb69eb326..000000000 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumRockGeneratingRecipeProvider.kt +++ /dev/null @@ -1,106 +0,0 @@ -package hiiragi283.ragium.data.server.recipe - -import hiiragi283.ragium.api.data.recipe.HTRecipeProvider -import hiiragi283.ragium.api.recipe.ingredient.HTFluidIngredient -import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient -import hiiragi283.ragium.common.data.recipe.HTRockGeneratingRecipeBuilder -import hiiragi283.ragium.setup.RagiumBlocks -import hiiragi283.ragium.setup.RagiumFluidContents -import net.minecraft.world.item.Item -import net.minecraft.world.item.Items -import net.minecraft.world.level.ItemLike -import net.neoforged.neoforge.common.Tags - -object RagiumRockGeneratingRecipeProvider : HTRecipeProvider.Direct() { - private val lava: HTFluidIngredient by lazy { fluidCreator.lava(1000) } - private val water: HTFluidIngredient by lazy { fluidCreator.water(1000) } - - private val packedIce: HTItemIngredient by lazy { itemCreator.fromItem(Items.PACKED_ICE) } - private val magma: HTItemIngredient by lazy { itemCreator.fromItem(Items.MAGMA_BLOCK) } - - override fun buildRecipeInternal() { - // Lava + Water -> Cobble - HTRockGeneratingRecipeBuilder - .create(lava, water, resultHelper.item(Items.COBBLESTONE)) - .save(output) - // Lava + Water + Magma Block -> Stone - HTRockGeneratingRecipeBuilder - .create(lava, water, resultHelper.item(Items.STONE), magma) - .save(output) - - overworld() - nether() - end() - } - - @JvmStatic - private fun overworld() { - listOf( - Items.GRANITE, - Items.DIORITE, - Items.ANDESITE, - ).forEach { stone: Item -> - HTRockGeneratingRecipeBuilder - .create(lava, water, resultHelper.item(stone), itemCreator.fromItem(stone)) - .save(output) - } - - // Lava + Packed Ice -> Blackstone - stoneAndCobble(Items.DEEPSLATE, Items.COBBLED_DEEPSLATE, packedIce) - // Lava + Packed Ice + Bone -> Calcite - HTRockGeneratingRecipeBuilder - .create( - lava, - packedIce, - resultHelper.item(Items.CALCITE), - itemCreator.fromTagKey(Tags.Items.STORAGE_BLOCKS_BONE_MEAL), - ).save(output) - // Lava + Packed Ice + Clay -> Dripstone - HTRockGeneratingRecipeBuilder - .create( - lava, - packedIce, - resultHelper.item(Items.DRIPSTONE_BLOCK), - itemCreator.fromItem(Items.CLAY), - ).save(output) - } - - @JvmStatic - private fun nether() { - // Lava + Packed Ice + Soul Sand -> Netherrack - HTRockGeneratingRecipeBuilder - .create(lava, packedIce, resultHelper.item(Items.NETHERRACK), itemCreator.fromItem(Items.SOUL_SAND)) - .save(output) - // Lava + Blue Ice -> Blackstone - stoneAndCobble(Items.BLACKSTONE, RagiumBlocks.SOOTY_COBBLESTONE, itemCreator.fromItem(Items.BLUE_ICE)) - // Lava + Packed Ice + Soul Soil -> Basalt - HTRockGeneratingRecipeBuilder - .create(lava, packedIce, resultHelper.item(Items.BASALT), itemCreator.fromItem(Items.SOUL_SOIL)) - .save(output) - } - - @JvmStatic - private fun end() { - val eldritch: HTFluidIngredient = fluidCreator.fromHolder(RagiumFluidContents.ELDRITCH_FLUX, 1000) - // Eldritch Flux + Water -> Eldritch Stone - HTRockGeneratingRecipeBuilder - .create(eldritch, water, resultHelper.item(RagiumBlocks.ELDRITCH_STONE)) - .save(output) - // Eldritch Flux + Packed Ice -> End Stone - HTRockGeneratingRecipeBuilder - .create(eldritch, packedIce, resultHelper.item(Items.END_STONE)) - .save(output) - } - - @JvmStatic - private fun stoneAndCobble(stone: ItemLike, cobble: ItemLike, right: HTItemIngredient) { - // Lava + Water -> Cobble - HTRockGeneratingRecipeBuilder - .create(lava, right, resultHelper.item(cobble)) - .save(output) - // Lava + Water + Magma Block -> Stone - HTRockGeneratingRecipeBuilder - .create(lava, right, resultHelper.item(stone), magma) - .save(output) - } -} diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumAE2RecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumAE2RecipeProvider.kt index fbe465f8c..830a76e06 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumAE2RecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/compat/RagiumAE2RecipeProvider.kt @@ -9,7 +9,6 @@ import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient import hiiragi283.ragium.api.recipe.result.HTItemResult import hiiragi283.ragium.common.data.recipe.HTAlloyingRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTMixingRecipeBuilder -import hiiragi283.ragium.common.data.recipe.HTRockGeneratingRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTSimulatingRecipeBuilder import hiiragi283.ragium.common.material.CommonMaterialPrefixes import hiiragi283.ragium.common.material.ModMaterialKeys @@ -37,13 +36,6 @@ object RagiumAE2RecipeProvider : HTRecipeProvider.Integration(RagiumConst.AE2) { itemCreator.fromItem(AEItems.CERTUS_QUARTZ_CRYSTAL_CHARGED), itemCreator.multiPrefixes(VanillaMaterialKeys.QUARTZ, CommonMaterialPrefixes.DUST, CommonMaterialPrefixes.GEM), ) - // Sky Stone - HTRockGeneratingRecipeBuilder - .create( - fluidCreator.lava(1000), - itemCreator.fromTagKey(CommonMaterialPrefixes.STORAGE_BLOCK, ModMaterialKeys.Gems.CERTUS_QUARTZ), - resultHelper.item(AEBlocks.SKY_STONE_BLOCK), - ).save(output) crushAndCompressBlock(AEBlocks.SKY_STONE_BLOCK, AEItems.SKY_DUST, 1) 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 172c143d3..0db15fd14 100644 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/RagiumEmiPlugin.kt +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/RagiumEmiPlugin.kt @@ -15,6 +15,7 @@ import hiiragi283.ragium.api.RagiumAPI import hiiragi283.ragium.api.RagiumConst import hiiragi283.ragium.api.data.map.HTFluidCoolantData import hiiragi283.ragium.api.data.map.HTFluidFuelData +import hiiragi283.ragium.api.data.map.HTRockGenerationData import hiiragi283.ragium.api.data.map.RagiumDataMapTypes import hiiragi283.ragium.api.function.partially1 import hiiragi283.ragium.api.item.alchemy.HTPotionHelper @@ -30,6 +31,7 @@ import hiiragi283.ragium.api.registry.impl.HTDeferredRecipeType import hiiragi283.ragium.client.integration.emi.category.HTEmiRecipeCategory import hiiragi283.ragium.client.integration.emi.category.RagiumEmiRecipeCategories import hiiragi283.ragium.client.integration.emi.data.HTEmiFluidFuelData +import hiiragi283.ragium.client.integration.emi.data.HTRockGenerationEmiData import hiiragi283.ragium.client.integration.emi.handler.HTEmiRecipeHandler import hiiragi283.ragium.client.integration.emi.recipe.custom.HTCopyEnchantingEmiRecipe import hiiragi283.ragium.client.integration.emi.recipe.custom.HTExpExtractingEmiRecipe @@ -78,10 +80,12 @@ import net.minecraft.world.item.alchemy.Potion import net.minecraft.world.item.component.Unbreakable import net.minecraft.world.item.crafting.RecipeHolder import net.minecraft.world.level.ItemLike +import net.minecraft.world.level.block.Block import net.minecraft.world.level.material.Fluid import net.minecraft.world.level.material.Fluids import net.neoforged.neoforge.common.Tags import net.neoforged.neoforge.registries.datamaps.DataMapType +import org.apache.commons.lang3.math.Fraction import kotlin.streams.asSequence @EmiEntrypoint @@ -317,7 +321,20 @@ class RagiumEmiPlugin : EmiPlugin { registry.addRecipeSafe(HTCopyEnchantingRecipe.RECIPE_ID.withPrefix("/"), ::HTCopyEnchantingEmiRecipe) // Device - addRegistryRecipes(registry, RagiumRecipeTypes.ROCK_GENERATING, ::HTRockGeneratingEmiRecipe) + addDataMapRecipes( + registry, + EmiPort.getBlockRegistry().asLookup(), + RagiumDataMapTypes.ROCK_CHANCE, + { holder: Holder, data: HTRockGenerationData -> + val output: EmiStack = holder.value().toEmi() + if (output.isEmpty) return@addDataMapRecipes null + val (waterChance: Fraction, lavaChance: Fraction) = data + val water: EmiStack = HTFluidHolderLike.WATER.toFluidEmi().setChance(waterChance.toFloat()) + val lava: EmiStack = HTFluidHolderLike.LAVA.toFluidEmi().setChance(lavaChance.toFloat()) + HTRockGenerationEmiData(water, lava, output) + }, + ::HTRockGeneratingEmiRecipe, + ) } private fun addInteractions(registry: EmiRegistry) { 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 4a17384b7..def15b6f5 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 @@ -131,8 +131,11 @@ object RagiumEmiRecipeCategories { // Device // @JvmField - val ROCK_GENERATING: HTEmiRecipeCategory = - machine(RagiumRecipeTypes.ROCK_GENERATING, RagiumBlocks.STONE_COLLECTOR) + val ROCK_GENERATING: HTEmiRecipeCategory = machine( + RagiumCommonTranslation.EMI_ROCK_GENERATING::translate, + RagiumAPI.id("rock_generating"), + RagiumBlocks.STONE_COLLECTOR, + ) // Register // diff --git a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/data/HTRockGenerationEmiData.kt b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/data/HTRockGenerationEmiData.kt new file mode 100644 index 000000000..395d400d7 --- /dev/null +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/data/HTRockGenerationEmiData.kt @@ -0,0 +1,6 @@ +package hiiragi283.ragium.client.integration.emi.data + +import dev.emi.emi.api.stack.EmiStack + +@JvmRecord +data class HTRockGenerationEmiData(val water: EmiStack, val lava: EmiStack, val output: EmiStack) diff --git a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/device/HTRockGeneratingEmiRecipe.kt b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/device/HTRockGeneratingEmiRecipe.kt index 4f238695b..624bd2809 100644 --- a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/device/HTRockGeneratingEmiRecipe.kt +++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/device/HTRockGeneratingEmiRecipe.kt @@ -1,25 +1,23 @@ package hiiragi283.ragium.client.integration.emi.recipe.device import dev.emi.emi.api.widget.WidgetHolder -import hiiragi283.ragium.api.recipe.multi.HTRockGeneratingRecipe import hiiragi283.ragium.client.integration.emi.addArrow import hiiragi283.ragium.client.integration.emi.addPlus import hiiragi283.ragium.client.integration.emi.category.RagiumEmiRecipeCategories -import hiiragi283.ragium.client.integration.emi.recipe.HTEmiHolderRecipe +import hiiragi283.ragium.client.integration.emi.data.HTRockGenerationEmiData +import hiiragi283.ragium.client.integration.emi.recipe.HTEmiRecipe import hiiragi283.ragium.common.text.RagiumCommonTranslation import net.minecraft.ChatFormatting -import net.minecraft.world.item.crafting.RecipeHolder -import kotlin.jvm.optionals.getOrNull +import net.minecraft.resources.ResourceLocation -class HTRockGeneratingEmiRecipe(holder: RecipeHolder) : - HTEmiHolderRecipe(RagiumEmiRecipeCategories.ROCK_GENERATING, holder) { +class HTRockGeneratingEmiRecipe(id: ResourceLocation, recipe: HTRockGenerationEmiData) : + HTEmiRecipe(RagiumEmiRecipeCategories.ROCK_GENERATING, id, recipe) { init { - addInput(recipe.left) - recipe.right.map(::addInput, ::addInput) + addInput(recipe.water) + addInput(recipe.lava) + addCatalyst(recipe.output) - addCatalyst(recipe.bottom.getOrNull()) - - addOutputs(recipe.result) + addOutputs(recipe.output) } override fun addWidgets(widgets: WidgetHolder) { @@ -27,8 +25,8 @@ class HTRockGeneratingEmiRecipe(holder: RecipeHolder) : widgets.addPlus(getPosition(1), getPosition(0)) // inputs - widgets.addSlot(input(0), getPosition(0), getPosition(0)).catalyst(true) - widgets.addSlot(input(1), getPosition(2), getPosition(0)).catalyst(true) + widgets.addSlot(input(0), getPosition(0), getPosition(0)) + widgets.addSlot(input(1), getPosition(2), getPosition(0)) widgets .addCatalyst(0, getPosition(1), getPosition(2)) diff --git a/src/main/kotlin/hiiragi283/ragium/RagiumCommon.kt b/src/main/kotlin/hiiragi283/ragium/RagiumCommon.kt index b0f619ad7..4074c7a51 100644 --- a/src/main/kotlin/hiiragi283/ragium/RagiumCommon.kt +++ b/src/main/kotlin/hiiragi283/ragium/RagiumCommon.kt @@ -118,6 +118,7 @@ class RagiumCommon(eventBus: IEventBus, container: ModContainer, dist: Dist) { event.register(RagiumDataMapTypes.COMBUSTION_FUEL) event.register(RagiumDataMapTypes.ARMOR_EQUIP) + event.register(RagiumDataMapTypes.ROCK_CHANCE) event.register(RagiumDataMapTypes.UPGRADE) RagiumAPI.LOGGER.info("Registered data map types!") 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 717a58919..f99b02052 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 @@ -1,19 +1,12 @@ package hiiragi283.ragium.common.block.entity.device -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.HTRecipeInput -import hiiragi283.ragium.api.recipe.multi.HTRockGeneratingRecipe -import hiiragi283.ragium.api.stack.ImmutableFluidStack +import hiiragi283.ragium.api.data.map.RagiumDataMapTypes import hiiragi283.ragium.api.stack.ImmutableItemStack import hiiragi283.ragium.api.storage.HTStorageAccess import hiiragi283.ragium.api.storage.HTStorageAction import hiiragi283.ragium.api.storage.holder.HTSlotInfo import hiiragi283.ragium.api.util.HTContentListener import hiiragi283.ragium.common.inventory.HTSlotHelper -import hiiragi283.ragium.common.recipe.HTFinderRecipeCache import hiiragi283.ragium.common.storage.holder.HTBasicItemSlotHolder import hiiragi283.ragium.common.storage.item.slot.HTBasicItemSlot import hiiragi283.ragium.common.storage.item.slot.HTOutputItemSlot @@ -23,10 +16,10 @@ import net.minecraft.core.Direction import net.minecraft.server.level.ServerLevel import net.minecraft.sounds.SoundEvents import net.minecraft.sounds.SoundSource -import net.minecraft.world.item.crafting.RecipeHolder -import net.minecraft.world.level.Level +import net.minecraft.util.RandomSource +import net.minecraft.world.level.block.Blocks import net.minecraft.world.level.block.state.BlockState -import net.minecraft.world.level.material.FluidState +import org.apache.commons.lang3.math.Fraction class HTStoneCollectorBlockEntity(pos: BlockPos, state: BlockState) : HTDeviceBlockEntity.Tickable(RagiumBlocks.STONE_COLLECTOR, pos, state) { @@ -42,72 +35,33 @@ class HTStoneCollectorBlockEntity(pos: BlockPos, state: BlockState) : // Ticking // - 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: HTRecipeInput = createInput(level, pos, front) ?: return false - val recipe: HTRockGeneratingRecipe = recipeCache.getFirstRecipe(input, level) ?: return false + if (outputSlot.getNeeded() == 0) return false + // 周囲に1つ以上の水と溶岩があることを確認 + val directions: List = Direction.entries.filterNot { it.axis == Direction.Axis.Y } + val waterPos: BlockPos = directions + .map(pos::relative) + .firstOrNull { posIn: BlockPos -> level.getBlockState(posIn).`is`(Blocks.WATER) } + ?: return false + val lavaPos: BlockPos = directions + .map(pos::relative) + .firstOrNull { posIn: BlockPos -> level.getBlockState(posIn).`is`(Blocks.LAVA) } + ?: return false + // 岩石生成のデータを取得する + val belowState: BlockState = level.getBlockState(pos.below()) + val (waterChance: Fraction, lavaChance: Fraction) = RagiumDataMapTypes.getRockData(belowState) ?: return false + val random: RandomSource = level.random + if (random.nextFloat() <= waterChance.toFloat()) { + level.removeBlock(waterPos, false) + } + if (random.nextFloat() <= lavaChance.toFloat()) { + level.removeBlock(lavaPos, false) + } // 実際にアウトプットに搬出する - outputSlot.insert(recipe.assembleItem(input, level.registryAccess()), HTStorageAction.EXECUTE, HTStorageAccess.INTERNAL) + val resultStack: ImmutableItemStack = ImmutableItemStack.ofNullable(belowState.block) ?: return false + outputSlot.insert(resultStack, HTStorageAction.EXECUTE, HTStorageAccess.INTERNAL) // SEを鳴らす - level.playSound(null, pos, SoundEvents.STONE_BREAK, SoundSource.BLOCKS, 0.5f, 0.5f) + level.playSound(null, pos, SoundEvents.STONE_BREAK, SoundSource.BLOCKS, 0.5f, 1f) return true } - - private fun createInput(level: ServerLevel, pos: BlockPos, front: Direction): HTRecipeInput? = HTRecipeInput.create(pos) { - val leftPos: BlockPos = pos.relative(front.counterClockWise) - val rightPos: BlockPos = pos.relative(front.clockWise) - // 左側は液体のみ - this.fluids += getFluidInput(level, leftPos) - // 右側はブロックも判定する - this.fluids += getFluidInput(level, rightPos) - this.items += ImmutableItemStack.ofNullable(level.getBlockState(rightPos).block) - // 下側の触媒を取得 - this.items += ImmutableItemStack.ofNullable(level.getBlockState(pos.below()).block) - } - - private fun getFluidInput(level: ServerLevel, pos: BlockPos): ImmutableFluidStack? { - val fluidState: FluidState = level.getFluidState(pos) - return when { - fluidState.isSource -> ImmutableFluidStack.ofNullable(fluidState.type, 1000) - else -> null - } - } - - // RecipeFinder // - - private class RecipeFinder : HTRecipeFinder.Vanilla { - override fun getVanillaRecipeFor( - input: HTRecipeInput, - level: Level, - lastRecipe: RecipeHolder?, - ): RecipeHolder? { - // 入力が空の場合は即座に抜ける - if (input.isEmpty) return null - // キャッシュから判定を行う - if (lastRecipe != null && lastRecipe.value.matches(input, level)) { - return lastRecipe - } - // 次にRecipeManagerから一覧を取得する - val allRecipes: List> = - level.recipeManager.getRecipesFor(RagiumRecipeTypes.ROCK_GENERATING.get(), input, level) - // 触媒ありのレシピから優先して判定を行う - for (holder: RecipeHolder in allRecipes) { - val recipe: HTRockGeneratingRecipe = holder.value() - if (recipe.bottom.isPresent) { - return holder - } - } - // 触媒なしのレシピを判定 - for (holder: RecipeHolder in allRecipes) { - val recipe: HTRockGeneratingRecipe = holder.value() - if (recipe.bottom.isEmpty) { - return holder - } - } - return null - } - } } diff --git a/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTRockGeneratingRecipeBuilder.kt b/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTRockGeneratingRecipeBuilder.kt deleted file mode 100644 index a522c9947..000000000 --- a/src/main/kotlin/hiiragi283/ragium/common/data/recipe/HTRockGeneratingRecipeBuilder.kt +++ /dev/null @@ -1,45 +0,0 @@ -package hiiragi283.ragium.common.data.recipe - -import com.mojang.datafixers.util.Either -import hiiragi283.ragium.api.RagiumConst -import hiiragi283.ragium.api.data.recipe.HTRecipeBuilder -import hiiragi283.ragium.api.recipe.ingredient.HTFluidIngredient -import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient -import hiiragi283.ragium.api.recipe.multi.HTRockGeneratingRecipe -import hiiragi283.ragium.api.recipe.result.HTItemResult -import hiiragi283.ragium.api.util.wrapOptional -import net.minecraft.resources.ResourceLocation - -class HTRockGeneratingRecipeBuilder( - private val left: HTFluidIngredient, - private val right: Either, - private val bottom: HTItemIngredient?, - private val result: HTItemResult, -) : HTRecipeBuilder(RagiumConst.ROCK_GENERATING) { - companion object { - @JvmStatic - fun create( - left: HTFluidIngredient, - right: HTFluidIngredient, - result: HTItemResult, - bottom: HTItemIngredient? = null, - ): HTRockGeneratingRecipeBuilder = HTRockGeneratingRecipeBuilder(left, Either.right(right), bottom, result) - - @JvmStatic - fun create( - left: HTFluidIngredient, - right: HTItemIngredient, - result: HTItemResult, - bottom: HTItemIngredient? = null, - ): HTRockGeneratingRecipeBuilder = HTRockGeneratingRecipeBuilder(left, Either.left(right), bottom, result) - } - - override fun getPrimalId(): ResourceLocation = result.id - - override fun createRecipe(): HTRockGeneratingRecipe = HTRockGeneratingRecipe( - left, - right, - bottom.wrapOptional(), - result, - ) -} diff --git a/src/main/kotlin/hiiragi283/ragium/common/text/RagiumCommonTranslation.kt b/src/main/kotlin/hiiragi283/ragium/common/text/RagiumCommonTranslation.kt index f0608db0e..7987733ef 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/text/RagiumCommonTranslation.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/text/RagiumCommonTranslation.kt @@ -117,6 +117,7 @@ enum class RagiumCommonTranslation(type: String, vararg path: String) : HTTransl // EMI EMI_MACHINE_UPGRADE_TITLE("emi.category", "machine_upgrade"), EMI_COMPOSTING_TITLE("emi.category", "composting"), + EMI_ROCK_GENERATING("emi.category", "rock_generating"), EMI_BLOCK_CATALYST("description", "block_catalyst"), diff --git a/src/main/kotlin/hiiragi283/ragium/impl/RagiumPlatformImpl.kt b/src/main/kotlin/hiiragi283/ragium/impl/RagiumPlatformImpl.kt index 634206225..5835af3de 100644 --- a/src/main/kotlin/hiiragi283/ragium/impl/RagiumPlatformImpl.kt +++ b/src/main/kotlin/hiiragi283/ragium/impl/RagiumPlatformImpl.kt @@ -10,7 +10,6 @@ import hiiragi283.ragium.api.material.prefix.HTMaterialPrefix import hiiragi283.ragium.api.material.prefix.HTPrefixLike import hiiragi283.ragium.api.material.prefix.HTRegisterPrefixEvent import hiiragi283.ragium.api.recipe.extra.HTPlantingRecipe -import hiiragi283.ragium.api.recipe.multi.HTRockGeneratingRecipe import hiiragi283.ragium.api.serialization.value.HTValueInput import hiiragi283.ragium.api.serialization.value.HTValueOutput import hiiragi283.ragium.api.storage.energy.HTEnergyBattery @@ -68,8 +67,6 @@ class RagiumPlatformImpl : RagiumPlatform { override fun getPlantingRecipeSerializer(): RecipeSerializer = RagiumRecipeSerializers.PLANTING - override fun getRockGeneratingRecipeSerializer(): RecipeSerializer = RagiumRecipeSerializers.ROCK_GENERATING - // Server // override fun getCurrentServer(): MinecraftServer? = ServerLifecycleHooks.getCurrentServer() diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlocks.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlocks.kt index 0039fb8b6..6a4a34e59 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlocks.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlocks.kt @@ -596,7 +596,7 @@ object RagiumBlocks { // Advanced @JvmField val STONE_COLLECTOR: HTDeferredBlock = - registerDevice("stone_collector", RagiumBlockTypes.STONE_COLLECTOR, machine().workInProgress()) + registerDevice("stone_collector", RagiumBlockTypes.STONE_COLLECTOR, machine()) // Elite @JvmField diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumMiscRegister.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumMiscRegister.kt index d35c8e5bd..da5a8b0e4 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumMiscRegister.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumMiscRegister.kt @@ -44,7 +44,6 @@ object RagiumMiscRegister { register(helper, RagiumRecipeTypes.MIXING) register(helper, RagiumRecipeTypes.PLANTING) register(helper, RagiumRecipeTypes.REFINING) - register(helper, RagiumRecipeTypes.ROCK_GENERATING) register(helper, RagiumRecipeTypes.SIMULATING) register(helper, RagiumRecipeTypes.SOLIDIFYING) } diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeBiCodecs.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeBiCodecs.kt index a7b9d1bd7..32daaba26 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeBiCodecs.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeBiCodecs.kt @@ -4,14 +4,12 @@ import hiiragi283.ragium.api.RagiumConst import hiiragi283.ragium.api.recipe.extra.HTPlantingRecipe import hiiragi283.ragium.api.recipe.ingredient.HTFluidIngredient import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient -import hiiragi283.ragium.api.recipe.multi.HTRockGeneratingRecipe import hiiragi283.ragium.api.recipe.result.HTComplexResult import hiiragi283.ragium.api.recipe.result.HTFluidResult import hiiragi283.ragium.api.recipe.result.HTItemResult import hiiragi283.ragium.api.registry.HTKeyOrTagHelper import hiiragi283.ragium.api.registry.RegistryKey import hiiragi283.ragium.api.serialization.codec.BiCodec -import hiiragi283.ragium.api.serialization.codec.BiCodecs import hiiragi283.ragium.api.serialization.codec.MapBiCodec import hiiragi283.ragium.api.serialization.codec.MapBiCodecs import hiiragi283.ragium.api.serialization.codec.ParameterCodec @@ -106,15 +104,6 @@ object RagiumRecipeBiCodecs { ::HTBasicRefiningRecipe, ) - @JvmField - val ROCK_GENERATING: MapBiCodec = MapBiCodec.composite( - HTFluidIngredient.CODEC.fieldOf("left").forGetter(HTRockGeneratingRecipe::left), - 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, - ) - @JvmField val SOLIDIFYING: MapBiCodec = MapBiCodec.composite( HTFluidIngredient.CODEC.fieldOf(RagiumConst.INGREDIENT).forGetter(HTSolidifyingRecipe::ingredient), diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeSerializers.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeSerializers.kt index 65a708177..7ad99cc8d 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeSerializers.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeSerializers.kt @@ -5,7 +5,6 @@ import hiiragi283.ragium.api.RagiumAPI import hiiragi283.ragium.api.RagiumConst import hiiragi283.ragium.api.recipe.extra.HTPlantingRecipe import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient -import hiiragi283.ragium.api.recipe.multi.HTRockGeneratingRecipe import hiiragi283.ragium.api.registry.HTDeferredRegister import hiiragi283.ragium.api.serialization.codec.MapBiCodec import hiiragi283.ragium.api.serialization.codec.VanillaBiCodecs @@ -173,12 +172,6 @@ object RagiumRecipeSerializers { RagiumRecipeBiCodecs.REFINING, ) - @JvmField - val ROCK_GENERATING: RecipeSerializer = register( - RagiumConst.ROCK_GENERATING, - RagiumRecipeBiCodecs.ROCK_GENERATING, - ) - @JvmField val SIMULATING_BLOCK: RecipeSerializer = register( RagiumConst.SIMULATING_BLOCK, From 20b964cddbf5bef07743667863d42cc158c75c26 Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Mon, 15 Dec 2025 18:02:35 +0900 Subject: [PATCH 48/49] feat: added new item Bio Fertilizer --- .../data/client/RagiumEnglishProvider.kt | 1 + .../data/client/RagiumJapaneseProvider.kt | 1 + .../recipe/RagiumChemistryRecipeProvider.kt | 4 +- .../data/server/tag/RagiumItemTagsProvider.kt | 2 + .../device/HTStoneCollectorBlockEntity.kt | 4 +- .../ragium/common/item/HTFertilizerItem.kt | 40 ++++++++++++++++++ .../common/item/block/HTBatteryBlockItem.kt | 2 +- .../hiiragi283/ragium/setup/RagiumItems.kt | 4 ++ .../ragium/textures/item/bio_fertilizer.png | Bin 0 -> 350 bytes 9 files changed, 53 insertions(+), 5 deletions(-) create mode 100644 src/main/kotlin/hiiragi283/ragium/common/item/HTFertilizerItem.kt create mode 100644 src/main/resources/assets/ragium/textures/item/bio_fertilizer.png diff --git a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt index 7d6090990..70c2c7780 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt @@ -224,6 +224,7 @@ class RagiumEnglishProvider(output: PackOutput) : HTLanguageProvider.English(out private fun item() { // Material + add(RagiumItems.BIO_FERTILIZER, "Bio Fertilizer") add(RagiumItems.COAL_CHIP, "Coal Chip") add(RagiumItems.COAL_CHUNK, "Coal Chunk") add(RagiumItems.COMPRESSED_SAWDUST, "Compressed Sawdust") diff --git a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt index 70d95c170..63f8a9849 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt @@ -215,6 +215,7 @@ class RagiumJapaneseProvider(output: PackOutput) : HTLanguageProvider.Japanese(o private fun item() { // Material + add(RagiumItems.BIO_FERTILIZER, "バイオ肥料") add(RagiumItems.COAL_CHIP, "石炭チップ") add(RagiumItems.COAL_CHUNK, "石炭の塊") add(RagiumItems.COMPRESSED_SAWDUST, "圧縮したおがくず") diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumChemistryRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumChemistryRecipeProvider.kt index 8baf76672..95a2e30ab 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumChemistryRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumChemistryRecipeProvider.kt @@ -652,12 +652,12 @@ object RagiumChemistryRecipeProvider : HTRecipeProvider.Direct() { resultHelper.fluid(RagiumFluidContents.CRUDE_BIO, 125), ).save(output) - // Crude Bio -> Bio Fuel + // Crude Bio -> Bio Fertilizer + Bio Fuel HTFluidRecipeBuilder .refining( fluidCreator.fromHolder(RagiumFluidContents.CRUDE_BIO, 1000), resultHelper.fluid(RagiumFluidContents.BIOFUEL, 750), - resultHelper.item(Items.CLAY_BALL), + resultHelper.item(RagiumItems.BIO_FERTILIZER), ).saveSuffixed(output, "_from_crude_bio") // Poisonous Potato diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/tag/RagiumItemTagsProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/tag/RagiumItemTagsProvider.kt index a0bba8267..ed834662f 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/tag/RagiumItemTagsProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/tag/RagiumItemTagsProvider.kt @@ -459,6 +459,8 @@ class RagiumItemTagsProvider(private val blockTags: CompletableFuture RagiumTranslation.EMPTY.translateColored(ChatFormatting.DARK_RED) isCreative -> RagiumTranslation.STORED_FE.translateColored( ChatFormatting.GRAY, RagiumTranslation.INFINITE, ) + amount <= 0 -> RagiumTranslation.EMPTY.translateColored(ChatFormatting.DARK_RED) else -> RagiumTranslation.STORED_FE.translateColored( ChatFormatting.GRAY, amount, diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumItems.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumItems.kt index f10e9a98c..362a09e6f 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumItems.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumItems.kt @@ -29,6 +29,7 @@ import hiiragi283.ragium.common.HTChargeType import hiiragi283.ragium.common.HTMoldType import hiiragi283.ragium.common.HTUpgradeType import hiiragi283.ragium.common.inventory.container.HTPotionBundleContainerMenu +import hiiragi283.ragium.common.item.HTFertilizerItem import hiiragi283.ragium.common.item.HTIridescentPowderItem import hiiragi283.ragium.common.item.HTLootTicketItem import hiiragi283.ragium.common.item.HTPotionDropItem @@ -177,6 +178,9 @@ object RagiumItems { @JvmField val MAGMA_SHARD: HTSimpleDeferredItem = REGISTER.registerSimpleItem("magma_shard") + @JvmField + val BIO_FERTILIZER: HTSimpleDeferredItem = REGISTER.registerItem("bio_fertilizer", ::HTFertilizerItem) + // Nuclear Fuel @JvmField val POTATO_SPROUTS: HTSimpleDeferredItem = REGISTER.registerSimpleItem("potato_sprouts") diff --git a/src/main/resources/assets/ragium/textures/item/bio_fertilizer.png b/src/main/resources/assets/ragium/textures/item/bio_fertilizer.png new file mode 100644 index 0000000000000000000000000000000000000000..bb36661ee8ac1edd757284f97c1e3af088475725 GIT binary patch literal 350 zcmV-k0iphhP)(`IDLxi(ie8O>$M2<9!%E13whI~1RvsfnO* zuSpx4Nj9t<;dFUWaJ;LhKNQLYM2NRRt3;6#-1Y}29!#V^ZL4=SL992(j2!z2{bC7tP@3)6a-ix3h*H>kf@x)ejrC5fj5n1=}R6ZoO wI%%!Jw|WBr0RR8!A3hHN000I_L_t&o0J6BUU*~hehyVZp07*qoM6N<$f)-|twg3PC literal 0 HcmV?d00001 From 693d0c1c62b4204a678bd296138eb427c7d5e5c9 Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Mon, 15 Dec 2025 20:11:17 +0900 Subject: [PATCH 49/49] feat: added new block Universal Chest --- .../api/data/recipe/HTRecipeProvider.kt | 14 ++++ .../data/client/RagiumBlockStateProvider.kt | 5 ++ .../data/client/RagiumEnglishProvider.kt | 6 +- .../data/client/RagiumJapaneseProvider.kt | 6 +- .../recipe/RagiumMachineRecipeProvider.kt | 9 ++- .../server/recipe/RagiumToolRecipeProvider.kt | 14 +--- .../server/tag/RagiumBlockTagsProvider.kt | 2 + .../hiiragi283/ragium/client/RagiumClient.kt | 22 ++++- .../ragium/common/block/HTTypedEntityBlock.kt | 15 +++- .../block/entity/ExtendedBlockEntity.kt | 14 ++++ .../common/block/entity/HTBlockEntity.kt | 19 +---- .../entity/HTImitationSpawnerBlockEntity.kt | 19 ++--- .../storage/HTUniversalChestBlockEntity.kt | 75 ++++++++++++++++++ .../block/storage/HTUniversalChestBlock.kt | 8 ++ .../container/HTGenericContainerRows.kt | 33 -------- .../container/HTPotionBundleContainerMenu.kt | 8 +- .../item/block/HTUniversalChestBlockItem.kt | 24 ++++++ .../common/item/tool/HTUniversalBundleItem.kt | 16 +--- .../common/storage/item/HTItemStackHandler.kt | 9 --- .../storage/item/HTSimpleItemHandler.kt | 21 +++++ .../storage/item/HTUniversalBundleManager.kt | 15 ++-- .../common/text/RagiumCommonTranslation.kt | 2 + .../ragium/setup/RagiumBlockEntityTypes.kt | 13 ++- .../ragium/setup/RagiumBlockTypes.kt | 6 ++ .../hiiragi283/ragium/setup/RagiumBlocks.kt | 18 ++++- .../hiiragi283/ragium/setup/RagiumItems.kt | 2 +- .../ragium/setup/RagiumMenuTypes.kt | 10 ++- .../ragium/textures/block/universal_chest.png | Bin 0 -> 161 bytes 28 files changed, 283 insertions(+), 122 deletions(-) create mode 100644 src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTUniversalChestBlockEntity.kt create mode 100644 src/main/kotlin/hiiragi283/ragium/common/block/storage/HTUniversalChestBlock.kt create mode 100644 src/main/kotlin/hiiragi283/ragium/common/item/block/HTUniversalChestBlockItem.kt delete mode 100644 src/main/kotlin/hiiragi283/ragium/common/storage/item/HTItemStackHandler.kt create mode 100644 src/main/kotlin/hiiragi283/ragium/common/storage/item/HTSimpleItemHandler.kt create mode 100644 src/main/resources/assets/ragium/textures/block/universal_chest.png diff --git a/src/data/kotlin/hiiragi283/ragium/api/data/recipe/HTRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/api/data/recipe/HTRecipeProvider.kt index 5fc182c4d..46086c2d9 100644 --- a/src/data/kotlin/hiiragi283/ragium/api/data/recipe/HTRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/api/data/recipe/HTRecipeProvider.kt @@ -16,6 +16,7 @@ import hiiragi283.ragium.api.registry.HTFluidHolderLike import hiiragi283.ragium.api.registry.HTItemHolderLike import hiiragi283.ragium.api.registry.toHolderLike import hiiragi283.ragium.api.registry.toId +import hiiragi283.ragium.api.stack.ImmutableItemStack import hiiragi283.ragium.api.tag.RagiumModTags import hiiragi283.ragium.api.util.Ior import hiiragi283.ragium.common.HTMoldType @@ -31,7 +32,9 @@ import hiiragi283.ragium.common.data.recipe.HTShapelessRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTSingleExtraItemRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTSmithingRecipeBuilder import hiiragi283.ragium.common.material.CommonMaterialPrefixes +import hiiragi283.ragium.common.material.HTColorMaterial import hiiragi283.ragium.common.material.VanillaMaterialKeys +import hiiragi283.ragium.setup.RagiumDataComponents import net.minecraft.advancements.Advancement import net.minecraft.advancements.AdvancementHolder import net.minecraft.core.HolderLookup @@ -185,6 +188,17 @@ sealed class HTRecipeProvider { .addIngredient(input) .addIngredient(CommonMaterialPrefixes.INGOT, VanillaMaterialKeys.NETHERITE) + protected fun craftingDyed(base: HTItemHolderLike) { + resetComponent(base, RagiumDataComponents.COLOR) + + for (variant: HTColorMaterial in HTColorMaterial.entries) { + HTShapelessRecipeBuilder(ImmutableItemStack.of(base).plus(RagiumDataComponents.COLOR, variant.dyeColor)) + .addIngredient(base) + .addIngredient(variant.dyeTag) + .savePrefixed(output, "${variant.asMaterialName()}_") + } + } + // Alloying fun alloyFromData(data: HTRecipeData, applyCondition: Boolean = false) { HTAlloyingRecipeBuilder( diff --git a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumBlockStateProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumBlockStateProvider.kt index 61e07ce2f..8295e5868 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumBlockStateProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumBlockStateProvider.kt @@ -226,6 +226,11 @@ class RagiumBlockStateProvider(context: HTDataGenContext) : BlockStateProvider(c // Storages cutoutSimpleBlock(RagiumBlocks.CRATE, basicFrame) altModelBlock(RagiumBlocks.TANK) + layeredBlock( + RagiumBlocks.UNIVERSAL_CHEST, + vanillaId("block", "white_concrete"), + RagiumBlocks.UNIVERSAL_CHEST.blockId, + ) // Fluids for (content: HTFluidContent<*, *, *, *, *> in RagiumFluidContents.REGISTER.contents) { diff --git a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt index 70c2c7780..c8e53bee8 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt @@ -176,7 +176,9 @@ class RagiumEnglishProvider(output: PackOutput) : HTLanguageProvider.English(out add(RagiumBlocks.BATTERY, "Variable Battery") add(RagiumBlocks.CRATE, "Variable Crate") add(RagiumBlocks.TANK, "Variable Tank") - add(RagiumBlocks.BUFFER, "Universal Buffer") + add(RagiumBlocks.BUFFER, "Integrated Buffer") + + add(RagiumBlocks.UNIVERSAL_CHEST, "Universal Chest") } private fun enchantment() { @@ -463,6 +465,7 @@ class RagiumEnglishProvider(output: PackOutput) : HTLanguageProvider.English(out add(RagiumCommonTranslation.CRATE, "A item storage which capacity is extendable by upgrade.") add(RagiumCommonTranslation.TANK, "A fluid storage which capacity is extendable by upgrade.") add(RagiumCommonTranslation.BUFFER, "A combined storage with 9 slots, 3 tanks, and 1 battery.") + add(RagiumCommonTranslation.UNIVERSAL_CHEST, "A chest which shares its containment with the same color.") add(RagiumCommonTranslation.CONFIG_ENERGY_CAPACITY, "Energy Capacity") add(RagiumCommonTranslation.CONFIG_ENERGY_RATE, "Energy Rate") @@ -490,6 +493,7 @@ class RagiumEnglishProvider(output: PackOutput) : HTLanguageProvider.English(out add(RagiumCommonTranslation.MAGNET, "Collect dropped items in the effective range") add(RagiumCommonTranslation.SLOT_COVER, "Ignored by recipes when placed in machine slot.") add(RagiumCommonTranslation.TRADER_CATALOG, "Dropped from Wandering Trader. Right-click to trade with merchant.") + add(RagiumCommonTranslation.UNIVERSAL_BUNDLE, "A bundle which shares its containment with the same color.") add(RagiumCommonTranslation.AMBROSIA, "ALWAYS EDIBLE and NOT CONSUMED!") add(RagiumCommonTranslation.ICE_CREAM, "Extinguish fire when eaten.") diff --git a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt index 63f8a9849..f3f9d6d86 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt @@ -167,7 +167,9 @@ class RagiumJapaneseProvider(output: PackOutput) : HTLanguageProvider.Japanese(o add(RagiumBlocks.BATTERY, "可変バッテリー") add(RagiumBlocks.CRATE, "可変クレート") add(RagiumBlocks.TANK, "可変タンク") - add(RagiumBlocks.BUFFER, "万能バッファ") + add(RagiumBlocks.BUFFER, "統合バッファ") + + add(RagiumBlocks.UNIVERSAL_CHEST, "共有チェスト") } private fun enchantment() { @@ -464,6 +466,7 @@ class RagiumJapaneseProvider(output: PackOutput) : HTLanguageProvider.Japanese(o add(RagiumCommonTranslation.CRATE, "アップグレードで容量を拡張可能なアイテムストレージです。") add(RagiumCommonTranslation.TANK, "アップグレードで容量を拡張可能な液体ストレージです。") add(RagiumCommonTranslation.BUFFER, "9つのスロット,3つのタンク,1つのバッテリーを併せ持つストレージです。") + add(RagiumCommonTranslation.UNIVERSAL_CHEST, "色ごとに中身を共有するチェストです。") add(RagiumCommonTranslation.CONFIG_ENERGY_CAPACITY, "エネルギー容量") add(RagiumCommonTranslation.CONFIG_ENERGY_RATE, "エネルギー使用速度") @@ -491,6 +494,7 @@ class RagiumJapaneseProvider(output: PackOutput) : HTLanguageProvider.Japanese(o add(RagiumCommonTranslation.MAGNET, "範囲内のドロップアイテムを回収します。") add(RagiumCommonTranslation.SLOT_COVER, "機械のスロットに入れることでレシピ判定から無視されます。") add(RagiumCommonTranslation.TRADER_CATALOG, "行商人からドロップします。右クリックで行商人との取引を行えます。") + add(RagiumCommonTranslation.UNIVERSAL_BUNDLE, "色ごとに中身を共有するバンドルです。") add(RagiumCommonTranslation.AMBROSIA, "いつでも食べられる上,いくら食べてもなくなりません!") add(RagiumCommonTranslation.ICE_CREAM, "食べると鎮火します。") diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumMachineRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumMachineRecipeProvider.kt index 159395b74..797448c96 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumMachineRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumMachineRecipeProvider.kt @@ -397,7 +397,6 @@ object RagiumMachineRecipeProvider : HTRecipeProvider.Direct() { resetComponent(block, component) } - // Buffer HTShapedRecipeBuilder .create(RagiumBlocks.BUFFER) @@ -411,6 +410,14 @@ object RagiumMachineRecipeProvider : HTRecipeProvider.Direct() { .define('D', Tags.Items.CHESTS) .define('E', Tags.Items.BUCKETS_EMPTY) .save(output) + // Universal Chest + craftingDyed(RagiumBlocks.UNIVERSAL_CHEST) + HTShapedRecipeBuilder + .create(RagiumBlocks.UNIVERSAL_CHEST) + .hollow8() + .define('A', CommonMaterialPrefixes.INGOT, RagiumMaterialKeys.NIGHT_METAL) + .define('B', CommonMaterialPrefixes.GEM, RagiumMaterialKeys.ELDRITCH_PEARL) + .save(output) // Tank with Minecart HTShapelessRecipeBuilder diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumToolRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumToolRecipeProvider.kt index aa4a45c30..032ad7d09 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumToolRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumToolRecipeProvider.kt @@ -16,10 +16,8 @@ import hiiragi283.ragium.common.data.recipe.HTShapedRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTShapelessRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTSmithingRecipeBuilder import hiiragi283.ragium.common.data.recipe.HTStonecuttingRecipeBuilder -import hiiragi283.ragium.common.item.tool.HTUniversalBundleItem import hiiragi283.ragium.common.material.CommonMaterialKeys import hiiragi283.ragium.common.material.CommonMaterialPrefixes -import hiiragi283.ragium.common.material.HTColorMaterial import hiiragi283.ragium.common.material.RagiumMaterialKeys import hiiragi283.ragium.common.material.VanillaMaterialKeys import hiiragi283.ragium.common.variant.HTArmorVariant @@ -249,6 +247,7 @@ object RagiumToolRecipeProvider : HTRecipeProvider.Direct() { .setCategory(CraftingBookCategory.EQUIPMENT) .save(output) + craftingDyed(RagiumItems.UNIVERSAL_BUNDLE) HTShapedRecipeBuilder .create(RagiumItems.UNIVERSAL_BUNDLE) .pattern( @@ -260,17 +259,6 @@ object RagiumToolRecipeProvider : HTRecipeProvider.Direct() { .define('C', CommonMaterialPrefixes.GEM, RagiumMaterialKeys.ELDRITCH_PEARL) .setCategory(CraftingBookCategory.EQUIPMENT) .save(output) - - for (variant: HTColorMaterial in HTColorMaterial.entries) { - val bundle: ImmutableItemStack = HTUniversalBundleItem.createBundle(variant.dyeColor) - HTShapelessRecipeBuilder(bundle) - .addIngredient(RagiumItems.UNIVERSAL_BUNDLE) - .addIngredient(variant.dyeTag) - .setCategory(CraftingBookCategory.EQUIPMENT) - .savePrefixed(output, "${variant.asMaterialName()}_") - } - - resetComponent(RagiumItems.UNIVERSAL_BUNDLE, RagiumDataComponents.COLOR) } @JvmStatic diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/tag/RagiumBlockTagsProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/tag/RagiumBlockTagsProvider.kt index 9e84f255e..ece90ad0d 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/tag/RagiumBlockTagsProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/tag/RagiumBlockTagsProvider.kt @@ -122,6 +122,8 @@ class RagiumBlockTagsProvider(context: HTDataGenContext) : HTTagsProvider add(RagiumBlocks.TANK) add(RagiumBlocks.BUFFER) + + add(RagiumBlocks.UNIVERSAL_CHEST) }.forEach(pickaxe::add) pickaxe diff --git a/src/main/kotlin/hiiragi283/ragium/client/RagiumClient.kt b/src/main/kotlin/hiiragi283/ragium/client/RagiumClient.kt index ef0518dcc..83af8bbf4 100644 --- a/src/main/kotlin/hiiragi283/ragium/client/RagiumClient.kt +++ b/src/main/kotlin/hiiragi283/ragium/client/RagiumClient.kt @@ -43,6 +43,7 @@ import hiiragi283.ragium.client.renderer.block.HTTankRenderer import hiiragi283.ragium.client.renderer.item.HTFuelGeneratorItemRenderer import hiiragi283.ragium.common.block.entity.HTBlockEntity import hiiragi283.ragium.common.block.entity.device.HTFluidCollectorBlockEntity +import hiiragi283.ragium.common.block.entity.storage.HTUniversalChestBlockEntity import hiiragi283.ragium.common.entity.charge.HTAbstractCharge import hiiragi283.ragium.common.inventory.container.HTBlockEntityContainerMenu import hiiragi283.ragium.common.material.HTColorMaterial @@ -62,6 +63,7 @@ import net.minecraft.client.renderer.entity.MinecartRenderer import net.minecraft.client.renderer.entity.ThrownItemRenderer import net.minecraft.core.BlockPos import net.minecraft.core.component.DataComponents +import net.minecraft.world.item.DyeColor import net.minecraft.world.item.ItemStack import net.minecraft.world.item.alchemy.PotionContents import net.minecraft.world.level.BlockAndTintGetter @@ -128,6 +130,23 @@ class RagiumClient(eventBus: IEventBus, container: ModContainer) { }, RagiumBlocks.FLUID_COLLECTOR.get(), ) + // Universal Chest + event.register( + { _: BlockState, getter: BlockAndTintGetter?, pos: BlockPos?, tint: Int -> + when { + tint != 0 -> -1 + getter != null && pos != null -> { + val color: DyeColor = getter + .getTypedBlockEntity(pos) + ?.color + ?: DyeColor.WHITE + color.textureDiffuseColor + } + else -> -1 + } + }, + RagiumBlocks.UNIVERSAL_CHEST.get(), + ) // LED Blocks for ((color: HTColorMaterial, block: HTSimpleDeferredBlock) in RagiumBlocks.LED_BLOCKS) { event.register( @@ -178,7 +197,7 @@ class RagiumClient(eventBus: IEventBus, container: ModContainer) { for (bucket: HTDeferredItem<*> in RagiumFluidContents.REGISTER.itemEntries) { event.register(DynamicFluidContainerModel.Colors(), bucket) } - // Backpack + // Colored items event.register( { stack: ItemStack, tint: Int -> when { @@ -186,6 +205,7 @@ class RagiumClient(eventBus: IEventBus, container: ModContainer) { else -> stack.get(RagiumDataComponents.COLOR)?.textureDiffuseColor ?: -1 } }, + RagiumBlocks.UNIVERSAL_CHEST, RagiumItems.UNIVERSAL_BUNDLE, ) // Potion Drop diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/HTTypedEntityBlock.kt b/src/main/kotlin/hiiragi283/ragium/common/block/HTTypedEntityBlock.kt index ba81ab26c..e4ca20649 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/HTTypedEntityBlock.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/HTTypedEntityBlock.kt @@ -10,13 +10,16 @@ import hiiragi283.ragium.api.block.type.HTEntityBlockType import hiiragi283.ragium.api.registry.impl.HTDeferredBlockEntityType import hiiragi283.ragium.api.storage.fluid.HTFluidTank import hiiragi283.ragium.api.world.getTypedBlockEntity +import hiiragi283.ragium.common.block.entity.ExtendedBlockEntity import hiiragi283.ragium.common.block.entity.HTBlockEntity import hiiragi283.ragium.setup.RagiumMenuTypes import hiiragi283.ragium.util.HTStackSlotHelper import net.minecraft.core.BlockPos +import net.minecraft.network.chat.Component import net.minecraft.world.InteractionHand import net.minecraft.world.InteractionResult import net.minecraft.world.ItemInteractionResult +import net.minecraft.world.Nameable import net.minecraft.world.entity.LivingEntity import net.minecraft.world.entity.player.Player import net.minecraft.world.item.ItemStack @@ -88,16 +91,20 @@ open class HTTypedEntityBlock(type: TYPE, properties: player: Player, hitResult: BlockHitResult, ): InteractionResult { - val blockEntity: HTBlockEntity = level.getTypedBlockEntity(pos) ?: return InteractionResult.PASS + val blockEntity: ExtendedBlockEntity = level.getTypedBlockEntity(pos) ?: return InteractionResult.PASS if (level.isClientSide) { return when (this.hasAttribute>()) { true -> InteractionResult.SUCCESS false -> InteractionResult.PASS } } + val name: Component = when (blockEntity) { + is Nameable -> blockEntity.name + else -> state.block.name + } return this .getAttribute>() - ?.openMenu(player, blockEntity.name, blockEntity, blockEntity::writeExtraContainerData) + ?.openMenu(player, name, blockEntity, blockEntity::writeExtraContainerData) ?: InteractionResult.PASS } @@ -135,7 +142,7 @@ open class HTTypedEntityBlock(type: TYPE, properties: param: Int, ): Boolean { super.triggerEvent(state, level, pos, id, param) - return level.getTypedBlockEntity(pos)?.triggerEvent(id, param) ?: false + return level.getTypedBlockEntity(pos)?.triggerEvent(id, param) ?: false } final override fun neighborChanged( @@ -147,7 +154,7 @@ open class HTTypedEntityBlock(type: TYPE, properties: movedByPiston: Boolean, ) { super.neighborChanged(state, level, pos, neighborBlock, neighborPos, movedByPiston) - level.getTypedBlockEntity(pos)?.neighborChanged(state, level, pos, neighborBlock, neighborPos, movedByPiston) + level.getTypedBlockEntity(pos)?.neighborChanged(state, level, pos, neighborBlock, neighborPos, movedByPiston) } override fun getCloneItemStack( diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/ExtendedBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/ExtendedBlockEntity.kt index 11d456966..46b4e0165 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/ExtendedBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/ExtendedBlockEntity.kt @@ -29,6 +29,16 @@ abstract class ExtendedBlockEntity(type: HTDeferredBlockEntityType<*>, pos: Bloc HTAbstractBlockEntity { // Save & Read // + final override fun saveAdditional(tag: CompoundTag, registries: HolderLookup.Provider) { + super.saveAdditional(tag, registries) + RagiumPlatform.INSTANCE.createValueOutput(registries, tag).let(::writeValue) + } + + final override fun loadAdditional(tag: CompoundTag, registries: HolderLookup.Provider) { + super.loadAdditional(tag, registries) + RagiumPlatform.INSTANCE.createValueInput(registries, tag).let(::readValue) + } + final override fun getUpdatePacket(): ClientboundBlockEntityDataPacket = ClientboundBlockEntityDataPacket.create(this) final override fun getUpdateTag(registries: HolderLookup.Provider): CompoundTag = getReducedUpdateTag(registries) @@ -97,6 +107,10 @@ abstract class ExtendedBlockEntity(type: HTDeferredBlockEntityType<*>, pos: Bloc // Extensions // + protected open fun writeValue(output: HTValueOutput) {} + + protected open fun readValue(input: HTValueInput) {} + /** * @see mekanism.common.tile.base.TileEntityUpdateable.getReducedUpdateTag */ diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTBlockEntity.kt index a366c638e..1d268b38e 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTBlockEntity.kt @@ -1,7 +1,6 @@ package hiiragi283.ragium.common.block.entity import hiiragi283.ragium.api.RagiumConst -import hiiragi283.ragium.api.RagiumPlatform import hiiragi283.ragium.api.block.HTBlockWithEntity import hiiragi283.ragium.api.block.entity.HTOwnedBlockEntity import hiiragi283.ragium.api.registry.impl.HTDeferredBlockEntityType @@ -39,12 +38,10 @@ import hiiragi283.ragium.common.storage.resolver.HTItemHandlerManager import net.minecraft.core.BlockPos import net.minecraft.core.Direction import net.minecraft.core.Holder -import net.minecraft.core.HolderLookup import net.minecraft.core.UUIDUtil import net.minecraft.core.component.DataComponentMap import net.minecraft.core.component.DataComponentType import net.minecraft.core.component.DataComponents -import net.minecraft.nbt.CompoundTag import net.minecraft.network.chat.Component import net.minecraft.network.chat.ComponentSerialization import net.minecraft.server.level.ServerLevel @@ -149,12 +146,8 @@ abstract class HTBlockEntity(val blockHolder: Holder, pos: BlockPos, stat } } - final override fun saveAdditional(tag: CompoundTag, registries: HolderLookup.Provider) { - super.saveAdditional(tag, registries) - RagiumPlatform.INSTANCE.createValueOutput(registries, tag).let(::writeValue) - } - - protected open fun writeValue(output: HTValueOutput) { + override fun writeValue(output: HTValueOutput) { + super.writeValue(output) // Components for (component: HTBlockEntityComponent in components) { component.serialize(output) @@ -171,12 +164,8 @@ abstract class HTBlockEntity(val blockHolder: Holder, pos: BlockPos, stat output.store(RagiumConst.OWNER, UUIDUtil.CODEC, ownerId) } - final override fun loadAdditional(tag: CompoundTag, registries: HolderLookup.Provider) { - super.loadAdditional(tag, registries) - RagiumPlatform.INSTANCE.createValueInput(registries, tag).let(::readValue) - } - - protected open fun readValue(input: HTValueInput) { + override fun readValue(input: HTValueInput) { + super.readValue(input) // Components for (component: HTBlockEntityComponent in components) { component.deserialize(input) diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTImitationSpawnerBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTImitationSpawnerBlockEntity.kt index 9e8183c7f..3d7f64785 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTImitationSpawnerBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTImitationSpawnerBlockEntity.kt @@ -1,15 +1,12 @@ package hiiragi283.ragium.common.block.entity -import hiiragi283.ragium.api.RagiumPlatform import hiiragi283.ragium.api.item.component.HTSpawnerMob import hiiragi283.ragium.api.serialization.value.HTValueInput import hiiragi283.ragium.api.serialization.value.HTValueOutput import hiiragi283.ragium.setup.RagiumBlockEntityTypes import hiiragi283.ragium.setup.RagiumDataComponents import net.minecraft.core.BlockPos -import net.minecraft.core.HolderLookup import net.minecraft.core.component.DataComponentMap -import net.minecraft.nbt.CompoundTag import net.minecraft.util.RandomSource import net.minecraft.world.entity.EntityType import net.minecraft.world.level.Spawner @@ -22,18 +19,14 @@ class HTImitationSpawnerBlockEntity(pos: BlockPos, state: BlockState) : // Save & Load // - override fun loadAdditional(tag: CompoundTag, registries: HolderLookup.Provider) { - super.loadAdditional(tag, registries) - RagiumPlatform.INSTANCE - .createValueInput(registries, tag) - .readAndSet("spawner", HTSpawnerMob.CODEC, ::spawnerMob::set) + override fun writeValue(output: HTValueOutput) { + super.writeValue(output) + output.store("spawner", HTSpawnerMob.CODEC, spawnerMob) } - override fun saveAdditional(tag: CompoundTag, registries: HolderLookup.Provider) { - super.saveAdditional(tag, registries) - RagiumPlatform.INSTANCE - .createValueOutput(registries, tag) - .store("spawner", HTSpawnerMob.CODEC, spawnerMob) + override fun readValue(input: HTValueInput) { + super.readValue(input) + input.readAndSet("spawner", HTSpawnerMob.CODEC, ::spawnerMob::set) } override fun applyImplicitComponents(componentInput: DataComponentInput) { diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTUniversalChestBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTUniversalChestBlockEntity.kt new file mode 100644 index 000000000..d334a7fc0 --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTUniversalChestBlockEntity.kt @@ -0,0 +1,75 @@ +package hiiragi283.ragium.common.block.entity.storage + +import hiiragi283.ragium.api.RagiumPlatform +import hiiragi283.ragium.api.serialization.codec.VanillaBiCodecs +import hiiragi283.ragium.api.serialization.value.HTValueInput +import hiiragi283.ragium.api.serialization.value.HTValueOutput +import hiiragi283.ragium.api.storage.HTHandlerProvider +import hiiragi283.ragium.api.storage.item.HTItemHandler +import hiiragi283.ragium.api.storage.item.HTItemSlot +import hiiragi283.ragium.common.block.entity.ExtendedBlockEntity +import hiiragi283.ragium.setup.RagiumBlockEntityTypes +import hiiragi283.ragium.setup.RagiumDataComponents +import net.minecraft.core.BlockPos +import net.minecraft.core.Direction +import net.minecraft.core.component.DataComponentMap +import net.minecraft.server.MinecraftServer +import net.minecraft.world.item.DyeColor +import net.minecraft.world.level.block.state.BlockState +import net.neoforged.neoforge.energy.IEnergyStorage +import net.neoforged.neoforge.fluids.capability.IFluidHandler +import net.neoforged.neoforge.items.IItemHandler + +class HTUniversalChestBlockEntity(pos: BlockPos, state: BlockState) : + ExtendedBlockEntity(RagiumBlockEntityTypes.UNIVERSAL_CHEST, pos, state), + HTHandlerProvider, + HTItemHandler { + var color: DyeColor = DyeColor.WHITE + + // Save & Load // + + override fun writeValue(output: HTValueOutput) { + super.writeValue(output) + output.store("color", VanillaBiCodecs.COLOR, color) + } + + override fun readValue(input: HTValueInput) { + super.readValue(input) + input.read("color", VanillaBiCodecs.COLOR)?.let(::color::set) + } + + override fun applyImplicitComponents(componentInput: DataComponentInput) { + super.applyImplicitComponents(componentInput) + componentInput.get(RagiumDataComponents.COLOR)?.let(::color::set) + } + + override fun collectImplicitComponents(components: DataComponentMap.Builder) { + super.collectImplicitComponents(components) + components.set(RagiumDataComponents.COLOR, color) + } + + override fun initReducedUpdateTag(output: HTValueOutput) { + super.initReducedUpdateTag(output) + output.store("color", VanillaBiCodecs.COLOR, color) + } + + override fun handleUpdateTag(input: HTValueInput) { + super.handleUpdateTag(input) + input.read("color", VanillaBiCodecs.COLOR)?.let(::color::set) + } + + // HTHandlerProvider // + + override fun getItemHandler(direction: Direction?): IItemHandler? { + val server: MinecraftServer = RagiumPlatform.INSTANCE.getCurrentServer() ?: return null + return RagiumPlatform.INSTANCE.getUniversalBundle(server, this.color) + } + + override fun getFluidHandler(direction: Direction?): IFluidHandler? = null + + override fun getEnergyStorage(direction: Direction?): IEnergyStorage? = null + + // HTItemHandler // + + override fun getItemSlots(side: Direction?): List = (getItemHandler(side) as? HTItemHandler)?.getItemSlots(side) ?: listOf() +} diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/storage/HTUniversalChestBlock.kt b/src/main/kotlin/hiiragi283/ragium/common/block/storage/HTUniversalChestBlock.kt new file mode 100644 index 000000000..15ff5f4b5 --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/block/storage/HTUniversalChestBlock.kt @@ -0,0 +1,8 @@ +package hiiragi283.ragium.common.block.storage + +import hiiragi283.ragium.api.block.type.HTEntityBlockType +import hiiragi283.ragium.common.block.HTTypedEntityBlock +import hiiragi283.ragium.setup.RagiumBlockTypes + +class HTUniversalChestBlock(properties: Properties) : + HTTypedEntityBlock(RagiumBlockTypes.UNIVERSAL_CHEST, properties) diff --git a/src/main/kotlin/hiiragi283/ragium/common/inventory/container/HTGenericContainerRows.kt b/src/main/kotlin/hiiragi283/ragium/common/inventory/container/HTGenericContainerRows.kt index 8131a347f..8aef53220 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/inventory/container/HTGenericContainerRows.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/inventory/container/HTGenericContainerRows.kt @@ -1,38 +1,5 @@ package hiiragi283.ragium.common.inventory.container -import hiiragi283.ragium.api.RagiumConst -import hiiragi283.ragium.api.function.HTPredicates -import hiiragi283.ragium.api.stack.ImmutableItemStack -import hiiragi283.ragium.api.storage.HTStorageAccess -import hiiragi283.ragium.api.storage.item.HTItemHandler -import hiiragi283.ragium.common.inventory.HTSlotHelper -import hiiragi283.ragium.common.storage.item.HTItemStackHandler -import hiiragi283.ragium.common.storage.item.slot.HTBasicItemSlot -import java.util.function.Predicate - interface HTGenericContainerRows { val rows: Int - - companion object { - @JvmStatic - fun createHandler( - rows: Int, - limit: Int = RagiumConst.ABSOLUTE_MAX_STACK_SIZE, - canExtract: Predicate = HTPredicates.alwaysTrue(), - canInsert: Predicate = HTPredicates.alwaysTrue(), - filter: Predicate = HTPredicates.alwaysTrue(), - ): HTItemHandler = HTItemStackHandler( - (0..<(rows * 9)).map { index: Int -> - HTBasicItemSlot.create( - null, - HTSlotHelper.getSlotPosX(index % 9), - HTSlotHelper.getSlotPosY(index / 9), - limit, - { stack: ImmutableItemStack, access: HTStorageAccess -> access == HTStorageAccess.MANUAL && canExtract.test(stack) }, - { stack: ImmutableItemStack, access: HTStorageAccess -> access == HTStorageAccess.MANUAL && canInsert.test(stack) }, - filter, - ) - }, - ) - } } diff --git a/src/main/kotlin/hiiragi283/ragium/common/inventory/container/HTPotionBundleContainerMenu.kt b/src/main/kotlin/hiiragi283/ragium/common/inventory/container/HTPotionBundleContainerMenu.kt index 5ac251755..4fe6c2928 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/inventory/container/HTPotionBundleContainerMenu.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/inventory/container/HTPotionBundleContainerMenu.kt @@ -3,6 +3,8 @@ package hiiragi283.ragium.common.inventory.container import hiiragi283.ragium.api.inventory.container.HTItemContainerContext import hiiragi283.ragium.api.stack.ImmutableItemStack import hiiragi283.ragium.api.storage.item.HTItemHandler +import hiiragi283.ragium.common.storage.item.HTSimpleItemHandler +import hiiragi283.ragium.common.storage.item.slot.HTBasicItemSlot import hiiragi283.ragium.setup.RagiumMenuTypes import net.minecraft.world.entity.player.Inventory import net.minecraft.world.item.Items @@ -26,9 +28,7 @@ class HTPotionBundleContainerMenu( fun filterPotion(stack: ImmutableItemStack): Boolean = stack.isOf(Items.POTION) } - override fun createHandler(rows: Int): HTItemHandler = HTGenericContainerRows.createHandler( + override fun createHandler(rows: Int): HTItemHandler = HTSimpleItemHandler.create( rows, - canInsert = ::filterPotion, - filter = ::filterPotion, - ) + ) { x: Int, y: Int -> HTBasicItemSlot.create(null, x, y, filter = ::filterPotion) } } diff --git a/src/main/kotlin/hiiragi283/ragium/common/item/block/HTUniversalChestBlockItem.kt b/src/main/kotlin/hiiragi283/ragium/common/item/block/HTUniversalChestBlockItem.kt new file mode 100644 index 000000000..3a9f443a5 --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/item/block/HTUniversalChestBlockItem.kt @@ -0,0 +1,24 @@ +package hiiragi283.ragium.common.item.block + +import hiiragi283.ragium.api.item.HTDescriptionBlockItem +import hiiragi283.ragium.api.item.HTSubCreativeTabContents +import hiiragi283.ragium.api.item.createItemStack +import hiiragi283.ragium.api.registry.HTItemHolderLike +import hiiragi283.ragium.common.block.storage.HTUniversalChestBlock +import hiiragi283.ragium.setup.RagiumDataComponents +import net.minecraft.world.item.CreativeModeTab +import net.minecraft.world.item.DyeColor +import net.minecraft.world.item.ItemStack +import java.util.function.Consumer + +class HTUniversalChestBlockItem(block: HTUniversalChestBlock, properties: Properties) : + HTDescriptionBlockItem(block, properties), + HTSubCreativeTabContents { + override fun addItems(baseItem: HTItemHolderLike, parameters: CreativeModeTab.ItemDisplayParameters, consumer: Consumer) { + for (color: DyeColor in DyeColor.entries) { + consumer.accept(createItemStack(baseItem, RagiumDataComponents.COLOR, color)) + } + } + + override fun shouldAddDefault(): Boolean = false +} diff --git a/src/main/kotlin/hiiragi283/ragium/common/item/tool/HTUniversalBundleItem.kt b/src/main/kotlin/hiiragi283/ragium/common/item/tool/HTUniversalBundleItem.kt index 310fdc35c..d1cc5655a 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/item/tool/HTUniversalBundleItem.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/item/tool/HTUniversalBundleItem.kt @@ -2,11 +2,10 @@ package hiiragi283.ragium.common.item.tool import hiiragi283.ragium.api.RagiumPlatform import hiiragi283.ragium.api.item.HTSubCreativeTabContents +import hiiragi283.ragium.api.item.createItemStack import hiiragi283.ragium.api.registry.HTItemHolderLike -import hiiragi283.ragium.api.stack.ImmutableItemStack import hiiragi283.ragium.api.storage.item.HTItemHandler import hiiragi283.ragium.setup.RagiumDataComponents -import hiiragi283.ragium.setup.RagiumItems import hiiragi283.ragium.setup.RagiumMenuTypes import net.minecraft.server.level.ServerLevel import net.minecraft.world.InteractionHand @@ -23,10 +22,6 @@ class HTUniversalBundleItem(properties: Properties) : Item(properties.stacksTo(1)), HTSubCreativeTabContents { companion object { - @JvmStatic - fun createBundle(color: DyeColor): ImmutableItemStack = - ImmutableItemStack.of(RagiumItems.UNIVERSAL_BUNDLE).plus(RagiumDataComponents.COLOR, color) - @JvmStatic fun openBundle(level: Level, player: Player, stack: ItemStack): InteractionResultHolder { val color: DyeColor = stack.get(RagiumDataComponents.COLOR) ?: return InteractionResultHolder.fail(stack) @@ -38,16 +33,13 @@ class HTUniversalBundleItem(properties: Properties) : } } - override fun getDefaultInstance(): ItemStack = createBundle(DyeColor.WHITE).unwrap() - override fun use(level: Level, player: Player, usedHand: InteractionHand): InteractionResultHolder = openBundle(level, player, player.getItemInHand(usedHand)) override fun addItems(baseItem: HTItemHolderLike, parameters: CreativeModeTab.ItemDisplayParameters, consumer: Consumer) { - DyeColor.entries - .map(::createBundle) - .map(ImmutableItemStack::unwrap) - .forEach(consumer) + for (color: DyeColor in DyeColor.entries) { + consumer.accept(createItemStack(baseItem, RagiumDataComponents.COLOR, color)) + } } override fun shouldAddDefault(): Boolean = false diff --git a/src/main/kotlin/hiiragi283/ragium/common/storage/item/HTItemStackHandler.kt b/src/main/kotlin/hiiragi283/ragium/common/storage/item/HTItemStackHandler.kt deleted file mode 100644 index 092e6e3ca..000000000 --- a/src/main/kotlin/hiiragi283/ragium/common/storage/item/HTItemStackHandler.kt +++ /dev/null @@ -1,9 +0,0 @@ -package hiiragi283.ragium.common.storage.item - -import hiiragi283.ragium.api.storage.item.HTItemHandler -import hiiragi283.ragium.api.storage.item.HTItemSlot -import net.minecraft.core.Direction - -open class HTItemStackHandler(protected var slots: List) : HTItemHandler { - override fun getItemSlots(side: Direction?): List = slots -} diff --git a/src/main/kotlin/hiiragi283/ragium/common/storage/item/HTSimpleItemHandler.kt b/src/main/kotlin/hiiragi283/ragium/common/storage/item/HTSimpleItemHandler.kt new file mode 100644 index 000000000..c90ad8b3b --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/storage/item/HTSimpleItemHandler.kt @@ -0,0 +1,21 @@ +package hiiragi283.ragium.common.storage.item + +import hiiragi283.ragium.api.storage.item.HTItemHandler +import hiiragi283.ragium.api.storage.item.HTItemSlot +import hiiragi283.ragium.common.inventory.HTSlotHelper +import net.minecraft.core.Direction + +open class HTSimpleItemHandler(protected var slots: List) : HTItemHandler { + companion object { + @JvmStatic + inline fun createSlots(rows: Int, factory: (Int, Int) -> HTItemSlot): List = (0..<(rows * 9)).map { index: Int -> + factory(HTSlotHelper.getSlotPosX(index % 9), HTSlotHelper.getSlotPosY(index / 9)) + } + + @JvmStatic + inline fun create(rows: Int, factory: (Int, Int) -> HTItemSlot): HTItemHandler = + createSlots(rows, factory).let(::HTSimpleItemHandler) + } + + final override fun getItemSlots(side: Direction?): List = slots +} diff --git a/src/main/kotlin/hiiragi283/ragium/common/storage/item/HTUniversalBundleManager.kt b/src/main/kotlin/hiiragi283/ragium/common/storage/item/HTUniversalBundleManager.kt index 92e8d9d6c..a09924690 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/storage/item/HTUniversalBundleManager.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/storage/item/HTUniversalBundleManager.kt @@ -4,21 +4,26 @@ import hiiragi283.ragium.api.serialization.value.HTValueInput import hiiragi283.ragium.api.serialization.value.HTValueOutput import hiiragi283.ragium.api.serialization.value.HTValueSerializable import hiiragi283.ragium.api.storage.item.HTItemHandler +import hiiragi283.ragium.api.storage.item.HTItemSlot import hiiragi283.ragium.common.inventory.HTMenuCallback -import hiiragi283.ragium.common.inventory.container.HTGenericContainerRows import hiiragi283.ragium.common.storage.HTCapabilityCodec +import hiiragi283.ragium.common.storage.item.slot.HTBasicItemSlot import net.minecraft.sounds.SoundEvents import net.minecraft.sounds.SoundSource import net.minecraft.world.entity.player.Player import net.minecraft.world.item.DyeColor class HTUniversalBundleManager private constructor(map: Map) : HTValueSerializable { + companion object { + @JvmStatic + fun createSlots(): List = HTSimpleItemHandler.createSlots(3) { x: Int, y: Int -> HTBasicItemSlot.create(null, x, y) } + } + constructor() : this(mapOf()) private val map: MutableMap = map.toMutableMap() - fun getHandler(color: DyeColor): HTItemHandler = - map.computeIfAbsent(color) { _: DyeColor -> BundleHandler(HTGenericContainerRows.createHandler(3)) } + fun getHandler(color: DyeColor): HTItemHandler = map.computeIfAbsent(color) { _: DyeColor -> BundleHandler(createSlots()) } override fun serialize(output: HTValueOutput) { for (color: DyeColor in DyeColor.entries) { @@ -36,8 +41,8 @@ class HTUniversalBundleManager private constructor(map: Map) : + HTSimpleItemHandler(slots), HTMenuCallback { override fun openMenu(player: Player) { player.level().playSound(null, player.blockPosition(), SoundEvents.WOOL_PLACE, SoundSource.PLAYERS) diff --git a/src/main/kotlin/hiiragi283/ragium/common/text/RagiumCommonTranslation.kt b/src/main/kotlin/hiiragi283/ragium/common/text/RagiumCommonTranslation.kt index 7987733ef..19b894558 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/text/RagiumCommonTranslation.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/text/RagiumCommonTranslation.kt @@ -64,6 +64,7 @@ enum class RagiumCommonTranslation(type: String, vararg path: String) : HTTransl CRATE("description", "crate"), TANK("description", "tank"), BUFFER("description", "buffer"), + UNIVERSAL_CHEST("description", "universal_chest"), // Config CONFIG_ENERGY_CAPACITY("config", "energy_capacity"), @@ -96,6 +97,7 @@ enum class RagiumCommonTranslation(type: String, vararg path: String) : HTTransl MAGNET("description", "magnet"), SLOT_COVER("description", "slot_cover"), TRADER_CATALOG("description", "trader_catalog"), + UNIVERSAL_BUNDLE("description", "universal_bundle"), // Items - Foods AMBROSIA("description", "ambrosia"), diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlockEntityTypes.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlockEntityTypes.kt index 391a45f77..be249e1ec 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlockEntityTypes.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlockEntityTypes.kt @@ -43,7 +43,9 @@ import hiiragi283.ragium.common.block.entity.storage.HTBatteryBlockEntity import hiiragi283.ragium.common.block.entity.storage.HTBufferBlockEntity import hiiragi283.ragium.common.block.entity.storage.HTCrateBlockEntity import hiiragi283.ragium.common.block.entity.storage.HTTankBlockEntity +import hiiragi283.ragium.common.block.entity.storage.HTUniversalChestBlockEntity import net.minecraft.world.level.block.Block +import net.minecraft.world.level.block.entity.BlockEntity import net.minecraft.world.level.block.entity.BlockEntityType import net.neoforged.bus.api.IEventBus import net.neoforged.neoforge.capabilities.RegisterCapabilitiesEvent @@ -241,6 +243,10 @@ object RagiumBlockEntityTypes { @JvmField val BUFFER: HTDeferredBlockEntityType = registerTick("buffer", ::HTBufferBlockEntity) + @JvmField + val UNIVERSAL_CHEST: HTDeferredBlockEntityType = + REGISTER.registerType("universal_chest", ::HTUniversalChestBlockEntity) + // Event // // Supported Blocks @@ -306,11 +312,16 @@ object RagiumBlockEntityTypes { registerHandler(event, BUFFER.get()) + registerHandler(event, UNIVERSAL_CHEST.get()) + RagiumAPI.LOGGER.info("Registered Block Capabilities!") } @JvmStatic - private fun registerHandler(event: RegisterCapabilitiesEvent, type: BlockEntityType) { + private fun registerHandler( + event: RegisterCapabilitiesEvent, + type: BlockEntityType, + ) where BE : BlockEntity, BE : HTHandlerProvider { event.registerBlockEntity(HTItemCapabilities.block, type, HTHandlerProvider::getItemHandler) event.registerBlockEntity(HTFluidCapabilities.block, type, HTHandlerProvider::getFluidHandler) event.registerBlockEntity(HTEnergyCapabilities.block, type, HTHandlerProvider::getEnergyStorage) diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlockTypes.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlockTypes.kt index c00c811c1..f4e7f30f1 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlockTypes.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlockTypes.kt @@ -293,4 +293,10 @@ object RagiumBlockTypes { .builder { RagiumBlockEntityTypes.BUFFER } // .addMenu { RagiumMenuTypes.BUFFER } .build(RagiumCommonTranslation.BUFFER) + + @JvmField + val UNIVERSAL_CHEST: HTEntityBlockType = HTEntityBlockType + .builder { RagiumBlockEntityTypes.UNIVERSAL_CHEST } + .addMenu { RagiumMenuTypes.UNIVERSAL_BUNDLE } + .build(RagiumCommonTranslation.UNIVERSAL_CHEST) } diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlocks.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlocks.kt index 6a4a34e59..3ae42030e 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlocks.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlocks.kt @@ -37,6 +37,7 @@ import hiiragi283.ragium.common.block.storage.HTBatteryBlock import hiiragi283.ragium.common.block.storage.HTBufferBlock import hiiragi283.ragium.common.block.storage.HTCrateBlock import hiiragi283.ragium.common.block.storage.HTTankBlock +import hiiragi283.ragium.common.block.storage.HTUniversalChestBlock import hiiragi283.ragium.common.block.type.HTMachineBlockType import hiiragi283.ragium.common.item.block.HTBatteryBlockItem import hiiragi283.ragium.common.item.block.HTBufferBlockItem @@ -45,6 +46,7 @@ import hiiragi283.ragium.common.item.block.HTExpBerriesItem import hiiragi283.ragium.common.item.block.HTImitationSpawnerBlockItem import hiiragi283.ragium.common.item.block.HTMachineBlockItem import hiiragi283.ragium.common.item.block.HTTankBlockItem +import hiiragi283.ragium.common.item.block.HTUniversalChestBlockItem import hiiragi283.ragium.common.item.block.HTWarpedWartItem import hiiragi283.ragium.common.material.CommonMaterialKeys import hiiragi283.ragium.common.material.CommonMaterialPrefixes @@ -613,7 +615,7 @@ object RagiumBlocks { @JvmField val BATTERY: HTDeferredBlock = REGISTER.register( "battery", - copyOf(Blocks.IRON_BLOCK).noOcclusion(), + machine().noOcclusion(), ::HTBatteryBlock, ::HTBatteryBlockItem, ) @@ -621,7 +623,7 @@ object RagiumBlocks { @JvmField val CRATE: HTDeferredBlock = REGISTER.register( "crate", - copyOf(Blocks.COPPER_BLOCK).noOcclusion(), + machine().noOcclusion(), ::HTCrateBlock, ::HTCrateBlockItem, ) @@ -629,7 +631,7 @@ object RagiumBlocks { @JvmField val TANK: HTDeferredBlock = REGISTER.register( "tank", - copyOf(Blocks.COPPER_BLOCK).noOcclusion(), + machine().noOcclusion(), ::HTTankBlock, ::HTTankBlockItem, ) @@ -637,8 +639,16 @@ object RagiumBlocks { @JvmField val BUFFER: HTDeferredBlock = REGISTER.register( "buffer", - copyOf(Blocks.COPPER_BLOCK).noOcclusion().workInProgress(), + machine().noOcclusion().workInProgress(), ::HTBufferBlock, ::HTBufferBlockItem, ) + + @JvmField + val UNIVERSAL_CHEST: HTDeferredBlock = REGISTER.register( + "universal_chest", + machine(), + ::HTUniversalChestBlock, + ::HTUniversalChestBlockItem, + ) } diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumItems.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumItems.kt index 362a09e6f..9537388c0 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumItems.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumItems.kt @@ -421,7 +421,7 @@ object RagiumItems { @JvmField val UNIVERSAL_BUNDLE: HTSimpleDeferredItem = REGISTER.registerItem("universal_bundle", ::HTUniversalBundleItem) { - it.component(RagiumDataComponents.COLOR, DyeColor.WHITE) + it.component(RagiumDataComponents.COLOR, DyeColor.WHITE).description(RagiumCommonTranslation.UNIVERSAL_BUNDLE) } // Other diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumMenuTypes.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumMenuTypes.kt index 8a53279eb..5d94de1d1 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumMenuTypes.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumMenuTypes.kt @@ -34,8 +34,9 @@ import hiiragi283.ragium.common.block.entity.storage.HTTankBlockEntity import hiiragi283.ragium.common.inventory.container.HTAccessConfigurationMenu import hiiragi283.ragium.common.inventory.container.HTBlockEntityContainerMenu import hiiragi283.ragium.common.inventory.container.HTGenericContainerMenu -import hiiragi283.ragium.common.inventory.container.HTGenericContainerRows import hiiragi283.ragium.common.inventory.container.HTPotionBundleContainerMenu +import hiiragi283.ragium.common.storage.item.HTSimpleItemHandler +import hiiragi283.ragium.common.storage.item.HTUniversalBundleManager import net.minecraft.client.Minecraft import net.minecraft.core.BlockPos import net.minecraft.network.FriendlyByteBuf @@ -62,9 +63,10 @@ object RagiumMenuTypes { @JvmField val UNIVERSAL_BUNDLE: HTDeferredMenuType.WithContext = - REGISTER.registerType("universal_bundle", HTGenericContainerMenu::threeRow) { - HTGenericContainerRows.createHandler(3) - } + REGISTER.registerType( + "universal_bundle", + HTGenericContainerMenu::threeRow, + ) { HTSimpleItemHandler(HTUniversalBundleManager.createSlots()) } // Generator // diff --git a/src/main/resources/assets/ragium/textures/block/universal_chest.png b/src/main/resources/assets/ragium/textures/block/universal_chest.png new file mode 100644 index 0000000000000000000000000000000000000000..549334f9a0cd63b2d7b273bf9f69fa91b2e56f4a GIT binary patch literal 161 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`VV*9IAr*6;Og_lVV8G(4ZP+6F z#=c87=i;%2wp~JdzsRfT+5Bf0x+ufCP&Bl4;so8}cMU#^c6J<4T*09nZDX~;`j*WH zj(ZgXp39~`*v@Eu{Yt|rZ+)P_|NqB+f7}6Nuz_q~W>~a9L3pN9(;uJ+gQu&X%Q~lo FCIEw)Hk$wd literal 0 HcmV?d00001