From 1638ef7006c9bec927cb800223e09065530a21c5 Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Tue, 6 Oct 2026 21:21:33 +0900 Subject: [PATCH 01/25] =?UTF-8?q?feat:=20Reacting=20=E3=83=AC=E3=82=B7?= =?UTF-8?q?=E3=83=94=E3=81=AE=E5=BD=A2=E5=BC=8F=E3=82=92=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../integration/jei/RagiumJeiRecipeTypes.kt | 2 +- .../jei/category/RTReactingRecipeCategory.kt | 40 +++---- .../lib/color/VanillaColoredCollections.kt | 3 + .../lib/recipe/base/HTRecipeFactories.kt | 10 ++ .../lib/recipe/base/HTRecipePredicates.kt | 9 ++ .../recipe/ingredient/HTFluidIngredient.kt | 12 +- .../lib/recipe/ingredient/HTItemIngredient.kt | 12 +- .../recipe/builder/RTReactingRecipeBuilder.kt | 40 +++++-- .../ragium/api/recipe/RTMixingRecipe.kt | 12 +- .../ragium/api/recipe/RTReactingRecipe.kt | 106 ++++++++++-------- .../ragium/api/recipe/RagiumRecipeLookups.kt | 2 +- .../api/recipe/RagiumRecipeSerializers.kt | 4 +- .../ragium/api/recipe/RagiumRecipeTypes.kt | 2 +- .../hiiragi283/ragium/common/RagiumCommon.kt | 1 - 14 files changed, 156 insertions(+), 99 deletions(-) diff --git a/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiRecipeTypes.kt b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiRecipeTypes.kt index a620e7afe..696cf9667 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiRecipeTypes.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiRecipeTypes.kt @@ -70,7 +70,7 @@ data object RagiumJeiRecipeTypes { val MIXING: HTRecipeHolderType = create(RagiumConstants.MIXING) @JvmField - val REACTING: HTRecipeHolderType = create(RagiumConstants.REACTING) + val REACTING: HTRecipeHolderType = create(RagiumConstants.REACTING) @JvmField val WASHING: HTRecipeHolderType = create(RagiumConstants.WASHING) diff --git a/src/client/kotlin/hiiragi283/ragium/client/integration/jei/category/RTReactingRecipeCategory.kt b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/category/RTReactingRecipeCategory.kt index 0bc7a5ad4..fadc85ac6 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/integration/jei/category/RTReactingRecipeCategory.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/category/RTReactingRecipeCategory.kt @@ -14,41 +14,41 @@ import mezz.jei.api.helpers.IGuiHelper import mezz.jei.api.recipe.IFocusGroup class RTReactingRecipeCategory(guiHelper: IGuiHelper) : - HTHolderRecipeCategory( + HTHolderRecipeCategory( RagiumJeiRecipeTypes.REACTING, RagiumRecipeTypes.REACTING, guiHelper.createDrawableItemLike(RagiumBlocks.CHEMICAL_REACTOR), - 18 * 8, + 18 * 9, 18 * 1, - RTReactingRecipe.Basic.CODEC + RTReactingRecipe.CODEC ) { - override fun setupRecipe(builder: IRecipeLayoutBuilder, recipe: RTReactingRecipe.Basic, focuses: IFocusGroup) { + override fun setupRecipe(builder: IRecipeLayoutBuilder, recipe: RTReactingRecipe, focuses: IFocusGroup) { // inputs builder .addInputSlot(getPosition(0), getPosition(0)) - .add(recipe.primary) + .add(recipe.fluidIngredients.head) .setSlotBackground(HTBackgroundType.INPUT) - builder - .addInputSlot(getPosition(2), getPosition(0)) - .add(recipe.secondary) + val secondInput: IRecipeSlotBuilder = builder + .addInputSlot(getPosition(1), getPosition(0)) .setSlotBackground(HTBackgroundType.EXTRA_INPUT) + recipe.fluidIngredients.getOrNull(1)?.let(secondInput::add) + builder + .addInputSlot(getPosition(3), getPosition(0)) + .add(recipe.catalyst) + .setSlotBackground(HTBackgroundType.NONE) // outputs - val fluidOutput: IRecipeSlotBuilder = builder - .addOutputSlot(getPosition(5), getPosition(0)) - .setSlotBackground(HTBackgroundType.OUTPUT) val itemOutput: IRecipeSlotBuilder = builder - .addOutputSlot(getPosition(7), getPosition(0)) + .addOutputSlot(getPosition(6), getPosition(0)) + .setSlotBackground(HTBackgroundType.OUTPUT) + val fluidOutput: IRecipeSlotBuilder = builder + .addOutputSlot(getPosition(8), getPosition(0)) .setSlotBackground(HTBackgroundType.OUTPUT) recipe.result.content.mapLeft(itemOutput::add).mapRight(fluidOutput::add) } - override fun setupRecipeExtras( - builder: IRecipeExtrasBuilder, - recipe: RTReactingRecipe.Basic, - focuses: IFocusGroup - ) { - builder.addRecipePlus(getPosition(1)) - builder.addRecipeArrow(recipe).setPosition(getPosition(3.25), getPosition(0)) - builder.addRecipePlus(getPosition(6)) + override fun setupRecipeExtras(builder: IRecipeExtrasBuilder, recipe: RTReactingRecipe, focuses: IFocusGroup) { + builder.addRecipePlus(getPosition(2)) + builder.addRecipeArrow(recipe).setPosition(getPosition(4.25), getPosition(0)) + builder.addRecipePlus(getPosition(7)) } } diff --git a/src/lib/kotlin/hiiragi283/lib/color/VanillaColoredCollections.kt b/src/lib/kotlin/hiiragi283/lib/color/VanillaColoredCollections.kt index f259b7118..0014b11bd 100644 --- a/src/lib/kotlin/hiiragi283/lib/color/VanillaColoredCollections.kt +++ b/src/lib/kotlin/hiiragi283/lib/color/VanillaColoredCollections.kt @@ -32,6 +32,9 @@ data object VanillaColoredCollections { @JvmField val DYE: HTColoredCollection = item("%s_dye") + @JvmField + val HARNESS: HTColoredCollection = item("%s_harness") + @JvmField val GLAZED_TERRACOTTA: HTColoredCollection = block("%s_glazed_terracotta") diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTRecipeFactories.kt b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTRecipeFactories.kt index e96da6015..d79ed2666 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTRecipeFactories.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTRecipeFactories.kt @@ -118,6 +118,16 @@ data object HTRecipeFactories { apply(input.getItemOrEmpty(0), input.getItemOrEmpty(1), input.getFluidOrEmpty(0)) } + /** + * 1種類のアイテムと2種類の液体から完成品を作る[TripleInput]の拡張インターフェースです。 + * @since 26.1.9 + */ + interface ItemAndDoubleFluid : + TripleInput { + override fun produce(input: HTFluidRecipeInput): OUTPUT = + apply(input.getItemOrEmpty(0), input.getFluidOrEmpty(0), input.getFluidOrEmpty(1)) + } + /** * 3種類のアイテムから完成品を作る[TripleInput]の拡張インターフェースです。 */ diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTRecipePredicates.kt b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTRecipePredicates.kt index eb1b2d3db..05a75fff8 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTRecipePredicates.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTRecipePredicates.kt @@ -119,6 +119,15 @@ data object HTRecipePredicates { test(input.getItemOrEmpty(0), input.getItemOrEmpty(1), input.getFluidOrEmpty(0)) } + /** + * 1種類のアイテムと2種類の液体を判定する[TripleInput]の拡張インターフェースです。 + * @since 26.1.9 + */ + fun interface ItemAndDoubleFluid : TripleInput { + override fun matches(input: HTFluidRecipeInput): Boolean = + test(input.getItemOrEmpty(0), input.getFluidOrEmpty(0), input.getFluidOrEmpty(1)) + } + /** * 3種類のアイテムを判定する[TripleInput]の拡張インターフェースです。 */ diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTFluidIngredient.kt b/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTFluidIngredient.kt index 5361f5255..be159a946 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTFluidIngredient.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTFluidIngredient.kt @@ -4,7 +4,6 @@ import com.mojang.serialization.Codec import hiiragi283.lib.HTConstants import hiiragi283.lib.fluid.HTFlowingFluidHelper import hiiragi283.lib.serialization.codec.HTCodecs -import hiiragi283.lib.util.fold import net.minecraft.network.RegistryFriendlyByteBuf import net.minecraft.network.codec.ByteBufCodecs import net.minecraft.network.codec.StreamCodec @@ -16,6 +15,7 @@ import net.neoforged.neoforge.fluids.FluidStack import net.neoforged.neoforge.fluids.crafting.FluidIngredient import net.neoforged.neoforge.fluids.crafting.display.ForFluidStacks import java.util.Optional +import kotlin.jvm.optionals.getOrNull /** * [Fluid]向けの[HTIngredient]の実装クラスです。 @@ -73,5 +73,11 @@ data class HTFluidIngredient(val unsized: FluidIngredient, val amount: Int) : * @author Hiiragi Tsubasa * @since 26.1.2 */ -fun Optional.test(instance: FluidInstance): Boolean = - this.fold({ HTIngredientHelper.isEmpty(instance) }, { it.test(instance) }) +fun Optional.test(instance: FluidInstance): Boolean = this.getOrNull().testOrEmpty(instance) + +/** + * @author Hiiragi Tsubasa + * @since 26.1.9 + */ +fun HTFluidIngredient?.testOrEmpty(instance: FluidInstance): Boolean = + this?.test(instance) ?: HTIngredientHelper.isEmpty(instance) diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTItemIngredient.kt b/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTItemIngredient.kt index 369c27185..6cc4ecba4 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTItemIngredient.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTItemIngredient.kt @@ -3,7 +3,6 @@ package hiiragi283.lib.recipe.ingredient import com.mojang.serialization.Codec import hiiragi283.lib.HTConstants import hiiragi283.lib.serialization.codec.HTCodecs -import hiiragi283.lib.util.fold import net.minecraft.network.RegistryFriendlyByteBuf import net.minecraft.network.codec.ByteBufCodecs import net.minecraft.network.codec.StreamCodec @@ -15,6 +14,7 @@ import net.minecraft.world.item.crafting.Ingredient import net.minecraft.world.item.crafting.display.DisplayContentsFactory import net.neoforged.neoforge.common.util.NeoForgeExtraCodecs import java.util.Optional +import kotlin.jvm.optionals.getOrNull /** * [Item]向けの[HTIngredient]の実装クラスです。 @@ -71,5 +71,11 @@ data class HTItemIngredient(val unsized: Ingredient, val count: Int) : * @author Hiiragi Tsubasa * @since 26.1.2 */ -fun Optional.test(instance: ItemInstance): Boolean = - this.fold({ HTIngredientHelper.isEmpty(instance) }, { it.test(instance) }) +fun Optional.test(instance: ItemInstance): Boolean = this.getOrNull().testOrEmpty(instance) + +/** + * @author Hiiragi Tsubasa + * @since 26.1.9 + */ +fun HTItemIngredient?.testOrEmpty(instance: ItemInstance): Boolean = + this?.test(instance) ?: HTIngredientHelper.isEmpty(instance) diff --git a/src/lib/kotlin/hiiragi283/ragium/api/data/recipe/builder/RTReactingRecipeBuilder.kt b/src/lib/kotlin/hiiragi283/ragium/api/data/recipe/builder/RTReactingRecipeBuilder.kt index 29c0b75dd..ebbfa8f33 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/data/recipe/builder/RTReactingRecipeBuilder.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/data/recipe/builder/RTReactingRecipeBuilder.kt @@ -2,11 +2,14 @@ package hiiragi283.ragium.api.data.recipe.builder +import hiiragi283.lib.collection.toNel import hiiragi283.lib.data.recipe.builder.HTProgressRecipeBuilder import hiiragi283.lib.data.recipe.ingredient.HTFluidIngredientBuilder +import hiiragi283.lib.data.recipe.ingredient.IngredientBuilder import hiiragi283.lib.data.recipe.result.HTFluidResultBuilder import hiiragi283.lib.data.recipe.result.HTItemResultBuilder import hiiragi283.lib.recipe.ingredient.HTFluidIngredient +import hiiragi283.lib.recipe.ingredient.HTItemCatalyst import hiiragi283.lib.recipe.result.HTFluidResult import hiiragi283.lib.recipe.result.HTItemOrFluidResult import hiiragi283.lib.recipe.result.HTItemResult @@ -14,38 +17,53 @@ import hiiragi283.lib.util.HTDelegates import hiiragi283.lib.util.Ior import hiiragi283.ragium.api.RagiumConstants import hiiragi283.ragium.api.recipe.RTReactingRecipe +import it.unimi.dsi.fastutil.objects.ObjectArrayList import net.minecraft.resources.Identifier +import net.minecraft.world.item.crafting.Ingredient import java.util.Optional import kotlin.contracts.ExperimentalContracts import kotlin.contracts.InvocationKind import kotlin.contracts.contract -class RTReactingRecipeBuilder : HTProgressRecipeBuilder(RagiumConstants.REACTING) { +class RTReactingRecipeBuilder : HTProgressRecipeBuilder(RagiumConstants.REACTING) { override fun getRecipeId(): Identifier? = result.getId() - override fun createRecipe(): RTReactingRecipe.Basic = - RTReactingRecipe.Basic(primaryIngredient, secondaryIngredient, result, progressData) + override fun createRecipe(): RTReactingRecipe = + RTReactingRecipe(fluidIngredients.toNel(), catalyst, result, progressData) - // Ingredient - var primaryIngredient: HTFluidIngredient by HTDelegates.onceInitialize() + // Ingredients + private val fluidIngredients: MutableList = ObjectArrayList() - var secondaryIngredient: HTFluidIngredient by HTDelegates.onceInitialize() + operator fun HTFluidIngredient.unaryPlus() { + fluidIngredients += this + } - inline fun primaryIngredient(builderAction: HTFluidIngredientBuilder.() -> Unit) { + inline fun ingredient(builderAction: HTFluidIngredientBuilder.() -> Unit) { contract { callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) } - primaryIngredient = HTFluidIngredientBuilder.build(builderAction) + +HTFluidIngredientBuilder.build(builderAction) + } + + // Catalyst + var catalyst: HTItemCatalyst by HTDelegates.onceInitialize(HTItemCatalyst::EMPTY) + + operator fun HTItemCatalyst.unaryPlus() { + catalyst = this + } + + operator fun Ingredient.unaryPlus() { + +HTItemCatalyst(this) } - inline fun secondaryIngredient(builderAction: HTFluidIngredientBuilder.() -> Unit) { + inline fun catalyst(builderAction: IngredientBuilder.() -> Unit) { contract { callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) } - secondaryIngredient = HTFluidIngredientBuilder.build(builderAction) + +IngredientBuilder.build(builderAction) } - // Result + // Results var itemResult: Optional by HTDelegates.optionalInitialize() var fluidResult: Optional by HTDelegates.optionalInitialize() diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTMixingRecipe.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTMixingRecipe.kt index e10337b8c..1360e1c1e 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTMixingRecipe.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTMixingRecipe.kt @@ -11,8 +11,8 @@ import hiiragi283.lib.recipe.base.HTProgressRecipe import hiiragi283.lib.recipe.base.HTRecipeFactories import hiiragi283.lib.recipe.base.HTRecipePredicates import hiiragi283.lib.recipe.ingredient.HTFluidIngredient -import hiiragi283.lib.recipe.ingredient.HTIngredientHelper import hiiragi283.lib.recipe.ingredient.HTItemIngredient +import hiiragi283.lib.recipe.ingredient.testOrEmpty import hiiragi283.lib.recipe.input.HTFluidRecipeInput import hiiragi283.lib.recipe.input.HTItemAndFluidRecipeInput import hiiragi283.lib.recipe.result.HTItemAndFluidStack @@ -116,14 +116,8 @@ data class RTMixingRecipe( override fun test(first: ItemInstance, second: ItemInstance, third: FluidInstance): Boolean = when { !fluidIngredient.test(third) -> false - - itemIngredients.head.test(first) -> - itemIngredients.getOrNull(1)?.test(second) ?: HTIngredientHelper.isEmpty(second) - - itemIngredients.head.test(second) -> - itemIngredients.getOrNull(1)?.test(first) ?: HTIngredientHelper.isEmpty(first) - - else -> false + itemIngredients.head.test(first) && itemIngredients.getOrNull(1).testOrEmpty(second) -> true + else -> itemIngredients.head.test(second) && itemIngredients.getOrNull(1).testOrEmpty(first) } override fun apply(first: ItemInstance, second: ItemInstance, third: FluidInstance): HTItemAndFluidStack = diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTReactingRecipe.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTReactingRecipe.kt index 8930c5fcc..61b5af94a 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTReactingRecipe.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTReactingRecipe.kt @@ -2,74 +2,86 @@ package hiiragi283.ragium.api.recipe import com.mojang.serialization.MapCodec import hiiragi283.lib.HTConstants +import hiiragi283.lib.collection.Nel import hiiragi283.lib.recipe.HTSerializableRecipe import hiiragi283.lib.recipe.base.HTProgressData import hiiragi283.lib.recipe.base.HTProgressRecipe import hiiragi283.lib.recipe.base.HTRecipeFactories import hiiragi283.lib.recipe.base.HTRecipePredicates import hiiragi283.lib.recipe.ingredient.HTFluidIngredient +import hiiragi283.lib.recipe.ingredient.HTItemCatalyst +import hiiragi283.lib.recipe.ingredient.testOrEmpty import hiiragi283.lib.recipe.input.HTFluidRecipeInput import hiiragi283.lib.recipe.result.HTItemAndFluidStack import hiiragi283.lib.recipe.result.HTItemOrFluidResult import hiiragi283.lib.serialization.codec.HTCodecs +import hiiragi283.lib.serialization.codec.compactNelFieldOf +import hiiragi283.lib.serialization.network.nelOf import net.minecraft.network.RegistryFriendlyByteBuf import net.minecraft.network.codec.StreamCodec +import net.minecraft.world.item.ItemInstance import net.minecraft.world.item.crafting.RecipeSerializer import net.minecraft.world.item.crafting.RecipeType import net.neoforged.neoforge.fluids.FluidInstance -interface RTReactingRecipe : - HTRecipePredicates.DoubleFluid, - HTRecipeFactories.DoubleFluid, - HTProgressRecipe { - - @JvmRecord - data class Basic( - val primary: HTFluidIngredient, - val secondary: HTFluidIngredient, - val result: HTItemOrFluidResult, - override val progressData: HTProgressData - ) : RTReactingRecipe, - HTProgressRecipe.Simple, - HTSerializableRecipe { - companion object { - @JvmField - val CODEC: MapCodec = HTCodecs.recordMap { instance -> - instance.group( - HTFluidIngredient.CODEC.fieldOf(HTConstants.PRIMARY_INGREDIENT).forGetter(Basic::primary), - HTFluidIngredient.CODEC.fieldOf(HTConstants.SECONDARY_INGREDIENT).forGetter(Basic::secondary), - HTItemOrFluidResult.CODEC.forGetter(Basic::result), - HTProgressData.CODEC.forGetter(Basic::progressData) - ).apply(instance, ::Basic) - } - - @JvmField - val STREAM_CODEC: StreamCodec = StreamCodec.composite( - HTFluidIngredient.STREAM_CODEC, - Basic::primary, - HTFluidIngredient.STREAM_CODEC, - Basic::secondary, - HTItemOrFluidResult.STREAM_CODEC, - Basic::result, - HTProgressData.STREAM_CODEC, - Basic::progressData, - ::Basic - ) - - @JvmField - val SERIALIZER: RecipeSerializer = RecipeSerializer(CODEC, STREAM_CODEC) +@JvmRecord +data class RTReactingRecipe( + val fluidIngredients: Nel, + val catalyst: HTItemCatalyst, + val result: HTItemOrFluidResult, + override val progressData: HTProgressData +) : HTRecipePredicates.ItemAndDoubleFluid, + HTRecipeFactories.ItemAndDoubleFluid, + HTProgressRecipe.Simple, + HTSerializableRecipe { + companion object { + @JvmField + val CODEC: MapCodec = HTCodecs.recordMap { instance -> + instance.group( + HTFluidIngredient.CODEC + .compactNelFieldOf(HTConstants.INGREDIENT, HTConstants.INGREDIENTS, 2) + .forGetter(RTReactingRecipe::fluidIngredients), + HTItemCatalyst.CODEC.forGetter(RTReactingRecipe::catalyst), + HTItemOrFluidResult.CODEC.forGetter(RTReactingRecipe::result), + HTProgressData.CODEC.forGetter(RTReactingRecipe::progressData) + ).apply(instance, ::RTReactingRecipe) } - override fun test(first: FluidInstance, second: FluidInstance): Boolean = - primary.test(first) && secondary.test(second) + @JvmField + val STREAM_CODEC: StreamCodec = StreamCodec.composite( + HTFluidIngredient.STREAM_CODEC.nelOf(), + RTReactingRecipe::fluidIngredients, + HTItemCatalyst.STREAM_CODEC, + RTReactingRecipe::catalyst, + HTItemOrFluidResult.STREAM_CODEC, + RTReactingRecipe::result, + HTProgressData.STREAM_CODEC, + RTReactingRecipe::progressData, + ::RTReactingRecipe + ) - override fun apply(first: FluidInstance, second: FluidInstance): HTItemAndFluidStack = result.create() + @JvmField + val SERIALIZER: RecipeSerializer = RecipeSerializer(CODEC, STREAM_CODEC) + } - override fun getMatchingStack(first: FluidInstance, second: FluidInstance): Pair = - primary.getMatchingStack(first) to secondary.getMatchingStack(second) + override fun test(first: ItemInstance, second: FluidInstance, third: FluidInstance): Boolean = when { + !catalyst.test(first) -> false + fluidIngredients.head.test(second) && fluidIngredients.getOrNull(1).testOrEmpty(third) -> true + else -> fluidIngredients.head.test(third) && fluidIngredients.getOrNull(1).testOrEmpty(second) + } - override fun getSerializer(): RecipeSerializer = RagiumRecipeSerializers.REACTING + override fun apply(first: ItemInstance, second: FluidInstance, third: FluidInstance): HTItemAndFluidStack = + result.create() - override fun getType(): RecipeType = RagiumRecipeTypes.REACTING + override fun getMatchingStack( + first: ItemInstance, + second: FluidInstance, + third: FluidInstance + ): Triple { + TODO("Not yet implemented") } + + override fun getSerializer(): RecipeSerializer = RagiumRecipeSerializers.REACTING + + override fun getType(): RecipeType = RagiumRecipeTypes.REACTING } diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeLookups.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeLookups.kt index 556283105..20eced881 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeLookups.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeLookups.kt @@ -79,7 +79,7 @@ data object RagiumRecipeLookups { val MIXING: HTRecipeLookup = create(RagiumRecipeTypes.MIXING) @JvmField - val REACTING: HTCompoundRecipeLookup = create(RagiumConstants.REACTING) + val REACTING: HTRecipeLookup = create(RagiumRecipeTypes.REACTING) @JvmField val WASHING: HTRecipeLookup = create(RagiumRecipeTypes.WASHING) diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeSerializers.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeSerializers.kt index 6e7fdccce..7438289a7 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeSerializers.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeSerializers.kt @@ -96,8 +96,8 @@ data object RagiumRecipeSerializers { register(RagiumConstants.MIXING, RTMixingRecipe.SERIALIZER) @JvmField - val REACTING: RecipeSerializer = - register(RagiumConstants.REACTING, RTReactingRecipe.Basic.SERIALIZER) + val REACTING: RecipeSerializer = + register(RagiumConstants.REACTING, RTReactingRecipe.SERIALIZER) @JvmField val WASHING: RecipeSerializer = diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeTypes.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeTypes.kt index 7d604f07c..57057236e 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeTypes.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeTypes.kt @@ -80,7 +80,7 @@ data object RagiumRecipeTypes { val MIXING: RecipeType = create(RagiumConstants.MIXING) @JvmField - val REACTING: RecipeType = create(RagiumConstants.REACTING) + val REACTING: RecipeType = create(RagiumConstants.REACTING) @JvmField val WASHING: RecipeType = create(RagiumConstants.WASHING) diff --git a/src/main/kotlin/hiiragi283/ragium/common/RagiumCommon.kt b/src/main/kotlin/hiiragi283/ragium/common/RagiumCommon.kt index 2859bec48..f549d4375 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/RagiumCommon.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/RagiumCommon.kt @@ -130,7 +130,6 @@ internal data object RagiumCommon { RagiumRecipeLookups.BATHING.fromRecipeType(RagiumRecipeTypes.BATHING, identity()) RagiumRecipeLookups.CENTRIFUGING.fromRecipeType(RagiumRecipeTypes.CENTRIFUGING, identity()) - RagiumRecipeLookups.REACTING.fromRecipeType(RagiumRecipeTypes.REACTING, identity()) RagiumRecipeLookups.BREWING.fromRecipeType(RagiumRecipeTypes.BREWING, identity()) RagiumRecipeLookups.PLANTING.fromRecipeType(RagiumRecipeTypes.PLANTING, identity()) From 0e46f8184d790cf9782429edcf4fa1a88250e2f9 Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Tue, 6 Oct 2026 21:23:36 +0900 Subject: [PATCH 02/25] =?UTF-8?q?feat:=20=E6=9F=93=E8=89=B2=E3=83=AC?= =?UTF-8?q?=E3=82=B7=E3=83=94=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hiiragi283/ragium/data/RagiumDataGen.kt | 2 + .../recipe/RagiumColoringRecipeProvider.kt | 135 +++++++++++++++++ .../data/recipe/RagiumCommonRecipeProvider.kt | 138 ++---------------- .../ragium/data/tag/RagiumItemTagsProvider.kt | 5 + .../data/c/tags/item/dyed/black.json | 5 + .../resources/data/c/tags/item/dyed/blue.json | 5 + .../data/c/tags/item/dyed/brown.json | 5 + .../resources/data/c/tags/item/dyed/cyan.json | 5 + .../resources/data/c/tags/item/dyed/gray.json | 5 + .../data/c/tags/item/dyed/green.json | 5 + .../data/c/tags/item/dyed/light_blue.json | 5 + .../data/c/tags/item/dyed/light_gray.json | 5 + .../resources/data/c/tags/item/dyed/lime.json | 5 + .../data/c/tags/item/dyed/magenta.json | 5 + .../data/c/tags/item/dyed/orange.json | 5 + .../resources/data/c/tags/item/dyed/pink.json | 5 + .../data/c/tags/item/dyed/purple.json | 5 + .../resources/data/c/tags/item/dyed/red.json | 5 + .../data/c/tags/item/dyed/white.json | 5 + .../data/c/tags/item/dyed/yellow.json | 5 + .../ragium/recipe/bathing/black/banner.json | 22 +++ .../data/ragium/recipe/bathing/black/bed.json | 22 +++ .../ragium/recipe/bathing/black/harness.json | 22 +++ .../recipe/bathing/black/shulker_box.json | 22 +++ .../ragium/recipe/bathing/black/wool.json | 22 +++ .../recipe/bathing/black/wool_carpet.json | 22 +++ .../recipe/bathing/black_dye_from_carbon.json | 16 -- .../bathing/bleaching/white_banner.json | 20 --- .../recipe/bathing/bleaching/white_bed.json | 20 --- .../bathing/bleaching/white_carpet.json | 20 --- .../bathing/bleaching/white_harness.json | 20 --- .../bathing/bleaching/white_shulker_box.json | 20 --- .../recipe/bathing/bleaching/white_wool.json | 20 --- .../ragium/recipe/bathing/blue/banner.json | 22 +++ .../data/ragium/recipe/bathing/blue/bed.json | 22 +++ .../ragium/recipe/bathing/blue/harness.json | 22 +++ .../recipe/bathing/blue/shulker_box.json | 22 +++ .../data/ragium/recipe/bathing/blue/wool.json | 22 +++ .../recipe/bathing/blue/wool_carpet.json | 22 +++ .../recipe/bathing/blue_dye_from_lapis.json | 16 -- .../ragium/recipe/bathing/brown/banner.json | 22 +++ .../data/ragium/recipe/bathing/brown/bed.json | 22 +++ .../ragium/recipe/bathing/brown/harness.json | 22 +++ .../recipe/bathing/brown/shulker_box.json | 22 +++ .../ragium/recipe/bathing/brown/wool.json | 22 +++ .../recipe/bathing/brown/wool_carpet.json | 22 +++ .../bathing/brown_dye_from_bauxite.json | 16 -- .../ragium/recipe/bathing/cyan/banner.json | 22 +++ .../data/ragium/recipe/bathing/cyan/bed.json | 22 +++ .../ragium/recipe/bathing/cyan/harness.json | 22 +++ .../recipe/bathing/cyan/shulker_box.json | 22 +++ .../data/ragium/recipe/bathing/cyan/wool.json | 22 +++ .../recipe/bathing/cyan/wool_carpet.json | 22 +++ .../ragium/recipe/bathing/gray/banner.json | 22 +++ .../data/ragium/recipe/bathing/gray/bed.json | 22 +++ .../ragium/recipe/bathing/gray/harness.json | 22 +++ .../recipe/bathing/gray/shulker_box.json | 22 +++ .../data/ragium/recipe/bathing/gray/wool.json | 22 +++ .../recipe/bathing/gray/wool_carpet.json | 22 +++ .../ragium/recipe/bathing/green/banner.json | 22 +++ .../data/ragium/recipe/bathing/green/bed.json | 22 +++ .../ragium/recipe/bathing/green/harness.json | 22 +++ .../recipe/bathing/green/shulker_box.json | 22 +++ .../ragium/recipe/bathing/green/wool.json | 22 +++ .../recipe/bathing/green/wool_carpet.json | 22 +++ .../recipe/bathing/light_blue/banner.json | 22 +++ .../ragium/recipe/bathing/light_blue/bed.json | 22 +++ .../recipe/bathing/light_blue/harness.json | 22 +++ .../bathing/light_blue/shulker_box.json | 22 +++ .../recipe/bathing/light_blue/wool.json | 22 +++ .../bathing/light_blue/wool_carpet.json | 22 +++ .../recipe/bathing/light_gray/banner.json | 22 +++ .../ragium/recipe/bathing/light_gray/bed.json | 22 +++ .../recipe/bathing/light_gray/harness.json | 22 +++ .../bathing/light_gray/shulker_box.json | 22 +++ .../recipe/bathing/light_gray/wool.json | 22 +++ .../bathing/light_gray/wool_carpet.json | 22 +++ .../ragium/recipe/bathing/lime/banner.json | 22 +++ .../data/ragium/recipe/bathing/lime/bed.json | 22 +++ .../ragium/recipe/bathing/lime/harness.json | 22 +++ .../recipe/bathing/lime/shulker_box.json | 22 +++ .../data/ragium/recipe/bathing/lime/wool.json | 22 +++ .../recipe/bathing/lime/wool_carpet.json | 22 +++ .../ragium/recipe/bathing/magenta/banner.json | 22 +++ .../ragium/recipe/bathing/magenta/bed.json | 22 +++ .../recipe/bathing/magenta/harness.json | 22 +++ .../recipe/bathing/magenta/shulker_box.json | 22 +++ .../ragium/recipe/bathing/magenta/wool.json | 22 +++ .../recipe/bathing/magenta/wool_carpet.json | 22 +++ .../ragium/recipe/bathing/orange/banner.json | 22 +++ .../ragium/recipe/bathing/orange/bed.json | 22 +++ .../ragium/recipe/bathing/orange/harness.json | 22 +++ .../recipe/bathing/orange/shulker_box.json | 22 +++ .../ragium/recipe/bathing/orange/wool.json | 22 +++ .../recipe/bathing/orange/wool_carpet.json | 22 +++ .../ragium/recipe/bathing/pink/banner.json | 22 +++ .../data/ragium/recipe/bathing/pink/bed.json | 22 +++ .../ragium/recipe/bathing/pink/harness.json | 22 +++ .../recipe/bathing/pink/shulker_box.json | 22 +++ .../data/ragium/recipe/bathing/pink/wool.json | 22 +++ .../recipe/bathing/pink/wool_carpet.json | 22 +++ .../ragium/recipe/bathing/purple/banner.json | 22 +++ .../ragium/recipe/bathing/purple/bed.json | 22 +++ .../ragium/recipe/bathing/purple/harness.json | 22 +++ .../recipe/bathing/purple/shulker_box.json | 22 +++ .../ragium/recipe/bathing/purple/wool.json | 22 +++ .../recipe/bathing/purple/wool_carpet.json | 22 +++ .../ragium/recipe/bathing/red/banner.json | 22 +++ .../data/ragium/recipe/bathing/red/bed.json | 22 +++ .../ragium/recipe/bathing/red/harness.json | 22 +++ .../recipe/bathing/red/shulker_box.json | 22 +++ .../data/ragium/recipe/bathing/red/wool.json | 22 +++ .../recipe/bathing/red/wool_carpet.json | 22 +++ .../ragium/recipe/bathing/white/banner.json | 30 ++++ .../data/ragium/recipe/bathing/white/bed.json | 30 ++++ .../ragium/recipe/bathing/white/harness.json | 30 ++++ .../recipe/bathing/white/shulker_box.json | 30 ++++ .../ragium/recipe/bathing/white/wool.json | 30 ++++ .../recipe/bathing/white/wool_carpet.json | 30 ++++ .../ragium/recipe/bathing/yellow/banner.json | 22 +++ .../ragium/recipe/bathing/yellow/bed.json | 22 +++ .../ragium/recipe/bathing/yellow/harness.json | 22 +++ .../recipe/bathing/yellow/shulker_box.json | 22 +++ .../ragium/recipe/bathing/yellow/wool.json | 22 +++ .../recipe/bathing/yellow/wool_carpet.json | 22 +++ .../black.json} | 0 .../blue.json} | 0 .../brown.json} | 0 .../cyan.json} | 0 .../gray.json} | 0 .../green.json} | 0 .../light_blue.json} | 0 .../light_gray.json} | 0 .../lime.json} | 0 .../magenta.json} | 0 .../orange.json} | 0 .../pink.json} | 0 .../purple.json} | 0 .../red.json} | 0 .../white.json} | 0 .../yellow.json} | 0 .../concrete.json} | 0 .../{black_dye.json => black/liquid_dye.json} | 0 .../concrete.json} | 0 .../{blue_dye.json => blue/liquid_dye.json} | 0 .../concrete.json} | 0 .../{brown_dye.json => brown/liquid_dye.json} | 0 .../concrete.json} | 0 .../{cyan_dye.json => cyan/liquid_dye.json} | 0 .../concrete.json} | 0 .../{gray_dye.json => gray/liquid_dye.json} | 0 .../concrete.json} | 0 .../{green_dye.json => green/liquid_dye.json} | 0 .../concrete.json} | 0 .../liquid_dye.json} | 0 .../concrete.json} | 0 .../liquid_dye.json} | 0 .../concrete.json} | 0 .../{lime_dye.json => lime/liquid_dye.json} | 0 .../concrete.json} | 0 .../liquid_dye.json} | 0 .../concrete.json} | 0 .../liquid_dye.json} | 0 .../concrete.json} | 0 .../{pink_dye.json => pink/liquid_dye.json} | 0 .../concrete.json} | 0 .../liquid_dye.json} | 0 .../{red_concrete.json => red/concrete.json} | 0 .../{red_dye.json => red/liquid_dye.json} | 0 .../concrete.json} | 0 .../{white_dye.json => white/liquid_dye.json} | 0 .../concrete.json} | 0 .../liquid_dye.json} | 0 .../recipe/reacting/hydrochloric_acid.json | 18 ++- .../recipe/reacting/hydrofluoric_acid.json | 18 ++- .../recipe/reacting/hydrogen_chloride.json | 18 ++- .../recipe/reacting/liquid_explosive.json | 18 ++- .../recipe/reacting/molten_plastic.json | 18 ++- .../recipe/reacting/sulfur_trioxide.json | 18 ++- .../ragium/recipe/reacting/sulfuric_acid.json | 18 ++- .../recipe/reacting/synthetic_resin.json | 18 ++- 181 files changed, 2478 insertions(+), 354 deletions(-) create mode 100644 src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumColoringRecipeProvider.kt create mode 100644 src/generated/resources/data/c/tags/item/dyed/black.json create mode 100644 src/generated/resources/data/c/tags/item/dyed/blue.json create mode 100644 src/generated/resources/data/c/tags/item/dyed/brown.json create mode 100644 src/generated/resources/data/c/tags/item/dyed/cyan.json create mode 100644 src/generated/resources/data/c/tags/item/dyed/gray.json create mode 100644 src/generated/resources/data/c/tags/item/dyed/green.json create mode 100644 src/generated/resources/data/c/tags/item/dyed/light_blue.json create mode 100644 src/generated/resources/data/c/tags/item/dyed/light_gray.json create mode 100644 src/generated/resources/data/c/tags/item/dyed/lime.json create mode 100644 src/generated/resources/data/c/tags/item/dyed/magenta.json create mode 100644 src/generated/resources/data/c/tags/item/dyed/orange.json create mode 100644 src/generated/resources/data/c/tags/item/dyed/pink.json create mode 100644 src/generated/resources/data/c/tags/item/dyed/purple.json create mode 100644 src/generated/resources/data/c/tags/item/dyed/red.json create mode 100644 src/generated/resources/data/c/tags/item/dyed/white.json create mode 100644 src/generated/resources/data/c/tags/item/dyed/yellow.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/black/banner.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/black/bed.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/black/harness.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/black/shulker_box.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/black/wool.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/black/wool_carpet.json delete mode 100644 src/generated/resources/data/ragium/recipe/bathing/black_dye_from_carbon.json delete mode 100644 src/generated/resources/data/ragium/recipe/bathing/bleaching/white_banner.json delete mode 100644 src/generated/resources/data/ragium/recipe/bathing/bleaching/white_bed.json delete mode 100644 src/generated/resources/data/ragium/recipe/bathing/bleaching/white_carpet.json delete mode 100644 src/generated/resources/data/ragium/recipe/bathing/bleaching/white_harness.json delete mode 100644 src/generated/resources/data/ragium/recipe/bathing/bleaching/white_shulker_box.json delete mode 100644 src/generated/resources/data/ragium/recipe/bathing/bleaching/white_wool.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/blue/banner.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/blue/bed.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/blue/harness.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/blue/shulker_box.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/blue/wool.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/blue/wool_carpet.json delete mode 100644 src/generated/resources/data/ragium/recipe/bathing/blue_dye_from_lapis.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/brown/banner.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/brown/bed.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/brown/harness.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/brown/shulker_box.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/brown/wool.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/brown/wool_carpet.json delete mode 100644 src/generated/resources/data/ragium/recipe/bathing/brown_dye_from_bauxite.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/cyan/banner.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/cyan/bed.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/cyan/harness.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/cyan/shulker_box.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/cyan/wool.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/cyan/wool_carpet.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/gray/banner.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/gray/bed.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/gray/harness.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/gray/shulker_box.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/gray/wool.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/gray/wool_carpet.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/green/banner.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/green/bed.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/green/harness.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/green/shulker_box.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/green/wool.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/green/wool_carpet.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/light_blue/banner.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/light_blue/bed.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/light_blue/harness.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/light_blue/shulker_box.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/light_blue/wool.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/light_blue/wool_carpet.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/light_gray/banner.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/light_gray/bed.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/light_gray/harness.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/light_gray/shulker_box.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/light_gray/wool.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/light_gray/wool_carpet.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/lime/banner.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/lime/bed.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/lime/harness.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/lime/shulker_box.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/lime/wool.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/lime/wool_carpet.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/magenta/banner.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/magenta/bed.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/magenta/harness.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/magenta/shulker_box.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/magenta/wool.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/magenta/wool_carpet.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/orange/banner.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/orange/bed.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/orange/harness.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/orange/shulker_box.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/orange/wool.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/orange/wool_carpet.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/pink/banner.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/pink/bed.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/pink/harness.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/pink/shulker_box.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/pink/wool.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/pink/wool_carpet.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/purple/banner.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/purple/bed.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/purple/harness.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/purple/shulker_box.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/purple/wool.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/purple/wool_carpet.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/red/banner.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/red/bed.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/red/harness.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/red/shulker_box.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/red/wool.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/red/wool_carpet.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/white/banner.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/white/bed.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/white/harness.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/white/shulker_box.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/white/wool.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/white/wool_carpet.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/yellow/banner.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/yellow/bed.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/yellow/harness.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/yellow/shulker_box.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/yellow/wool.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/yellow/wool_carpet.json rename src/generated/resources/data/ragium/recipe/freezing/{black_dye_from_liquid_dye.json => dye/black.json} (100%) rename src/generated/resources/data/ragium/recipe/freezing/{blue_dye_from_liquid_dye.json => dye/blue.json} (100%) rename src/generated/resources/data/ragium/recipe/freezing/{brown_dye_from_liquid_dye.json => dye/brown.json} (100%) rename src/generated/resources/data/ragium/recipe/freezing/{cyan_dye_from_liquid_dye.json => dye/cyan.json} (100%) rename src/generated/resources/data/ragium/recipe/freezing/{gray_dye_from_liquid_dye.json => dye/gray.json} (100%) rename src/generated/resources/data/ragium/recipe/freezing/{green_dye_from_liquid_dye.json => dye/green.json} (100%) rename src/generated/resources/data/ragium/recipe/freezing/{light_blue_dye_from_liquid_dye.json => dye/light_blue.json} (100%) rename src/generated/resources/data/ragium/recipe/freezing/{light_gray_dye_from_liquid_dye.json => dye/light_gray.json} (100%) rename src/generated/resources/data/ragium/recipe/freezing/{lime_dye_from_liquid_dye.json => dye/lime.json} (100%) rename src/generated/resources/data/ragium/recipe/freezing/{magenta_dye_from_liquid_dye.json => dye/magenta.json} (100%) rename src/generated/resources/data/ragium/recipe/freezing/{orange_dye_from_liquid_dye.json => dye/orange.json} (100%) rename src/generated/resources/data/ragium/recipe/freezing/{pink_dye_from_liquid_dye.json => dye/pink.json} (100%) rename src/generated/resources/data/ragium/recipe/freezing/{purple_dye_from_liquid_dye.json => dye/purple.json} (100%) rename src/generated/resources/data/ragium/recipe/freezing/{red_dye_from_liquid_dye.json => dye/red.json} (100%) rename src/generated/resources/data/ragium/recipe/freezing/{white_dye_from_liquid_dye.json => dye/white.json} (100%) rename src/generated/resources/data/ragium/recipe/freezing/{yellow_dye_from_liquid_dye.json => dye/yellow.json} (100%) rename src/generated/resources/data/ragium/recipe/mixing/{black_concrete.json => black/concrete.json} (100%) rename src/generated/resources/data/ragium/recipe/mixing/{black_dye.json => black/liquid_dye.json} (100%) rename src/generated/resources/data/ragium/recipe/mixing/{blue_concrete.json => blue/concrete.json} (100%) rename src/generated/resources/data/ragium/recipe/mixing/{blue_dye.json => blue/liquid_dye.json} (100%) rename src/generated/resources/data/ragium/recipe/mixing/{brown_concrete.json => brown/concrete.json} (100%) rename src/generated/resources/data/ragium/recipe/mixing/{brown_dye.json => brown/liquid_dye.json} (100%) rename src/generated/resources/data/ragium/recipe/mixing/{cyan_concrete.json => cyan/concrete.json} (100%) rename src/generated/resources/data/ragium/recipe/mixing/{cyan_dye.json => cyan/liquid_dye.json} (100%) rename src/generated/resources/data/ragium/recipe/mixing/{gray_concrete.json => gray/concrete.json} (100%) rename src/generated/resources/data/ragium/recipe/mixing/{gray_dye.json => gray/liquid_dye.json} (100%) rename src/generated/resources/data/ragium/recipe/mixing/{green_concrete.json => green/concrete.json} (100%) rename src/generated/resources/data/ragium/recipe/mixing/{green_dye.json => green/liquid_dye.json} (100%) rename src/generated/resources/data/ragium/recipe/mixing/{light_blue_concrete.json => light_blue/concrete.json} (100%) rename src/generated/resources/data/ragium/recipe/mixing/{light_blue_dye.json => light_blue/liquid_dye.json} (100%) rename src/generated/resources/data/ragium/recipe/mixing/{light_gray_concrete.json => light_gray/concrete.json} (100%) rename src/generated/resources/data/ragium/recipe/mixing/{light_gray_dye.json => light_gray/liquid_dye.json} (100%) rename src/generated/resources/data/ragium/recipe/mixing/{lime_concrete.json => lime/concrete.json} (100%) rename src/generated/resources/data/ragium/recipe/mixing/{lime_dye.json => lime/liquid_dye.json} (100%) rename src/generated/resources/data/ragium/recipe/mixing/{magenta_concrete.json => magenta/concrete.json} (100%) rename src/generated/resources/data/ragium/recipe/mixing/{magenta_dye.json => magenta/liquid_dye.json} (100%) rename src/generated/resources/data/ragium/recipe/mixing/{orange_concrete.json => orange/concrete.json} (100%) rename src/generated/resources/data/ragium/recipe/mixing/{orange_dye.json => orange/liquid_dye.json} (100%) rename src/generated/resources/data/ragium/recipe/mixing/{pink_concrete.json => pink/concrete.json} (100%) rename src/generated/resources/data/ragium/recipe/mixing/{pink_dye.json => pink/liquid_dye.json} (100%) rename src/generated/resources/data/ragium/recipe/mixing/{purple_concrete.json => purple/concrete.json} (100%) rename src/generated/resources/data/ragium/recipe/mixing/{purple_dye.json => purple/liquid_dye.json} (100%) rename src/generated/resources/data/ragium/recipe/mixing/{red_concrete.json => red/concrete.json} (100%) rename src/generated/resources/data/ragium/recipe/mixing/{red_dye.json => red/liquid_dye.json} (100%) rename src/generated/resources/data/ragium/recipe/mixing/{white_concrete.json => white/concrete.json} (100%) rename src/generated/resources/data/ragium/recipe/mixing/{white_dye.json => white/liquid_dye.json} (100%) rename src/generated/resources/data/ragium/recipe/mixing/{yellow_concrete.json => yellow/concrete.json} (100%) rename src/generated/resources/data/ragium/recipe/mixing/{yellow_dye.json => yellow/liquid_dye.json} (100%) diff --git a/src/data/kotlin/hiiragi283/ragium/data/RagiumDataGen.kt b/src/data/kotlin/hiiragi283/ragium/data/RagiumDataGen.kt index 410cca932..e1864709b 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/RagiumDataGen.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/RagiumDataGen.kt @@ -15,6 +15,7 @@ import hiiragi283.ragium.data.model.RagiumModelProvider import hiiragi283.ragium.data.recipe.RagiumArcaneRecipeProvider import hiiragi283.ragium.data.recipe.RagiumBioRecipeProvider import hiiragi283.ragium.data.recipe.RagiumChemicalRecipeProvider +import hiiragi283.ragium.data.recipe.RagiumColoringRecipeProvider import hiiragi283.ragium.data.recipe.RagiumCommonRecipeProvider import hiiragi283.ragium.data.recipe.RagiumElectronicsRecipeProvider import hiiragi283.ragium.data.recipe.RagiumHeatRecipeProvider @@ -59,6 +60,7 @@ data object RagiumDataGen { event.createProvider(::RagiumVanillaRecipeProvider) event.createProvider(::RagiumCommonRecipeProvider) + event.createProvider(::RagiumColoringRecipeProvider) event.createProvider(::RagiumMechanicalRecipeProvider) event.createProvider(::RagiumHeatRecipeProvider) diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumColoringRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumColoringRecipeProvider.kt new file mode 100644 index 000000000..6cf180403 --- /dev/null +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumColoringRecipeProvider.kt @@ -0,0 +1,135 @@ +package hiiragi283.ragium.data.recipe + +import hiiragi283.lib.color.HTColoredCollection +import hiiragi283.lib.color.VanillaColoredCollections +import hiiragi283.lib.data.recipe.HTRecipeProvider +import hiiragi283.lib.registry.HTFluidContent +import hiiragi283.ragium.api.RagiumAPI +import hiiragi283.ragium.api.data.recipe.builder.RagiumRecipeBuilders +import hiiragi283.ragium.common.fluid.RagiumFluids +import hiiragi283.ragium.common.item.RagiumItems +import net.minecraft.core.HolderLookup +import net.minecraft.core.HolderSet +import net.minecraft.core.registries.Registries +import net.minecraft.data.PackOutput +import net.minecraft.tags.ItemTags +import net.minecraft.tags.TagKey +import net.minecraft.util.StringRepresentable +import net.minecraft.world.item.DyeColor +import net.minecraft.world.item.Item +import net.minecraft.world.level.ItemLike +import net.neoforged.neoforge.common.Tags +import net.neoforged.neoforge.registries.holdersets.AndHolderSet +import net.neoforged.neoforge.registries.holdersets.NotHolderSet +import java.util.concurrent.CompletableFuture + +class RagiumColoringRecipeProvider(packOutput: PackOutput, future: CompletableFuture) : + HTRecipeProvider(packOutput, future, RagiumAPI.MOD_ID) { + override fun exportValues() { + for (color: DyeColor in DyeColor.entries) { + val name: String = color.serializedName + val dyeContent: HTFluidContent = RagiumFluids.DYES[color] + // Water + Solid Dye -> Liquid Dye + RagiumRecipeBuilders.mixing { + itemIngredient { +holderSet(color.tag) } + fluidIngredient { + +waterSet() + amount /= 4 + } + fluidResult { + +dyeContent + amount /= 4 + } + time /= 2 + recipeId replace id("$name/liquid_dye") + }.save(exporter) + // Liquid Dye -> Solid Dye + RagiumRecipeBuilders.freezing { + ingredient { + +holderSet(dyeContent) + amount /= 4 + } + catalyst { items { +RagiumItems.BALL_MOLD } } + result { +VanillaColoredCollections.DYE[color] } + time /= 4 + recipeId replace id("dye/$name") + }.save(exporter) + // Sand + Gravel + Liquid Dye -> XX Concrete + RagiumRecipeBuilders.mixing { + itemIngredient { +holderSet(Tags.Items.SANDS) } + itemIngredient { +holderSet(Tags.Items.GRAVELS) } + fluidIngredient { + +holderSet(dyeContent) + amount /= 4 + } + itemResult { + +VanillaColoredCollections.CONCRETE[color] + count = 2 + } + time /= 2 + recipeId replace id("$name/concrete") + }.save(exporter) + + // Coloring + if (color == DyeColor.WHITE) continue + for (contents: ColoredContents in ColoredContents.entries) { + RagiumRecipeBuilders.bathing { + itemIngredient { +contents.onlyWhites() } + fluidIngredient { + +holderSet(dyeContent) + amount /= 8 + } + result { +contents.items[color].asItem() } + time /= 4 + recipeId replace id("$name/${contents.serializedName}") + }.save(exporter) + } + } + + // Bleaching + for (contents: ColoredContents in ColoredContents.entries) { + RagiumRecipeBuilders.bathing { + itemIngredient { +contents.excludeWhites() } + fluidIngredient { + +holderSet(RagiumFluids.BLEACH) + amount /= 8 + } + result { +contents.white.asItem() } + recipeId replace id("white/${contents.serializedName}") + }.save(exporter) + } + } + + override fun getName(): String = "Coloring Recipes" + + enum class ColoredContents(val allTag: TagKey, val items: HTColoredCollection) : + StringRepresentable { + BANNER(ItemTags.BANNERS, VanillaColoredCollections.BANNER), + BED(ItemTags.BEDS, VanillaColoredCollections.BED), + HARNESS(ItemTags.HARNESSES, VanillaColoredCollections.HARNESS), + SHULKER_BOX(ItemTags.SHULKER_BOXES, VanillaColoredCollections.SHULKER_BOX), + WOOL(ItemTags.WOOL, VanillaColoredCollections.WOOL), + WOOL_CARPET(ItemTags.WOOL_CARPETS, VanillaColoredCollections.CARPET) + ; + + val white: ItemLike get() = items[DyeColor.WHITE] + + override fun getSerializedName(): String = name.lowercase() + } + + /** + * 白色のアイテムのみを判定します。 + */ + fun ColoredContents.onlyWhites(): HolderSet = AndHolderSet( + holderSet(this.allTag), + holderSet(Tags.Items.DYED_WHITE) + ) + + /** + * 白色以外のアイテムを判定します。 + */ + fun ColoredContents.excludeWhites(): HolderSet = AndHolderSet( + holderSet(this.allTag), + NotHolderSet(registries.lookupOrThrow(Registries.ITEM), holderSet(Tags.Items.DYED_WHITE)) + ) +} diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt index cd6cf6785..27e09845a 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt @@ -3,14 +3,12 @@ package hiiragi283.ragium.data.recipe import hiiragi283.lib.collection.buildTable import hiiragi283.lib.collection.forEach import hiiragi283.lib.collection.nelOf -import hiiragi283.lib.color.VanillaColoredCollections import hiiragi283.lib.data.recipe.HTRecipeProvider import hiiragi283.lib.data.recipe.builder.VanillaRecipeBuilders import hiiragi283.lib.data.recipe.builder.ingredient import hiiragi283.lib.data.recipe.builder.result import hiiragi283.lib.recipe.ingredient.HTFluidIngredient import hiiragi283.lib.recipe.ingredient.HTMaterialTagsIngredient -import hiiragi283.lib.registry.HTFluidContent import hiiragi283.lib.registry.HTSimpleDeferredItem import hiiragi283.lib.tag.CommonTagPrefixes import hiiragi283.lib.tag.HTCommonTags @@ -27,13 +25,9 @@ import hiiragi283.ragium.common.item.RagiumItems import net.minecraft.core.HolderLookup import net.minecraft.data.PackOutput import net.minecraft.tags.ItemTags -import net.minecraft.tags.TagKey -import net.minecraft.world.item.DyeColor import net.minecraft.world.item.Item import net.minecraft.world.item.Items -import net.minecraft.world.item.crafting.Ingredient import net.neoforged.neoforge.common.Tags -import net.neoforged.neoforge.common.crafting.DifferenceIngredient import net.neoforged.neoforge.fluids.crafting.FluidIngredient import java.util.concurrent.CompletableFuture @@ -355,11 +349,11 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu private fun plastic() { // Naphtha + O2 -> Molten Plastic RagiumRecipeBuilders.reacting { - primaryIngredient { + ingredient { +holderSet(RagiumFluids.NAPHTHA) amount /= 2 } - secondaryIngredient { + ingredient { +holderSet(RagiumFluids.OXYGEN) amount /= 4 } @@ -406,8 +400,8 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu }.save(exporter) // Aromatic Compound + Aldehyde -> Synthetic Resin RagiumRecipeBuilders.reacting { - primaryIngredient { +holderSet(RagiumFluids.AROMATIC_COMPOUND) } - secondaryIngredient { +holderSet(RagiumTags.Fluids.ALDEHYDES) } + ingredient { +holderSet(RagiumFluids.AROMATIC_COMPOUND) } + ingredient { +holderSet(RagiumTags.Fluids.ALDEHYDES) } fluidResult { +RagiumFluids.SYNTHETIC_RESIN amount *= 2 @@ -429,8 +423,6 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu // Chemical // private fun chemical() { - colored() - nitrogen() explosive() fluorine() @@ -444,81 +436,6 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu calcium() } - private fun colored() { - for (color: DyeColor in DyeColor.entries) { - val dyeContent: HTFluidContent = RagiumFluids.DYES[color] - // Water + Solid Dye -> Liquid Dye - RagiumRecipeBuilders.mixing { - itemIngredient { +holderSet(color.tag) } - fluidIngredient { - +waterSet() - amount /= 4 - } - fluidResult { - +dyeContent - amount /= 4 - } - time /= 2 - }.save(exporter) - // Liquid Dye -> Solid Dye - RagiumRecipeBuilders.freezing { - ingredient { - +holderSet(dyeContent) - amount /= 4 - } - catalyst { items { +RagiumItems.BALL_MOLD } } - result { +VanillaColoredCollections.DYE[color] } - time /= 4 - recipeId suffix "_from_liquid_dye" - }.save(exporter) - // Sand + Gravel + Liquid Dye -> XX Concrete - RagiumRecipeBuilders.mixing { - itemIngredient { +holderSet(Tags.Items.SANDS) } - itemIngredient { +holderSet(Tags.Items.GRAVELS) } - fluidIngredient { - +holderSet(dyeContent) - amount /= 4 - } - itemResult { - +VanillaColoredCollections.CONCRETE[color] - count = 2 - } - time /= 2 - }.save(exporter) - } - - // Lapis + Resin -> Blue Dye - RagiumRecipeBuilders.bathing { - itemIngredient { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Gem.LAPIS) } - fluidIngredient { - +holderSet(RagiumTags.Fluids.RESINS) - amount /= 4 - } - result { +Items.BLUE_DYE } - recipeId suffix "_from_lapis" - }.save(exporter) - // Bauxite + Resin -> Blue Dye - RagiumRecipeBuilders.bathing { - itemIngredient { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Mineral.BAUXITE) } - fluidIngredient { - +holderSet(RagiumTags.Fluids.RESINS) - amount /= 4 - } - result { +Items.BROWN_DYE } - recipeId suffix "_from_bauxite" - }.save(exporter) - // Carbon + Resin -> Black Dye - RagiumRecipeBuilders.bathing { - itemIngredient { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Chemicals.CARBON) } - fluidIngredient { - +holderSet(RagiumTags.Fluids.RESINS) - amount /= 4 - } - result { +Items.BLACK_DYE } - recipeId suffix "_from_carbon" - }.save(exporter) - } - private fun nitrogen() { // 1/2 H2SO4 + KNO3 -> HNO3 RagiumRecipeBuilders.mixing { @@ -535,8 +452,8 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu private fun explosive() { // Aromatic Compound + HNO3 -> Liquid Explosive RagiumRecipeBuilders.reacting { - primaryIngredient { +holderSet(RagiumFluids.AROMATIC_COMPOUND) } - secondaryIngredient { +holderSet(RagiumFluids.NITRIC_ACID) } + ingredient { +holderSet(RagiumFluids.AROMATIC_COMPOUND) } + ingredient { +holderSet(RagiumFluids.NITRIC_ACID) } fluidResult { +RagiumFluids.LIQUID_EXPLOSIVE } }.save(exporter) @@ -567,8 +484,8 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu }.save(exporter) // HF + H2O -> HF(aq) RagiumRecipeBuilders.reacting { - primaryIngredient { +holderSet(RagiumFluids.HYDROGEN_FLUORIDE) } - secondaryIngredient { +waterSet() } + ingredient { +holderSet(RagiumFluids.HYDROGEN_FLUORIDE) } + ingredient { +waterSet() } fluidResult { +RagiumFluids.HYDROFLUORIC_ACID } }.save(exporter) } @@ -773,8 +690,8 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu }.save(exporter) // SO2 + 1/2 O2 -> SO3 RagiumRecipeBuilders.reacting { - primaryIngredient { +holderSet(RagiumFluids.SULFUR_DIOXIDE) } - secondaryIngredient { + ingredient { +holderSet(RagiumFluids.SULFUR_DIOXIDE) } + ingredient { +holderSet(RagiumFluids.OXYGEN) amount /= 2 } @@ -787,8 +704,8 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu }.save(exporter) // SO3 + H2O -> H2SO4 RagiumRecipeBuilders.reacting { - primaryIngredient { +holderSet(RagiumFluids.SULFUR_TRIOXIDE) } - secondaryIngredient { +waterSet() } + ingredient { +holderSet(RagiumFluids.SULFUR_TRIOXIDE) } + ingredient { +waterSet() } fluidResult { +RagiumFluids.SULFURIC_ACID } }.save(exporter) } @@ -829,8 +746,8 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu // H2 + Cl2 -> 2x HCl RagiumRecipeBuilders.reacting { - primaryIngredient { +holderSet(RagiumFluids.HYDROGEN) } - secondaryIngredient { +holderSet(RagiumFluids.CHLORINE) } + ingredient { +holderSet(RagiumFluids.HYDROGEN) } + ingredient { +holderSet(RagiumFluids.CHLORINE) } fluidResult { +RagiumFluids.HYDROGEN_CHLORIDE amount *= 2 @@ -838,35 +755,12 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu }.save(exporter) // HCl + H2O -> HCl(aq) RagiumRecipeBuilders.reacting { - primaryIngredient { +holderSet(RagiumFluids.HYDROGEN_CHLORIDE) } - secondaryIngredient { +waterSet() } + ingredient { +holderSet(RagiumFluids.HYDROGEN_CHLORIDE) } + ingredient { +waterSet() } fluidResult { +RagiumFluids.HYDROCHLORIC_ACID } }.save(exporter) // Cl2 + 2x NaOH(aq) -> 2x NaClO(aq) + H2 - - bleaching() - } - - private fun bleaching() { - setOf( - ItemTags.BANNERS to Items.WHITE_BANNER, - ItemTags.BEDS to Items.WHITE_BED, - ItemTags.HARNESSES to Items.WHITE_HARNESS, - ItemTags.SHULKER_BOXES to Items.WHITE_SHULKER_BOX, - ItemTags.WOOL to Items.WHITE_WOOL, - ItemTags.WOOL_CARPETS to Items.WHITE_CARPET - ).forEach { (input: TagKey, bleached: Item) -> - RagiumRecipeBuilders.bathing { - itemIngredient { +DifferenceIngredient.of(Ingredient.of(holderSet(input)), Ingredient.of(bleached)) } - fluidIngredient { - +holderSet(RagiumFluids.BLEACH) - amount /= 8 - } - result { +bleached } - recipeId prefix "bleaching/" - }.save(exporter) - } } private fun calcium() { diff --git a/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumItemTagsProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumItemTagsProvider.kt index 71f7ce1e6..f08ceb089 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumItemTagsProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumItemTagsProvider.kt @@ -1,6 +1,7 @@ package hiiragi283.ragium.data.tag import hiiragi283.lib.collection.forEach +import hiiragi283.lib.color.VanillaColoredCollections import hiiragi283.lib.data.tag.HTBlockItemTagsProvider import hiiragi283.lib.data.tag.HTItemTagsProvider import hiiragi283.lib.item.component.HTToolType @@ -21,6 +22,7 @@ import net.minecraft.core.HolderLookup import net.minecraft.data.PackOutput import net.minecraft.tags.ItemTags import net.minecraft.tags.TagKey +import net.minecraft.world.item.DyeColor import net.minecraft.world.item.Item import net.neoforged.neoforge.common.Tags import java.util.concurrent.CompletableFuture @@ -62,6 +64,9 @@ class RagiumItemTagsProvider(output: PackOutput, lookupProvider: CompletableFutu builder(Tags.Items.LEATHERS).add(RagiumItems.SYNTHETIC_LEATHER) builder(Tags.Items.STRINGS).add(RagiumItems.SYNTHETIC_FIBER) builder(Tags.Items.SLIME_BALLS).add(RagiumItems.STICKY_BALL) + for (color: DyeColor in DyeColor.entries) { + builder(color.dyedTag).add(VanillaColoredCollections.HARNESS[color]) + } builder(HTCommonTags.Items.COAL_COKE).add(RagiumItems.COAL_COKE) builder(HTCommonTags.Items.PAPER).add(vanillaId("paper")) diff --git a/src/generated/resources/data/c/tags/item/dyed/black.json b/src/generated/resources/data/c/tags/item/dyed/black.json new file mode 100644 index 000000000..b582b05d1 --- /dev/null +++ b/src/generated/resources/data/c/tags/item/dyed/black.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:black_harness" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/dyed/blue.json b/src/generated/resources/data/c/tags/item/dyed/blue.json new file mode 100644 index 000000000..f6e1500ac --- /dev/null +++ b/src/generated/resources/data/c/tags/item/dyed/blue.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:blue_harness" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/dyed/brown.json b/src/generated/resources/data/c/tags/item/dyed/brown.json new file mode 100644 index 000000000..15785a600 --- /dev/null +++ b/src/generated/resources/data/c/tags/item/dyed/brown.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:brown_harness" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/dyed/cyan.json b/src/generated/resources/data/c/tags/item/dyed/cyan.json new file mode 100644 index 000000000..aefdc5e78 --- /dev/null +++ b/src/generated/resources/data/c/tags/item/dyed/cyan.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:cyan_harness" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/dyed/gray.json b/src/generated/resources/data/c/tags/item/dyed/gray.json new file mode 100644 index 000000000..482e140c5 --- /dev/null +++ b/src/generated/resources/data/c/tags/item/dyed/gray.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:gray_harness" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/dyed/green.json b/src/generated/resources/data/c/tags/item/dyed/green.json new file mode 100644 index 000000000..e0ebc0923 --- /dev/null +++ b/src/generated/resources/data/c/tags/item/dyed/green.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:green_harness" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/dyed/light_blue.json b/src/generated/resources/data/c/tags/item/dyed/light_blue.json new file mode 100644 index 000000000..4567a2a29 --- /dev/null +++ b/src/generated/resources/data/c/tags/item/dyed/light_blue.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:light_blue_harness" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/dyed/light_gray.json b/src/generated/resources/data/c/tags/item/dyed/light_gray.json new file mode 100644 index 000000000..df1eee679 --- /dev/null +++ b/src/generated/resources/data/c/tags/item/dyed/light_gray.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:light_gray_harness" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/dyed/lime.json b/src/generated/resources/data/c/tags/item/dyed/lime.json new file mode 100644 index 000000000..771fce9f9 --- /dev/null +++ b/src/generated/resources/data/c/tags/item/dyed/lime.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:lime_harness" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/dyed/magenta.json b/src/generated/resources/data/c/tags/item/dyed/magenta.json new file mode 100644 index 000000000..24e1b9221 --- /dev/null +++ b/src/generated/resources/data/c/tags/item/dyed/magenta.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:magenta_harness" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/dyed/orange.json b/src/generated/resources/data/c/tags/item/dyed/orange.json new file mode 100644 index 000000000..8d6d01898 --- /dev/null +++ b/src/generated/resources/data/c/tags/item/dyed/orange.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:orange_harness" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/dyed/pink.json b/src/generated/resources/data/c/tags/item/dyed/pink.json new file mode 100644 index 000000000..0caeba5a1 --- /dev/null +++ b/src/generated/resources/data/c/tags/item/dyed/pink.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:pink_harness" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/dyed/purple.json b/src/generated/resources/data/c/tags/item/dyed/purple.json new file mode 100644 index 000000000..c5ad3a035 --- /dev/null +++ b/src/generated/resources/data/c/tags/item/dyed/purple.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:purple_harness" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/dyed/red.json b/src/generated/resources/data/c/tags/item/dyed/red.json new file mode 100644 index 000000000..3fc788280 --- /dev/null +++ b/src/generated/resources/data/c/tags/item/dyed/red.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:red_harness" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/dyed/white.json b/src/generated/resources/data/c/tags/item/dyed/white.json new file mode 100644 index 000000000..4e5070c66 --- /dev/null +++ b/src/generated/resources/data/c/tags/item/dyed/white.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:white_harness" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/dyed/yellow.json b/src/generated/resources/data/c/tags/item/dyed/yellow.json new file mode 100644 index 000000000..c93810edf --- /dev/null +++ b/src/generated/resources/data/c/tags/item/dyed/yellow.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:yellow_harness" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/black/banner.json b/src/generated/resources/data/ragium/recipe/bathing/black/banner.json new file mode 100644 index 000000000..f7c27db1d --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/black/banner.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/black" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:banners", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:black_banner" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/black/bed.json b/src/generated/resources/data/ragium/recipe/bathing/black/bed.json new file mode 100644 index 000000000..9743822bf --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/black/bed.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/black" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:beds", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:black_bed" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/black/harness.json b/src/generated/resources/data/ragium/recipe/bathing/black/harness.json new file mode 100644 index 000000000..4366c7122 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/black/harness.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/black" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:harnesses", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:black_harness" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/black/shulker_box.json b/src/generated/resources/data/ragium/recipe/bathing/black/shulker_box.json new file mode 100644 index 000000000..ed1a4d14f --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/black/shulker_box.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/black" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:shulker_boxes", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:black_shulker_box" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/black/wool.json b/src/generated/resources/data/ragium/recipe/bathing/black/wool.json new file mode 100644 index 000000000..80fb16b45 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/black/wool.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/black" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:wool", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:black_wool" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/black/wool_carpet.json b/src/generated/resources/data/ragium/recipe/bathing/black/wool_carpet.json new file mode 100644 index 000000000..62d36712c --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/black/wool_carpet.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/black" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:wool_carpets", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:black_carpet" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/black_dye_from_carbon.json b/src/generated/resources/data/ragium/recipe/bathing/black_dye_from_carbon.json deleted file mode 100644 index fe4d136f7..000000000 --- a/src/generated/resources/data/ragium/recipe/bathing/black_dye_from_carbon.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 250, - "fluids": "#ragium:resins" - }, - "item_ingredient": { - "count": 1, - "items": "#c:dusts/carbon" - }, - "result": { - "count": 1, - "id": "minecraft:black_dye" - }, - "time": 200 -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/bleaching/white_banner.json b/src/generated/resources/data/ragium/recipe/bathing/bleaching/white_banner.json deleted file mode 100644 index 879912fca..000000000 --- a/src/generated/resources/data/ragium/recipe/bathing/bleaching/white_banner.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:bleach" - }, - "item_ingredient": { - "count": 1, - "items": { - "neoforge:ingredient_type": "neoforge:difference", - "base": "#minecraft:banners", - "subtracted": "minecraft:white_banner" - } - }, - "result": { - "count": 1, - "id": "minecraft:white_banner" - }, - "time": 200 -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/bleaching/white_bed.json b/src/generated/resources/data/ragium/recipe/bathing/bleaching/white_bed.json deleted file mode 100644 index f43955ed3..000000000 --- a/src/generated/resources/data/ragium/recipe/bathing/bleaching/white_bed.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:bleach" - }, - "item_ingredient": { - "count": 1, - "items": { - "neoforge:ingredient_type": "neoforge:difference", - "base": "#minecraft:beds", - "subtracted": "minecraft:white_bed" - } - }, - "result": { - "count": 1, - "id": "minecraft:white_bed" - }, - "time": 200 -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/bleaching/white_carpet.json b/src/generated/resources/data/ragium/recipe/bathing/bleaching/white_carpet.json deleted file mode 100644 index 3ccbc19a1..000000000 --- a/src/generated/resources/data/ragium/recipe/bathing/bleaching/white_carpet.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:bleach" - }, - "item_ingredient": { - "count": 1, - "items": { - "neoforge:ingredient_type": "neoforge:difference", - "base": "#minecraft:wool_carpets", - "subtracted": "minecraft:white_carpet" - } - }, - "result": { - "count": 1, - "id": "minecraft:white_carpet" - }, - "time": 200 -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/bleaching/white_harness.json b/src/generated/resources/data/ragium/recipe/bathing/bleaching/white_harness.json deleted file mode 100644 index a059b200d..000000000 --- a/src/generated/resources/data/ragium/recipe/bathing/bleaching/white_harness.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:bleach" - }, - "item_ingredient": { - "count": 1, - "items": { - "neoforge:ingredient_type": "neoforge:difference", - "base": "#minecraft:harnesses", - "subtracted": "minecraft:white_harness" - } - }, - "result": { - "count": 1, - "id": "minecraft:white_harness" - }, - "time": 200 -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/bleaching/white_shulker_box.json b/src/generated/resources/data/ragium/recipe/bathing/bleaching/white_shulker_box.json deleted file mode 100644 index 4fe6d4823..000000000 --- a/src/generated/resources/data/ragium/recipe/bathing/bleaching/white_shulker_box.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:bleach" - }, - "item_ingredient": { - "count": 1, - "items": { - "neoforge:ingredient_type": "neoforge:difference", - "base": "#minecraft:shulker_boxes", - "subtracted": "minecraft:white_shulker_box" - } - }, - "result": { - "count": 1, - "id": "minecraft:white_shulker_box" - }, - "time": 200 -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/bleaching/white_wool.json b/src/generated/resources/data/ragium/recipe/bathing/bleaching/white_wool.json deleted file mode 100644 index 212259408..000000000 --- a/src/generated/resources/data/ragium/recipe/bathing/bleaching/white_wool.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:bleach" - }, - "item_ingredient": { - "count": 1, - "items": { - "neoforge:ingredient_type": "neoforge:difference", - "base": "#minecraft:wool", - "subtracted": "minecraft:white_wool" - } - }, - "result": { - "count": 1, - "id": "minecraft:white_wool" - }, - "time": 200 -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/blue/banner.json b/src/generated/resources/data/ragium/recipe/bathing/blue/banner.json new file mode 100644 index 000000000..68243a600 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/blue/banner.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/blue" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:banners", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:blue_banner" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/blue/bed.json b/src/generated/resources/data/ragium/recipe/bathing/blue/bed.json new file mode 100644 index 000000000..16ae8d96b --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/blue/bed.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/blue" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:beds", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:blue_bed" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/blue/harness.json b/src/generated/resources/data/ragium/recipe/bathing/blue/harness.json new file mode 100644 index 000000000..37d26d798 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/blue/harness.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/blue" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:harnesses", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:blue_harness" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/blue/shulker_box.json b/src/generated/resources/data/ragium/recipe/bathing/blue/shulker_box.json new file mode 100644 index 000000000..23d2d08f4 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/blue/shulker_box.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/blue" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:shulker_boxes", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:blue_shulker_box" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/blue/wool.json b/src/generated/resources/data/ragium/recipe/bathing/blue/wool.json new file mode 100644 index 000000000..dd35a4261 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/blue/wool.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/blue" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:wool", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:blue_wool" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/blue/wool_carpet.json b/src/generated/resources/data/ragium/recipe/bathing/blue/wool_carpet.json new file mode 100644 index 000000000..4c3078fe2 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/blue/wool_carpet.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/blue" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:wool_carpets", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:blue_carpet" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/blue_dye_from_lapis.json b/src/generated/resources/data/ragium/recipe/bathing/blue_dye_from_lapis.json deleted file mode 100644 index dd9f200bc..000000000 --- a/src/generated/resources/data/ragium/recipe/bathing/blue_dye_from_lapis.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 250, - "fluids": "#ragium:resins" - }, - "item_ingredient": { - "count": 1, - "items": "#c:dusts/lapis" - }, - "result": { - "count": 1, - "id": "minecraft:blue_dye" - }, - "time": 200 -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/brown/banner.json b/src/generated/resources/data/ragium/recipe/bathing/brown/banner.json new file mode 100644 index 000000000..8d7f32ec6 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/brown/banner.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/brown" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:banners", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:brown_banner" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/brown/bed.json b/src/generated/resources/data/ragium/recipe/bathing/brown/bed.json new file mode 100644 index 000000000..b56708265 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/brown/bed.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/brown" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:beds", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:brown_bed" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/brown/harness.json b/src/generated/resources/data/ragium/recipe/bathing/brown/harness.json new file mode 100644 index 000000000..ce74f2f85 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/brown/harness.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/brown" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:harnesses", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:brown_harness" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/brown/shulker_box.json b/src/generated/resources/data/ragium/recipe/bathing/brown/shulker_box.json new file mode 100644 index 000000000..2e3a8c8fe --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/brown/shulker_box.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/brown" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:shulker_boxes", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:brown_shulker_box" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/brown/wool.json b/src/generated/resources/data/ragium/recipe/bathing/brown/wool.json new file mode 100644 index 000000000..30a4c1744 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/brown/wool.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/brown" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:wool", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:brown_wool" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/brown/wool_carpet.json b/src/generated/resources/data/ragium/recipe/bathing/brown/wool_carpet.json new file mode 100644 index 000000000..5c68c249d --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/brown/wool_carpet.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/brown" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:wool_carpets", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:brown_carpet" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/brown_dye_from_bauxite.json b/src/generated/resources/data/ragium/recipe/bathing/brown_dye_from_bauxite.json deleted file mode 100644 index 1f0adf6da..000000000 --- a/src/generated/resources/data/ragium/recipe/bathing/brown_dye_from_bauxite.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 250, - "fluids": "#ragium:resins" - }, - "item_ingredient": { - "count": 1, - "items": "#c:dusts/bauxite" - }, - "result": { - "count": 1, - "id": "minecraft:brown_dye" - }, - "time": 200 -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/cyan/banner.json b/src/generated/resources/data/ragium/recipe/bathing/cyan/banner.json new file mode 100644 index 000000000..7423e81db --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/cyan/banner.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/cyan" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:banners", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:cyan_banner" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/cyan/bed.json b/src/generated/resources/data/ragium/recipe/bathing/cyan/bed.json new file mode 100644 index 000000000..cfe35d6da --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/cyan/bed.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/cyan" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:beds", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:cyan_bed" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/cyan/harness.json b/src/generated/resources/data/ragium/recipe/bathing/cyan/harness.json new file mode 100644 index 000000000..92c71ab35 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/cyan/harness.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/cyan" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:harnesses", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:cyan_harness" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/cyan/shulker_box.json b/src/generated/resources/data/ragium/recipe/bathing/cyan/shulker_box.json new file mode 100644 index 000000000..31b6e4c1c --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/cyan/shulker_box.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/cyan" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:shulker_boxes", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:cyan_shulker_box" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/cyan/wool.json b/src/generated/resources/data/ragium/recipe/bathing/cyan/wool.json new file mode 100644 index 000000000..c7aaff56d --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/cyan/wool.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/cyan" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:wool", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:cyan_wool" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/cyan/wool_carpet.json b/src/generated/resources/data/ragium/recipe/bathing/cyan/wool_carpet.json new file mode 100644 index 000000000..e51987f68 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/cyan/wool_carpet.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/cyan" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:wool_carpets", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:cyan_carpet" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/gray/banner.json b/src/generated/resources/data/ragium/recipe/bathing/gray/banner.json new file mode 100644 index 000000000..dce8aca32 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/gray/banner.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/gray" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:banners", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:gray_banner" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/gray/bed.json b/src/generated/resources/data/ragium/recipe/bathing/gray/bed.json new file mode 100644 index 000000000..7425b714b --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/gray/bed.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/gray" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:beds", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:gray_bed" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/gray/harness.json b/src/generated/resources/data/ragium/recipe/bathing/gray/harness.json new file mode 100644 index 000000000..bfbfe646b --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/gray/harness.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/gray" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:harnesses", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:gray_harness" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/gray/shulker_box.json b/src/generated/resources/data/ragium/recipe/bathing/gray/shulker_box.json new file mode 100644 index 000000000..a955f74c6 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/gray/shulker_box.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/gray" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:shulker_boxes", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:gray_shulker_box" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/gray/wool.json b/src/generated/resources/data/ragium/recipe/bathing/gray/wool.json new file mode 100644 index 000000000..6e741b723 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/gray/wool.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/gray" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:wool", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:gray_wool" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/gray/wool_carpet.json b/src/generated/resources/data/ragium/recipe/bathing/gray/wool_carpet.json new file mode 100644 index 000000000..29c5e0990 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/gray/wool_carpet.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/gray" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:wool_carpets", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:gray_carpet" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/green/banner.json b/src/generated/resources/data/ragium/recipe/bathing/green/banner.json new file mode 100644 index 000000000..6142d2437 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/green/banner.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/green" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:banners", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:green_banner" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/green/bed.json b/src/generated/resources/data/ragium/recipe/bathing/green/bed.json new file mode 100644 index 000000000..1d59477be --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/green/bed.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/green" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:beds", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:green_bed" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/green/harness.json b/src/generated/resources/data/ragium/recipe/bathing/green/harness.json new file mode 100644 index 000000000..3d4b2e665 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/green/harness.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/green" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:harnesses", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:green_harness" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/green/shulker_box.json b/src/generated/resources/data/ragium/recipe/bathing/green/shulker_box.json new file mode 100644 index 000000000..667b77d75 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/green/shulker_box.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/green" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:shulker_boxes", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:green_shulker_box" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/green/wool.json b/src/generated/resources/data/ragium/recipe/bathing/green/wool.json new file mode 100644 index 000000000..0e732470e --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/green/wool.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/green" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:wool", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:green_wool" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/green/wool_carpet.json b/src/generated/resources/data/ragium/recipe/bathing/green/wool_carpet.json new file mode 100644 index 000000000..82d6a9fef --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/green/wool_carpet.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/green" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:wool_carpets", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:green_carpet" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/light_blue/banner.json b/src/generated/resources/data/ragium/recipe/bathing/light_blue/banner.json new file mode 100644 index 000000000..dc4c06dbe --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/light_blue/banner.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/light_blue" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:banners", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:light_blue_banner" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/light_blue/bed.json b/src/generated/resources/data/ragium/recipe/bathing/light_blue/bed.json new file mode 100644 index 000000000..4b9721f8b --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/light_blue/bed.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/light_blue" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:beds", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:light_blue_bed" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/light_blue/harness.json b/src/generated/resources/data/ragium/recipe/bathing/light_blue/harness.json new file mode 100644 index 000000000..c13053911 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/light_blue/harness.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/light_blue" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:harnesses", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:light_blue_harness" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/light_blue/shulker_box.json b/src/generated/resources/data/ragium/recipe/bathing/light_blue/shulker_box.json new file mode 100644 index 000000000..c4980ccd6 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/light_blue/shulker_box.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/light_blue" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:shulker_boxes", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:light_blue_shulker_box" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/light_blue/wool.json b/src/generated/resources/data/ragium/recipe/bathing/light_blue/wool.json new file mode 100644 index 000000000..fac95d722 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/light_blue/wool.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/light_blue" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:wool", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:light_blue_wool" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/light_blue/wool_carpet.json b/src/generated/resources/data/ragium/recipe/bathing/light_blue/wool_carpet.json new file mode 100644 index 000000000..d7e4fd034 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/light_blue/wool_carpet.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/light_blue" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:wool_carpets", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:light_blue_carpet" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/light_gray/banner.json b/src/generated/resources/data/ragium/recipe/bathing/light_gray/banner.json new file mode 100644 index 000000000..c037851c7 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/light_gray/banner.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/light_gray" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:banners", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:light_gray_banner" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/light_gray/bed.json b/src/generated/resources/data/ragium/recipe/bathing/light_gray/bed.json new file mode 100644 index 000000000..76a2540f8 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/light_gray/bed.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/light_gray" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:beds", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:light_gray_bed" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/light_gray/harness.json b/src/generated/resources/data/ragium/recipe/bathing/light_gray/harness.json new file mode 100644 index 000000000..1c9965f98 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/light_gray/harness.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/light_gray" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:harnesses", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:light_gray_harness" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/light_gray/shulker_box.json b/src/generated/resources/data/ragium/recipe/bathing/light_gray/shulker_box.json new file mode 100644 index 000000000..08178cfe2 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/light_gray/shulker_box.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/light_gray" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:shulker_boxes", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:light_gray_shulker_box" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/light_gray/wool.json b/src/generated/resources/data/ragium/recipe/bathing/light_gray/wool.json new file mode 100644 index 000000000..7aa1e5e05 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/light_gray/wool.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/light_gray" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:wool", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:light_gray_wool" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/light_gray/wool_carpet.json b/src/generated/resources/data/ragium/recipe/bathing/light_gray/wool_carpet.json new file mode 100644 index 000000000..b6ebef33f --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/light_gray/wool_carpet.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/light_gray" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:wool_carpets", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:light_gray_carpet" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/lime/banner.json b/src/generated/resources/data/ragium/recipe/bathing/lime/banner.json new file mode 100644 index 000000000..e8e69e09d --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/lime/banner.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/lime" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:banners", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:lime_banner" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/lime/bed.json b/src/generated/resources/data/ragium/recipe/bathing/lime/bed.json new file mode 100644 index 000000000..41d3129c7 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/lime/bed.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/lime" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:beds", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:lime_bed" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/lime/harness.json b/src/generated/resources/data/ragium/recipe/bathing/lime/harness.json new file mode 100644 index 000000000..10b0ac15c --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/lime/harness.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/lime" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:harnesses", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:lime_harness" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/lime/shulker_box.json b/src/generated/resources/data/ragium/recipe/bathing/lime/shulker_box.json new file mode 100644 index 000000000..10d43763b --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/lime/shulker_box.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/lime" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:shulker_boxes", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:lime_shulker_box" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/lime/wool.json b/src/generated/resources/data/ragium/recipe/bathing/lime/wool.json new file mode 100644 index 000000000..47c6ef884 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/lime/wool.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/lime" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:wool", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:lime_wool" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/lime/wool_carpet.json b/src/generated/resources/data/ragium/recipe/bathing/lime/wool_carpet.json new file mode 100644 index 000000000..005c22a6c --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/lime/wool_carpet.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/lime" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:wool_carpets", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:lime_carpet" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/magenta/banner.json b/src/generated/resources/data/ragium/recipe/bathing/magenta/banner.json new file mode 100644 index 000000000..0f05a674b --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/magenta/banner.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/magenta" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:banners", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:magenta_banner" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/magenta/bed.json b/src/generated/resources/data/ragium/recipe/bathing/magenta/bed.json new file mode 100644 index 000000000..a7e020d8b --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/magenta/bed.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/magenta" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:beds", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:magenta_bed" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/magenta/harness.json b/src/generated/resources/data/ragium/recipe/bathing/magenta/harness.json new file mode 100644 index 000000000..fc1654bb4 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/magenta/harness.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/magenta" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:harnesses", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:magenta_harness" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/magenta/shulker_box.json b/src/generated/resources/data/ragium/recipe/bathing/magenta/shulker_box.json new file mode 100644 index 000000000..7164b009f --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/magenta/shulker_box.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/magenta" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:shulker_boxes", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:magenta_shulker_box" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/magenta/wool.json b/src/generated/resources/data/ragium/recipe/bathing/magenta/wool.json new file mode 100644 index 000000000..c713b1694 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/magenta/wool.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/magenta" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:wool", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:magenta_wool" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/magenta/wool_carpet.json b/src/generated/resources/data/ragium/recipe/bathing/magenta/wool_carpet.json new file mode 100644 index 000000000..33450be22 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/magenta/wool_carpet.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/magenta" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:wool_carpets", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:magenta_carpet" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/orange/banner.json b/src/generated/resources/data/ragium/recipe/bathing/orange/banner.json new file mode 100644 index 000000000..8da0ab165 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/orange/banner.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/orange" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:banners", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:orange_banner" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/orange/bed.json b/src/generated/resources/data/ragium/recipe/bathing/orange/bed.json new file mode 100644 index 000000000..5cfba999b --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/orange/bed.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/orange" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:beds", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:orange_bed" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/orange/harness.json b/src/generated/resources/data/ragium/recipe/bathing/orange/harness.json new file mode 100644 index 000000000..1bf4e9f66 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/orange/harness.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/orange" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:harnesses", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:orange_harness" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/orange/shulker_box.json b/src/generated/resources/data/ragium/recipe/bathing/orange/shulker_box.json new file mode 100644 index 000000000..19700e86e --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/orange/shulker_box.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/orange" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:shulker_boxes", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:orange_shulker_box" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/orange/wool.json b/src/generated/resources/data/ragium/recipe/bathing/orange/wool.json new file mode 100644 index 000000000..36377d2ec --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/orange/wool.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/orange" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:wool", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:orange_wool" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/orange/wool_carpet.json b/src/generated/resources/data/ragium/recipe/bathing/orange/wool_carpet.json new file mode 100644 index 000000000..ff208d3ad --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/orange/wool_carpet.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/orange" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:wool_carpets", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:orange_carpet" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/pink/banner.json b/src/generated/resources/data/ragium/recipe/bathing/pink/banner.json new file mode 100644 index 000000000..4ada43fbd --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/pink/banner.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/pink" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:banners", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:pink_banner" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/pink/bed.json b/src/generated/resources/data/ragium/recipe/bathing/pink/bed.json new file mode 100644 index 000000000..25b406292 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/pink/bed.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/pink" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:beds", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:pink_bed" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/pink/harness.json b/src/generated/resources/data/ragium/recipe/bathing/pink/harness.json new file mode 100644 index 000000000..0512cb907 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/pink/harness.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/pink" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:harnesses", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:pink_harness" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/pink/shulker_box.json b/src/generated/resources/data/ragium/recipe/bathing/pink/shulker_box.json new file mode 100644 index 000000000..b351b0d79 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/pink/shulker_box.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/pink" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:shulker_boxes", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:pink_shulker_box" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/pink/wool.json b/src/generated/resources/data/ragium/recipe/bathing/pink/wool.json new file mode 100644 index 000000000..aed872d2a --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/pink/wool.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/pink" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:wool", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:pink_wool" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/pink/wool_carpet.json b/src/generated/resources/data/ragium/recipe/bathing/pink/wool_carpet.json new file mode 100644 index 000000000..07524bcb0 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/pink/wool_carpet.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/pink" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:wool_carpets", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:pink_carpet" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/purple/banner.json b/src/generated/resources/data/ragium/recipe/bathing/purple/banner.json new file mode 100644 index 000000000..d4742f6b2 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/purple/banner.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/purple" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:banners", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:purple_banner" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/purple/bed.json b/src/generated/resources/data/ragium/recipe/bathing/purple/bed.json new file mode 100644 index 000000000..0a84dbe1c --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/purple/bed.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/purple" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:beds", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:purple_bed" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/purple/harness.json b/src/generated/resources/data/ragium/recipe/bathing/purple/harness.json new file mode 100644 index 000000000..8d2d278d6 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/purple/harness.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/purple" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:harnesses", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:purple_harness" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/purple/shulker_box.json b/src/generated/resources/data/ragium/recipe/bathing/purple/shulker_box.json new file mode 100644 index 000000000..a61a03a6e --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/purple/shulker_box.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/purple" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:shulker_boxes", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:purple_shulker_box" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/purple/wool.json b/src/generated/resources/data/ragium/recipe/bathing/purple/wool.json new file mode 100644 index 000000000..d309b6ddd --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/purple/wool.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/purple" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:wool", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:purple_wool" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/purple/wool_carpet.json b/src/generated/resources/data/ragium/recipe/bathing/purple/wool_carpet.json new file mode 100644 index 000000000..52e5ba3c9 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/purple/wool_carpet.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/purple" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:wool_carpets", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:purple_carpet" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/red/banner.json b/src/generated/resources/data/ragium/recipe/bathing/red/banner.json new file mode 100644 index 000000000..3012c34c1 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/red/banner.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/red" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:banners", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:red_banner" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/red/bed.json b/src/generated/resources/data/ragium/recipe/bathing/red/bed.json new file mode 100644 index 000000000..f8723b1b0 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/red/bed.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/red" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:beds", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:red_bed" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/red/harness.json b/src/generated/resources/data/ragium/recipe/bathing/red/harness.json new file mode 100644 index 000000000..fd4fa109a --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/red/harness.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/red" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:harnesses", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:red_harness" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/red/shulker_box.json b/src/generated/resources/data/ragium/recipe/bathing/red/shulker_box.json new file mode 100644 index 000000000..30262b569 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/red/shulker_box.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/red" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:shulker_boxes", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:red_shulker_box" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/red/wool.json b/src/generated/resources/data/ragium/recipe/bathing/red/wool.json new file mode 100644 index 000000000..ede9b4319 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/red/wool.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/red" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:wool", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:red_wool" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/red/wool_carpet.json b/src/generated/resources/data/ragium/recipe/bathing/red/wool_carpet.json new file mode 100644 index 000000000..61c04f42b --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/red/wool_carpet.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/red" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:wool_carpets", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:red_carpet" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/white/banner.json b/src/generated/resources/data/ragium/recipe/bathing/white/banner.json new file mode 100644 index 000000000..49f2a2da9 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/white/banner.json @@ -0,0 +1,30 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:bleach" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + { + "type": "neoforge:or", + "values": [ + "#minecraft:banners" + ] + }, + { + "type": "neoforge:not", + "value": "#c:dyed/white" + } + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:white_banner" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/white/bed.json b/src/generated/resources/data/ragium/recipe/bathing/white/bed.json new file mode 100644 index 000000000..ac228c144 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/white/bed.json @@ -0,0 +1,30 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:bleach" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + { + "type": "neoforge:or", + "values": [ + "#minecraft:beds" + ] + }, + { + "type": "neoforge:not", + "value": "#c:dyed/white" + } + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:white_bed" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/white/harness.json b/src/generated/resources/data/ragium/recipe/bathing/white/harness.json new file mode 100644 index 000000000..e5d08c560 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/white/harness.json @@ -0,0 +1,30 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:bleach" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + { + "type": "neoforge:or", + "values": [ + "#minecraft:harnesses" + ] + }, + { + "type": "neoforge:not", + "value": "#c:dyed/white" + } + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:white_harness" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/white/shulker_box.json b/src/generated/resources/data/ragium/recipe/bathing/white/shulker_box.json new file mode 100644 index 000000000..64804a678 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/white/shulker_box.json @@ -0,0 +1,30 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:bleach" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + { + "type": "neoforge:or", + "values": [ + "#minecraft:shulker_boxes" + ] + }, + { + "type": "neoforge:not", + "value": "#c:dyed/white" + } + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:white_shulker_box" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/white/wool.json b/src/generated/resources/data/ragium/recipe/bathing/white/wool.json new file mode 100644 index 000000000..5cbcc2410 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/white/wool.json @@ -0,0 +1,30 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:bleach" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + { + "type": "neoforge:or", + "values": [ + "#minecraft:wool" + ] + }, + { + "type": "neoforge:not", + "value": "#c:dyed/white" + } + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:white_wool" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/white/wool_carpet.json b/src/generated/resources/data/ragium/recipe/bathing/white/wool_carpet.json new file mode 100644 index 000000000..c6dcb2638 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/white/wool_carpet.json @@ -0,0 +1,30 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:bleach" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + { + "type": "neoforge:or", + "values": [ + "#minecraft:wool_carpets" + ] + }, + { + "type": "neoforge:not", + "value": "#c:dyed/white" + } + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:white_carpet" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/yellow/banner.json b/src/generated/resources/data/ragium/recipe/bathing/yellow/banner.json new file mode 100644 index 000000000..d91e0cc7f --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/yellow/banner.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/yellow" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:banners", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:yellow_banner" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/yellow/bed.json b/src/generated/resources/data/ragium/recipe/bathing/yellow/bed.json new file mode 100644 index 000000000..c6420768c --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/yellow/bed.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/yellow" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:beds", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:yellow_bed" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/yellow/harness.json b/src/generated/resources/data/ragium/recipe/bathing/yellow/harness.json new file mode 100644 index 000000000..e35c35ab6 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/yellow/harness.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/yellow" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:harnesses", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:yellow_harness" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/yellow/shulker_box.json b/src/generated/resources/data/ragium/recipe/bathing/yellow/shulker_box.json new file mode 100644 index 000000000..6ec6a13d9 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/yellow/shulker_box.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/yellow" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:shulker_boxes", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:yellow_shulker_box" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/yellow/wool.json b/src/generated/resources/data/ragium/recipe/bathing/yellow/wool.json new file mode 100644 index 000000000..32f80a290 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/yellow/wool.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/yellow" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:wool", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:yellow_wool" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/yellow/wool_carpet.json b/src/generated/resources/data/ragium/recipe/bathing/yellow/wool_carpet.json new file mode 100644 index 000000000..f343ce0a7 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/yellow/wool_carpet.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:dyes/yellow" + }, + "item_ingredient": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:wool_carpets", + "#c:dyed/white" + ] + } + }, + "result": { + "count": 1, + "id": "minecraft:yellow_carpet" + }, + "time": 50 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/freezing/black_dye_from_liquid_dye.json b/src/generated/resources/data/ragium/recipe/freezing/dye/black.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/freezing/black_dye_from_liquid_dye.json rename to src/generated/resources/data/ragium/recipe/freezing/dye/black.json diff --git a/src/generated/resources/data/ragium/recipe/freezing/blue_dye_from_liquid_dye.json b/src/generated/resources/data/ragium/recipe/freezing/dye/blue.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/freezing/blue_dye_from_liquid_dye.json rename to src/generated/resources/data/ragium/recipe/freezing/dye/blue.json diff --git a/src/generated/resources/data/ragium/recipe/freezing/brown_dye_from_liquid_dye.json b/src/generated/resources/data/ragium/recipe/freezing/dye/brown.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/freezing/brown_dye_from_liquid_dye.json rename to src/generated/resources/data/ragium/recipe/freezing/dye/brown.json diff --git a/src/generated/resources/data/ragium/recipe/freezing/cyan_dye_from_liquid_dye.json b/src/generated/resources/data/ragium/recipe/freezing/dye/cyan.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/freezing/cyan_dye_from_liquid_dye.json rename to src/generated/resources/data/ragium/recipe/freezing/dye/cyan.json diff --git a/src/generated/resources/data/ragium/recipe/freezing/gray_dye_from_liquid_dye.json b/src/generated/resources/data/ragium/recipe/freezing/dye/gray.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/freezing/gray_dye_from_liquid_dye.json rename to src/generated/resources/data/ragium/recipe/freezing/dye/gray.json diff --git a/src/generated/resources/data/ragium/recipe/freezing/green_dye_from_liquid_dye.json b/src/generated/resources/data/ragium/recipe/freezing/dye/green.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/freezing/green_dye_from_liquid_dye.json rename to src/generated/resources/data/ragium/recipe/freezing/dye/green.json diff --git a/src/generated/resources/data/ragium/recipe/freezing/light_blue_dye_from_liquid_dye.json b/src/generated/resources/data/ragium/recipe/freezing/dye/light_blue.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/freezing/light_blue_dye_from_liquid_dye.json rename to src/generated/resources/data/ragium/recipe/freezing/dye/light_blue.json diff --git a/src/generated/resources/data/ragium/recipe/freezing/light_gray_dye_from_liquid_dye.json b/src/generated/resources/data/ragium/recipe/freezing/dye/light_gray.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/freezing/light_gray_dye_from_liquid_dye.json rename to src/generated/resources/data/ragium/recipe/freezing/dye/light_gray.json diff --git a/src/generated/resources/data/ragium/recipe/freezing/lime_dye_from_liquid_dye.json b/src/generated/resources/data/ragium/recipe/freezing/dye/lime.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/freezing/lime_dye_from_liquid_dye.json rename to src/generated/resources/data/ragium/recipe/freezing/dye/lime.json diff --git a/src/generated/resources/data/ragium/recipe/freezing/magenta_dye_from_liquid_dye.json b/src/generated/resources/data/ragium/recipe/freezing/dye/magenta.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/freezing/magenta_dye_from_liquid_dye.json rename to src/generated/resources/data/ragium/recipe/freezing/dye/magenta.json diff --git a/src/generated/resources/data/ragium/recipe/freezing/orange_dye_from_liquid_dye.json b/src/generated/resources/data/ragium/recipe/freezing/dye/orange.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/freezing/orange_dye_from_liquid_dye.json rename to src/generated/resources/data/ragium/recipe/freezing/dye/orange.json diff --git a/src/generated/resources/data/ragium/recipe/freezing/pink_dye_from_liquid_dye.json b/src/generated/resources/data/ragium/recipe/freezing/dye/pink.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/freezing/pink_dye_from_liquid_dye.json rename to src/generated/resources/data/ragium/recipe/freezing/dye/pink.json diff --git a/src/generated/resources/data/ragium/recipe/freezing/purple_dye_from_liquid_dye.json b/src/generated/resources/data/ragium/recipe/freezing/dye/purple.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/freezing/purple_dye_from_liquid_dye.json rename to src/generated/resources/data/ragium/recipe/freezing/dye/purple.json diff --git a/src/generated/resources/data/ragium/recipe/freezing/red_dye_from_liquid_dye.json b/src/generated/resources/data/ragium/recipe/freezing/dye/red.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/freezing/red_dye_from_liquid_dye.json rename to src/generated/resources/data/ragium/recipe/freezing/dye/red.json diff --git a/src/generated/resources/data/ragium/recipe/freezing/white_dye_from_liquid_dye.json b/src/generated/resources/data/ragium/recipe/freezing/dye/white.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/freezing/white_dye_from_liquid_dye.json rename to src/generated/resources/data/ragium/recipe/freezing/dye/white.json diff --git a/src/generated/resources/data/ragium/recipe/freezing/yellow_dye_from_liquid_dye.json b/src/generated/resources/data/ragium/recipe/freezing/dye/yellow.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/freezing/yellow_dye_from_liquid_dye.json rename to src/generated/resources/data/ragium/recipe/freezing/dye/yellow.json diff --git a/src/generated/resources/data/ragium/recipe/mixing/black_concrete.json b/src/generated/resources/data/ragium/recipe/mixing/black/concrete.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/mixing/black_concrete.json rename to src/generated/resources/data/ragium/recipe/mixing/black/concrete.json diff --git a/src/generated/resources/data/ragium/recipe/mixing/black_dye.json b/src/generated/resources/data/ragium/recipe/mixing/black/liquid_dye.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/mixing/black_dye.json rename to src/generated/resources/data/ragium/recipe/mixing/black/liquid_dye.json diff --git a/src/generated/resources/data/ragium/recipe/mixing/blue_concrete.json b/src/generated/resources/data/ragium/recipe/mixing/blue/concrete.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/mixing/blue_concrete.json rename to src/generated/resources/data/ragium/recipe/mixing/blue/concrete.json diff --git a/src/generated/resources/data/ragium/recipe/mixing/blue_dye.json b/src/generated/resources/data/ragium/recipe/mixing/blue/liquid_dye.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/mixing/blue_dye.json rename to src/generated/resources/data/ragium/recipe/mixing/blue/liquid_dye.json diff --git a/src/generated/resources/data/ragium/recipe/mixing/brown_concrete.json b/src/generated/resources/data/ragium/recipe/mixing/brown/concrete.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/mixing/brown_concrete.json rename to src/generated/resources/data/ragium/recipe/mixing/brown/concrete.json diff --git a/src/generated/resources/data/ragium/recipe/mixing/brown_dye.json b/src/generated/resources/data/ragium/recipe/mixing/brown/liquid_dye.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/mixing/brown_dye.json rename to src/generated/resources/data/ragium/recipe/mixing/brown/liquid_dye.json diff --git a/src/generated/resources/data/ragium/recipe/mixing/cyan_concrete.json b/src/generated/resources/data/ragium/recipe/mixing/cyan/concrete.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/mixing/cyan_concrete.json rename to src/generated/resources/data/ragium/recipe/mixing/cyan/concrete.json diff --git a/src/generated/resources/data/ragium/recipe/mixing/cyan_dye.json b/src/generated/resources/data/ragium/recipe/mixing/cyan/liquid_dye.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/mixing/cyan_dye.json rename to src/generated/resources/data/ragium/recipe/mixing/cyan/liquid_dye.json diff --git a/src/generated/resources/data/ragium/recipe/mixing/gray_concrete.json b/src/generated/resources/data/ragium/recipe/mixing/gray/concrete.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/mixing/gray_concrete.json rename to src/generated/resources/data/ragium/recipe/mixing/gray/concrete.json diff --git a/src/generated/resources/data/ragium/recipe/mixing/gray_dye.json b/src/generated/resources/data/ragium/recipe/mixing/gray/liquid_dye.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/mixing/gray_dye.json rename to src/generated/resources/data/ragium/recipe/mixing/gray/liquid_dye.json diff --git a/src/generated/resources/data/ragium/recipe/mixing/green_concrete.json b/src/generated/resources/data/ragium/recipe/mixing/green/concrete.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/mixing/green_concrete.json rename to src/generated/resources/data/ragium/recipe/mixing/green/concrete.json diff --git a/src/generated/resources/data/ragium/recipe/mixing/green_dye.json b/src/generated/resources/data/ragium/recipe/mixing/green/liquid_dye.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/mixing/green_dye.json rename to src/generated/resources/data/ragium/recipe/mixing/green/liquid_dye.json diff --git a/src/generated/resources/data/ragium/recipe/mixing/light_blue_concrete.json b/src/generated/resources/data/ragium/recipe/mixing/light_blue/concrete.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/mixing/light_blue_concrete.json rename to src/generated/resources/data/ragium/recipe/mixing/light_blue/concrete.json diff --git a/src/generated/resources/data/ragium/recipe/mixing/light_blue_dye.json b/src/generated/resources/data/ragium/recipe/mixing/light_blue/liquid_dye.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/mixing/light_blue_dye.json rename to src/generated/resources/data/ragium/recipe/mixing/light_blue/liquid_dye.json diff --git a/src/generated/resources/data/ragium/recipe/mixing/light_gray_concrete.json b/src/generated/resources/data/ragium/recipe/mixing/light_gray/concrete.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/mixing/light_gray_concrete.json rename to src/generated/resources/data/ragium/recipe/mixing/light_gray/concrete.json diff --git a/src/generated/resources/data/ragium/recipe/mixing/light_gray_dye.json b/src/generated/resources/data/ragium/recipe/mixing/light_gray/liquid_dye.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/mixing/light_gray_dye.json rename to src/generated/resources/data/ragium/recipe/mixing/light_gray/liquid_dye.json diff --git a/src/generated/resources/data/ragium/recipe/mixing/lime_concrete.json b/src/generated/resources/data/ragium/recipe/mixing/lime/concrete.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/mixing/lime_concrete.json rename to src/generated/resources/data/ragium/recipe/mixing/lime/concrete.json diff --git a/src/generated/resources/data/ragium/recipe/mixing/lime_dye.json b/src/generated/resources/data/ragium/recipe/mixing/lime/liquid_dye.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/mixing/lime_dye.json rename to src/generated/resources/data/ragium/recipe/mixing/lime/liquid_dye.json diff --git a/src/generated/resources/data/ragium/recipe/mixing/magenta_concrete.json b/src/generated/resources/data/ragium/recipe/mixing/magenta/concrete.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/mixing/magenta_concrete.json rename to src/generated/resources/data/ragium/recipe/mixing/magenta/concrete.json diff --git a/src/generated/resources/data/ragium/recipe/mixing/magenta_dye.json b/src/generated/resources/data/ragium/recipe/mixing/magenta/liquid_dye.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/mixing/magenta_dye.json rename to src/generated/resources/data/ragium/recipe/mixing/magenta/liquid_dye.json diff --git a/src/generated/resources/data/ragium/recipe/mixing/orange_concrete.json b/src/generated/resources/data/ragium/recipe/mixing/orange/concrete.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/mixing/orange_concrete.json rename to src/generated/resources/data/ragium/recipe/mixing/orange/concrete.json diff --git a/src/generated/resources/data/ragium/recipe/mixing/orange_dye.json b/src/generated/resources/data/ragium/recipe/mixing/orange/liquid_dye.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/mixing/orange_dye.json rename to src/generated/resources/data/ragium/recipe/mixing/orange/liquid_dye.json diff --git a/src/generated/resources/data/ragium/recipe/mixing/pink_concrete.json b/src/generated/resources/data/ragium/recipe/mixing/pink/concrete.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/mixing/pink_concrete.json rename to src/generated/resources/data/ragium/recipe/mixing/pink/concrete.json diff --git a/src/generated/resources/data/ragium/recipe/mixing/pink_dye.json b/src/generated/resources/data/ragium/recipe/mixing/pink/liquid_dye.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/mixing/pink_dye.json rename to src/generated/resources/data/ragium/recipe/mixing/pink/liquid_dye.json diff --git a/src/generated/resources/data/ragium/recipe/mixing/purple_concrete.json b/src/generated/resources/data/ragium/recipe/mixing/purple/concrete.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/mixing/purple_concrete.json rename to src/generated/resources/data/ragium/recipe/mixing/purple/concrete.json diff --git a/src/generated/resources/data/ragium/recipe/mixing/purple_dye.json b/src/generated/resources/data/ragium/recipe/mixing/purple/liquid_dye.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/mixing/purple_dye.json rename to src/generated/resources/data/ragium/recipe/mixing/purple/liquid_dye.json diff --git a/src/generated/resources/data/ragium/recipe/mixing/red_concrete.json b/src/generated/resources/data/ragium/recipe/mixing/red/concrete.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/mixing/red_concrete.json rename to src/generated/resources/data/ragium/recipe/mixing/red/concrete.json diff --git a/src/generated/resources/data/ragium/recipe/mixing/red_dye.json b/src/generated/resources/data/ragium/recipe/mixing/red/liquid_dye.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/mixing/red_dye.json rename to src/generated/resources/data/ragium/recipe/mixing/red/liquid_dye.json diff --git a/src/generated/resources/data/ragium/recipe/mixing/white_concrete.json b/src/generated/resources/data/ragium/recipe/mixing/white/concrete.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/mixing/white_concrete.json rename to src/generated/resources/data/ragium/recipe/mixing/white/concrete.json diff --git a/src/generated/resources/data/ragium/recipe/mixing/white_dye.json b/src/generated/resources/data/ragium/recipe/mixing/white/liquid_dye.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/mixing/white_dye.json rename to src/generated/resources/data/ragium/recipe/mixing/white/liquid_dye.json diff --git a/src/generated/resources/data/ragium/recipe/mixing/yellow_concrete.json b/src/generated/resources/data/ragium/recipe/mixing/yellow/concrete.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/mixing/yellow_concrete.json rename to src/generated/resources/data/ragium/recipe/mixing/yellow/concrete.json diff --git a/src/generated/resources/data/ragium/recipe/mixing/yellow_dye.json b/src/generated/resources/data/ragium/recipe/mixing/yellow/liquid_dye.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/mixing/yellow_dye.json rename to src/generated/resources/data/ragium/recipe/mixing/yellow/liquid_dye.json diff --git a/src/generated/resources/data/ragium/recipe/reacting/hydrochloric_acid.json b/src/generated/resources/data/ragium/recipe/reacting/hydrochloric_acid.json index 380552a9d..8b16c8584 100644 --- a/src/generated/resources/data/ragium/recipe/reacting/hydrochloric_acid.json +++ b/src/generated/resources/data/ragium/recipe/reacting/hydrochloric_acid.json @@ -4,13 +4,15 @@ "amount": 1000, "id": "ragium:hydrochloric_acid" }, - "primary_ingredient": { - "amount": 1000, - "fluids": "#c:hydrogen_chloride" - }, - "secondary_ingredient": { - "amount": 1000, - "fluids": "#c:water" - }, + "ingredients": [ + { + "amount": 1000, + "fluids": "#c:hydrogen_chloride" + }, + { + "amount": 1000, + "fluids": "#c:water" + } + ], "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/reacting/hydrofluoric_acid.json b/src/generated/resources/data/ragium/recipe/reacting/hydrofluoric_acid.json index a46959b10..8c479c60d 100644 --- a/src/generated/resources/data/ragium/recipe/reacting/hydrofluoric_acid.json +++ b/src/generated/resources/data/ragium/recipe/reacting/hydrofluoric_acid.json @@ -4,13 +4,15 @@ "amount": 1000, "id": "ragium:hydrofluoric_acid" }, - "primary_ingredient": { - "amount": 1000, - "fluids": "#c:hydrogen_fluoride" - }, - "secondary_ingredient": { - "amount": 1000, - "fluids": "#c:water" - }, + "ingredients": [ + { + "amount": 1000, + "fluids": "#c:hydrogen_fluoride" + }, + { + "amount": 1000, + "fluids": "#c:water" + } + ], "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/reacting/hydrogen_chloride.json b/src/generated/resources/data/ragium/recipe/reacting/hydrogen_chloride.json index 05ab98317..96cf50cb5 100644 --- a/src/generated/resources/data/ragium/recipe/reacting/hydrogen_chloride.json +++ b/src/generated/resources/data/ragium/recipe/reacting/hydrogen_chloride.json @@ -4,13 +4,15 @@ "amount": 2000, "id": "ragium:hydrogen_chloride" }, - "primary_ingredient": { - "amount": 1000, - "fluids": "#c:hydrogen" - }, - "secondary_ingredient": { - "amount": 1000, - "fluids": "#c:chlorine" - }, + "ingredients": [ + { + "amount": 1000, + "fluids": "#c:hydrogen" + }, + { + "amount": 1000, + "fluids": "#c:chlorine" + } + ], "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/reacting/liquid_explosive.json b/src/generated/resources/data/ragium/recipe/reacting/liquid_explosive.json index b179daa2a..c865d71f3 100644 --- a/src/generated/resources/data/ragium/recipe/reacting/liquid_explosive.json +++ b/src/generated/resources/data/ragium/recipe/reacting/liquid_explosive.json @@ -4,13 +4,15 @@ "amount": 1000, "id": "ragium:liquid_explosive" }, - "primary_ingredient": { - "amount": 1000, - "fluids": "#c:aromatic_compound" - }, - "secondary_ingredient": { - "amount": 1000, - "fluids": "#c:nitric_acid" - }, + "ingredients": [ + { + "amount": 1000, + "fluids": "#c:aromatic_compound" + }, + { + "amount": 1000, + "fluids": "#c:nitric_acid" + } + ], "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/reacting/molten_plastic.json b/src/generated/resources/data/ragium/recipe/reacting/molten_plastic.json index 73ceb2da5..2c28f5b86 100644 --- a/src/generated/resources/data/ragium/recipe/reacting/molten_plastic.json +++ b/src/generated/resources/data/ragium/recipe/reacting/molten_plastic.json @@ -4,13 +4,15 @@ "amount": 180, "id": "ragium:molten_plastic" }, - "primary_ingredient": { - "amount": 500, - "fluids": "#c:naphtha" - }, - "secondary_ingredient": { - "amount": 250, - "fluids": "#c:oxygen" - }, + "ingredients": [ + { + "amount": 500, + "fluids": "#c:naphtha" + }, + { + "amount": 250, + "fluids": "#c:oxygen" + } + ], "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/reacting/sulfur_trioxide.json b/src/generated/resources/data/ragium/recipe/reacting/sulfur_trioxide.json index 8d2257f09..f329876b1 100644 --- a/src/generated/resources/data/ragium/recipe/reacting/sulfur_trioxide.json +++ b/src/generated/resources/data/ragium/recipe/reacting/sulfur_trioxide.json @@ -4,13 +4,15 @@ "amount": 1000, "id": "ragium:sulfur_trioxide" }, - "primary_ingredient": { - "amount": 1000, - "fluids": "#c:sulfur_dioxide" - }, - "secondary_ingredient": { - "amount": 500, - "fluids": "#c:oxygen" - }, + "ingredients": [ + { + "amount": 1000, + "fluids": "#c:sulfur_dioxide" + }, + { + "amount": 500, + "fluids": "#c:oxygen" + } + ], "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/reacting/sulfuric_acid.json b/src/generated/resources/data/ragium/recipe/reacting/sulfuric_acid.json index efb0c7144..84bfaaffa 100644 --- a/src/generated/resources/data/ragium/recipe/reacting/sulfuric_acid.json +++ b/src/generated/resources/data/ragium/recipe/reacting/sulfuric_acid.json @@ -4,13 +4,15 @@ "amount": 1000, "id": "ragium:sulfuric_acid" }, - "primary_ingredient": { - "amount": 1000, - "fluids": "#c:sulfur_trioxide" - }, - "secondary_ingredient": { - "amount": 1000, - "fluids": "#c:water" - }, + "ingredients": [ + { + "amount": 1000, + "fluids": "#c:sulfur_trioxide" + }, + { + "amount": 1000, + "fluids": "#c:water" + } + ], "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/reacting/synthetic_resin.json b/src/generated/resources/data/ragium/recipe/reacting/synthetic_resin.json index afe400349..ffd4cfa33 100644 --- a/src/generated/resources/data/ragium/recipe/reacting/synthetic_resin.json +++ b/src/generated/resources/data/ragium/recipe/reacting/synthetic_resin.json @@ -4,13 +4,15 @@ "amount": 2000, "id": "ragium:synthetic_resin" }, - "primary_ingredient": { - "amount": 1000, - "fluids": "#c:aromatic_compound" - }, - "secondary_ingredient": { - "amount": 1000, - "fluids": "#ragium:aldehydes" - }, + "ingredients": [ + { + "amount": 1000, + "fluids": "#c:aromatic_compound" + }, + { + "amount": 1000, + "fluids": "#ragium:aldehydes" + } + ], "time": 200 } \ No newline at end of file From 4f9ff0ce4af3126ad6126ff6c79d0342ce1a62f5 Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Wed, 7 Oct 2026 22:44:13 +0900 Subject: [PATCH 03/25] =?UTF-8?q?feat:=20=E6=96=B0=E3=81=97=E3=81=84?= =?UTF-8?q?=E7=B4=A0=E6=9D=90=E3=80=8CAsh=20/=20=E7=81=B0=E3=80=8D?= =?UTF-8?q?=E3=82=92=E8=BF=BD=E5=8A=A0=20feat:=20=E6=96=B0=E3=81=97?= =?UTF-8?q?=E3=81=84=E5=85=83=E7=B4=A0=E3=81=A8=E5=8C=96=E5=AD=A6=E7=89=A9?= =?UTF-8?q?=E8=B3=AA=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data/lang/RagiumEnglishLangProvider.kt | 5 ++++ .../data/lang/RagiumJapaneseLangProvider.kt | 5 ++++ .../assets/ragium/items/ash_dust.json | 6 ++++ .../resources/assets/ragium/lang/en_us.json | 5 ++++ .../resources/assets/ragium/lang/ja_jp.json | 5 ++++ .../assets/ragium/models/item/ash_dust.json | 6 ++++ .../resources/data/c/tags/item/dusts.json | 1 + .../resources/data/c/tags/item/dusts/ash.json | 5 ++++ .../data/ragium/ragium/chemical/mercury.json | 4 +++ .../ragium/chemical/mercury_sulfide.json | 11 ++++++++ .../ragium/chemical/potassium_carbonate.json | 12 ++++++++ .../data/ragium/ragium/element/mercury.json | 3 ++ .../resources/reports/ragium/registries.json | 5 ++++ .../api/data/chemical/RagiumChemicals.kt | 26 ++++++++++++++++++ .../ragium/api/data/element/RagiumElements.kt | 4 +++ .../ragium/api/material/RagiumMaterial.kt | 7 ++++- .../assets/ragium/textures/item/ash_dust.png | Bin 0 -> 271 bytes 17 files changed, 109 insertions(+), 1 deletion(-) create mode 100644 src/generated/resources/assets/ragium/items/ash_dust.json create mode 100644 src/generated/resources/assets/ragium/models/item/ash_dust.json create mode 100644 src/generated/resources/data/c/tags/item/dusts/ash.json create mode 100644 src/generated/resources/data/ragium/ragium/chemical/mercury.json create mode 100644 src/generated/resources/data/ragium/ragium/chemical/mercury_sulfide.json create mode 100644 src/generated/resources/data/ragium/ragium/chemical/potassium_carbonate.json create mode 100644 src/generated/resources/data/ragium/ragium/element/mercury.json create mode 100644 src/main/resources/assets/ragium/textures/item/ash_dust.png diff --git a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt index 582812156..1cab199b4 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt @@ -254,6 +254,7 @@ class RagiumEnglishLangProvider(output: PackOutput) : addFromKey(RagiumChemicals.IRON, "Iron") addFromKey(RagiumChemicals.COPPER, "Copper") addFromKey(RagiumChemicals.GOLD, "Gold") + addFromKey(RagiumChemicals.MERCURY, "Mercury") addFromKey(RagiumChemicals.HYDROXIDE, "Hydroxide") addFromKey(RagiumChemicals.WATER, "Water") @@ -277,10 +278,13 @@ class RagiumEnglishLangProvider(output: PackOutput) : addFromKey(RagiumChemicals.SULFURIC_ACID, "Sulfuric Acid") addFromKey(RagiumChemicals.HYDROGEN_CHLORIDE, "Hydrogen chloride") + addFromKey(RagiumChemicals.POTASSIUM_CARBONATE, "Potassium Carbonate") addFromKey(RagiumChemicals.POTASSIUM_NITRATE, "Potassium Nitrate") addFromKey(RagiumChemicals.CALCIUM_CARBONATE, "Calcium Carbonate") addFromKey(RagiumChemicals.CALCIUM_OXIDE, "Calcium Oxide") addFromKey(RagiumChemicals.CALCIUM_SULFATE, "Calcium Sulfate") + + addFromKey(RagiumChemicals.MERCURY_SULFIDE, "Mercury Sulfide") // Element addFromKey(RagiumElements.HYDROGEN, "Hydrogen") @@ -301,5 +305,6 @@ class RagiumEnglishLangProvider(output: PackOutput) : addFromKey(RagiumElements.COPPER, "Copper") addFromKey(RagiumElements.GOLD, "Gold") + addFromKey(RagiumElements.MERCURY, "Mercury") } } diff --git a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt index 71662c8c1..560769a76 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt @@ -250,6 +250,7 @@ class RagiumJapaneseLangProvider(output: PackOutput) : addFromKey(RagiumChemicals.IRON, "鉄") addFromKey(RagiumChemicals.COPPER, "銅") addFromKey(RagiumChemicals.GOLD, "金") + addFromKey(RagiumChemicals.MERCURY, "水銀") addFromKey(RagiumChemicals.HYDROXIDE, "水酸化物") addFromKey(RagiumChemicals.WATER, "水") @@ -273,10 +274,13 @@ class RagiumJapaneseLangProvider(output: PackOutput) : addFromKey(RagiumChemicals.SULFURIC_ACID, "硫酸") addFromKey(RagiumChemicals.HYDROGEN_CHLORIDE, "塩化水素") + addFromKey(RagiumChemicals.POTASSIUM_CARBONATE, "炭酸カリウム") addFromKey(RagiumChemicals.POTASSIUM_NITRATE, "硝酸カリウム") addFromKey(RagiumChemicals.CALCIUM_CARBONATE, "炭酸カルシウム") addFromKey(RagiumChemicals.CALCIUM_OXIDE, "酸化カルシウム") addFromKey(RagiumChemicals.CALCIUM_SULFATE, "硫酸カルシウム") + + addFromKey(RagiumChemicals.MERCURY_SULFIDE, "硫化水銀") // Element addFromKey(RagiumElements.HYDROGEN, "水素") @@ -297,5 +301,6 @@ class RagiumJapaneseLangProvider(output: PackOutput) : addFromKey(RagiumElements.COPPER, "銅") addFromKey(RagiumElements.GOLD, "金") + addFromKey(RagiumElements.MERCURY, "水銀") } } diff --git a/src/generated/resources/assets/ragium/items/ash_dust.json b/src/generated/resources/assets/ragium/items/ash_dust.json new file mode 100644 index 000000000..f99c7bf1a --- /dev/null +++ b/src/generated/resources/assets/ragium/items/ash_dust.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "ragium:item/ash_dust" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/lang/en_us.json b/src/generated/resources/assets/ragium/lang/en_us.json index c212da5f4..aebc3f1d9 100644 --- a/src/generated/resources/assets/ragium/lang/en_us.json +++ b/src/generated/resources/assets/ragium/lang/en_us.json @@ -201,6 +201,7 @@ "item.ragium.anti_rust_oil_bucket": "Anti-rust Oil Bucket", "item.ragium.arcane_machine_parts": "Machine Parts (Arcane)", "item.ragium.aromatic_compound_bucket": "Aromatic Compound Bucket", + "item.ragium.ash_dust": "Ash Dust", "item.ragium.ball_mold": "Ball Mold", "item.ragium.bamboo_charcoal": "Bamboo Charcoal", "item.ragium.bauxite_dust": "Bauxite Dust", @@ -357,10 +358,13 @@ "ragium.chemical.ragium.hydrogen_fluoride": "Hydrogen Fluoride", "ragium.chemical.ragium.hydroxide": "Hydroxide", "ragium.chemical.ragium.iron": "Iron", + "ragium.chemical.ragium.mercury": "Mercury", + "ragium.chemical.ragium.mercury_sulfide": "Mercury Sulfide", "ragium.chemical.ragium.nitrate": "Nitrate", "ragium.chemical.ragium.nitric_acid": "Nitric Acid", "ragium.chemical.ragium.nitrogen": "Nitrogen", "ragium.chemical.ragium.oxygen": "Oxygen", + "ragium.chemical.ragium.potassium_carbonate": "Potassium Carbonate", "ragium.chemical.ragium.potassium_nitrate": "Potassium Nitrate", "ragium.chemical.ragium.silicon": "Silicon", "ragium.chemical.ragium.silicon_dioxide": "Silicon Dioxide", @@ -382,6 +386,7 @@ "ragium.element.ragium.gold": "Gold", "ragium.element.ragium.hydrogen": "Hydrogen", "ragium.element.ragium.iron": "Iron", + "ragium.element.ragium.mercury": "Mercury", "ragium.element.ragium.nitrogen": "Nitrogen", "ragium.element.ragium.oxygen": "Oxygen", "ragium.element.ragium.potassium": "Potassium", diff --git a/src/generated/resources/assets/ragium/lang/ja_jp.json b/src/generated/resources/assets/ragium/lang/ja_jp.json index 04fdab9d9..6a4c50ba0 100644 --- a/src/generated/resources/assets/ragium/lang/ja_jp.json +++ b/src/generated/resources/assets/ragium/lang/ja_jp.json @@ -201,6 +201,7 @@ "item.ragium.anti_rust_oil_bucket": "防錆油入りバケツ", "item.ragium.arcane_machine_parts": "機械部品 (神秘)", "item.ragium.aromatic_compound_bucket": "芳香族化合物入りバケツ", + "item.ragium.ash_dust": "灰の粉", "item.ragium.ball_mold": "ボールの鋳型", "item.ragium.bamboo_charcoal": "竹炭", "item.ragium.bauxite_dust": "ボーキサイトの粉", @@ -357,10 +358,13 @@ "ragium.chemical.ragium.hydrogen_fluoride": "フッ化水素", "ragium.chemical.ragium.hydroxide": "水酸化物", "ragium.chemical.ragium.iron": "鉄", + "ragium.chemical.ragium.mercury": "水銀", + "ragium.chemical.ragium.mercury_sulfide": "硫化水銀", "ragium.chemical.ragium.nitrate": "硝酸塩", "ragium.chemical.ragium.nitric_acid": "硝酸", "ragium.chemical.ragium.nitrogen": "窒素", "ragium.chemical.ragium.oxygen": "酸素", + "ragium.chemical.ragium.potassium_carbonate": "炭酸カリウム", "ragium.chemical.ragium.potassium_nitrate": "硝酸カリウム", "ragium.chemical.ragium.silicon": "ケイ素", "ragium.chemical.ragium.silicon_dioxide": "二酸化ケイ素", @@ -382,6 +386,7 @@ "ragium.element.ragium.gold": "金", "ragium.element.ragium.hydrogen": "水素", "ragium.element.ragium.iron": "鉄", + "ragium.element.ragium.mercury": "水銀", "ragium.element.ragium.nitrogen": "窒素", "ragium.element.ragium.oxygen": "酸素", "ragium.element.ragium.potassium": "カリウム", diff --git a/src/generated/resources/assets/ragium/models/item/ash_dust.json b/src/generated/resources/assets/ragium/models/item/ash_dust.json new file mode 100644 index 000000000..8b3b1fcff --- /dev/null +++ b/src/generated/resources/assets/ragium/models/item/ash_dust.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "ragium:item/ash_dust" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/dusts.json b/src/generated/resources/data/c/tags/item/dusts.json index f3ef3685b..ae70100ca 100644 --- a/src/generated/resources/data/c/tags/item/dusts.json +++ b/src/generated/resources/data/c/tags/item/dusts.json @@ -2,6 +2,7 @@ "values": [ "#c:dusts/alumina", "#c:dusts/amethyst", + "#c:dusts/ash", "#c:dusts/bauxite", "#c:dusts/borax", "#c:dusts/carbon", diff --git a/src/generated/resources/data/c/tags/item/dusts/ash.json b/src/generated/resources/data/c/tags/item/dusts/ash.json new file mode 100644 index 000000000..03e8c9273 --- /dev/null +++ b/src/generated/resources/data/c/tags/item/dusts/ash.json @@ -0,0 +1,5 @@ +{ + "values": [ + "ragium:ash_dust" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/chemical/mercury.json b/src/generated/resources/data/ragium/ragium/chemical/mercury.json new file mode 100644 index 000000000..d8720c51e --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/chemical/mercury.json @@ -0,0 +1,4 @@ +{ + "type": "ragium:simple", + "element": "ragium:mercury" +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/chemical/mercury_sulfide.json b/src/generated/resources/data/ragium/ragium/chemical/mercury_sulfide.json new file mode 100644 index 000000000..f316c1e35 --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/chemical/mercury_sulfide.json @@ -0,0 +1,11 @@ +{ + "type": "ragium:compound", + "composition": [ + { + "element": "ragium:mercury" + }, + { + "element": "ragium:sulfur" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/chemical/potassium_carbonate.json b/src/generated/resources/data/ragium/ragium/chemical/potassium_carbonate.json new file mode 100644 index 000000000..b6b56a4b1 --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/chemical/potassium_carbonate.json @@ -0,0 +1,12 @@ +{ + "type": "ragium:compound", + "composition": [ + { + "element": "ragium:potassium", + "weight": 2 + }, + { + "chemical": "ragium:carbonate" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/element/mercury.json b/src/generated/resources/data/ragium/ragium/element/mercury.json new file mode 100644 index 000000000..739bdb041 --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/element/mercury.json @@ -0,0 +1,3 @@ +{ + "symbol": "Hg" +} \ No newline at end of file diff --git a/src/generated/resources/reports/ragium/registries.json b/src/generated/resources/reports/ragium/registries.json index 5cd3e810b..6aec48c6f 100644 --- a/src/generated/resources/reports/ragium/registries.json +++ b/src/generated/resources/reports/ragium/registries.json @@ -214,6 +214,7 @@ "arcane_machine_casing", "arcane_machine_parts", "aromatic_compound_bucket", + "ash_dust", "assembler", "ball_mold", "bamboo_charcoal", @@ -554,10 +555,13 @@ "hydrogen_fluoride", "hydroxide", "iron", + "mercury", + "mercury_sulfide", "nitrate", "nitric_acid", "nitrogen", "oxygen", + "potassium_carbonate", "potassium_nitrate", "silicon", "silicon_dioxide", @@ -586,6 +590,7 @@ "gold", "hydrogen", "iron", + "mercury", "nitrogen", "oxygen", "potassium", diff --git a/src/lib/kotlin/hiiragi283/ragium/api/data/chemical/RagiumChemicals.kt b/src/lib/kotlin/hiiragi283/ragium/api/data/chemical/RagiumChemicals.kt index f4285773b..94108980c 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/data/chemical/RagiumChemicals.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/data/chemical/RagiumChemicals.kt @@ -58,6 +58,9 @@ data object RagiumChemicals { @JvmField val GOLD: ResourceKey = create("gold") + @JvmField + val MERCURY: ResourceKey = create("mercury") + // Compounds // // 1st Period @@ -121,6 +124,9 @@ data object RagiumChemicals { val HYDROGEN_CHLORIDE: ResourceKey = create("hydrogen_chloride") // 4th Period + @JvmField + val POTASSIUM_CARBONATE: ResourceKey = create("potassium_carbonate") + @JvmField val POTASSIUM_NITRATE: ResourceKey = create("potassium_nitrate") @@ -133,6 +139,10 @@ data object RagiumChemicals { @JvmField val CALCIUM_SULFATE: ResourceKey = create("calcium_sulfate") + // 6th Period + @JvmField + val MERCURY_SULFIDE: ResourceKey = create("mercury_sulfide") + // Mixtures // @JvmStatic @@ -159,6 +169,7 @@ data object RagiumChemicals { context.register(COPPER, HTSimpleChemical(getter.getOrThrow(RagiumElements.COPPER), 1)) context.register(GOLD, HTSimpleChemical(getter.getOrThrow(RagiumElements.GOLD), 1)) + context.register(MERCURY, HTSimpleChemical(getter.getOrThrow(RagiumElements.MERCURY), 1)) // Compounds context.register( @@ -298,6 +309,13 @@ data object RagiumChemicals { } ) + context.register( + POTASSIUM_CARBONATE, + HTCompoundChemical.build(context) { + add(RagiumElements.POTASSIUM, 2) + add(CARBONATE, 1) + } + ) context.register( POTASSIUM_NITRATE, HTCompoundChemical.build(context) { @@ -326,5 +344,13 @@ data object RagiumChemicals { add(SULFATE, 1) } ) + + context.register( + MERCURY_SULFIDE, + HTCompoundChemical.build(context) { + add(RagiumElements.MERCURY, 1) + add(RagiumElements.SULFUR, 1) + } + ) } } diff --git a/src/lib/kotlin/hiiragi283/ragium/api/data/element/RagiumElements.kt b/src/lib/kotlin/hiiragi283/ragium/api/data/element/RagiumElements.kt index 2e07a2115..d4412e89d 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/data/element/RagiumElements.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/data/element/RagiumElements.kt @@ -62,6 +62,9 @@ data object RagiumElements { @JvmField val GOLD: ResourceKey = create("gold") + @JvmField + val MERCURY: ResourceKey = create("mercury") + @JvmStatic private fun create(name: String): ResourceKey = RagiumRegistries.Keys.ELEMENT.createKey(RagiumAPI.id(name)) @@ -91,5 +94,6 @@ data object RagiumElements { register(COPPER, "Cu") register(GOLD, "Au") + register(MERCURY, "Hg") } } diff --git a/src/lib/kotlin/hiiragi283/ragium/api/material/RagiumMaterial.kt b/src/lib/kotlin/hiiragi283/ragium/api/material/RagiumMaterial.kt index 9d85042be..5c647ee86 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/material/RagiumMaterial.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/material/RagiumMaterial.kt @@ -123,6 +123,11 @@ sealed interface RagiumMaterial : */ SILICON("Silicon", "シリコン", RagiumChemicals.SILICON), + /** + * @since 26.1.9 + */ + ASH("Ash", "灰", RagiumChemicals.POTASSIUM_CARBONATE), + /** * @since 26.1.8 */ @@ -159,7 +164,7 @@ sealed interface RagiumMaterial : /** * @since 26.1.8 */ - CINNABAR("Cinnabar", "辰砂"), + CINNABAR("Cinnabar", "辰砂", RagiumChemicals.MERCURY_SULFIDE), /** * @since 26.1.7 diff --git a/src/main/resources/assets/ragium/textures/item/ash_dust.png b/src/main/resources/assets/ragium/textures/item/ash_dust.png new file mode 100644 index 0000000000000000000000000000000000000000..3fb0925dc78086c9ccbaab0f19fad25dba6194ba GIT binary patch literal 271 zcmV+q0r38bP)JOf!R+m>7eWmezl4 zYB5{@(+pGm`t@s&W*GPXwQJW_7KUktiGehOyn<{1 zJP@IQ0}g4R6B%Hdku`wWAaUe?#E4s%|3J3FoD0(kvKc)VuqF Date: Fri, 9 Oct 2026 19:29:19 +0900 Subject: [PATCH 04/25] =?UTF-8?q?feat:=20=E6=96=B0=E3=81=97=E3=81=84?= =?UTF-8?q?=E3=83=AC=E3=82=B7=E3=83=94=E3=82=BF=E3=82=A4=E3=83=97=E3=80=8C?= =?UTF-8?q?Exchanging=20/=20=E4=BA=A4=E6=8F=9B=E3=80=8D=E3=82=92=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data/lang/RagiumEnglishLangProvider.kt | 1 + .../data/lang/RagiumJapaneseLangProvider.kt | 1 + .../resources/assets/ragium/lang/en_us.json | 1 + .../resources/assets/ragium/lang/ja_jp.json | 1 + .../resources/reports/ragium/registries.json | 2 + .../builder/HTItemOrFluidRecipeBuilder.kt | 93 +++++++++++++++++++ .../lib/recipe/base/HTItemAndFluidToRecipe.kt | 52 +++++++++++ .../hiiragi283/ragium/api/RagiumConstants.kt | 1 + .../recipe/builder/RagiumRecipeBuilders.kt | 12 +++ .../ragium/api/recipe/RTExchangingRecipe.kt | 29 ++++++ .../ragium/api/recipe/RagiumRecipeLookups.kt | 4 + .../api/recipe/RagiumRecipeSerializers.kt | 4 + .../ragium/api/recipe/RagiumRecipeTypes.kt | 3 + .../category/HTItemOrFluidRecipeCategory.kt | 59 ++++++++++++ .../hiiragi283/ragium/common/RagiumCommon.kt | 1 + 15 files changed, 264 insertions(+) create mode 100644 src/lib/kotlin/hiiragi283/lib/data/recipe/builder/HTItemOrFluidRecipeBuilder.kt create mode 100644 src/lib/kotlin/hiiragi283/ragium/api/recipe/RTExchangingRecipe.kt create mode 100644 src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTItemOrFluidRecipeCategory.kt diff --git a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt index 1cab199b4..60a521d8c 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt @@ -183,6 +183,7 @@ class RagiumEnglishLangProvider(output: PackOutput) : addRecipeType(RagiumRecipeTypes.BATHING, "Chemical Bathing") addRecipeType(RagiumRecipeTypes.CENTRIFUGING, "Centrifuging") + addRecipeType(RagiumRecipeTypes.EXCHANGING, "Exchanging") addRecipeType(RagiumRecipeTypes.MIXING, "Mixing") addRecipeType(RagiumRecipeTypes.REACTING, "Chemical Reacting") addRecipeType(RagiumRecipeTypes.WASHING, "Washing") diff --git a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt index 560769a76..48527406d 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt @@ -179,6 +179,7 @@ class RagiumJapaneseLangProvider(output: PackOutput) : addRecipeType(RagiumRecipeTypes.BATHING, "化学洗浄") addRecipeType(RagiumRecipeTypes.CENTRIFUGING, "遠心分離") + addRecipeType(RagiumRecipeTypes.EXCHANGING, "交換") addRecipeType(RagiumRecipeTypes.MIXING, "混合") addRecipeType(RagiumRecipeTypes.REACTING, "化学反応") addRecipeType(RagiumRecipeTypes.WASHING, "洗浄") diff --git a/src/generated/resources/assets/ragium/lang/en_us.json b/src/generated/resources/assets/ragium/lang/en_us.json index aebc3f1d9..dbd1486ab 100644 --- a/src/generated/resources/assets/ragium/lang/en_us.json +++ b/src/generated/resources/assets/ragium/lang/en_us.json @@ -404,6 +404,7 @@ "recipe_type.ragium.draining": "Draining", "recipe_type.ragium.electrolyzing": "Electrolyzing", "recipe_type.ragium.enchanting": "Enchanting", + "recipe_type.ragium.exchanging": "Exchanging", "recipe_type.ragium.filling": "Filling", "recipe_type.ragium.freezing": "Freezing", "recipe_type.ragium.melting": "Melting", diff --git a/src/generated/resources/assets/ragium/lang/ja_jp.json b/src/generated/resources/assets/ragium/lang/ja_jp.json index 6a4c50ba0..80297bcc7 100644 --- a/src/generated/resources/assets/ragium/lang/ja_jp.json +++ b/src/generated/resources/assets/ragium/lang/ja_jp.json @@ -404,6 +404,7 @@ "recipe_type.ragium.draining": "排出", "recipe_type.ragium.electrolyzing": "電気分解", "recipe_type.ragium.enchanting": "エンチャント", + "recipe_type.ragium.exchanging": "交換", "recipe_type.ragium.filling": "封入", "recipe_type.ragium.freezing": "冷凍", "recipe_type.ragium.melting": "溶融", diff --git a/src/generated/resources/reports/ragium/registries.json b/src/generated/resources/reports/ragium/registries.json index 6aec48c6f..ab5cbb8db 100644 --- a/src/generated/resources/reports/ragium/registries.json +++ b/src/generated/resources/reports/ragium/registries.json @@ -432,6 +432,7 @@ "draining", "electrolyzing", "enchanting", + "exchanging", "filling", "freezing", "melting", @@ -455,6 +456,7 @@ "draining", "electrolyzing", "enchanting", + "exchanging", "filling", "freezing", "melting", diff --git a/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/HTItemOrFluidRecipeBuilder.kt b/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/HTItemOrFluidRecipeBuilder.kt new file mode 100644 index 000000000..81d90ccc6 --- /dev/null +++ b/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/HTItemOrFluidRecipeBuilder.kt @@ -0,0 +1,93 @@ +@file:OptIn(ExperimentalContracts::class) + +package hiiragi283.lib.data.recipe.builder + +import hiiragi283.lib.data.recipe.ingredient.HTFluidIngredientBuilder +import hiiragi283.lib.data.recipe.ingredient.HTItemIngredientBuilder +import hiiragi283.lib.data.recipe.result.HTFluidResultBuilder +import hiiragi283.lib.data.recipe.result.HTItemResultBuilder +import hiiragi283.lib.recipe.ingredient.HTFluidIngredient +import hiiragi283.lib.recipe.ingredient.HTItemIngredient +import hiiragi283.lib.recipe.result.HTFluidResult +import hiiragi283.lib.recipe.result.HTItemOrFluidResult +import hiiragi283.lib.recipe.result.HTItemResult +import hiiragi283.lib.util.HTDelegates +import hiiragi283.lib.util.Ior +import net.minecraft.resources.Identifier +import net.minecraft.world.item.crafting.Recipe +import java.util.Optional +import kotlin.contracts.ExperimentalContracts +import kotlin.contracts.InvocationKind +import kotlin.contracts.contract + +/** + * 1種類のアイテムと液体から1種類のアイテムと液体を作成するレシピ向けの[HTProgressRecipeBuilder]の実装クラスです。 + * @param RECIPE 生成するレシピのクラス + * @author Hiiragi Tsubasa + * @since 26.1.9 + */ +class HTItemOrFluidRecipeBuilder>( + prefix: String, + private val factory: HTItemAndFluidToRecipeBuilder.Factory +) : HTProgressRecipeBuilder(prefix) { + override fun getRecipeId(): Identifier? = result.getId() + + override fun createRecipe(): RECIPE = factory.create(itemIngredient, fluidIngredient, result, progressData) + + // Ingredients + var itemIngredient: HTItemIngredient by HTDelegates.onceInitialize() + var fluidIngredient: HTFluidIngredient by HTDelegates.onceInitialize() + + operator fun HTItemIngredient.unaryPlus() { + itemIngredient = this + } + + operator fun HTFluidIngredient.unaryPlus() { + fluidIngredient = this + } + + inline fun itemIngredient(builderAction: HTItemIngredientBuilder.() -> Unit) { + contract { + callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) + } + +HTItemIngredientBuilder.build(builderAction) + } + + inline fun fluidIngredient(builderAction: HTFluidIngredientBuilder.() -> Unit) { + contract { + callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) + } + +HTFluidIngredientBuilder.build(builderAction) + } + + // Results + var itemResult: Optional by HTDelegates.optionalInitialize() + + var fluidResult: Optional by HTDelegates.optionalInitialize() + + val result: HTItemOrFluidResult get() = Ior.fromNullable(itemResult, fluidResult) + .map(::HTItemOrFluidResult) + .orElseThrow { error("Either item or fluid result required") } + + operator fun HTItemResult.unaryPlus() { + itemResult = Optional.of(this) + } + + operator fun HTFluidResult.unaryPlus() { + fluidResult = Optional.of(this) + } + + inline fun itemResult(builderAction: HTItemResultBuilder.() -> Unit) { + contract { + callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) + } + +HTItemResultBuilder.build(builderAction) + } + + inline fun fluidResult(builderAction: HTFluidResultBuilder.() -> Unit) { + contract { + callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) + } + +HTFluidResultBuilder.build(builderAction) + } +} diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTItemAndFluidToRecipe.kt b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTItemAndFluidToRecipe.kt index 0692e2a4a..d473c4323 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTItemAndFluidToRecipe.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTItemAndFluidToRecipe.kt @@ -8,6 +8,8 @@ import hiiragi283.lib.recipe.ingredient.HTFluidIngredient import hiiragi283.lib.recipe.ingredient.HTItemIngredient import hiiragi283.lib.recipe.input.HTItemAndFluidRecipeInput import hiiragi283.lib.recipe.result.HTFluidResult +import hiiragi283.lib.recipe.result.HTItemAndFluidStack +import hiiragi283.lib.recipe.result.HTItemOrFluidResult import hiiragi283.lib.recipe.result.HTItemResult import hiiragi283.lib.recipe.result.HTRecipeResult import hiiragi283.lib.serialization.codec.HTCodecs @@ -32,6 +34,13 @@ typealias HTItemAndFluidToFluidRecipe = HTItemAndFluidToRecipe */ typealias HTItemAndFluidToItemRecipe = HTItemAndFluidToRecipe +/** + * 1種類のアイテムと液体から1種類のアイテムと液体を作成するレシピを表すエイリアスです。 + * @author Hiiragi Tsubasa + * @since 26.1.9 + */ +typealias HTItemOrFluidRecipe = HTItemAndFluidToRecipe + /** * 1種類のアイテムと液体から1種類の完成品を作成するレシピを表すインターフェースです。 * @author Hiiragi Tsubasa @@ -71,6 +80,23 @@ interface HTItemAndFluidToRecipe : ).apply(instance, factory::create) } + @JvmStatic + fun , RECIPE : Basic> codec( + resultCodec: MapCodec, + factory: HTItemAndFluidToRecipeBuilder.Factory + ): MapCodec = HTCodecs.recordMap { instance -> + instance.group( + HTItemIngredient.CODEC + .fieldOf(HTConstants.ITEM_INGREDIENT) + .forGetter(Basic::itemIngredient), + HTFluidIngredient.CODEC + .fieldOf(HTConstants.FLUID_INGREDIENT) + .forGetter(Basic::fluidIngredient), + resultCodec.forGetter(Basic::result), + HTProgressData.CODEC.forGetter(Basic::progressData) + ).apply(instance, factory::create) + } + @JvmStatic fun , RECIPE : Basic> streamCodec( resultCodec: StreamCodec, @@ -148,4 +174,30 @@ interface HTItemAndFluidToRecipe : val SIMPLE_CODEC: MapCodec = codec(::BasicFluid) } } + + /** + * @author Hiiragi Tsubasa + * @since 26.1.9 + */ + open class BasicItemAndFluid( + itemIngredient: HTItemIngredient, + fluidIngredient: HTFluidIngredient, + result: HTItemOrFluidResult, + progressData: HTProgressData + ) : Basic(itemIngredient, fluidIngredient, result, progressData) { + companion object { + @JvmStatic + fun codec( + factory: HTItemAndFluidToRecipeBuilder.Factory + ): MapCodec = codec(HTItemOrFluidResult.CODEC, factory) + + @JvmStatic + fun streamCodec( + factory: HTItemAndFluidToRecipeBuilder.Factory + ): StreamCodec = streamCodec(HTItemOrFluidResult.STREAM_CODEC, factory) + + @JvmField + val SIMPLE_CODEC: MapCodec = codec(::BasicItemAndFluid) + } + } } diff --git a/src/lib/kotlin/hiiragi283/ragium/api/RagiumConstants.kt b/src/lib/kotlin/hiiragi283/ragium/api/RagiumConstants.kt index f094c6351..98859aec1 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/RagiumConstants.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/RagiumConstants.kt @@ -63,6 +63,7 @@ data object RagiumConstants { // Chemical const val BATHING = "bathing" const val CENTRIFUGING = "centrifuging" + const val EXCHANGING = "exchanging" const val MIXING = "mixing" const val REACTING = "reacting" const val WASHING = "washing" diff --git a/src/lib/kotlin/hiiragi283/ragium/api/data/recipe/builder/RagiumRecipeBuilders.kt b/src/lib/kotlin/hiiragi283/ragium/api/data/recipe/builder/RagiumRecipeBuilders.kt index 4dcc71520..a685e4af0 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/data/recipe/builder/RagiumRecipeBuilders.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/data/recipe/builder/RagiumRecipeBuilders.kt @@ -5,6 +5,7 @@ package hiiragi283.ragium.api.data.recipe.builder import hiiragi283.lib.data.recipe.builder.HTFluidToDoubleFluidRecipeBuilder import hiiragi283.lib.data.recipe.builder.HTFluidToItemAndFluidRecipeBuilder import hiiragi283.lib.data.recipe.builder.HTItemAndFluidToRecipeBuilder +import hiiragi283.lib.data.recipe.builder.HTItemOrFluidRecipeBuilder import hiiragi283.lib.data.recipe.builder.HTItemToDoubleItemRecipeBuilder import hiiragi283.lib.data.recipe.builder.HTItemToFluidRecipeBuilder import hiiragi283.lib.data.recipe.builder.HTItemToItemAndFluidRecipeBuilder @@ -22,6 +23,7 @@ import hiiragi283.ragium.api.recipe.RTCrushingRecipe import hiiragi283.ragium.api.recipe.RTCuttingRecipe import hiiragi283.ragium.api.recipe.RTDrainingRecipe import hiiragi283.ragium.api.recipe.RTEnchantingRecipe +import hiiragi283.ragium.api.recipe.RTExchangingRecipe import hiiragi283.ragium.api.recipe.RTFillingRecipe import hiiragi283.ragium.api.recipe.RTMeltingRecipe import hiiragi283.ragium.api.recipe.RTPlantingRecipe @@ -169,6 +171,16 @@ data object RagiumRecipeBuilders { .apply(builderAction) } + @JvmStatic + inline fun exchanging( + builderAction: HTItemOrFluidRecipeBuilder.() -> Unit + ): HTItemOrFluidRecipeBuilder { + contract { + callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) + } + return HTItemOrFluidRecipeBuilder(RagiumConstants.EXCHANGING, ::RTExchangingRecipe).apply(builderAction) + } + @JvmStatic inline fun mixing(builderAction: RTMixingRecipeBuilder.() -> Unit): RTMixingRecipeBuilder { contract { diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTExchangingRecipe.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTExchangingRecipe.kt new file mode 100644 index 000000000..f9771cceb --- /dev/null +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTExchangingRecipe.kt @@ -0,0 +1,29 @@ +package hiiragi283.ragium.api.recipe + +import hiiragi283.lib.recipe.HTSerializableRecipe +import hiiragi283.lib.recipe.base.HTItemAndFluidToRecipe +import hiiragi283.lib.recipe.base.HTProgressData +import hiiragi283.lib.recipe.ingredient.HTFluidIngredient +import hiiragi283.lib.recipe.ingredient.HTItemIngredient +import hiiragi283.lib.recipe.input.HTItemAndFluidRecipeInput +import hiiragi283.lib.recipe.result.HTItemOrFluidResult +import net.minecraft.world.item.crafting.RecipeSerializer +import net.minecraft.world.item.crafting.RecipeType + +class RTExchangingRecipe( + itemIngredient: HTItemIngredient, + fluidIngredient: HTFluidIngredient, + result: HTItemOrFluidResult, + progressData: HTProgressData +) : HTItemAndFluidToRecipe.BasicItemAndFluid(itemIngredient, fluidIngredient, result, progressData), + HTSerializableRecipe { + companion object { + @JvmField + val SERIALIZER: RecipeSerializer = + RecipeSerializer(codec(::RTExchangingRecipe), streamCodec(::RTExchangingRecipe)) + } + + override fun getSerializer(): RecipeSerializer = RagiumRecipeSerializers.EXCHANGING + + override fun getType(): RecipeType = RagiumRecipeTypes.EXCHANGING +} diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeLookups.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeLookups.kt index 20eced881..96b28af51 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeLookups.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeLookups.kt @@ -4,6 +4,7 @@ import hiiragi283.lib.recipe.base.HTFluidToDoubleFluidRecipe import hiiragi283.lib.recipe.base.HTFluidToItemAndFluidRecipe import hiiragi283.lib.recipe.base.HTItemAndFluidToFluidRecipe import hiiragi283.lib.recipe.base.HTItemAndFluidToItemRecipe +import hiiragi283.lib.recipe.base.HTItemOrFluidRecipe import hiiragi283.lib.recipe.base.HTItemToDoubleItemRecipe import hiiragi283.lib.recipe.base.HTItemToFluidRecipe import hiiragi283.lib.recipe.base.HTItemToItemAndFluidRecipe @@ -75,6 +76,9 @@ data object RagiumRecipeLookups { @JvmField val CENTRIFUGING: HTCompoundRecipeLookup = create(RagiumConstants.CENTRIFUGING) + @JvmField + val EXCHANGING: HTCompoundRecipeLookup = create(RagiumConstants.EXCHANGING) + @JvmField val MIXING: HTRecipeLookup = create(RagiumRecipeTypes.MIXING) diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeSerializers.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeSerializers.kt index 7438289a7..81990d2bb 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeSerializers.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeSerializers.kt @@ -91,6 +91,10 @@ data object RagiumRecipeSerializers { val CENTRIFUGING: RecipeSerializer = register(RagiumConstants.CENTRIFUGING, RTCentrifugingRecipe.SERIALIZER) + @JvmField + val EXCHANGING: RecipeSerializer = + register(RagiumConstants.EXCHANGING, RTExchangingRecipe.SERIALIZER) + @JvmField val MIXING: RecipeSerializer = register(RagiumConstants.MIXING, RTMixingRecipe.SERIALIZER) diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeTypes.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeTypes.kt index 57057236e..2680ac8a2 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeTypes.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeTypes.kt @@ -76,6 +76,9 @@ data object RagiumRecipeTypes { @JvmField val CENTRIFUGING: RecipeType = create(RagiumConstants.CENTRIFUGING) + @JvmField + val EXCHANGING: RecipeType = create(RagiumConstants.EXCHANGING) + @JvmField val MIXING: RecipeType = create(RagiumConstants.MIXING) diff --git a/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTItemOrFluidRecipeCategory.kt b/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTItemOrFluidRecipeCategory.kt new file mode 100644 index 000000000..19bb9f973 --- /dev/null +++ b/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTItemOrFluidRecipeCategory.kt @@ -0,0 +1,59 @@ +package hiiragi283.lib.integration.jei.category + +import hiiragi283.lib.gui.HTBackgroundType +import hiiragi283.lib.integration.jei.HTRecipeHolderType +import hiiragi283.lib.integration.jei.add +import hiiragi283.lib.recipe.base.HTItemAndFluidToRecipe +import mezz.jei.api.gui.builder.IRecipeLayoutBuilder +import mezz.jei.api.gui.builder.IRecipeSlotBuilder +import mezz.jei.api.gui.drawable.IDrawable +import mezz.jei.api.gui.widgets.IRecipeExtrasBuilder +import mezz.jei.api.recipe.IFocusGroup +import net.minecraft.world.item.crafting.RecipeType + +class HTItemOrFluidRecipeCategory( + recipeType: HTRecipeHolderType, + recipeType1: RecipeType<*>, + icon: IDrawable +) : HTHolderRecipeCategory( + recipeType, + recipeType1, + icon, + 18 * 8, + 18 * 1, + HTItemAndFluidToRecipe.BasicItemAndFluid.SIMPLE_CODEC +) { + override fun setupRecipe( + builder: IRecipeLayoutBuilder, + recipe: HTItemAndFluidToRecipe.BasicItemAndFluid, + focuses: IFocusGroup + ) { + // inputs + builder + .addInputSlot(getPosition(0), getPosition(0)) + .add(recipe.fluidIngredient) + .setSlotBackground(HTBackgroundType.INPUT) + builder + .addInputSlot(getPosition(2), getPosition(0)) + .add(recipe.itemIngredient) + .setSlotBackground(HTBackgroundType.INPUT) + // outputs + val itemOutput: IRecipeSlotBuilder = builder + .addOutputSlot(getPosition(5), getPosition(0)) + .setSlotBackground(HTBackgroundType.OUTPUT) + val fluidOutput: IRecipeSlotBuilder = builder + .addOutputSlot(getPosition(7), getPosition(0)) + .setSlotBackground(HTBackgroundType.OUTPUT) + recipe.result.content.mapLeft(itemOutput::add).mapRight(fluidOutput::add) + } + + override fun setupRecipeExtras( + builder: IRecipeExtrasBuilder, + recipe: HTItemAndFluidToRecipe.BasicItemAndFluid, + focuses: IFocusGroup + ) { + builder.addRecipePlus(getPosition(1)) + builder.addRecipeArrow(recipe).setPosition(getPosition(3.25), getPosition(0)) + builder.addRecipePlus(getPosition(6)) + } +} diff --git a/src/main/kotlin/hiiragi283/ragium/common/RagiumCommon.kt b/src/main/kotlin/hiiragi283/ragium/common/RagiumCommon.kt index f549d4375..18c416b69 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/RagiumCommon.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/RagiumCommon.kt @@ -130,6 +130,7 @@ internal data object RagiumCommon { RagiumRecipeLookups.BATHING.fromRecipeType(RagiumRecipeTypes.BATHING, identity()) RagiumRecipeLookups.CENTRIFUGING.fromRecipeType(RagiumRecipeTypes.CENTRIFUGING, identity()) + RagiumRecipeLookups.EXCHANGING.fromRecipeType(RagiumRecipeTypes.EXCHANGING, identity()) RagiumRecipeLookups.BREWING.fromRecipeType(RagiumRecipeTypes.BREWING, identity()) RagiumRecipeLookups.PLANTING.fromRecipeType(RagiumRecipeTypes.PLANTING, identity()) From 436741a6a5460b5470cd81a79e5e2b6f5eee7212 Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Fri, 9 Oct 2026 21:48:15 +0900 Subject: [PATCH 05/25] =?UTF-8?q?refactor:=20=E3=83=AC=E3=82=B8=E3=82=B9?= =?UTF-8?q?=E3=83=88=E3=83=AA=E5=91=A8=E3=82=8A=E3=81=AE=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/event/RagiumClientEventHandler.kt | 2 +- .../client/integration/jei/RagiumJeiPlugin.kt | 13 +++-- .../ragium/data/model/RagiumModelProvider.kt | 6 +-- .../data/recipe/RagiumCommonRecipeProvider.kt | 14 +++--- .../recipe/RagiumVanillaRecipeProvider.kt | 14 +++--- .../lib/collection/HTCollections.kt | 11 +++++ .../lib/data/ExporterDataProvider.kt | 2 +- .../data/advancement/HTDisplayInfoBuilder.kt | 2 +- .../lib/data/loot/HTBlockLootTableProvider.kt | 2 +- .../lib/data/model/HTModelProvider.kt | 6 +-- .../lib/data/model/ModelTemplates.kt | 4 +- .../hiiragi283/lib/data/tag/HTTagBuilder.kt | 2 +- .../lib/fluid/HTFluidInstanceLike.kt | 18 +++++-- .../hiiragi283/lib/item/HTItemInstanceLike.kt | 12 ++++- .../lib/item/alchemy/HTPotionHelper.kt | 48 +++++++++++-------- .../ingredient/HTPotionFluidIngredient.kt | 17 +++---- .../lib/recipe/lookup/HTRecipeCache.kt | 8 ++-- .../lib/recipe/lookup/HTVanillaRecipeCache.kt | 6 ++- .../lib/recipe/result/HTFluidResult.kt | 3 +- .../lib/registry/HTDeferredHolder.kt | 13 ++--- .../hiiragi283/lib/registry/HTDeferredItem.kt | 14 ++---- .../hiiragi283/lib/registry/HTFluidContent.kt | 18 ++----- .../hiiragi283/lib/resource/HTValueWithKey.kt | 27 +++++------ src/lib/kotlin/hiiragi283/lib/util/Either.kt | 14 ++++++ .../hiiragi283/ragium/common/RagiumCommon.kt | 10 +++- .../ragium/common/block/RagiumBlocks.kt | 4 +- .../common/block/storage/HTPotionTankBlock.kt | 14 ++++-- .../ragium/common/fluid/HTDyedFluidType.kt | 11 +++-- .../ragium/common/fluid/HTPotionFluidType.kt | 3 +- .../ragium/common/item/HTPotionBucketItem.kt | 2 +- .../item/block/HTPotionTankBlockItem.kt | 8 ++-- .../recipe/RTPotionBottleDrainingRecipe.kt | 6 ++- .../recipe/RTPotionBottleFillingRecipe.kt | 2 +- 33 files changed, 194 insertions(+), 142 deletions(-) diff --git a/src/client/kotlin/hiiragi283/ragium/client/event/RagiumClientEventHandler.kt b/src/client/kotlin/hiiragi283/ragium/client/event/RagiumClientEventHandler.kt index 80671de5a..b10611085 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/event/RagiumClientEventHandler.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/event/RagiumClientEventHandler.kt @@ -19,7 +19,7 @@ data object RagiumClientEventHandler { val appender: (Text) -> Unit = event.toolTip::add // Potion Fluid if (RagiumFluids.POTION.isOf(stack)) { - HTPotionHelper.getContentsNotEmpty(stack)?.addToTooltip(event.context, appender, event.flags, stack) + HTPotionHelper.getContentsOrEmpty(stack).addToTooltip(event.context, appender, event.flags, stack) } // Chemical Tooltip HTClientChemicalHelper.addToTooltip(stack, appender) diff --git a/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiPlugin.kt b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiPlugin.kt index e3d3ded45..7cfda1ac7 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiPlugin.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiPlugin.kt @@ -102,7 +102,7 @@ class RagiumJeiPlugin : HTJeiPlugin(RagiumAPI.MOD_ID) { NeoForgeTypes.FLUID_STACK, listPotions() .filter { !it.`is`(Potions.WATER) } - .map(HTPotionHelper::createFluid) + .mapNotNull { HTPotionHelper.createFluid(it).getOrNull()?.create() } .toList() ) } @@ -241,10 +241,12 @@ class RagiumJeiPlugin : HTJeiPlugin(RagiumAPI.MOD_ID) { HTBottleType.entries.map { bottleType: HTBottleType -> RagiumRecipeBuilders.draining { +HTJeiRecipeHelper.fakeItem( - bottleType.filledItem.toStack(patch = HTPotionHelper.createPotionPatch(potion)) + bottleType.filledItem.asStackOrEmpty(patch = HTPotionHelper.createPotionPatch(potion)) ) itemResult { +bottleType.emptyItem } - fluidResult { from(HTPotionHelper.createFluid(potion, HTPotionHelper.BOTTLE_AMOUNT)) } + fluidResult { + from(HTPotionHelper.createFluid(potion, HTPotionHelper.BOTTLE_AMOUNT).getOrThrow()) + } progressData = RTPotionBottleDrainingRecipe.PROGRESS_DATA recipeId replace potion.getKeyOrThrow() .identifier() @@ -265,7 +267,10 @@ class RagiumJeiPlugin : HTJeiPlugin(RagiumAPI.MOD_ID) { amount = HTPotionHelper.BOTTLE_AMOUNT } result { - from(bottleType.filledItem.toStack(patch = HTPotionHelper.createPotionPatch(potion))) + bottleType.filledItem + .asTemplate(patch = HTPotionHelper.createPotionPatch(potion)) + .getOrThrow() + .let(::from) } progressData = RTPotionBottleFillingRecipe.PROGRESS_DATA recipeId replace potion.getKeyOrThrow() diff --git a/src/data/kotlin/hiiragi283/ragium/data/model/RagiumModelProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/model/RagiumModelProvider.kt index e5a14a8ae..0cb3da2a0 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/model/RagiumModelProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/model/RagiumModelProvider.kt @@ -93,7 +93,7 @@ class RagiumModelProvider(output: PackOutput) : HTModelProvider(output, RagiumAP for (blockItem: HTSimpleDeferredBlockAndItem in blockItems) { val (inactive: Identifier, active: Identifier) = when (blockItem) { RagiumBlocks.FREEZER -> { - RagiumAPI.id(HTConstants.BLOCK, "machine", "cryo") to blockItem.idOrThrow.blockId + RagiumAPI.id(HTConstants.BLOCK, "machine", "cryo") to blockItem.id().blockId } else -> inactiveModels[machineType]!! to machineModel(generators, machineType, blockItem) @@ -130,7 +130,7 @@ class RagiumModelProvider(output: PackOutput) : HTModelProvider(output, RagiumAP machineType: HTMachineType, block: HTSimpleValueWithKey ): Identifier { - val blockId: Identifier = block.idOrThrow.blockId + val blockId: Identifier = block.id().blockId return ModelTemplates.CUBE_ORIENTABLE.create( blockId, textureMapping(machineType).put(TextureSlot.FRONT, Material(blockId.withSuffix("_front"))), @@ -139,7 +139,7 @@ class RagiumModelProvider(output: PackOutput) : HTModelProvider(output, RagiumAP } private fun textureMapping(machineType: HTMachineType): TextureMapping = TextureMapping() - .put(TextureSlot.TOP, Material(RagiumBlocks.MACHINE_CASING.idOrThrow.blockId)) + .put(TextureSlot.TOP, Material(RagiumBlocks.MACHINE_CASING.id().blockId)) .put( TextureSlot.SIDE, Material(RagiumAPI.id(HTConstants.BLOCK, "machine", "${machineType.materialName}_side")) diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt index 27e09845a..e4e53bf95 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt @@ -230,7 +230,7 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu +RagiumFluids.ALCOHOL amount = 500 } - recipeId replace RagiumFluids.WOOD_TAR.idOrThrow + recipeId replace RagiumFluids.WOOD_TAR.id() }.save(exporter) } @@ -272,7 +272,7 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu +RagiumFluids.AROMATIC_COMPOUND amount = 250 } - recipeId replace RagiumFluids.COAL_TAR.idOrThrow + recipeId replace RagiumFluids.COAL_TAR.id() }.save(exporter) } @@ -307,7 +307,7 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu amount = 750 } itemResult { +RagiumItems.TAR } - recipeId replace RagiumFluids.CRUDE_OIL.idOrThrow + recipeId replace RagiumFluids.CRUDE_OIL.id() }.save(exporter) // Naphtha -> Fuel + Sulfur @@ -318,7 +318,7 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu +RagiumFluids.FUEL amount = 500 } - recipeId replace RagiumFluids.NAPHTHA.idOrThrow + recipeId replace RagiumFluids.NAPHTHA.id() }.save(exporter) // Naphtha + Redstone -> Anti-rust Oil RagiumRecipeBuilders.mixing { @@ -505,7 +505,7 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu amount *= 2 } itemResult { +RagiumItems.getOrThrow(HTItemPart.DUST, RagiumMaterial.Chemicals.SODA_ASH) } - recipeId replace RagiumFluids.NAOH_SOLUTION.idOrThrow + recipeId replace RagiumFluids.NAOH_SOLUTION.id() }.save(exporter) // SiO2 + Na2CO3 -> Glass RagiumRecipeBuilders.alloying { @@ -557,7 +557,7 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu ingredient { +holderSet(RagiumFluids.ALUMINA_SOLUTION) } itemResult { +RagiumItems.getOrThrow(HTItemPart.DUST, RagiumMaterial.Chemicals.ALUMINA) } fluidResult { water() } - recipeId replace RagiumFluids.ALUMINA_SOLUTION.idOrThrow + recipeId replace RagiumFluids.ALUMINA_SOLUTION.id() }.save(exporter) // Al(OH)3 (aq) + HF (aq) -> AlF3 (aq) RagiumRecipeBuilders.reacting { @@ -716,7 +716,7 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu ingredient { +holderSet(RagiumFluids.SALT_WATER) } fluidResult { water() } itemResult { +RagiumItems.getOrThrow(HTItemPart.DUST, RagiumMaterial.Mineral.SALT) } - recipeId replace RagiumFluids.SALT_WATER.idOrThrow + recipeId replace RagiumFluids.SALT_WATER.id() }.save(exporter) // 2x NaCl + H2SO4 -> 2x HCl + Na2SO4 diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt index a287df98d..78e38e50d 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt @@ -325,7 +325,7 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut +content.slab count = 6 } - group = content.slab.idOrThrow.path + group = content.slab.id().path }.save(exporter) VanillaRecipeBuilders.stonecutting { ingredient(stonecutterInput) @@ -333,7 +333,7 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut +slab count = 2 } - group = slab.idOrThrow.path + group = slab.id().path }.save(exporter) // Stairs if (stairs != null) { @@ -346,12 +346,12 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut +stairs count = 4 } - group = stairs.idOrThrow.path + group = stairs.id().path }.save(exporter) VanillaRecipeBuilders.stonecutting { ingredient(stonecutterInput) result { +stairs } - group = stairs.idOrThrow.path + group = stairs.id().path }.save(exporter) } // Wall @@ -364,12 +364,12 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut +wall count = 6 } - group = wall.idOrThrow.path + group = wall.id().path }.save(exporter) VanillaRecipeBuilders.stonecutting { ingredient(stonecutterInput) result { +wall } - group = wall.idOrThrow.path + group = wall.id().path }.save(exporter) } } @@ -674,7 +674,7 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut define('A') { +holderSet(CommonTagPrefixes.GEM, material) } result { +block } category = RecipeCategory.BUILDING_BLOCKS - group = block.idOrThrow.path + group = block.id().path }.save(exporter) } diff --git a/src/lib/kotlin/hiiragi283/lib/collection/HTCollections.kt b/src/lib/kotlin/hiiragi283/lib/collection/HTCollections.kt index 910498b0c..14ed92618 100644 --- a/src/lib/kotlin/hiiragi283/lib/collection/HTCollections.kt +++ b/src/lib/kotlin/hiiragi283/lib/collection/HTCollections.kt @@ -33,3 +33,14 @@ fun , CB : MutableCollection> Iterable< destinationB: CB ): Pair = this.mapNotNullTo(destinationA) { it.leftOrNull() } to this.mapNotNullTo(destinationB) { it.getOrNull() } + +fun Sequence>.separateEither(): Pair, List> = + this.separateEitherTo(mutableListOf(), mutableListOf()) + +fun , CB : MutableCollection> Sequence>.separateEitherTo( + destinationA: CA, + destinationB: CB +): Pair { + this.forEach { either: Either -> either.onLeft(destinationA::add).onRight(destinationB::add) } + return destinationA to destinationB +} diff --git a/src/lib/kotlin/hiiragi283/lib/data/ExporterDataProvider.kt b/src/lib/kotlin/hiiragi283/lib/data/ExporterDataProvider.kt index 90d79b38c..eb839a8e1 100644 --- a/src/lib/kotlin/hiiragi283/lib/data/ExporterDataProvider.kt +++ b/src/lib/kotlin/hiiragi283/lib/data/ExporterDataProvider.kt @@ -108,7 +108,7 @@ abstract class ExporterDataProvider( protected fun getHasName(id: Identifier): String = "has_${id.debugPath}" - protected fun getHasName(value: HTSimpleValueWithKey<*>): String = getHasName(value.idOrThrow) + protected fun getHasName(value: HTSimpleValueWithKey<*>): String = getHasName(value.id()) protected fun getHasName(tagKey: TagKey<*>): String = getHasName(tagKey.location()) diff --git a/src/lib/kotlin/hiiragi283/lib/data/advancement/HTDisplayInfoBuilder.kt b/src/lib/kotlin/hiiragi283/lib/data/advancement/HTDisplayInfoBuilder.kt index 4a95c4b0b..0a4ea7f6f 100644 --- a/src/lib/kotlin/hiiragi283/lib/data/advancement/HTDisplayInfoBuilder.kt +++ b/src/lib/kotlin/hiiragi283/lib/data/advancement/HTDisplayInfoBuilder.kt @@ -63,7 +63,7 @@ class HTDisplayInfoBuilder { ) operator fun HTItemInstanceLike.unaryPlus() { - this.toTemplate()?.let { icon = it } + icon = this.asTemplate().getOrThrow() } inline fun icon(builderAction: ItemInstanceBuilder.() -> Unit) { diff --git a/src/lib/kotlin/hiiragi283/lib/data/loot/HTBlockLootTableProvider.kt b/src/lib/kotlin/hiiragi283/lib/data/loot/HTBlockLootTableProvider.kt index f8dc0c872..a44b262e1 100644 --- a/src/lib/kotlin/hiiragi283/lib/data/loot/HTBlockLootTableProvider.kt +++ b/src/lib/kotlin/hiiragi283/lib/data/loot/HTBlockLootTableProvider.kt @@ -23,7 +23,7 @@ abstract class HTBlockLootTableProvider( private val rawBlocks: Sequence> ) : BlockLootSubProvider(emptySet(), FeatureFlags.REGISTRY.allFlags(), registries) { final override fun getKnownBlocks(): Iterable = rawBlocks - .filter { block: HTSimpleValueWithKey -> block.idOrNull?.namespace == modId } + .filter { block: HTSimpleValueWithKey -> block.id().namespace == modId } .mapNotNull(HTSimpleValueWithKey::getOrNull) .filter { block: Block -> block.lootTable.isPresent } .toList() diff --git a/src/lib/kotlin/hiiragi283/lib/data/model/HTModelProvider.kt b/src/lib/kotlin/hiiragi283/lib/data/model/HTModelProvider.kt index 58856d786..c8f32220a 100644 --- a/src/lib/kotlin/hiiragi283/lib/data/model/HTModelProvider.kt +++ b/src/lib/kotlin/hiiragi283/lib/data/model/HTModelProvider.kt @@ -85,7 +85,7 @@ abstract class HTModelProvider(output: PackOutput, modId: String) : ModelProvide * @since 26.1.8 */ fun BlockModelGenerators.createDecoration(content: HTDecorationContent) { - val fullBlockId: Identifier = content.base.idOrThrow.blockId + val fullBlockId: Identifier = content.base.id().blockId val texture = Material(fullBlockId) this.createSlab(content.slab, fullBlockId, texture, texture, texture) @@ -190,7 +190,7 @@ abstract class HTModelProvider(output: PackOutput, modId: String) : ModelProvide */ fun ItemModelGenerators.generateFlatItem( item: HTSimpleValueWithKey, - layer: Identifier = item.idOrThrow.itemId, + layer: Identifier = item.id().itemId, template: ModelTemplate = ModelTemplates.FLAT_ITEM ) { this.itemModelOutput.accept( @@ -231,7 +231,7 @@ abstract class HTModelProvider(output: PackOutput, modId: String) : ModelProvide */ fun ItemModelGenerators.createFlatItemModel( item: HTSimpleValueWithKey<*>, - layer: Identifier = item.idOrThrow.itemId, + layer: Identifier = item.id().itemId, template: ModelTemplate = ModelTemplates.FLAT_ITEM ): Identifier = template.createItem(item, TextureMapping.layer0(Material(layer)), this.modelOutput) diff --git a/src/lib/kotlin/hiiragi283/lib/data/model/ModelTemplates.kt b/src/lib/kotlin/hiiragi283/lib/data/model/ModelTemplates.kt index e12cc7d58..2dd6714fc 100644 --- a/src/lib/kotlin/hiiragi283/lib/data/model/ModelTemplates.kt +++ b/src/lib/kotlin/hiiragi283/lib/data/model/ModelTemplates.kt @@ -19,7 +19,7 @@ fun ModelTemplate.createBlock( block: HTSimpleValueWithKey<*>, textures: TextureMapping, output: BiConsumer -): Identifier = this.create(block.idOrThrow.blockId.withSuffix(this.suffix.getOrElse { "" }), textures, output) +): Identifier = this.create(block.id().blockId.withSuffix(this.suffix.getOrElse { "" }), textures, output) /** * `models/item`配下のモデルJSONを生成します。 @@ -30,4 +30,4 @@ fun ModelTemplate.createItem( item: HTSimpleValueWithKey<*>, textures: TextureMapping, output: BiConsumer -): Identifier = this.create(item.idOrThrow.itemId.withSuffix(this.suffix.getOrElse { "" }), textures, output) +): Identifier = this.create(item.id().itemId.withSuffix(this.suffix.getOrElse { "" }), textures, output) diff --git a/src/lib/kotlin/hiiragi283/lib/data/tag/HTTagBuilder.kt b/src/lib/kotlin/hiiragi283/lib/data/tag/HTTagBuilder.kt index c47ff1f7e..c0c61bab1 100644 --- a/src/lib/kotlin/hiiragi283/lib/data/tag/HTTagBuilder.kt +++ b/src/lib/kotlin/hiiragi283/lib/data/tag/HTTagBuilder.kt @@ -30,7 +30,7 @@ fun interface HTTagBuilder : Consumer { * @param type このエントリの依存関係 */ fun add(value: HTSimpleValueWithKey, type: HTTagDependType = HTTagDependType.REQUIRED): HTTagBuilder = - add(value.keyOrThrow, type) + add(value.key(), type) /** * 指定した要素をタグに追加します。 diff --git a/src/lib/kotlin/hiiragi283/lib/fluid/HTFluidInstanceLike.kt b/src/lib/kotlin/hiiragi283/lib/fluid/HTFluidInstanceLike.kt index 0c734b1dc..eabe10887 100644 --- a/src/lib/kotlin/hiiragi283/lib/fluid/HTFluidInstanceLike.kt +++ b/src/lib/kotlin/hiiragi283/lib/fluid/HTFluidInstanceLike.kt @@ -14,13 +14,25 @@ interface HTFluidInstanceLike { /** * 新しい[FluidStackTemplate]のインスタンスを作成します。 */ - fun toTemplate( + fun asTemplate( amount: Int = FluidType.BUCKET_VOLUME, patch: DataComponentPatch = DataComponentPatch.EMPTY - ): FluidStackTemplate? + ): Result /** * 新しい[FluidStack]のインスタンスを作成します。 */ - fun toStack(amount: Int = FluidType.BUCKET_VOLUME, patch: DataComponentPatch = DataComponentPatch.EMPTY): FluidStack + fun asStack( + amount: Int = FluidType.BUCKET_VOLUME, + patch: DataComponentPatch = DataComponentPatch.EMPTY + ): Result = asTemplate(amount, patch).map(FluidStackTemplate::create) + + /** + * 新しい[FluidStack]のインスタンスを作成します。 + * @return [FluidStack]のインスタンスを作成できなかった場合は[FluidStack.EMPTY] + */ + fun asStackOrEmpty( + amount: Int = FluidType.BUCKET_VOLUME, + patch: DataComponentPatch = DataComponentPatch.EMPTY + ): FluidStack = asStack(amount, patch).getOrElse { FluidStack.EMPTY } } diff --git a/src/lib/kotlin/hiiragi283/lib/item/HTItemInstanceLike.kt b/src/lib/kotlin/hiiragi283/lib/item/HTItemInstanceLike.kt index 4bf68c316..ebc9e4211 100644 --- a/src/lib/kotlin/hiiragi283/lib/item/HTItemInstanceLike.kt +++ b/src/lib/kotlin/hiiragi283/lib/item/HTItemInstanceLike.kt @@ -13,10 +13,18 @@ interface HTItemInstanceLike { /** * 新しい[ItemStackTemplate]のインスタンスを作成します。 */ - fun toTemplate(count: Int = 1, patch: DataComponentPatch = DataComponentPatch.EMPTY): ItemStackTemplate? + fun asTemplate(count: Int = 1, patch: DataComponentPatch = DataComponentPatch.EMPTY): Result /** * 新しい[ItemStack]のインスタンスを作成します。 */ - fun toStack(count: Int = 1, patch: DataComponentPatch = DataComponentPatch.EMPTY): ItemStack + fun asStack(count: Int = 1, patch: DataComponentPatch = DataComponentPatch.EMPTY): Result = + asTemplate(count, patch).map(ItemStackTemplate::create) + + /** + * 新しい[ItemStack]のインスタンスを作成します。 + * @return [ItemStack]のインスタンスを作成できなかった場合は[ItemStack.EMPTY] + */ + fun asStackOrEmpty(count: Int = 1, patch: DataComponentPatch = DataComponentPatch.EMPTY): ItemStack = + asStack(count, patch).getOrElse { ItemStack.EMPTY } } diff --git a/src/lib/kotlin/hiiragi283/lib/item/alchemy/HTPotionHelper.kt b/src/lib/kotlin/hiiragi283/lib/item/alchemy/HTPotionHelper.kt index 7058cdfa0..90be6121c 100644 --- a/src/lib/kotlin/hiiragi283/lib/item/alchemy/HTPotionHelper.kt +++ b/src/lib/kotlin/hiiragi283/lib/item/alchemy/HTPotionHelper.kt @@ -14,7 +14,7 @@ import net.minecraft.world.item.alchemy.Potion import net.minecraft.world.item.alchemy.PotionContents import net.minecraft.world.item.alchemy.Potions import net.minecraft.world.level.material.Fluids -import net.neoforged.neoforge.fluids.FluidStack +import net.neoforged.neoforge.fluids.FluidStackTemplate import net.neoforged.neoforge.fluids.FluidType import kotlin.jvm.optionals.getOrNull @@ -96,48 +96,56 @@ data object HTPotionHelper { // Filled Bottle @JvmStatic - fun createFilled(getter: DataComponentGetter, bottleType: HTBottleType): ItemStackTemplate = + fun createFilled(getter: DataComponentGetter, bottleType: HTBottleType): Result = createFilled(getContentsOrEmpty(getter), bottleType) @JvmStatic - fun createFilled(potion: Holder, bottleType: HTBottleType): ItemStackTemplate = + fun createFilled(potion: Holder, bottleType: HTBottleType): Result = createFilled(PotionContents(potion), bottleType) @JvmStatic - fun createFilled(contents: PotionContents, bottleType: HTBottleType): ItemStackTemplate = - bottleType.filledItem.toTemplate(patch = createPotionPatch(contents))!! + fun createFilled(contents: PotionContents, bottleType: HTBottleType): Result = + bottleType.filledItem.asTemplate(patch = createPotionPatch(contents)) // Bucket @JvmStatic - fun createBuket(getter: DataComponentGetter): ItemStackTemplate? = getContentsNotEmpty(getter)?.let(::createBuket) + fun createBuket(getter: DataComponentGetter): Result = + getContentsOrEmpty(getter).let(::createBuket) @Suppress("DEPRECATION") @JvmStatic - fun createBuket(potion: Holder): ItemStackTemplate = createBuket(PotionContents(potion))!! + fun createBuket(potion: Holder): Result = createBuket(PotionContents(potion)) @JvmStatic - fun createBuket(contents: PotionContents): ItemStackTemplate? = when { - isEmpty(contents) -> null - contents.`is`(Potions.WATER) -> ItemStackTemplate(Items.WATER_BUCKET) - else -> HTPotionFluidAccess.INSTANCE.fluidContent.bucketHolder.toTemplate(patch = createPotionPatch(contents)) + fun createBuket(contents: PotionContents): Result = when { + isEmpty(contents) -> Result.failure(IllegalStateException("Could not create Filled Bucket for empty potion")) + + contents.`is`(Potions.WATER) -> Result.success(ItemStackTemplate(Items.WATER_BUCKET)) + + else -> HTPotionFluidAccess.INSTANCE.fluidContent.bucketHolder.asTemplate( + patch = createPotionPatch(contents) + ) } // FluidStack // @JvmStatic - fun createFluid(getter: DataComponentGetter, amount: Int = FluidType.BUCKET_VOLUME): FluidStack? = - getContentsNotEmpty(getter)?.let { createFluid(it, amount) } + fun createFluid(getter: DataComponentGetter, amount: Int = FluidType.BUCKET_VOLUME): Result = + createFluid(getContentsOrEmpty(getter), amount) @Suppress("DEPRECATION") @JvmStatic - fun createFluid(potion: Holder, amount: Int = FluidType.BUCKET_VOLUME): FluidStack = - createFluid(PotionContents(potion), amount)!! + fun createFluid(potion: Holder, amount: Int = FluidType.BUCKET_VOLUME): Result = when { + potion.`is`(Potions.WATER) -> Result.success(FluidStackTemplate(Fluids.WATER, amount)) + else -> HTPotionFluidAccess.INSTANCE.fluidContent.asTemplate(amount, createPotionPatch(potion)) + } @JvmStatic - fun createFluid(contents: PotionContents, amount: Int = FluidType.BUCKET_VOLUME): FluidStack? = when { - isEmpty(contents) -> null - contents.`is`(Potions.WATER) -> FluidStack(Fluids.WATER, amount) - else -> HTPotionFluidAccess.INSTANCE.fluidContent.toStack(amount, createPotionPatch(contents)) - } + fun createFluid(contents: PotionContents, amount: Int = FluidType.BUCKET_VOLUME): Result = + when { + isEmpty(contents) -> Result.failure(IllegalStateException("Could not create FluidStack for empty potion")) + contents.`is`(Potions.WATER) -> Result.success(FluidStackTemplate(Fluids.WATER, amount)) + else -> HTPotionFluidAccess.INSTANCE.fluidContent.asTemplate(amount, createPotionPatch(contents)) + } } diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTPotionFluidIngredient.kt b/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTPotionFluidIngredient.kt index 432e94e7b..3707de5f2 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTPotionFluidIngredient.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTPotionFluidIngredient.kt @@ -3,9 +3,9 @@ package hiiragi283.lib.recipe.ingredient import com.mojang.serialization.MapCodec import hiiragi283.lib.HTConstants import hiiragi283.lib.HTPhysicalSideHelper -import hiiragi283.lib.fluid.FluidStack import hiiragi283.lib.item.alchemy.HTPotionFluidAccess import hiiragi283.lib.item.alchemy.HTPotionHelper +import hiiragi283.lib.recipe.display.SlotDisplay import hiiragi283.lib.serialization.codec.HTCodecs import hiiragi283.lib.serialization.network.HTStreamCodecs import hiiragi283.lib.util.fold @@ -18,7 +18,6 @@ import net.minecraft.world.item.alchemy.Potion import net.minecraft.world.item.alchemy.Potions import net.minecraft.world.item.crafting.display.SlotDisplay import net.minecraft.world.level.material.Fluid -import net.minecraft.world.level.material.Fluids import net.neoforged.neoforge.common.Tags import net.neoforged.neoforge.fluids.FluidStack import net.neoforged.neoforge.fluids.crafting.FluidIngredient @@ -59,16 +58,12 @@ data class HTPotionFluidIngredient(val potions: HolderSet) : FluidIngred Stream.of(HTPotionFluidAccess.INSTANCE.fluidContent.sourceHolder) override fun display(): SlotDisplay = potions - .stream() + .asSequence() .filter { it.value().isEnabled(HTPhysicalSideHelper.getFeatureFlags()) } - .map { potion: Holder -> - when (potion) { - Potions.WATER -> FluidStack(Fluids.WATER) - else -> HTPotionHelper.createFluid(potion) - } - }.map(::FluidStackSlotDisplay) - .toList() - .let(SlotDisplay::Composite) + .map(HTPotionHelper::createFluid) + .mapNotNull { it.getOrNull()?.create() } + .map(::FluidStackSlotDisplay) + .let(::SlotDisplay) override fun isSimple(): Boolean = false diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/lookup/HTRecipeCache.kt b/src/lib/kotlin/hiiragi283/lib/recipe/lookup/HTRecipeCache.kt index c97ec642c..ec1719144 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/lookup/HTRecipeCache.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/lookup/HTRecipeCache.kt @@ -6,6 +6,8 @@ import hiiragi283.lib.recipe.HTRecipeHolder import hiiragi283.lib.recipe.HTRecipePredicate import hiiragi283.lib.recipe.RecipeKey import hiiragi283.lib.util.Either +import hiiragi283.lib.util.left +import hiiragi283.lib.util.right import hiiragi283.lib.util.unwrap import net.minecraft.server.level.ServerLevel import net.minecraft.world.item.crafting.Recipe @@ -65,7 +67,7 @@ class HTRecipeCache>( lastRecipe?.onLeft { lastKey: RecipeKey -> lookup.getAllRecipes(context) .firstOrNull { (key: RecipeKey, _) -> lastKey == key } - ?.let { Either.Right(it) } + ?.right() .let { lastRecipe = it } } // 現在のキャッシュがレシピを保持している場合,現在の入力に一致するか判定 @@ -79,7 +81,7 @@ class HTRecipeCache>( // キャッシュがない場合,すべてのレシピから検索する return lookup.getAllRecipes(context) .firstOrNull { (_, recipe: RECIPE) -> recipe.matches(input) } - ?.also { lastRecipe = Either.Right(it) } + ?.also { lastRecipe = it.right() } } override fun serialize(output: ValueOutput) { @@ -87,7 +89,7 @@ class HTRecipeCache>( } override fun deserialize(input: ValueInput) { - input.read(HTConstants.ID, Recipe.KEY_CODEC).ifPresent { lastRecipe = Either.Left(it) } + input.read(HTConstants.ID, Recipe.KEY_CODEC).ifPresent { lastRecipe = it.left() } } private fun getRecipeKey(): RecipeKey? = lastRecipe?.map(HTRecipeHolder<*>::key)?.unwrap() diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/lookup/HTVanillaRecipeCache.kt b/src/lib/kotlin/hiiragi283/lib/recipe/lookup/HTVanillaRecipeCache.kt index baec6483d..3e2d27c02 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/lookup/HTVanillaRecipeCache.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/lookup/HTVanillaRecipeCache.kt @@ -3,6 +3,8 @@ package hiiragi283.lib.recipe.lookup import hiiragi283.lib.HTConstants import hiiragi283.lib.recipe.RecipeKey import hiiragi283.lib.util.Either +import hiiragi283.lib.util.left +import hiiragi283.lib.util.right import hiiragi283.lib.util.unwrap import net.minecraft.server.level.ServerLevel import net.minecraft.world.item.crafting.Recipe @@ -41,7 +43,7 @@ class HTVanillaRecipeCache>(val reci { key: RecipeKey -> recipeManager.getRecipeFor(recipeType, input, level, key) }, { holder: RecipeHolder -> recipeManager.getRecipeFor(recipeType, input, level, holder) } ) ?: recipeManager.getRecipeFor(recipeType, input, level) - foundRecipe.ifPresentOrElse({ lastRecipe = Either.Right(it) }, { lastRecipe = null }) + lastRecipe = foundRecipe.map { it.right() }.getOrNull() return foundRecipe.getOrNull() } @@ -50,7 +52,7 @@ class HTVanillaRecipeCache>(val reci } override fun deserialize(input: ValueInput) { - input.read(HTConstants.ID, Recipe.KEY_CODEC).ifPresent { lastRecipe = Either.Left(it) } + input.read(HTConstants.ID, Recipe.KEY_CODEC).ifPresent { lastRecipe = it.left() } } private fun getRecipeKey(): RecipeKey? = lastRecipe?.map(RecipeHolder<*>::id)?.unwrap() diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/result/HTFluidResult.kt b/src/lib/kotlin/hiiragi283/lib/recipe/result/HTFluidResult.kt index 22a3bcfcc..61a435000 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/result/HTFluidResult.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/result/HTFluidResult.kt @@ -170,7 +170,8 @@ data class HTFluidResult(val entry: Entry, val amount: Int) : HTRecipeResult = TYPE - override fun create(amount: Int): FluidStack = HTPotionHelper.createFluid(contents, amount) ?: FluidStack.EMPTY + override fun create(amount: Int): FluidStack = + HTPotionHelper.createFluid(contents, amount).fold(FluidStackTemplate::create) { FluidStack.EMPTY } override fun getId(): Identifier? = HTPotionHelper.getPotionId(contents) } diff --git a/src/lib/kotlin/hiiragi283/lib/registry/HTDeferredHolder.kt b/src/lib/kotlin/hiiragi283/lib/registry/HTDeferredHolder.kt index fbca13f4f..5d1db8b59 100644 --- a/src/lib/kotlin/hiiragi283/lib/registry/HTDeferredHolder.kt +++ b/src/lib/kotlin/hiiragi283/lib/registry/HTDeferredHolder.kt @@ -3,7 +3,6 @@ package hiiragi283.lib.registry import hiiragi283.lib.resource.HTValueWithKey import hiiragi283.lib.resource.toLanguageKey import hiiragi283.lib.text.HTHasText -import hiiragi283.lib.util.Either import net.minecraft.core.TypedInstance import net.minecraft.resources.Identifier import net.minecraft.resources.ResourceKey @@ -35,21 +34,17 @@ open class HTDeferredHolder : */ fun isOf(instance: TypedInstance): Boolean = this.isBound && instance.`is`(this) - /** - * @since 26.1.8 - */ - fun asEither(): Either = when { - this.isBound -> Either.Right(this.get()) - else -> Either.Left("Trying to access unbound value: $key") - } + final override fun key(): ResourceKey = this.key - final override val keyOrNull: ResourceKey get() = this.key + final override fun asResult(): Result = runCatching { get() } final override fun getOrNull(): T? = when (this.isBound) { true -> get() false -> null } + final override fun getOrThrow(): T = get() + /** * @param R レジストリの要素のクラス * @param T 要素のクラス diff --git a/src/lib/kotlin/hiiragi283/lib/registry/HTDeferredItem.kt b/src/lib/kotlin/hiiragi283/lib/registry/HTDeferredItem.kt index 95098c44b..e8b64b46a 100644 --- a/src/lib/kotlin/hiiragi283/lib/registry/HTDeferredItem.kt +++ b/src/lib/kotlin/hiiragi283/lib/registry/HTDeferredItem.kt @@ -7,7 +7,6 @@ import net.minecraft.core.registries.Registries import net.minecraft.resources.Identifier import net.minecraft.resources.ResourceKey import net.minecraft.world.item.Item -import net.minecraft.world.item.ItemStack import net.minecraft.world.item.ItemStackTemplate import net.minecraft.world.level.ItemLike @@ -34,17 +33,12 @@ class HTDeferredItem : override val translationKey: String get() = get().descriptionId - override fun getText(): Text = this.toStack().itemName + override fun getText(): Text = this.asStackOrEmpty().itemName override fun asItem(): ITEM = get() - override fun toTemplate(count: Int, patch: DataComponentPatch): ItemStackTemplate? = when { - this.isAir -> null - else -> asEither().map { ItemStackTemplate(it, count, patch) }.getOrNull() - } - - override fun toStack(count: Int, patch: DataComponentPatch): ItemStack = when { - this.isBound -> ItemStack(this, count, patch) - else -> ItemStack.EMPTY + override fun asTemplate(count: Int, patch: DataComponentPatch): Result = when { + this.isAir -> Result.failure(IllegalStateException("Could not create ItemStackTemplate with air item")) + else -> asResult().map { ItemStackTemplate(it, count, patch) } } } diff --git a/src/lib/kotlin/hiiragi283/lib/registry/HTFluidContent.kt b/src/lib/kotlin/hiiragi283/lib/registry/HTFluidContent.kt index b58d04898..f7fc121ca 100644 --- a/src/lib/kotlin/hiiragi283/lib/registry/HTFluidContent.kt +++ b/src/lib/kotlin/hiiragi283/lib/registry/HTFluidContent.kt @@ -9,7 +9,6 @@ import net.minecraft.world.item.Item import net.minecraft.world.level.block.LiquidBlock import net.minecraft.world.level.material.FlowingFluid import net.minecraft.world.level.material.Fluid -import net.neoforged.neoforge.fluids.FluidStack import net.neoforged.neoforge.fluids.FluidStackTemplate import net.neoforged.neoforge.fluids.FluidType @@ -41,20 +40,11 @@ sealed class HTFluidContent( */ fun isOf(instance: TypedInstance): Boolean = sourceHolder.isOf(instance) - /** - * 新しい[FluidStackTemplate]のインスタンスを作成します。 - */ - override fun toTemplate(amount: Int, patch: DataComponentPatch): FluidStackTemplate? = when { - sourceHolder.isEmpty -> null - else -> sourceHolder.asEither().map { FluidStackTemplate(it, amount, patch) }.getOrNull() - } + override fun asTemplate(amount: Int, patch: DataComponentPatch): Result = when { + sourceHolder.isEmpty -> + Result.failure(IllegalStateException("Could not create FluidStackTemplate with empty fluid")) - /** - * 新しい[FluidStack]のインスタンスを作成します。 - */ - override fun toStack(amount: Int, patch: DataComponentPatch): FluidStack = when { - sourceHolder.isBound -> FluidStack(sourceHolder, amount, patch) - else -> FluidStack.EMPTY + else -> sourceHolder.asResult().map { FluidStackTemplate(it, amount, patch) } } /** diff --git a/src/lib/kotlin/hiiragi283/lib/resource/HTValueWithKey.kt b/src/lib/kotlin/hiiragi283/lib/resource/HTValueWithKey.kt index edec5195c..3f26e657f 100644 --- a/src/lib/kotlin/hiiragi283/lib/resource/HTValueWithKey.kt +++ b/src/lib/kotlin/hiiragi283/lib/resource/HTValueWithKey.kt @@ -1,5 +1,6 @@ package hiiragi283.lib.resource +import hiiragi283.lib.util.Either import net.minecraft.resources.Identifier import net.minecraft.resources.ResourceKey @@ -21,34 +22,32 @@ typealias HTSimpleValueWithKey = HTValueWithKey interface HTValueWithKey { /** * [ID][ResourceKey]を取得します。 + * @throws IllegalStateException 戻り値が`null`の場合 */ - val keyOrNull: ResourceKey? - - /** - * [ID][ResourceKey]を取得します。 - * @throws IllegalStateException [keyOrNull]が`null`の場合 - */ - val keyOrThrow: ResourceKey get() = keyOrNull ?: error("Unregistered value for ${getOrThrow()}") + fun key(): ResourceKey /** * [ID][Identifier]を取得します。 + * @throws IllegalStateException 戻り値が`null`の場合 */ - val idOrNull: Identifier? get() = keyOrNull?.identifier() + fun id(): Identifier = key().identifier() /** - * [ID][Identifier]を取得します。 - * @throws IllegalStateException [idOrNull]が`null`の場合 + * 値を取得します。 */ - val idOrThrow: Identifier get() = idOrNull ?: error("Unknown id for ${getOrThrow()}") + fun asEither(): Either = TODO() + + fun asResult(): Result /** * 値を取得します。 + * @return [asResult]の戻り値が[Result.isFailure]の場合`null` */ - fun getOrNull(): T? + fun getOrNull(): T? = asResult().getOrNull() /** * 値を取得します。 - * @throws IllegalStateException [getOrNull]が`null`の場合 + * @throws IllegalStateException [asResult]の戻り値が[Result.isFailure]の場合 */ - fun getOrThrow(): T = getOrNull() ?: error("Unknown value for $idOrThrow") + fun getOrThrow(): T = asResult().getOrThrow() } diff --git a/src/lib/kotlin/hiiragi283/lib/util/Either.kt b/src/lib/kotlin/hiiragi283/lib/util/Either.kt index 9fb9ec249..e50a78b70 100644 --- a/src/lib/kotlin/hiiragi283/lib/util/Either.kt +++ b/src/lib/kotlin/hiiragi283/lib/util/Either.kt @@ -152,6 +152,20 @@ sealed class Either { // Extension // +/** + * [Either.Left]に変換します。 + * @author Hiiragi Tsubasa + * @since 26.1.9 + */ +fun A.left(): Either = Either.Left(this) + +/** + * [Either.Right]に変換します。 + * @author Hiiragi Tsubasa + * @since 26.1.9 + */ +fun A.right(): Either = Either.Right(this) + /** * 左右の値が同じクラスの場合,値を取り出します。 * @author Hiiragi Tsubasa diff --git a/src/main/kotlin/hiiragi283/ragium/common/RagiumCommon.kt b/src/main/kotlin/hiiragi283/ragium/common/RagiumCommon.kt index 18c416b69..c6901ecd9 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/RagiumCommon.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/RagiumCommon.kt @@ -34,12 +34,14 @@ import net.minecraft.core.HolderLookup import net.minecraft.core.HolderSet import net.minecraft.core.RegistryAccess import net.minecraft.core.component.DataComponentMap +import net.minecraft.core.component.DataComponents import net.minecraft.core.registries.BuiltInRegistries import net.minecraft.core.registries.Registries import net.minecraft.resources.ResourceKey import net.minecraft.world.item.DyeColor import net.minecraft.world.item.alchemy.Potion import net.minecraft.world.item.alchemy.PotionBrewing +import net.minecraft.world.item.alchemy.PotionContents import net.minecraft.world.item.crafting.Ingredient import net.minecraft.world.level.block.Block import net.minecraft.world.level.block.Blocks @@ -81,7 +83,7 @@ internal data object RagiumCommon { private fun initFluidComponents() { fun setChemical(content: HTFluidContent, key: ResourceKey) { BuiltInRegistries.DATA_COMPONENT_INITIALIZERS.add( - content.keyOrThrow + content.key() ) { builder: DataComponentMap.Builder, provider: HolderLookup.Provider, _ -> builder.set(RagiumDataComponents.CHEMICAL, provider.getOrThrow(key)) } @@ -93,6 +95,12 @@ internal data object RagiumCommon { builder.set(RagiumDataComponents.CHEMICAL, provider.getOrThrow(RagiumChemicals.WATER)) } + BuiltInRegistries.DATA_COMPONENT_INITIALIZERS.add( + RagiumFluids.POTION.key() + ) { builder: DataComponentMap.Builder, _, _ -> + builder.set(DataComponents.POTION_CONTENTS, PotionContents.EMPTY) + } + setChemical(RagiumFluids.MOLTEN_GLASS, RagiumChemicals.SILICON_DIOXIDE) setChemical(RagiumFluids.HYDROGEN, RagiumChemicals.HYDROGEN) diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt b/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt index 66466290a..10e1db425 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt @@ -94,7 +94,7 @@ data object RagiumBlocks { factory: (HTDeferredBlockEntityType<*>, BlockBehaviour.Properties) -> BLOCK, properties: BlockBehaviour.Properties = machine() ): HTBasicDeferredBlockAndItem = - REGISTER.registerSimple(type.idOrThrow.path, { factory(type, properties.setId(it)) }) + REGISTER.registerSimple(type.id.path, { factory(type, properties.setId(it)) }) @JvmStatic private fun registerMachine( @@ -103,7 +103,7 @@ data object RagiumBlocks { itemFactory: ItemWithContextFactory, properties: BlockBehaviour.Properties = machine() ): HTDeferredBlockAndItem = - REGISTER.register(type.idOrThrow.path, { factory(type, properties.setId(it)) }, itemFactory) + REGISTER.register(type.id.path, { factory(type, properties.setId(it)) }, itemFactory) @JvmStatic private fun registerMachine( diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/storage/HTPotionTankBlock.kt b/src/main/kotlin/hiiragi283/ragium/common/block/storage/HTPotionTankBlock.kt index f9f8bd35c..06f20de53 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/storage/HTPotionTankBlock.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/storage/HTPotionTankBlock.kt @@ -17,7 +17,7 @@ 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 net.neoforged.neoforge.fluids.FluidStack +import net.neoforged.neoforge.fluids.FluidStackTemplate import net.neoforged.neoforge.transfer.fluid.FluidResource import net.neoforged.neoforge.transfer.transaction.Transaction @@ -40,9 +40,11 @@ class HTPotionTankBlock(type: HTDeferredBlockEntityType<*>, properties: Properti // ポーション瓶 -> 液体ポーション + 瓶 val emptyBottle: HTSimpleDeferredItem? = HTBottleType.getFromFilled(itemStack)?.emptyItem if (emptyBottle != null) { - val potionFluid: FluidStack? = HTPotionHelper.createFluid(itemStack, HTPotionHelper.BOTTLE_AMOUNT) - if (potionFluid != null) { - val (resource: FluidResource, amount: Int) = potionFluid.toResourcePair() + HTPotionHelper.createFluid( + itemStack, + HTPotionHelper.BOTTLE_AMOUNT + ).onSuccess { template: FluidStackTemplate -> + val (resource: FluidResource, amount: Int) = template.toResourcePair() if (tank.insert(resource, amount, transaction, HTTransferAccess.EXTERNAL) == amount) { val newStack: ItemStack = itemStack.transmuteCopy(emptyBottle, 1) newStack.remove(DataComponents.POTION_CONTENTS) @@ -59,7 +61,9 @@ class HTPotionTankBlock(type: HTDeferredBlockEntityType<*>, properties: Properti val filledBottle: HTBottleType = HTBottleType.getFromEmpty(itemStack) ?: return false val bottleAmount: Int = HTPotionHelper.BOTTLE_AMOUNT if (tank.extract(resourceIn, bottleAmount, transaction, HTTransferAccess.EXTERNAL) == bottleAmount) { - HTItemDropHelper.giveStackTo(player, HTPotionHelper.createFilled(resourceIn, filledBottle)) + HTPotionHelper.createFilled(resourceIn, filledBottle).onSuccess { + HTItemDropHelper.giveStackTo(player, it) + } itemStack.shrink(1) transaction.commit() return true diff --git a/src/main/kotlin/hiiragi283/ragium/common/fluid/HTDyedFluidType.kt b/src/main/kotlin/hiiragi283/ragium/common/fluid/HTDyedFluidType.kt index ad2075656..86935dc7d 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/fluid/HTDyedFluidType.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/fluid/HTDyedFluidType.kt @@ -17,11 +17,12 @@ class HTDyedFluidType(private val color: DyeColor, properties: Properties) : HTF override fun onVaporize(entity: LivingEntity?, level: Level, pos: BlockPos, stack: FluidStack) { super.onVaporize(entity, level, pos, stack) - val dye: ItemStack = VanillaColoredCollections.DYE[color].toStack(4) - if (entity != null) { - HTItemDropHelper.giveOrDropStack(entity, dye) - } else { - HTItemDropHelper.dropStackAt(level, Vec3.atCenterOf(pos), dye) + VanillaColoredCollections.DYE[color].asStack(4).onSuccess { stack: ItemStack -> + if (entity != null) { + HTItemDropHelper.giveOrDropStack(entity, stack) + } else { + HTItemDropHelper.dropStackAt(level, Vec3.atCenterOf(pos), stack) + } } } } diff --git a/src/main/kotlin/hiiragi283/ragium/common/fluid/HTPotionFluidType.kt b/src/main/kotlin/hiiragi283/ragium/common/fluid/HTPotionFluidType.kt index cc2b211b2..7b308195b 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/fluid/HTPotionFluidType.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/fluid/HTPotionFluidType.kt @@ -5,11 +5,12 @@ import hiiragi283.lib.item.alchemy.HTBottleType import hiiragi283.lib.item.alchemy.HTPotionHelper import hiiragi283.lib.text.Text import net.minecraft.world.item.ItemStack +import net.minecraft.world.item.ItemStackTemplate import net.neoforged.neoforge.fluids.FluidStack class HTPotionFluidType(properties: Properties) : HTFluidType(properties) { override fun getDescription(stack: FluidStack): Text = HTPotionHelper.getPotionName(stack, HTBottleType.DEFAULT) override fun getBucket(stack: FluidStack): ItemStack = - HTPotionHelper.createBuket(stack)?.create() ?: super.getBucket(stack) + HTPotionHelper.createBuket(stack).fold(ItemStackTemplate::create) { super.getBucket(stack) } } diff --git a/src/main/kotlin/hiiragi283/ragium/common/item/HTPotionBucketItem.kt b/src/main/kotlin/hiiragi283/ragium/common/item/HTPotionBucketItem.kt index af469aab1..7e4de58b1 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/item/HTPotionBucketItem.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/item/HTPotionBucketItem.kt @@ -22,6 +22,6 @@ class HTPotionBucketItem(properties: Properties) : HTPotionBasedItem(properties) class BucketHandler(itemAccess: ItemAccess) : HTCustomBucketItemHandler(itemAccess) { override fun getResourceFrom(accessResource: ItemResource, index: Int): FluidResource = - HTPotionHelper.createFluid(accessResource)?.let(FluidResource::of) ?: FluidResource.EMPTY + HTPotionHelper.createFluid(accessResource).fold(FluidResource::of) { FluidResource.EMPTY } } } diff --git a/src/main/kotlin/hiiragi283/ragium/common/item/block/HTPotionTankBlockItem.kt b/src/main/kotlin/hiiragi283/ragium/common/item/block/HTPotionTankBlockItem.kt index fa400aeaf..299bc8415 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/item/block/HTPotionTankBlockItem.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/item/block/HTPotionTankBlockItem.kt @@ -1,5 +1,6 @@ package hiiragi283.ragium.common.item.block +import hiiragi283.lib.fluid.createOrEmpty import hiiragi283.lib.item.HTSubCreativeTabContents import hiiragi283.lib.item.alchemy.HTPotionHelper import hiiragi283.ragium.api.RagiumConfig @@ -25,10 +26,9 @@ class HTPotionTankBlockItem(block: Block, properties: Properties) : for (potion: Holder in parameters.filteredElements(Registries.POTION)) { if (potion == Potions.WATER) continue val stack = ItemStack(baseItem) - HTStorageHelper.updateFluid( - stack, - HTPotionHelper.createFluid(potion, amount = RagiumConfig.SERVER.tankCapacity.asInt) - ) + HTPotionHelper + .createFluid(potion, amount = RagiumConfig.SERVER.tankCapacity.asInt) + .onSuccess { HTStorageHelper.updateFluid(stack, it.createOrEmpty()) } output.accept(stack) } } diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/RTPotionBottleDrainingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/RTPotionBottleDrainingRecipe.kt index 19a2b104d..d599d37a4 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/recipe/RTPotionBottleDrainingRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/RTPotionBottleDrainingRecipe.kt @@ -11,6 +11,7 @@ import net.minecraft.world.item.ItemInstance import net.minecraft.world.item.ItemStack import net.minecraft.world.item.crafting.SingleRecipeInput import net.neoforged.neoforge.fluids.FluidStack +import net.neoforged.neoforge.fluids.FluidStackTemplate @JvmRecord data class RTPotionBottleDrainingRecipe(val bottleType: HTBottleType, override val progressData: HTProgressData) : @@ -27,8 +28,9 @@ data class RTPotionBottleDrainingRecipe(val bottleType: HTBottleType, override v bottleType.filledItem.isOf(input) && HTPotionHelper.hasAnyEffect(input) override fun apply(input: ItemInstance): HTItemAndFluidStack = HTItemAndFluidStack( - bottleType.emptyItem.toStack(), - HTPotionHelper.createFluid(input, HTPotionHelper.BOTTLE_AMOUNT) ?: FluidStack.EMPTY + bottleType.emptyItem.asStackOrEmpty(), + HTPotionHelper.createFluid(input, HTPotionHelper.BOTTLE_AMOUNT) + .fold(FluidStackTemplate::create) { FluidStack.EMPTY } ) override fun getMatchingStack(input: ItemInstance): ItemInstance = when { diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/RTPotionBottleFillingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/RTPotionBottleFillingRecipe.kt index 421a686e1..b72cb3c9c 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/recipe/RTPotionBottleFillingRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/RTPotionBottleFillingRecipe.kt @@ -29,7 +29,7 @@ data class RTPotionBottleFillingRecipe(val bottleType: HTBottleType, override va } override fun apply(first: ItemInstance, second: FluidInstance): ItemStack = - bottleType.filledItem.toStack(patch = HTPotionHelper.createPotionPatch(second)) + bottleType.filledItem.asStackOrEmpty(patch = HTPotionHelper.createPotionPatch(second)) override fun getMatchingStack(first: ItemInstance, second: FluidInstance): Pair = Pair( HTIngredientHelper.copyWithCount(first, 1), From bda82ed775628ea5a06f0ce454b2fdc37558fcae Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Fri, 9 Oct 2026 22:33:15 +0900 Subject: [PATCH 06/25] =?UTF-8?q?feat!:=20=E6=A9=9F=E6=A2=B0=E3=82=AB?= =?UTF-8?q?=E3=83=86=E3=82=B4=E3=83=AA=E3=82=92=20Bio=20=E3=81=8B=E3=82=89?= =?UTF-8?q?=20Resource=20=E3=81=AB=E5=A4=89=E6=9B=B4=20feat!:=20Brewery=20?= =?UTF-8?q?=E3=82=92=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/integration/jei/RagiumJeiPlugin.kt | 14 ++------ .../integration/jei/RagiumJeiRecipeTypes.kt | 5 +-- .../data/lang/RagiumEnglishLangProvider.kt | 2 -- .../data/lang/RagiumJapaneseLangProvider.kt | 2 -- .../data/recipe/RagiumBioRecipeProvider.kt | 14 ++++---- .../recipe/RagiumVanillaRecipeProvider.kt | 9 +++-- .../blockstates/bio_machine_casing.json | 7 ---- .../assets/ragium/blockstates/brewery.json | 34 ------------------ .../assets/ragium/blockstates/planter.json | 8 ++--- .../blockstates/resource_machine_casing.json | 7 ++++ .../ragium/items/bio_machine_casing.json | 6 ---- .../ragium/items/bio_machine_parts.json | 6 ---- .../ragium/items/resource_machine_casing.json | 6 ++++ ...ewery.json => resource_machine_parts.json} | 2 +- .../resources/assets/ragium/lang/en_us.json | 6 ++-- .../resources/assets/ragium/lang/ja_jp.json | 6 ++-- .../ragium/models/block/machine/bio.json | 8 ----- .../{brewery.json => machine/resource.json} | 4 +-- .../assets/ragium/models/block/planter.json | 2 +- ...sing.json => resource_machine_casing.json} | 2 +- ...parts.json => resource_machine_parts.json} | 2 +- .../tags/block/mineable/pickaxe.json | 3 +- .../ragium/loot_table/blocks/brewery.json | 31 ---------------- ...sing.json => resource_machine_casing.json} | 4 +-- .../recipe/brewing/potion/blindness.json | 12 +++---- .../recipe/brewing/potion/darkness.json | 24 ++++++------- .../potion/enchanted_golden_apple.json | 12 +++---- .../recipe/brewing/potion/golden_apple.json | 12 +++---- .../ragium/recipe/brewing/potion/hunger.json | 12 +++---- .../ragium/recipe/brewing/potion/nausea.json | 12 +++---- .../ragium/recipe/brewing/potion/wither.json | 18 +++++----- .../data/ragium/recipe/shaped/brewery.json | 18 ---------- .../data/ragium/recipe/shaped/planter.json | 2 +- ...sing.json => resource_machine_casing.json} | 2 +- .../data/ragium/tags/block/machines.json | 4 +-- .../machines/{bio.json => resource.json} | 1 - .../data/ragium/tags/item/machines.json | 4 +-- .../item/machines/{bio.json => resource.json} | 1 - .../resources/reports/ragium/registries.json | 11 ++---- .../hiiragi283/ragium/api/RagiumConfig.kt | 6 +--- .../hiiragi283/ragium/api/RagiumConstants.kt | 5 ++- .../recipe/builder/RTMixingRecipeBuilder.kt | 3 +- .../recipe/builder/RagiumRecipeBuilders.kt | 19 +++++----- .../ragium/api/recipe/RTBrewingRecipe.kt | 29 --------------- .../ragium/api/recipe/RagiumRecipeLookups.kt | 8 ++--- .../api/recipe/RagiumRecipeSerializers.kt | 6 +--- .../ragium/api/recipe/RagiumRecipeTypes.kt | 5 +-- .../ragium/api/tag/HTMachineType.kt | 2 +- .../hiiragi283/ragium/common/RagiumCommon.kt | 6 ++-- .../ragium/common/block/RagiumBlocks.kt | 11 +++--- .../block/entity/RagiumBlockEntityTypes.kt | 10 ++---- .../entity/machine/HTBreweryBlockEntity.kt | 18 ---------- .../ragium/common/item/RagiumItems.kt | 5 +-- .../ragium/textures/block/brewery_front.png | Bin 374 -> 0 bytes .../{bio_front.png => resource_front.png} | Bin .../{bio_side.png => resource_side.png} | Bin .../item/parts/{bio.png => resource.png} | Bin 57 files changed, 135 insertions(+), 333 deletions(-) delete mode 100644 src/generated/resources/assets/ragium/blockstates/bio_machine_casing.json delete mode 100644 src/generated/resources/assets/ragium/blockstates/brewery.json create mode 100644 src/generated/resources/assets/ragium/blockstates/resource_machine_casing.json delete mode 100644 src/generated/resources/assets/ragium/items/bio_machine_casing.json delete mode 100644 src/generated/resources/assets/ragium/items/bio_machine_parts.json create mode 100644 src/generated/resources/assets/ragium/items/resource_machine_casing.json rename src/generated/resources/assets/ragium/items/{brewery.json => resource_machine_parts.json} (50%) delete mode 100644 src/generated/resources/assets/ragium/models/block/machine/bio.json rename src/generated/resources/assets/ragium/models/block/{brewery.json => machine/resource.json} (50%) rename src/generated/resources/assets/ragium/models/block/{bio_machine_casing.json => resource_machine_casing.json} (67%) rename src/generated/resources/assets/ragium/models/item/{bio_machine_parts.json => resource_machine_parts.json} (59%) delete mode 100644 src/generated/resources/data/ragium/loot_table/blocks/brewery.json rename src/generated/resources/data/ragium/loot_table/blocks/{bio_machine_casing.json => resource_machine_casing.json} (72%) delete mode 100644 src/generated/resources/data/ragium/recipe/shaped/brewery.json rename src/generated/resources/data/ragium/recipe/stonecutting/{bio_machine_casing.json => resource_machine_casing.json} (69%) rename src/generated/resources/data/ragium/tags/block/machines/{bio.json => resource.json} (65%) rename src/generated/resources/data/ragium/tags/item/machines/{bio.json => resource.json} (65%) delete mode 100644 src/lib/kotlin/hiiragi283/ragium/api/recipe/RTBrewingRecipe.kt delete mode 100644 src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTBreweryBlockEntity.kt delete mode 100644 src/main/resources/assets/ragium/textures/block/brewery_front.png rename src/main/resources/assets/ragium/textures/block/machine/{bio_front.png => resource_front.png} (100%) rename src/main/resources/assets/ragium/textures/block/machine/{bio_side.png => resource_side.png} (100%) rename src/main/resources/assets/ragium/textures/item/parts/{bio.png => resource.png} (100%) diff --git a/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiPlugin.kt b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiPlugin.kt index 7cfda1ac7..f248e1775 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiPlugin.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiPlugin.kt @@ -4,7 +4,6 @@ import hiiragi283.lib.HTPhysicalSideHelper import hiiragi283.lib.integration.jei.HTJeiDrawables import hiiragi283.lib.integration.jei.HTJeiPlugin import hiiragi283.lib.integration.jei.HTJeiRecipeHelper -import hiiragi283.lib.integration.jei.category.HTItemAndFluidToFluidRecipeCategory import hiiragi283.lib.integration.jei.category.HTItemAndFluidToItemRecipeCategory import hiiragi283.lib.integration.jei.category.HTItemToDoubleItemRecipeCategory import hiiragi283.lib.integration.jei.category.HTSingleRecipeCategory @@ -175,12 +174,7 @@ class RagiumJeiPlugin : HTJeiPlugin(RagiumAPI.MOD_ID) { RTMixingRecipeCategory(guiHelper), RTReactingRecipeCategory(guiHelper), RTWashingRecipeCategory(guiHelper), - // Bio - HTItemAndFluidToFluidRecipeCategory( - RagiumJeiRecipeTypes.BREWING, - RagiumRecipeTypes.BREWING, - guiHelper.createDrawableItemLike(RagiumBlocks.BREWERY) - ), + // Resource HTItemToDoubleItemRecipeCategory( RagiumJeiRecipeTypes.PLANTING, RagiumRecipeTypes.PLANTING, @@ -212,8 +206,7 @@ class RagiumJeiPlugin : HTJeiPlugin(RagiumAPI.MOD_ID) { HTJeiRecipeHelper.addRecipes(registration, RagiumJeiRecipeTypes.MIXING, RagiumRecipeLookups.MIXING) HTJeiRecipeHelper.addRecipes(registration, RagiumJeiRecipeTypes.REACTING, RagiumRecipeLookups.REACTING) HTJeiRecipeHelper.addRecipes(registration, RagiumJeiRecipeTypes.WASHING, RagiumRecipeLookups.WASHING) - // Bio - HTJeiRecipeHelper.addRecipes(registration, RagiumJeiRecipeTypes.BREWING, RagiumRecipeLookups.BREWING) + // Resource HTJeiRecipeHelper.addRecipes(registration, RagiumJeiRecipeTypes.PLANTING, RagiumRecipeLookups.PLANTING) // Electronics HTJeiRecipeHelper.addRecipes( @@ -302,8 +295,7 @@ class RagiumJeiPlugin : HTJeiPlugin(RagiumAPI.MOD_ID) { registration.addCraftingStation(RagiumJeiRecipeTypes.BATHING, RagiumBlocks.CHEMICAL_BATH) registration.addCraftingStation(RagiumJeiRecipeTypes.REACTING, RagiumBlocks.CHEMICAL_REACTOR) registration.addCraftingStation(RagiumJeiRecipeTypes.MIXING, RagiumBlocks.MIXER) - // Bio - registration.addCraftingStation(RagiumJeiRecipeTypes.BREWING, RagiumBlocks.BREWERY) + // Resource registration.addCraftingStation(RagiumJeiRecipeTypes.PLANTING, RagiumBlocks.PLANTER) // Electronics registration.addCraftingStation(RagiumJeiRecipeTypes.ELECTROLYZING, RagiumBlocks.ELECTROLYZER) diff --git a/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiRecipeTypes.kt b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiRecipeTypes.kt index 696cf9667..f414f4d02 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiRecipeTypes.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiRecipeTypes.kt @@ -75,10 +75,7 @@ data object RagiumJeiRecipeTypes { @JvmField val WASHING: HTRecipeHolderType = create(RagiumConstants.WASHING) - // Bio - @JvmField - val BREWING: HTRecipeHolderType = create(RagiumConstants.BREWING) - + // Resource @JvmField val PLANTING: HTRecipeHolderType = create(RagiumConstants.PLANTING) diff --git a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt index 60a521d8c..6b3112c51 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt @@ -58,7 +58,6 @@ class RagiumEnglishLangProvider(output: PackOutput) : add(RagiumBlocks.CHEMICAL_REACTOR, "Chemical Reactor") add(RagiumBlocks.MIXER, "Mixer") - add(RagiumBlocks.BREWERY, "Brewery") add(RagiumBlocks.PLANTER, "Planter") add(RagiumBlocks.ELECTROLYZER, "Electrolyzer") @@ -188,7 +187,6 @@ class RagiumEnglishLangProvider(output: PackOutput) : addRecipeType(RagiumRecipeTypes.REACTING, "Chemical Reacting") addRecipeType(RagiumRecipeTypes.WASHING, "Washing") - addRecipeType(RagiumRecipeTypes.BREWING, "Brewing") addRecipeType(RagiumRecipeTypes.PLANTING, "Planting") addRecipeType(RagiumRecipeTypes.ELECTROLYZING, "Electrolyzing") diff --git a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt index 48527406d..23a46e1d9 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt @@ -54,7 +54,6 @@ class RagiumJapaneseLangProvider(output: PackOutput) : add(RagiumBlocks.CHEMICAL_REACTOR, "化学反応槽") add(RagiumBlocks.MIXER, "混合機") - add(RagiumBlocks.BREWERY, "醸造機") add(RagiumBlocks.PLANTER, "栽培機") add(RagiumBlocks.ELECTROLYZER, "電解機") @@ -184,7 +183,6 @@ class RagiumJapaneseLangProvider(output: PackOutput) : addRecipeType(RagiumRecipeTypes.REACTING, "化学反応") addRecipeType(RagiumRecipeTypes.WASHING, "洗浄") - addRecipeType(RagiumRecipeTypes.BREWING, "醸造") addRecipeType(RagiumRecipeTypes.PLANTING, "栽培") addRecipeType(RagiumRecipeTypes.ELECTROLYZING, "電気分解") diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumBioRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumBioRecipeProvider.kt index 86bc4e6c5..b3c77b195 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumBioRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumBioRecipeProvider.kt @@ -33,7 +33,7 @@ class RagiumBioRecipeProvider(packOutput: PackOutput, future: CompletableFuture< RagiumRecipeBuilders.brewing { itemIngredient { items { +Items.PUFFERFISH } } fluidIngredient { +HTPotionFluidIngredient(Potions.THICK) } - result { + fluidResult { +PotionContents( customEffects = listOf(MobEffectInstance(MobEffects.NAUSEA, 900)), customName = "nausea" @@ -46,7 +46,7 @@ class RagiumBioRecipeProvider(packOutput: PackOutput, future: CompletableFuture< RagiumRecipeBuilders.brewing { itemIngredient { +holderSet(Tags.Items.GLASS_BLOCKS_TINTED) } fluidIngredient { +HTPotionFluidIngredient(Potions.THICK) } - result { + fluidResult { +PotionContents( customEffects = listOf(MobEffectInstance(MobEffects.BLINDNESS, 900)), customName = "blindness" @@ -58,7 +58,7 @@ class RagiumBioRecipeProvider(packOutput: PackOutput, future: CompletableFuture< RagiumRecipeBuilders.brewing { itemIngredient { items { +Items.ROTTEN_FLESH } } fluidIngredient { +HTPotionFluidIngredient(Potions.THICK) } - result { + fluidResult { +PotionContents( customEffects = listOf(MobEffectInstance(MobEffects.HUNGER, 900)), customName = "hunger" @@ -75,7 +75,7 @@ class RagiumBioRecipeProvider(packOutput: PackOutput, future: CompletableFuture< } } fluidIngredient { +HTPotionFluidIngredient(Potions.THICK) } - result { + fluidResult { +PotionContents( customEffects = listOf(MobEffectInstance(MobEffects.WITHER, 900)), customName = "wither" @@ -94,7 +94,7 @@ class RagiumBioRecipeProvider(packOutput: PackOutput, future: CompletableFuture< RagiumRecipeBuilders.brewing { itemIngredient { +dustOrGem(RagiumMaterial.Gem.ECHO) } fluidIngredient { +HTPotionFluidIngredient(Potions.THICK) } - result { + fluidResult { +PotionContents( customEffects = listOf(MobEffectInstance(MobEffects.DARKNESS, 900)), customName = "darkness" @@ -107,7 +107,7 @@ class RagiumBioRecipeProvider(packOutput: PackOutput, future: CompletableFuture< RagiumRecipeBuilders.brewing { itemIngredient { items { +Items.GOLDEN_APPLE } } fluidIngredient { +HTPotionFluidIngredient(Potions.THICK) } - result { + fluidResult { +PotionContents( customColor = 0xff9900, customEffects = extractEffects(Consumables.GOLDEN_APPLE), @@ -119,7 +119,7 @@ class RagiumBioRecipeProvider(packOutput: PackOutput, future: CompletableFuture< RagiumRecipeBuilders.brewing { itemIngredient { items { +Items.ENCHANTED_GOLDEN_APPLE } } fluidIngredient { +HTPotionFluidIngredient(Potions.THICK) } - result { + fluidResult { +PotionContents( customColor = 0xff9900, customEffects = extractEffects(Consumables.ENCHANTED_GOLDEN_APPLE), diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt index 78e38e50d..598e8b9a6 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt @@ -401,9 +401,8 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut // Chemical chemical(RagiumBlocks.CHEMICAL_BATH) { items { +Items.CAULDRON } } chemical(RagiumBlocks.MIXER) { +holderSet(Tags.Items.BUCKETS_EMPTY) } - // Bio - bio(RagiumBlocks.BREWERY) { items { +Items.BREWING_STAND } } - bio(RagiumBlocks.PLANTER) { items { +Items.FLOWER_POT } } + // Resource + resource(RagiumBlocks.PLANTER) { items { +Items.FLOWER_POT } } // Electronics electronics(RagiumBlocks.ELECTROLYZER) { +holderSet(ItemTags.LIGHTNING_RODS) } electronics(RagiumBlocks.PRECISION_ASSEMBLER) { items { +RagiumBlocks.ASSEMBLER } } @@ -486,9 +485,9 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut ) } - private inline fun bio(result: HTSimpleDeferredBlockAndItem, builderAction: IngredientBuilder.() -> Unit) { + private inline fun resource(result: HTSimpleDeferredBlockAndItem, builderAction: IngredientBuilder.() -> Unit) { machine( - HTMachineType.BIO, + HTMachineType.RESOURCE, RagiumMaterial.Alloy.BLACK_STEEL, RagiumMaterial.Gem.EMERALD, result, diff --git a/src/generated/resources/assets/ragium/blockstates/bio_machine_casing.json b/src/generated/resources/assets/ragium/blockstates/bio_machine_casing.json deleted file mode 100644 index 5b39643aa..000000000 --- a/src/generated/resources/assets/ragium/blockstates/bio_machine_casing.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "variants": { - "": { - "model": "ragium:block/bio_machine_casing" - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/blockstates/brewery.json b/src/generated/resources/assets/ragium/blockstates/brewery.json deleted file mode 100644 index ec8a09097..000000000 --- a/src/generated/resources/assets/ragium/blockstates/brewery.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "variants": { - "facing=east,is_active=false": { - "model": "ragium:block/machine/bio", - "y": 90 - }, - "facing=east,is_active=true": { - "model": "ragium:block/brewery", - "y": 90 - }, - "facing=north,is_active=false": { - "model": "ragium:block/machine/bio" - }, - "facing=north,is_active=true": { - "model": "ragium:block/brewery" - }, - "facing=south,is_active=false": { - "model": "ragium:block/machine/bio", - "y": 180 - }, - "facing=south,is_active=true": { - "model": "ragium:block/brewery", - "y": 180 - }, - "facing=west,is_active=false": { - "model": "ragium:block/machine/bio", - "y": 270 - }, - "facing=west,is_active=true": { - "model": "ragium:block/brewery", - "y": 270 - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/blockstates/planter.json b/src/generated/resources/assets/ragium/blockstates/planter.json index 0933e5ed3..3a809f3e7 100644 --- a/src/generated/resources/assets/ragium/blockstates/planter.json +++ b/src/generated/resources/assets/ragium/blockstates/planter.json @@ -1,7 +1,7 @@ { "variants": { "facing=east,is_active=false": { - "model": "ragium:block/machine/bio", + "model": "ragium:block/machine/resource", "y": 90 }, "facing=east,is_active=true": { @@ -9,13 +9,13 @@ "y": 90 }, "facing=north,is_active=false": { - "model": "ragium:block/machine/bio" + "model": "ragium:block/machine/resource" }, "facing=north,is_active=true": { "model": "ragium:block/planter" }, "facing=south,is_active=false": { - "model": "ragium:block/machine/bio", + "model": "ragium:block/machine/resource", "y": 180 }, "facing=south,is_active=true": { @@ -23,7 +23,7 @@ "y": 180 }, "facing=west,is_active=false": { - "model": "ragium:block/machine/bio", + "model": "ragium:block/machine/resource", "y": 270 }, "facing=west,is_active=true": { diff --git a/src/generated/resources/assets/ragium/blockstates/resource_machine_casing.json b/src/generated/resources/assets/ragium/blockstates/resource_machine_casing.json new file mode 100644 index 000000000..f0bdbf1fd --- /dev/null +++ b/src/generated/resources/assets/ragium/blockstates/resource_machine_casing.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "ragium:block/resource_machine_casing" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/items/bio_machine_casing.json b/src/generated/resources/assets/ragium/items/bio_machine_casing.json deleted file mode 100644 index 92a8923fe..000000000 --- a/src/generated/resources/assets/ragium/items/bio_machine_casing.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "model": { - "type": "minecraft:model", - "model": "ragium:block/bio_machine_casing" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/items/bio_machine_parts.json b/src/generated/resources/assets/ragium/items/bio_machine_parts.json deleted file mode 100644 index e296f1376..000000000 --- a/src/generated/resources/assets/ragium/items/bio_machine_parts.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "model": { - "type": "minecraft:model", - "model": "ragium:item/bio_machine_parts" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/items/resource_machine_casing.json b/src/generated/resources/assets/ragium/items/resource_machine_casing.json new file mode 100644 index 000000000..70cd3c855 --- /dev/null +++ b/src/generated/resources/assets/ragium/items/resource_machine_casing.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "ragium:block/resource_machine_casing" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/items/brewery.json b/src/generated/resources/assets/ragium/items/resource_machine_parts.json similarity index 50% rename from src/generated/resources/assets/ragium/items/brewery.json rename to src/generated/resources/assets/ragium/items/resource_machine_parts.json index ac50c40f6..b52967ab2 100644 --- a/src/generated/resources/assets/ragium/items/brewery.json +++ b/src/generated/resources/assets/ragium/items/resource_machine_parts.json @@ -1,6 +1,6 @@ { "model": { "type": "minecraft:model", - "model": "ragium:block/brewery" + "model": "ragium:item/resource_machine_parts" } } \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/lang/en_us.json b/src/generated/resources/assets/ragium/lang/en_us.json index dbd1486ab..36c710bef 100644 --- a/src/generated/resources/assets/ragium/lang/en_us.json +++ b/src/generated/resources/assets/ragium/lang/en_us.json @@ -26,12 +26,10 @@ "block.ragium.arcane_machine_casing": "Machine Casing (Arcane)", "block.ragium.aromatic_compound": "Aromatic Compound", "block.ragium.assembler": "Assembler", - "block.ragium.bio_machine_casing": "Machine Casing (Bio)", "block.ragium.black_dye": "Black Dye", "block.ragium.black_steel_block": "Block of Black Steel", "block.ragium.bleach": "Bleach", "block.ragium.blue_dye": "Blue Dye", - "block.ragium.brewery": "Brewery", "block.ragium.brown_dye": "Brown Dye", "block.ragium.charcoal_block": "Block of Charcoal", "block.ragium.chemical_bath": "Chemical Bath", @@ -104,6 +102,7 @@ "block.ragium.red_dye": "Red Dye", "block.ragium.refinery": "Refinery", "block.ragium.resin": "Resin", + "block.ragium.resource_machine_casing": "Machine Casing (Resource)", "block.ragium.salt_water": "Salt Water", "block.ragium.scanner": "Laser Scanner", "block.ragium.smelter": "Smelter", @@ -206,7 +205,6 @@ "item.ragium.bamboo_charcoal": "Bamboo Charcoal", "item.ragium.bauxite_dust": "Bauxite Dust", "item.ragium.beeswax": "Beeswax", - "item.ragium.bio_machine_parts": "Machine Parts (Bio)", "item.ragium.black_dye_bucket": "Black Dye Bucket", "item.ragium.black_steel_ingot": "Black Steel Ingot", "item.ragium.black_steel_nugget": "Black Steel Nugget", @@ -301,6 +299,7 @@ "item.ragium.raginite_dust": "Raginite Dust", "item.ragium.red_dye_bucket": "Red Dye Bucket", "item.ragium.resin_bucket": "Resin Bucket", + "item.ragium.resource_machine_parts": "Machine Parts (Resource)", "item.ragium.salt_dust": "Salt Dust", "item.ragium.salt_water_bucket": "Salt Water Bucket", "item.ragium.silicon_chip": "Silicon Chip", @@ -396,7 +395,6 @@ "recipe_type.ragium.alloying": "Alloying", "recipe_type.ragium.assembling": "Assembling", "recipe_type.ragium.bathing": "Chemical Bathing", - "recipe_type.ragium.brewing": "Brewing", "recipe_type.ragium.centrifuging": "Centrifuging", "recipe_type.ragium.compressing": "Compressing", "recipe_type.ragium.crushing": "Crushing", diff --git a/src/generated/resources/assets/ragium/lang/ja_jp.json b/src/generated/resources/assets/ragium/lang/ja_jp.json index 80297bcc7..6624c1a64 100644 --- a/src/generated/resources/assets/ragium/lang/ja_jp.json +++ b/src/generated/resources/assets/ragium/lang/ja_jp.json @@ -26,12 +26,10 @@ "block.ragium.arcane_machine_casing": "機械筐体 (神秘)", "block.ragium.aromatic_compound": "芳香族化合物", "block.ragium.assembler": "組立機", - "block.ragium.bio_machine_casing": "機械筐体 (生体)", "block.ragium.black_dye": "黒色の染料", "block.ragium.black_steel_block": "黒鋼ブロック", "block.ragium.bleach": "漂白剤", "block.ragium.blue_dye": "青色の染料", - "block.ragium.brewery": "醸造機", "block.ragium.brown_dye": "茶色の染料", "block.ragium.charcoal_block": "木炭ブロック", "block.ragium.chemical_bath": "化学浴槽", @@ -104,6 +102,7 @@ "block.ragium.red_dye": "赤色の染料", "block.ragium.refinery": "精製機", "block.ragium.resin": "樹脂", + "block.ragium.resource_machine_casing": "機械筐体 (資源)", "block.ragium.salt_water": "塩水", "block.ragium.scanner": "レーザースキャナ", "block.ragium.smelter": "製錬炉", @@ -206,7 +205,6 @@ "item.ragium.bamboo_charcoal": "竹炭", "item.ragium.bauxite_dust": "ボーキサイトの粉", "item.ragium.beeswax": "密猟", - "item.ragium.bio_machine_parts": "機械部品 (生体)", "item.ragium.black_dye_bucket": "黒色の染料入りバケツ", "item.ragium.black_steel_ingot": "黒鋼インゴット", "item.ragium.black_steel_nugget": "黒鋼ナゲット", @@ -301,6 +299,7 @@ "item.ragium.raginite_dust": "ラギナイトの粉", "item.ragium.red_dye_bucket": "赤色の染料入りバケツ", "item.ragium.resin_bucket": "樹脂入りバケツ", + "item.ragium.resource_machine_parts": "機械部品 (資源)", "item.ragium.salt_dust": "食塩の粉", "item.ragium.salt_water_bucket": "塩水入りバケツ", "item.ragium.silicon_chip": "シリコンチップ", @@ -396,7 +395,6 @@ "recipe_type.ragium.alloying": "合金", "recipe_type.ragium.assembling": "組立", "recipe_type.ragium.bathing": "化学洗浄", - "recipe_type.ragium.brewing": "醸造", "recipe_type.ragium.centrifuging": "遠心分離", "recipe_type.ragium.compressing": "圧縮", "recipe_type.ragium.crushing": "粉砕", diff --git a/src/generated/resources/assets/ragium/models/block/machine/bio.json b/src/generated/resources/assets/ragium/models/block/machine/bio.json deleted file mode 100644 index a1f708d0c..000000000 --- a/src/generated/resources/assets/ragium/models/block/machine/bio.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/orientable", - "textures": { - "front": "ragium:block/machine/bio_front", - "side": "ragium:block/machine/bio_side", - "top": "ragium:block/machine_casing" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/models/block/brewery.json b/src/generated/resources/assets/ragium/models/block/machine/resource.json similarity index 50% rename from src/generated/resources/assets/ragium/models/block/brewery.json rename to src/generated/resources/assets/ragium/models/block/machine/resource.json index 7cc0e22b7..e51e1a1ba 100644 --- a/src/generated/resources/assets/ragium/models/block/brewery.json +++ b/src/generated/resources/assets/ragium/models/block/machine/resource.json @@ -1,8 +1,8 @@ { "parent": "minecraft:block/orientable", "textures": { - "front": "ragium:block/brewery_front", - "side": "ragium:block/machine/bio_side", + "front": "ragium:block/machine/resource_front", + "side": "ragium:block/machine/resource_side", "top": "ragium:block/machine_casing" } } \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/models/block/planter.json b/src/generated/resources/assets/ragium/models/block/planter.json index 42eec88a1..7f964a40c 100644 --- a/src/generated/resources/assets/ragium/models/block/planter.json +++ b/src/generated/resources/assets/ragium/models/block/planter.json @@ -2,7 +2,7 @@ "parent": "minecraft:block/orientable", "textures": { "front": "ragium:block/planter_front", - "side": "ragium:block/machine/bio_side", + "side": "ragium:block/machine/resource_side", "top": "ragium:block/machine_casing" } } \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/models/block/bio_machine_casing.json b/src/generated/resources/assets/ragium/models/block/resource_machine_casing.json similarity index 67% rename from src/generated/resources/assets/ragium/models/block/bio_machine_casing.json rename to src/generated/resources/assets/ragium/models/block/resource_machine_casing.json index 3515a3ea6..9029cbd65 100644 --- a/src/generated/resources/assets/ragium/models/block/bio_machine_casing.json +++ b/src/generated/resources/assets/ragium/models/block/resource_machine_casing.json @@ -1,7 +1,7 @@ { "parent": "minecraft:block/cube_top", "textures": { - "side": "ragium:block/machine/bio_side", + "side": "ragium:block/machine/resource_side", "top": "ragium:block/machine_casing" } } \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/models/item/bio_machine_parts.json b/src/generated/resources/assets/ragium/models/item/resource_machine_parts.json similarity index 59% rename from src/generated/resources/assets/ragium/models/item/bio_machine_parts.json rename to src/generated/resources/assets/ragium/models/item/resource_machine_parts.json index f8696956f..072353314 100644 --- a/src/generated/resources/assets/ragium/models/item/bio_machine_parts.json +++ b/src/generated/resources/assets/ragium/models/item/resource_machine_parts.json @@ -1,6 +1,6 @@ { "parent": "minecraft:item/generated", "textures": { - "layer0": "ragium:item/parts/bio" + "layer0": "ragium:item/parts/resource" } } \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json b/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json index 75f7766d1..ff709ea25 100644 --- a/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json +++ b/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json @@ -4,9 +4,7 @@ "ragium:aluminum_block", "ragium:arcane_machine_casing", "ragium:assembler", - "ragium:bio_machine_casing", "ragium:black_steel_block", - "ragium:brewery", "ragium:charcoal_block", "ragium:chemical_bath", "ragium:chemical_machine_casing", @@ -45,6 +43,7 @@ "ragium:quartz_glass", "ragium:quartz_glass_pane", "ragium:refinery", + "ragium:resource_machine_casing", "ragium:scanner", "ragium:smelter", "ragium:sooty_iron_block", diff --git a/src/generated/resources/data/ragium/loot_table/blocks/brewery.json b/src/generated/resources/data/ragium/loot_table/blocks/brewery.json deleted file mode 100644 index 4508153ac..000000000 --- a/src/generated/resources/data/ragium/loot_table/blocks/brewery.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "functions": [ - { - "function": "minecraft:copy_components", - "include": [ - "minecraft:custom_name", - "ragium:owner_id" - ], - "source": "block_entity" - } - ], - "name": "ragium:brewery" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "ragium:blocks/brewery" -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/loot_table/blocks/bio_machine_casing.json b/src/generated/resources/data/ragium/loot_table/blocks/resource_machine_casing.json similarity index 72% rename from src/generated/resources/data/ragium/loot_table/blocks/bio_machine_casing.json rename to src/generated/resources/data/ragium/loot_table/blocks/resource_machine_casing.json index 906473fb8..1fbf65dcd 100644 --- a/src/generated/resources/data/ragium/loot_table/blocks/bio_machine_casing.json +++ b/src/generated/resources/data/ragium/loot_table/blocks/resource_machine_casing.json @@ -11,11 +11,11 @@ "entries": [ { "type": "minecraft:item", - "name": "ragium:bio_machine_casing" + "name": "ragium:resource_machine_casing" } ], "rolls": 1.0 } ], - "random_sequence": "ragium:blocks/bio_machine_casing" + "random_sequence": "ragium:blocks/resource_machine_casing" } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/brewing/potion/blindness.json b/src/generated/resources/data/ragium/recipe/brewing/potion/blindness.json index 78d43bdd0..f84b46b2b 100644 --- a/src/generated/resources/data/ragium/recipe/brewing/potion/blindness.json +++ b/src/generated/resources/data/ragium/recipe/brewing/potion/blindness.json @@ -1,5 +1,5 @@ { - "type": "ragium:brewing", + "type": "ragium:mixing", "fluid_ingredient": { "amount": 1000, "fluids": { @@ -7,11 +7,7 @@ "potions": "minecraft:thick" } }, - "item_ingredient": { - "count": 1, - "items": "#c:glass_blocks/tinted" - }, - "result": { + "fluid_result": { "type": "ragium:potion", "amount": 1000, "custom_effects": [ @@ -23,5 +19,9 @@ ], "custom_name": "blindness" }, + "item_ingredient": { + "count": 1, + "items": "#c:glass_blocks/tinted" + }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/brewing/potion/darkness.json b/src/generated/resources/data/ragium/recipe/brewing/potion/darkness.json index dc71ceb5c..0ceaee492 100644 --- a/src/generated/resources/data/ragium/recipe/brewing/potion/darkness.json +++ b/src/generated/resources/data/ragium/recipe/brewing/potion/darkness.json @@ -1,5 +1,5 @@ { - "type": "ragium:brewing", + "type": "ragium:mixing", "fluid_ingredient": { "amount": 1000, "fluids": { @@ -7,17 +7,7 @@ "potions": "minecraft:thick" } }, - "item_ingredient": { - "count": 1, - "items": { - "neoforge:ingredient_type": "ragium:material_tags", - "tags": [ - "c:dusts/echo", - "c:gems/echo" - ] - } - }, - "result": { + "fluid_result": { "type": "ragium:potion", "amount": 1000, "custom_effects": [ @@ -29,5 +19,15 @@ ], "custom_name": "darkness" }, + "item_ingredient": { + "count": 1, + "items": { + "neoforge:ingredient_type": "ragium:material_tags", + "tags": [ + "c:dusts/echo", + "c:gems/echo" + ] + } + }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/brewing/potion/enchanted_golden_apple.json b/src/generated/resources/data/ragium/recipe/brewing/potion/enchanted_golden_apple.json index 881177075..483d513f2 100644 --- a/src/generated/resources/data/ragium/recipe/brewing/potion/enchanted_golden_apple.json +++ b/src/generated/resources/data/ragium/recipe/brewing/potion/enchanted_golden_apple.json @@ -1,5 +1,5 @@ { - "type": "ragium:brewing", + "type": "ragium:mixing", "fluid_ingredient": { "amount": 1000, "fluids": { @@ -7,11 +7,7 @@ "potions": "minecraft:thick" } }, - "item_ingredient": { - "count": 1, - "items": "minecraft:enchanted_golden_apple" - }, - "result": { + "fluid_result": { "type": "ragium:potion", "amount": 1000, "custom_color": 16750848, @@ -41,5 +37,9 @@ ], "custom_name": "enchanted_golden_apple" }, + "item_ingredient": { + "count": 1, + "items": "minecraft:enchanted_golden_apple" + }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/brewing/potion/golden_apple.json b/src/generated/resources/data/ragium/recipe/brewing/potion/golden_apple.json index 2e1f6ea7b..6e34f14fd 100644 --- a/src/generated/resources/data/ragium/recipe/brewing/potion/golden_apple.json +++ b/src/generated/resources/data/ragium/recipe/brewing/potion/golden_apple.json @@ -1,5 +1,5 @@ { - "type": "ragium:brewing", + "type": "ragium:mixing", "fluid_ingredient": { "amount": 1000, "fluids": { @@ -7,11 +7,7 @@ "potions": "minecraft:thick" } }, - "item_ingredient": { - "count": 1, - "items": "minecraft:golden_apple" - }, - "result": { + "fluid_result": { "type": "ragium:potion", "amount": 1000, "custom_color": 16750848, @@ -30,5 +26,9 @@ ], "custom_name": "golden_apple" }, + "item_ingredient": { + "count": 1, + "items": "minecraft:golden_apple" + }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/brewing/potion/hunger.json b/src/generated/resources/data/ragium/recipe/brewing/potion/hunger.json index b03938b26..398ce6b00 100644 --- a/src/generated/resources/data/ragium/recipe/brewing/potion/hunger.json +++ b/src/generated/resources/data/ragium/recipe/brewing/potion/hunger.json @@ -1,5 +1,5 @@ { - "type": "ragium:brewing", + "type": "ragium:mixing", "fluid_ingredient": { "amount": 1000, "fluids": { @@ -7,11 +7,7 @@ "potions": "minecraft:thick" } }, - "item_ingredient": { - "count": 1, - "items": "minecraft:rotten_flesh" - }, - "result": { + "fluid_result": { "type": "ragium:potion", "amount": 1000, "custom_effects": [ @@ -23,5 +19,9 @@ ], "custom_name": "hunger" }, + "item_ingredient": { + "count": 1, + "items": "minecraft:rotten_flesh" + }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/brewing/potion/nausea.json b/src/generated/resources/data/ragium/recipe/brewing/potion/nausea.json index b8c00efc6..eba404075 100644 --- a/src/generated/resources/data/ragium/recipe/brewing/potion/nausea.json +++ b/src/generated/resources/data/ragium/recipe/brewing/potion/nausea.json @@ -1,5 +1,5 @@ { - "type": "ragium:brewing", + "type": "ragium:mixing", "fluid_ingredient": { "amount": 1000, "fluids": { @@ -7,11 +7,7 @@ "potions": "minecraft:thick" } }, - "item_ingredient": { - "count": 1, - "items": "minecraft:pufferfish" - }, - "result": { + "fluid_result": { "type": "ragium:potion", "amount": 1000, "custom_effects": [ @@ -23,5 +19,9 @@ ], "custom_name": "nausea" }, + "item_ingredient": { + "count": 1, + "items": "minecraft:pufferfish" + }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/brewing/potion/wither.json b/src/generated/resources/data/ragium/recipe/brewing/potion/wither.json index e237554dd..24022e38d 100644 --- a/src/generated/resources/data/ragium/recipe/brewing/potion/wither.json +++ b/src/generated/resources/data/ragium/recipe/brewing/potion/wither.json @@ -1,5 +1,5 @@ { - "type": "ragium:brewing", + "type": "ragium:mixing", "fluid_ingredient": { "amount": 1000, "fluids": { @@ -7,14 +7,7 @@ "potions": "minecraft:thick" } }, - "item_ingredient": { - "count": 1, - "items": [ - "minecraft:wither_rose", - "minecraft:wither_skeleton_skull" - ] - }, - "result": { + "fluid_result": { "type": "ragium:potion", "amount": 1000, "custom_effects": [ @@ -26,5 +19,12 @@ ], "custom_name": "wither" }, + "item_ingredient": { + "count": 1, + "items": [ + "minecraft:wither_rose", + "minecraft:wither_skeleton_skull" + ] + }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/shaped/brewery.json b/src/generated/resources/data/ragium/recipe/shaped/brewery.json deleted file mode 100644 index abe46a1af..000000000 --- a/src/generated/resources/data/ragium/recipe/shaped/brewery.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "misc", - "key": { - "A": "#c:nuggets/black_steel", - "B": "ragium:bio_machine_parts", - "C": "#c:gears/emerald", - "D": "minecraft:brewing_stand" - }, - "pattern": [ - "ABA", - "BCB", - "ADA" - ], - "result": { - "id": "ragium:brewery" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/shaped/planter.json b/src/generated/resources/data/ragium/recipe/shaped/planter.json index 6b6cc8476..aadbcf8e9 100644 --- a/src/generated/resources/data/ragium/recipe/shaped/planter.json +++ b/src/generated/resources/data/ragium/recipe/shaped/planter.json @@ -3,7 +3,7 @@ "category": "misc", "key": { "A": "#c:nuggets/black_steel", - "B": "ragium:bio_machine_parts", + "B": "ragium:resource_machine_parts", "C": "#c:gears/emerald", "D": "minecraft:flower_pot" }, diff --git a/src/generated/resources/data/ragium/recipe/stonecutting/bio_machine_casing.json b/src/generated/resources/data/ragium/recipe/stonecutting/resource_machine_casing.json similarity index 69% rename from src/generated/resources/data/ragium/recipe/stonecutting/bio_machine_casing.json rename to src/generated/resources/data/ragium/recipe/stonecutting/resource_machine_casing.json index 6ae689f25..7041c3202 100644 --- a/src/generated/resources/data/ragium/recipe/stonecutting/bio_machine_casing.json +++ b/src/generated/resources/data/ragium/recipe/stonecutting/resource_machine_casing.json @@ -2,6 +2,6 @@ "type": "minecraft:stonecutting", "ingredient": "ragium:machine_casing", "result": { - "id": "ragium:bio_machine_casing" + "id": "ragium:resource_machine_casing" } } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/tags/block/machines.json b/src/generated/resources/data/ragium/tags/block/machines.json index 04e451f28..e5920255c 100644 --- a/src/generated/resources/data/ragium/tags/block/machines.json +++ b/src/generated/resources/data/ragium/tags/block/machines.json @@ -1,10 +1,10 @@ { "values": [ "#ragium:machines/arcane", - "#ragium:machines/bio", "#ragium:machines/chemical", "#ragium:machines/electronics", "#ragium:machines/heat", - "#ragium:machines/mechanical" + "#ragium:machines/mechanical", + "#ragium:machines/resource" ] } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/tags/block/machines/bio.json b/src/generated/resources/data/ragium/tags/block/machines/resource.json similarity index 65% rename from src/generated/resources/data/ragium/tags/block/machines/bio.json rename to src/generated/resources/data/ragium/tags/block/machines/resource.json index 9d8ee3c40..b3ea54d59 100644 --- a/src/generated/resources/data/ragium/tags/block/machines/bio.json +++ b/src/generated/resources/data/ragium/tags/block/machines/resource.json @@ -1,6 +1,5 @@ { "values": [ - "ragium:brewery", "ragium:planter" ] } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/tags/item/machines.json b/src/generated/resources/data/ragium/tags/item/machines.json index 04e451f28..e5920255c 100644 --- a/src/generated/resources/data/ragium/tags/item/machines.json +++ b/src/generated/resources/data/ragium/tags/item/machines.json @@ -1,10 +1,10 @@ { "values": [ "#ragium:machines/arcane", - "#ragium:machines/bio", "#ragium:machines/chemical", "#ragium:machines/electronics", "#ragium:machines/heat", - "#ragium:machines/mechanical" + "#ragium:machines/mechanical", + "#ragium:machines/resource" ] } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/tags/item/machines/bio.json b/src/generated/resources/data/ragium/tags/item/machines/resource.json similarity index 65% rename from src/generated/resources/data/ragium/tags/item/machines/bio.json rename to src/generated/resources/data/ragium/tags/item/machines/resource.json index 9d8ee3c40..b3ea54d59 100644 --- a/src/generated/resources/data/ragium/tags/item/machines/bio.json +++ b/src/generated/resources/data/ragium/tags/item/machines/resource.json @@ -1,6 +1,5 @@ { "values": [ - "ragium:brewery", "ragium:planter" ] } \ No newline at end of file diff --git a/src/generated/resources/reports/ragium/registries.json b/src/generated/resources/reports/ragium/registries.json index ab5cbb8db..b73495c47 100644 --- a/src/generated/resources/reports/ragium/registries.json +++ b/src/generated/resources/reports/ragium/registries.json @@ -5,11 +5,9 @@ "arcane_machine_casing", "aromatic_compound", "assembler", - "bio_machine_casing", "black_dye", "black_steel_block", "blue_dye", - "brewery", "brown_dye", "charcoal_block", "chemical_bath", @@ -69,6 +67,7 @@ "red_dye", "refinery", "resin", + "resource_machine_casing", "salt_water", "scanner", "smelter", @@ -85,7 +84,6 @@ "minecraft:block_entity_type": [ "alloy_smelter", "assembler", - "brewery", "chemical_bath", "compressor", "creative_battery", @@ -220,8 +218,6 @@ "bamboo_charcoal", "bauxite_dust", "beeswax", - "bio_machine_casing", - "bio_machine_parts", "black_dye_bucket", "black_steel_block", "black_steel_ingot", @@ -231,7 +227,6 @@ "block_mold", "blue_dye_bucket", "borax_dust", - "brewery", "brown_dye_bucket", "carbon_dust", "carbon_fiber", @@ -356,6 +351,8 @@ "red_dye_bucket", "refinery", "resin_bucket", + "resource_machine_casing", + "resource_machine_parts", "salt_dust", "salt_water_bucket", "scanner", @@ -424,7 +421,6 @@ "alloying", "assembling", "bathing", - "brewing", "centrifuging", "compressing", "crushing", @@ -448,7 +444,6 @@ "alloying", "assembling", "bathing", - "brewing", "centrifuging", "compressing", "crushing", diff --git a/src/lib/kotlin/hiiragi283/ragium/api/RagiumConfig.kt b/src/lib/kotlin/hiiragi283/ragium/api/RagiumConfig.kt index 2a1913595..f054a6414 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/RagiumConfig.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/RagiumConfig.kt @@ -141,11 +141,7 @@ data object RagiumConfig { val mixer: HTEnergyConfig = HTEnergyConfig.createMachine(builder, RagiumConstants.MIXER) - // Bio - @JvmField - val brewery: HTEnergyConfig = - HTEnergyConfig.createMachine(builder, RagiumConstants.BREWERY) - + // Resource @JvmField val planter: HTEnergyConfig = HTEnergyConfig.createMachine(builder, RagiumConstants.PLANTER) diff --git a/src/lib/kotlin/hiiragi283/ragium/api/RagiumConstants.kt b/src/lib/kotlin/hiiragi283/ragium/api/RagiumConstants.kt index 98859aec1..cf2a9fdda 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/RagiumConstants.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/RagiumConstants.kt @@ -29,8 +29,7 @@ data object RagiumConstants { const val MIXER = "mixer" const val WASHER = "washer" - // Bio - const val BREWERY = "brewery" + // Resource const val PLANTER = "planter" // Electronics @@ -68,7 +67,7 @@ data object RagiumConstants { const val REACTING = "reacting" const val WASHING = "washing" - // Bio + // Resource const val BREWING = "brewing" const val PLANTING = "planting" diff --git a/src/lib/kotlin/hiiragi283/ragium/api/data/recipe/builder/RTMixingRecipeBuilder.kt b/src/lib/kotlin/hiiragi283/ragium/api/data/recipe/builder/RTMixingRecipeBuilder.kt index 85cfd2ec9..d433a3c91 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/data/recipe/builder/RTMixingRecipeBuilder.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/data/recipe/builder/RTMixingRecipeBuilder.kt @@ -15,7 +15,6 @@ import hiiragi283.lib.recipe.result.HTItemOrFluidResult import hiiragi283.lib.recipe.result.HTItemResult import hiiragi283.lib.util.HTDelegates import hiiragi283.lib.util.Ior -import hiiragi283.ragium.api.RagiumConstants import hiiragi283.ragium.api.recipe.RTMixingRecipe import it.unimi.dsi.fastutil.objects.ObjectArrayList import net.minecraft.resources.Identifier @@ -24,7 +23,7 @@ import kotlin.contracts.ExperimentalContracts import kotlin.contracts.InvocationKind import kotlin.contracts.contract -class RTMixingRecipeBuilder : HTProgressRecipeBuilder(RagiumConstants.MIXING) { +class RTMixingRecipeBuilder(prefix: String) : HTProgressRecipeBuilder(prefix) { override fun getRecipeId(): Identifier? = result.getId() override fun createRecipe(): RTMixingRecipe = diff --git a/src/lib/kotlin/hiiragi283/ragium/api/data/recipe/builder/RagiumRecipeBuilders.kt b/src/lib/kotlin/hiiragi283/ragium/api/data/recipe/builder/RagiumRecipeBuilders.kt index a685e4af0..d2776cd24 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/data/recipe/builder/RagiumRecipeBuilders.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/data/recipe/builder/RagiumRecipeBuilders.kt @@ -16,7 +16,6 @@ import hiiragi283.ragium.api.RagiumConstants import hiiragi283.ragium.api.recipe.RTAlloyingRecipe import hiiragi283.ragium.api.recipe.RTAssemblingRecipe import hiiragi283.ragium.api.recipe.RTBathingRecipe -import hiiragi283.ragium.api.recipe.RTBrewingRecipe import hiiragi283.ragium.api.recipe.RTCentrifugingRecipe import hiiragi283.ragium.api.recipe.RTCompressingRecipe import hiiragi283.ragium.api.recipe.RTCrushingRecipe @@ -186,36 +185,34 @@ data object RagiumRecipeBuilders { contract { callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) } - return RTMixingRecipeBuilder().apply(builderAction) + return RTMixingRecipeBuilder(RagiumConstants.MIXING).apply(builderAction) } @JvmStatic - inline fun reacting(builderAction: RTReactingRecipeBuilder.() -> Unit): RTReactingRecipeBuilder { + inline fun brewing(builderAction: RTMixingRecipeBuilder.() -> Unit): RTMixingRecipeBuilder { contract { callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) } - return RTReactingRecipeBuilder().apply(builderAction) + return RTMixingRecipeBuilder(RagiumConstants.BREWING).apply(builderAction) } @JvmStatic - inline fun washing(builderAction: RTWashingRecipeBuilder.() -> Unit): RTWashingRecipeBuilder { + inline fun reacting(builderAction: RTReactingRecipeBuilder.() -> Unit): RTReactingRecipeBuilder { contract { callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) } - return RTWashingRecipeBuilder().apply(builderAction) + return RTReactingRecipeBuilder().apply(builderAction) } - // Bio @JvmStatic - inline fun brewing( - builderAction: HTItemAndFluidToRecipeBuilder.ToFluid.() -> Unit - ): HTItemAndFluidToRecipeBuilder.ToFluid { + inline fun washing(builderAction: RTWashingRecipeBuilder.() -> Unit): RTWashingRecipeBuilder { contract { callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) } - return HTItemAndFluidToRecipeBuilder.ToFluid(RagiumConstants.BREWING, ::RTBrewingRecipe).apply(builderAction) + return RTWashingRecipeBuilder().apply(builderAction) } + // Resource @JvmStatic inline fun planting( builderAction: HTItemToDoubleItemRecipeBuilder.() -> Unit diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTBrewingRecipe.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTBrewingRecipe.kt deleted file mode 100644 index 4a82b82f3..000000000 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTBrewingRecipe.kt +++ /dev/null @@ -1,29 +0,0 @@ -package hiiragi283.ragium.api.recipe - -import hiiragi283.lib.recipe.HTSerializableRecipe -import hiiragi283.lib.recipe.base.HTItemAndFluidToRecipe -import hiiragi283.lib.recipe.base.HTProgressData -import hiiragi283.lib.recipe.ingredient.HTFluidIngredient -import hiiragi283.lib.recipe.ingredient.HTItemIngredient -import hiiragi283.lib.recipe.input.HTItemAndFluidRecipeInput -import hiiragi283.lib.recipe.result.HTFluidResult -import net.minecraft.world.item.crafting.RecipeSerializer -import net.minecraft.world.item.crafting.RecipeType - -class RTBrewingRecipe( - itemIngredient: HTItemIngredient, - fluidIngredient: HTFluidIngredient, - result: HTFluidResult, - progressData: HTProgressData -) : HTItemAndFluidToRecipe.BasicFluid(itemIngredient, fluidIngredient, result, progressData), - HTSerializableRecipe { - companion object { - @JvmField - val SERIALIZER: RecipeSerializer = - RecipeSerializer(codec(::RTBrewingRecipe), streamCodec(::RTBrewingRecipe)) - } - - override fun getSerializer(): RecipeSerializer = RagiumRecipeSerializers.BREWING - - override fun getType(): RecipeType = RagiumRecipeTypes.BREWING -} diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeLookups.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeLookups.kt index 96b28af51..5df7b76b3 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeLookups.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeLookups.kt @@ -2,7 +2,6 @@ package hiiragi283.ragium.api.recipe import hiiragi283.lib.recipe.base.HTFluidToDoubleFluidRecipe import hiiragi283.lib.recipe.base.HTFluidToItemAndFluidRecipe -import hiiragi283.lib.recipe.base.HTItemAndFluidToFluidRecipe import hiiragi283.lib.recipe.base.HTItemAndFluidToItemRecipe import hiiragi283.lib.recipe.base.HTItemOrFluidRecipe import hiiragi283.lib.recipe.base.HTItemToDoubleItemRecipe @@ -80,7 +79,7 @@ data object RagiumRecipeLookups { val EXCHANGING: HTCompoundRecipeLookup = create(RagiumConstants.EXCHANGING) @JvmField - val MIXING: HTRecipeLookup = create(RagiumRecipeTypes.MIXING) + val MIXING: HTCompoundRecipeLookup = create(RagiumConstants.MIXING) @JvmField val REACTING: HTRecipeLookup = create(RagiumRecipeTypes.REACTING) @@ -88,10 +87,7 @@ data object RagiumRecipeLookups { @JvmField val WASHING: HTRecipeLookup = create(RagiumRecipeTypes.WASHING) - // Bio - @JvmField - val BREWING: HTCompoundRecipeLookup = create(RagiumConstants.BREWING) - + // Resource @JvmField val PLANTING: HTCompoundRecipeLookup = create(RagiumConstants.PLANTING) diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeSerializers.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeSerializers.kt index 81990d2bb..963f2449b 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeSerializers.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeSerializers.kt @@ -107,11 +107,7 @@ data object RagiumRecipeSerializers { val WASHING: RecipeSerializer = register(RagiumConstants.WASHING, RTWashingRecipe.SERIALIZER) - // Bio - @JvmField - val BREWING: RecipeSerializer = - register(RagiumConstants.BREWING, RTBrewingRecipe.SERIALIZER) - + // Resource @JvmField val PLANTING: RecipeSerializer = register(RagiumConstants.PLANTING, RTPlantingRecipe.SERIALIZER) diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeTypes.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeTypes.kt index 2680ac8a2..eab8aaa5d 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeTypes.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeTypes.kt @@ -88,10 +88,7 @@ data object RagiumRecipeTypes { @JvmField val WASHING: RecipeType = create(RagiumConstants.WASHING) - // Bio - @JvmField - val BREWING: RecipeType = create(RagiumConstants.BREWING) - + // Resource @JvmField val PLANTING: RecipeType = create(RagiumConstants.PLANTING) diff --git a/src/lib/kotlin/hiiragi283/ragium/api/tag/HTMachineType.kt b/src/lib/kotlin/hiiragi283/ragium/api/tag/HTMachineType.kt index d731110bf..b033b6bd4 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/tag/HTMachineType.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/tag/HTMachineType.kt @@ -16,7 +16,7 @@ enum class HTMachineType(langName: HTLangName) : MECHANICAL("Mechanical", "機械加工"), HEAT("Heat", "熱"), CHEMICAL("Chemical", "化学"), - BIO("Bio", "生体"), + RESOURCE("Resource", "資源"), ELECTRONICS("Electronics", "電子"), ARCANE("Arcane", "神秘") ; diff --git a/src/main/kotlin/hiiragi283/ragium/common/RagiumCommon.kt b/src/main/kotlin/hiiragi283/ragium/common/RagiumCommon.kt index c6901ecd9..9d3ac2e6a 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/RagiumCommon.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/RagiumCommon.kt @@ -139,8 +139,8 @@ internal data object RagiumCommon { RagiumRecipeLookups.BATHING.fromRecipeType(RagiumRecipeTypes.BATHING, identity()) RagiumRecipeLookups.CENTRIFUGING.fromRecipeType(RagiumRecipeTypes.CENTRIFUGING, identity()) RagiumRecipeLookups.EXCHANGING.fromRecipeType(RagiumRecipeTypes.EXCHANGING, identity()) + RagiumRecipeLookups.MIXING.fromRecipeType(RagiumRecipeTypes.MIXING, identity()) - RagiumRecipeLookups.BREWING.fromRecipeType(RagiumRecipeTypes.BREWING, identity()) RagiumRecipeLookups.PLANTING.fromRecipeType(RagiumRecipeTypes.PLANTING, identity()) // runtime recipes RagiumRecipeLookups.DRAINING.addRecipes( @@ -214,7 +214,7 @@ internal data object RagiumCommon { } } - RagiumRecipeLookups.BREWING.addSubLookup { _ -> + RagiumRecipeLookups.MIXING.addSubLookup { _ -> val mixes: List> = HTPhysicalSideHelper.getPotionBrewing() ?.let(PotionBrewing::potionMixes) ?: return@addSubLookup sequenceOf() @@ -233,7 +233,7 @@ internal data object RagiumCommon { RagiumRecipeBuilders.brewing { itemIngredient { +CompoundIngredient(ingredients) } fluidIngredient { +HTPotionFluidIngredient(potionFrom) } - result { +potionTo } + fluidResult { +potionTo } recipeId replace potionTo.getKeyOrThrow() .identifier() .modifyPath { "${it}_from_${potionFrom.getKeyOrThrow().identifier().toDebugFileName()}" } diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt b/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt index 10e1db425..6ee29e6ac 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt @@ -68,6 +68,8 @@ data object RagiumBlocks { @JvmStatic fun register(eventBus: IEventBus) { REGISTER.addAlias("steel_block", "sooty_iron_block") + REGISTER.addAlias("brewery", "mixer") + REGISTER.addAlias("bio_machine_casing", "resource_machine_casing") eventBus.addListener(::registerCapabilities) eventBus.addListener(::modifyDefaultComponents) @@ -295,11 +297,7 @@ data object RagiumBlocks { val MIXER: HTBasicDeferredBlockAndItem = registerMachine(RagiumBlockEntityTypes.MIXER) - // Bio - @JvmField - val BREWERY: HTBasicDeferredBlockAndItem = - registerMachine(RagiumBlockEntityTypes.BREWERY) - + // Resource @JvmField val PLANTER: HTBasicDeferredBlockAndItem = registerMachine(RagiumBlockEntityTypes.PLANTER) @@ -343,8 +341,7 @@ data object RagiumBlocks { put(HTMachineType.CHEMICAL, CHEMICAL_REACTOR) put(HTMachineType.CHEMICAL, MIXER) - put(HTMachineType.BIO, BREWERY) - put(HTMachineType.BIO, PLANTER) + put(HTMachineType.RESOURCE, PLANTER) put(HTMachineType.ELECTRONICS, ELECTROLYZER) put(HTMachineType.ELECTRONICS, PRECISION_ASSEMBLER) diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/RagiumBlockEntityTypes.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/RagiumBlockEntityTypes.kt index 60a46c28d..f99af19d2 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/RagiumBlockEntityTypes.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/RagiumBlockEntityTypes.kt @@ -14,7 +14,6 @@ import hiiragi283.ragium.common.block.HTBasicEntityBlock import hiiragi283.ragium.common.block.RagiumBlocks import hiiragi283.ragium.common.block.entity.machine.HTAlloySmelterBlockEntity import hiiragi283.ragium.common.block.entity.machine.HTAssemblerBlockEntity -import hiiragi283.ragium.common.block.entity.machine.HTBreweryBlockEntity import hiiragi283.ragium.common.block.entity.machine.HTChemicalBathBlockEntity import hiiragi283.ragium.common.block.entity.machine.HTCompressorBlockEntity import hiiragi283.ragium.common.block.entity.machine.HTCrusherBlockEntity @@ -49,6 +48,8 @@ data object RagiumBlockEntityTypes { @JvmStatic fun register(event: IEventBus) { + REGISTER.addAlias("brewery", "mixer") + event.addListener(::addSupportedBlocks) event.addListener(::registerCapabilities) @@ -105,11 +106,7 @@ data object RagiumBlockEntityTypes { val MIXER: HTDeferredBlockEntityType = registerTick(RagiumConstants.MIXER, ::HTMixerBlockEntity) - // Bio - @JvmField - val BREWERY: HTDeferredBlockEntityType = - registerTick(RagiumConstants.BREWERY, ::HTBreweryBlockEntity) - + // Resource @JvmField val PLANTER: HTDeferredBlockEntityType = registerTick(RagiumConstants.PLANTER, ::HTPlanterBlockEntity) @@ -196,7 +193,6 @@ data object RagiumBlockEntityTypes { registerProcessor(CHEMICAL_BATH.get()) registerProcessor(MIXER.get()) - registerProcessor(BREWERY.get()) registerProcessor(PLANTER.get()) registerProcessor(ELECTROLYZER.get()) diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTBreweryBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTBreweryBlockEntity.kt deleted file mode 100644 index ce321bfc3..000000000 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTBreweryBlockEntity.kt +++ /dev/null @@ -1,18 +0,0 @@ -package hiiragi283.ragium.common.block.entity.machine - -import hiiragi283.lib.sounds.HTSoundInstance -import hiiragi283.ragium.api.RagiumConfig -import hiiragi283.ragium.api.config.HTEnergyConfig -import hiiragi283.ragium.api.recipe.RagiumRecipeLookups -import hiiragi283.ragium.common.block.entity.RagiumBlockEntityTypes -import hiiragi283.ragium.common.block.entity.machine.base.HTItemAndFluidToFluidBlockEntity -import net.minecraft.core.BlockPos -import net.minecraft.sounds.SoundEvents -import net.minecraft.world.level.block.state.BlockState - -class HTBreweryBlockEntity(pos: BlockPos, state: BlockState) : - HTItemAndFluidToFluidBlockEntity(RagiumBlockEntityTypes.BREWERY.get(), RagiumRecipeLookups.BREWING, pos, state) { - override fun getCompletedSound(): HTSoundInstance = HTSoundInstance(SoundEvents.BREWING_STAND_BREW) - - override fun getConfig(): HTEnergyConfig = RagiumConfig.SERVER.machine.brewery -} diff --git a/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt b/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt index 914ae15c8..ed707b6fd 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt @@ -46,6 +46,7 @@ data object RagiumItems { REGISTER.addAlias("steel_nugget", "sooty_iron_nugget") REGISTER.addAlias("coal_coke_dust", "carbon_dust") REGISTER.addAlias("circuit_chip", "silicon_chip") + REGISTER.addAlias("bio_machine_parts", "resource_machine_parts") eventBus.addListener(::registerCapabilities) eventBus.addListener(::modifyDefaultComponents) @@ -174,7 +175,7 @@ data object RagiumItems { // val ALCLAD_PLATE: HTSimpleDeferredItem = REGISTER.registerSimpleItem("alclad_plate") - // Bio + // Resource @JvmField val BEESWAX: HTSimpleDeferredItem = REGISTER.registerItem("beeswax", ::HoneycombItem) @@ -243,7 +244,7 @@ data object RagiumItems { // Chemical - // Bio + // Resource // Electronics @JvmField diff --git a/src/main/resources/assets/ragium/textures/block/brewery_front.png b/src/main/resources/assets/ragium/textures/block/brewery_front.png deleted file mode 100644 index 2d5931545fdb5359345045b1959f84af8721c14a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 374 zcmV-+0g3*JP)mfL(!L~u>hTjiD{a)OsGR>j0SZ5>I;o0iXtD2qL3`he2&m3Zs{7oUp!9l zz@7Uy6#K%0MSspVS}pcvE81VN@0xF)?~8ssuL{s$@Y`TBV*;T$8qnQ`Pt*B`&?j!` z&g@F9_xI+0_6}MdolR(NNBVZKW%*1DXEw2oMf1w(k?8m9SbzdBD=`$arykbOfbNY( zoVTDkyf8cL*4Bo@;0^`@k!ARI)v_!Fr#>`IBYyw@0RR7V!oAo4000I_L_t&o0D02W UEy0qnj{pDw07*qoM6N<$g8tH}-2eap diff --git a/src/main/resources/assets/ragium/textures/block/machine/bio_front.png b/src/main/resources/assets/ragium/textures/block/machine/resource_front.png similarity index 100% rename from src/main/resources/assets/ragium/textures/block/machine/bio_front.png rename to src/main/resources/assets/ragium/textures/block/machine/resource_front.png diff --git a/src/main/resources/assets/ragium/textures/block/machine/bio_side.png b/src/main/resources/assets/ragium/textures/block/machine/resource_side.png similarity index 100% rename from src/main/resources/assets/ragium/textures/block/machine/bio_side.png rename to src/main/resources/assets/ragium/textures/block/machine/resource_side.png diff --git a/src/main/resources/assets/ragium/textures/item/parts/bio.png b/src/main/resources/assets/ragium/textures/item/parts/resource.png similarity index 100% rename from src/main/resources/assets/ragium/textures/item/parts/bio.png rename to src/main/resources/assets/ragium/textures/item/parts/resource.png From 96ae1a941b0472364e02dddf9c2627146f46c365 Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Fri, 9 Oct 2026 23:46:27 +0900 Subject: [PATCH 07/25] =?UTF-8?q?feat:=20=E6=96=B0=E3=81=97=E3=81=84?= =?UTF-8?q?=E3=83=96=E3=83=AD=E3=83=83=E3=82=AF=E3=80=8CBlender=20/=20?= =?UTF-8?q?=E5=A4=A7=E5=9E=8B=E6=B7=B7=E5=90=88=E6=A9=9F=E3=80=8D=E3=82=92?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/integration/jei/RagiumJeiPlugin.kt | 1 + .../data/lang/RagiumEnglishLangProvider.kt | 1 + .../data/lang/RagiumJapaneseLangProvider.kt | 1 + .../recipe/RagiumVanillaRecipeProvider.kt | 1 + .../assets/ragium/blockstates/blender.json | 34 +++ .../assets/ragium/items/blender.json | 6 + .../resources/assets/ragium/lang/en_us.json | 1 + .../resources/assets/ragium/lang/ja_jp.json | 1 + .../assets/ragium/models/block/blender.json | 8 + .../tags/block/mineable/pickaxe.json | 1 + .../ragium/loot_table/blocks/blender.json | 31 +++ .../data/ragium/recipe/shaped/blender.json | 18 ++ .../tags/block/machines/electronics.json | 1 + .../tags/item/machines/electronics.json | 1 + .../resources/reports/ragium/registries.json | 3 + .../lib/recipe/base/HTRecipeFactories.kt | 52 ++++- .../recipe/input/HTItemAndFluidRecipeInput.kt | 5 + .../recipe/input/HTSingleFluidRecipeInput.kt | 5 + .../lib/recipe/lookup/HTRecipeCache.kt | 9 - .../hiiragi283/ragium/api/RagiumConfig.kt | 4 + .../hiiragi283/ragium/api/RagiumConstants.kt | 1 + .../ragium/api/recipe/RTMixingRecipe.kt | 50 +++-- .../ragium/common/block/RagiumBlocks.kt | 5 + .../block/entity/RagiumBlockEntityTypes.kt | 6 + .../entity/machine/HTBlenderBlockEntity.kt | 197 ++++++++++++++++++ .../machine/HTElectrolyzerBlockEntity.kt | 4 +- .../entity/machine/HTFreezerBlockEntity.kt | 4 +- .../entity/machine/HTMelterBlockEntity.kt | 4 +- .../entity/machine/HTSmelterBlockEntity.kt | 4 +- .../base/HTDoubleItemToItemBlockEntity.kt | 7 +- .../base/HTItemAndFluidToFluidBlockEntity.kt | 6 +- .../base/HTItemAndFluidToItemBlockEntity.kt | 6 +- .../base/HTItemToDoubleItemBlockEntity.kt | 4 +- .../machine/base/HTItemToItemBlockEntity.kt | 4 +- .../base/HTTripleItemToItemBlockEntity.kt | 5 +- 35 files changed, 431 insertions(+), 60 deletions(-) create mode 100644 src/generated/resources/assets/ragium/blockstates/blender.json create mode 100644 src/generated/resources/assets/ragium/items/blender.json create mode 100644 src/generated/resources/assets/ragium/models/block/blender.json create mode 100644 src/generated/resources/data/ragium/loot_table/blocks/blender.json create mode 100644 src/generated/resources/data/ragium/recipe/shaped/blender.json create mode 100644 src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTBlenderBlockEntity.kt diff --git a/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiPlugin.kt b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiPlugin.kt index f248e1775..96ab40f68 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiPlugin.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiPlugin.kt @@ -295,6 +295,7 @@ class RagiumJeiPlugin : HTJeiPlugin(RagiumAPI.MOD_ID) { registration.addCraftingStation(RagiumJeiRecipeTypes.BATHING, RagiumBlocks.CHEMICAL_BATH) registration.addCraftingStation(RagiumJeiRecipeTypes.REACTING, RagiumBlocks.CHEMICAL_REACTOR) registration.addCraftingStation(RagiumJeiRecipeTypes.MIXING, RagiumBlocks.MIXER) + registration.addCraftingStation(RagiumJeiRecipeTypes.MIXING, RagiumBlocks.BLENDER) // Resource registration.addCraftingStation(RagiumJeiRecipeTypes.PLANTING, RagiumBlocks.PLANTER) // Electronics diff --git a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt index 6b3112c51..92d906fac 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt @@ -60,6 +60,7 @@ class RagiumEnglishLangProvider(output: PackOutput) : add(RagiumBlocks.PLANTER, "Planter") + add(RagiumBlocks.BLENDER, "Blender") add(RagiumBlocks.ELECTROLYZER, "Electrolyzer") add(RagiumBlocks.PRECISION_ASSEMBLER, "Precision Assembler") add(RagiumBlocks.SCANNER, "Laser Scanner") diff --git a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt index 23a46e1d9..28a24e78b 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt @@ -56,6 +56,7 @@ class RagiumJapaneseLangProvider(output: PackOutput) : add(RagiumBlocks.PLANTER, "栽培機") + add(RagiumBlocks.BLENDER, "大型混合機") add(RagiumBlocks.ELECTROLYZER, "電解機") add(RagiumBlocks.PRECISION_ASSEMBLER, "精密組立機") add(RagiumBlocks.SCANNER, "レーザースキャナ") diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt index 598e8b9a6..fee6c90d0 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt @@ -404,6 +404,7 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut // Resource resource(RagiumBlocks.PLANTER) { items { +Items.FLOWER_POT } } // Electronics + electronics(RagiumBlocks.BLENDER) { items { +RagiumBlocks.MIXER } } electronics(RagiumBlocks.ELECTROLYZER) { +holderSet(ItemTags.LIGHTNING_RODS) } electronics(RagiumBlocks.PRECISION_ASSEMBLER) { items { +RagiumBlocks.ASSEMBLER } } // Arcane diff --git a/src/generated/resources/assets/ragium/blockstates/blender.json b/src/generated/resources/assets/ragium/blockstates/blender.json new file mode 100644 index 000000000..d7924b1ef --- /dev/null +++ b/src/generated/resources/assets/ragium/blockstates/blender.json @@ -0,0 +1,34 @@ +{ + "variants": { + "facing=east,is_active=false": { + "model": "ragium:block/machine/electronics", + "y": 90 + }, + "facing=east,is_active=true": { + "model": "ragium:block/blender", + "y": 90 + }, + "facing=north,is_active=false": { + "model": "ragium:block/machine/electronics" + }, + "facing=north,is_active=true": { + "model": "ragium:block/blender" + }, + "facing=south,is_active=false": { + "model": "ragium:block/machine/electronics", + "y": 180 + }, + "facing=south,is_active=true": { + "model": "ragium:block/blender", + "y": 180 + }, + "facing=west,is_active=false": { + "model": "ragium:block/machine/electronics", + "y": 270 + }, + "facing=west,is_active=true": { + "model": "ragium:block/blender", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/items/blender.json b/src/generated/resources/assets/ragium/items/blender.json new file mode 100644 index 000000000..90078a1b5 --- /dev/null +++ b/src/generated/resources/assets/ragium/items/blender.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "ragium:block/blender" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/lang/en_us.json b/src/generated/resources/assets/ragium/lang/en_us.json index 36c710bef..46e7c46e5 100644 --- a/src/generated/resources/assets/ragium/lang/en_us.json +++ b/src/generated/resources/assets/ragium/lang/en_us.json @@ -29,6 +29,7 @@ "block.ragium.black_dye": "Black Dye", "block.ragium.black_steel_block": "Block of Black Steel", "block.ragium.bleach": "Bleach", + "block.ragium.blender": "Blender", "block.ragium.blue_dye": "Blue Dye", "block.ragium.brown_dye": "Brown Dye", "block.ragium.charcoal_block": "Block of Charcoal", diff --git a/src/generated/resources/assets/ragium/lang/ja_jp.json b/src/generated/resources/assets/ragium/lang/ja_jp.json index 6624c1a64..16aab23a9 100644 --- a/src/generated/resources/assets/ragium/lang/ja_jp.json +++ b/src/generated/resources/assets/ragium/lang/ja_jp.json @@ -29,6 +29,7 @@ "block.ragium.black_dye": "黒色の染料", "block.ragium.black_steel_block": "黒鋼ブロック", "block.ragium.bleach": "漂白剤", + "block.ragium.blender": "大型混合機", "block.ragium.blue_dye": "青色の染料", "block.ragium.brown_dye": "茶色の染料", "block.ragium.charcoal_block": "木炭ブロック", diff --git a/src/generated/resources/assets/ragium/models/block/blender.json b/src/generated/resources/assets/ragium/models/block/blender.json new file mode 100644 index 000000000..27306bf0a --- /dev/null +++ b/src/generated/resources/assets/ragium/models/block/blender.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/orientable", + "textures": { + "front": "ragium:block/blender_front", + "side": "ragium:block/machine/electronics_side", + "top": "ragium:block/machine_casing" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json b/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json index ff709ea25..f9e0b59f0 100644 --- a/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json +++ b/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json @@ -5,6 +5,7 @@ "ragium:arcane_machine_casing", "ragium:assembler", "ragium:black_steel_block", + "ragium:blender", "ragium:charcoal_block", "ragium:chemical_bath", "ragium:chemical_machine_casing", diff --git a/src/generated/resources/data/ragium/loot_table/blocks/blender.json b/src/generated/resources/data/ragium/loot_table/blocks/blender.json new file mode 100644 index 000000000..d7ceca31b --- /dev/null +++ b/src/generated/resources/data/ragium/loot_table/blocks/blender.json @@ -0,0 +1,31 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_components", + "include": [ + "minecraft:custom_name", + "ragium:owner_id" + ], + "source": "block_entity" + } + ], + "name": "ragium:blender" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "ragium:blocks/blender" +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/shaped/blender.json b/src/generated/resources/data/ragium/recipe/shaped/blender.json new file mode 100644 index 000000000..5e032b1bd --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/shaped/blender.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "A": "#c:nuggets/black_steel", + "B": "ragium:electronics_machine_parts", + "C": "#c:gears/diamond", + "D": "ragium:mixer" + }, + "pattern": [ + "ABA", + "BCB", + "ADA" + ], + "result": { + "id": "ragium:blender" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/tags/block/machines/electronics.json b/src/generated/resources/data/ragium/tags/block/machines/electronics.json index 2be2125c5..5d45bf0b1 100644 --- a/src/generated/resources/data/ragium/tags/block/machines/electronics.json +++ b/src/generated/resources/data/ragium/tags/block/machines/electronics.json @@ -1,5 +1,6 @@ { "values": [ + "ragium:blender", "ragium:electrolyzer", "ragium:precision_assembler", "ragium:scanner" diff --git a/src/generated/resources/data/ragium/tags/item/machines/electronics.json b/src/generated/resources/data/ragium/tags/item/machines/electronics.json index 2be2125c5..5d45bf0b1 100644 --- a/src/generated/resources/data/ragium/tags/item/machines/electronics.json +++ b/src/generated/resources/data/ragium/tags/item/machines/electronics.json @@ -1,5 +1,6 @@ { "values": [ + "ragium:blender", "ragium:electrolyzer", "ragium:precision_assembler", "ragium:scanner" diff --git a/src/generated/resources/reports/ragium/registries.json b/src/generated/resources/reports/ragium/registries.json index b73495c47..d4fbf8b27 100644 --- a/src/generated/resources/reports/ragium/registries.json +++ b/src/generated/resources/reports/ragium/registries.json @@ -7,6 +7,7 @@ "assembler", "black_dye", "black_steel_block", + "blender", "blue_dye", "brown_dye", "charcoal_block", @@ -84,6 +85,7 @@ "minecraft:block_entity_type": [ "alloy_smelter", "assembler", + "blender", "chemical_bath", "compressor", "creative_battery", @@ -224,6 +226,7 @@ "black_steel_nugget", "blank_mold", "bleach_bucket", + "blender", "block_mold", "blue_dye_bucket", "borax_dust", diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTRecipeFactories.kt b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTRecipeFactories.kt index d79ed2666..fdadad2c6 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTRecipeFactories.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTRecipeFactories.kt @@ -32,27 +32,43 @@ data object HTRecipeFactories { * 消費される入力を取得します。 */ fun getMatchingStack(input: INPUT_A): INPUT_A + + /** + * @since 26.1.9 + */ + fun unwrapInput(input: INPUT): INPUT_A + + /** + * @since 26.1.9 + */ + override fun produce(input: INPUT): OUTPUT = unwrapInput(input).let(::apply) + + /** + * 消費される入力を取得します。 + * @since 26.1.9 + */ + fun getMatchingStack(input: INPUT): INPUT_A = unwrapInput(input).let(::getMatchingStack) } /** * 1種類の液体から完成品を作る[SingleInput]の拡張インターフェースです。 */ interface SingleFluidTo : SingleInput { - override fun produce(input: HTSingleFluidRecipeInput): OUTPUT = apply(input.fluid) + override fun unwrapInput(input: HTSingleFluidRecipeInput): FluidInstance = input.fluid } /** * 1種類のアイテムから完成品を作る[SingleInput]の拡張インターフェースです。 */ interface SingleItemTo : SingleInput { - override fun produce(input: SingleRecipeInput): OUTPUT = apply(input.item()) + override fun unwrapInput(input: SingleRecipeInput): ItemInstance = input.item() } /** * @since 26.1.8 */ interface Located : SingleInput { - override fun produce(input: HTLocationRecipeInput): OUTPUT = apply(input.blockInWorld) + override fun unwrapInput(input: HTLocationRecipeInput): BlockInWorld = input.blockInWorld @Suppress("DeprecatedCallableAddReplaceWith") @Deprecated("Not used", level = DeprecationLevel.ERROR) @@ -70,6 +86,12 @@ data object HTRecipeFactories { * 消費される入力を取得します。 */ fun getMatchingStack(first: INPUT_A, second: INPUT_B): Pair + + /** + * 消費される入力を取得します。 + * @since 26.1.9 + */ + fun getMatchingStack(input: INPUT): Pair } /** @@ -77,6 +99,9 @@ data object HTRecipeFactories { */ interface ItemAndFluid : DoubleInput { override fun produce(input: HTItemAndFluidRecipeInput): OUTPUT = apply(input.item, input.fluid) + + override fun getMatchingStack(input: HTItemAndFluidRecipeInput): Pair = + getMatchingStack(input.item, input.fluid) } /** @@ -84,6 +109,9 @@ data object HTRecipeFactories { */ interface DoubleItem : DoubleInput { override fun produce(input: RecipeInput): OUTPUT = apply(input.getItemOrEmpty(0), input.getItemOrEmpty(1)) + + override fun getMatchingStack(input: RecipeInput): Pair = + getMatchingStack(input.getItemOrEmpty(0), input.getItemOrEmpty(1)) } /** @@ -93,6 +121,9 @@ data object HTRecipeFactories { interface DoubleFluid : DoubleInput { override fun produce(input: HTFluidRecipeInput): OUTPUT = apply(input.getFluidOrEmpty(0), input.getFluidOrEmpty(1)) + + override fun getMatchingStack(input: HTFluidRecipeInput): Pair = + getMatchingStack(input.getFluidOrEmpty(0), input.getFluidOrEmpty(1)) } // Triple Input // @@ -106,6 +137,12 @@ data object HTRecipeFactories { * 消費される入力を取得します。 */ fun getMatchingStack(first: INPUT_A, second: INPUT_B, third: INPUT_C): Triple + + /** + * 消費される入力を取得します。 + * @since 26.1.9 + */ + fun getMatchingStack(input: INPUT): Triple } /** @@ -116,6 +153,9 @@ data object HTRecipeFactories { TripleInput { override fun produce(input: HTFluidRecipeInput): OUTPUT = apply(input.getItemOrEmpty(0), input.getItemOrEmpty(1), input.getFluidOrEmpty(0)) + + override fun getMatchingStack(input: HTFluidRecipeInput): Triple = + getMatchingStack(input.getItemOrEmpty(0), input.getItemOrEmpty(1), input.getFluidOrEmpty(0)) } /** @@ -126,6 +166,9 @@ data object HTRecipeFactories { TripleInput { override fun produce(input: HTFluidRecipeInput): OUTPUT = apply(input.getItemOrEmpty(0), input.getFluidOrEmpty(0), input.getFluidOrEmpty(1)) + + override fun getMatchingStack(input: HTFluidRecipeInput): Triple = + getMatchingStack(input.getItemOrEmpty(0), input.getFluidOrEmpty(0), input.getFluidOrEmpty(1)) } /** @@ -134,5 +177,8 @@ data object HTRecipeFactories { interface TripleItem : TripleInput { override fun produce(input: RecipeInput): OUTPUT = apply(input.getItemOrEmpty(0), input.getItemOrEmpty(1), input.getItemOrEmpty(2)) + + override fun getMatchingStack(input: RecipeInput): Triple = + getMatchingStack(input.getItemOrEmpty(0), input.getItemOrEmpty(1), input.getItemOrEmpty(2)) } } diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/input/HTItemAndFluidRecipeInput.kt b/src/lib/kotlin/hiiragi283/lib/recipe/input/HTItemAndFluidRecipeInput.kt index 46c35c95c..3db183823 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/input/HTItemAndFluidRecipeInput.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/input/HTItemAndFluidRecipeInput.kt @@ -14,6 +14,11 @@ data class HTItemAndFluidRecipeInput(val item: ItemStack, val fluid: FluidStack) override fun getFluid(index: Int): FluidStack = fluid + override val isFluidEmpty: Boolean + get() = fluid.isEmpty + + override fun asFluidList(): List = listOf(fluid) + override fun getItem(index: Int): ItemStack = item override fun size(): Int = 1 diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/input/HTSingleFluidRecipeInput.kt b/src/lib/kotlin/hiiragi283/lib/recipe/input/HTSingleFluidRecipeInput.kt index 5a6b434fe..d1b489739 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/input/HTSingleFluidRecipeInput.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/input/HTSingleFluidRecipeInput.kt @@ -19,4 +19,9 @@ data class HTSingleFluidRecipeInput(val fluid: FluidStack) : HTFluidRecipeInput override fun getItem(index: Int): ItemStack = ItemStack.EMPTY override fun size(): Int = 0 + + override val isFluidEmpty: Boolean + get() = fluid.isEmpty + + override fun asFluidList(): List = listOf(fluid) } diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/lookup/HTRecipeCache.kt b/src/lib/kotlin/hiiragi283/lib/recipe/lookup/HTRecipeCache.kt index ec1719144..ffa6735cc 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/lookup/HTRecipeCache.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/lookup/HTRecipeCache.kt @@ -1,7 +1,6 @@ package hiiragi283.lib.recipe.lookup import hiiragi283.lib.HTConstants -import hiiragi283.lib.HTPhysicalSideHelper import hiiragi283.lib.recipe.HTRecipeHolder import hiiragi283.lib.recipe.HTRecipePredicate import hiiragi283.lib.recipe.RecipeKey @@ -29,14 +28,6 @@ class HTRecipeCache>( ) : ValueIOSerializable { private var lastRecipe: Either>? = null - /** - * レシピを取得します。 - * @param input レシピの入力 - * @return [input]に一致する最初のレシピ - * @since 26.1.1 - */ - fun findFirstRecipe(input: INPUT): RECIPE? = findFirstRecipe(input, HTPhysicalSideHelper.createLookupContext()) - /** * レシピを取得します。 * @param input レシピの入力 diff --git a/src/lib/kotlin/hiiragi283/ragium/api/RagiumConfig.kt b/src/lib/kotlin/hiiragi283/ragium/api/RagiumConfig.kt index f054a6414..02c7f6a01 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/RagiumConfig.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/RagiumConfig.kt @@ -147,6 +147,10 @@ data object RagiumConfig { HTEnergyConfig.createMachine(builder, RagiumConstants.PLANTER) // Electronics + @JvmField + val blender: HTEnergyConfig = + HTEnergyConfig.createMachine(builder, RagiumConstants.BLENDER, 64) + @JvmField val electrolyzer: HTEnergyConfig = HTEnergyConfig.createMachine(builder, RagiumConstants.ELECTROLYZER, 64) diff --git a/src/lib/kotlin/hiiragi283/ragium/api/RagiumConstants.kt b/src/lib/kotlin/hiiragi283/ragium/api/RagiumConstants.kt index cf2a9fdda..f36976d7c 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/RagiumConstants.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/RagiumConstants.kt @@ -33,6 +33,7 @@ data object RagiumConstants { const val PLANTER = "planter" // Electronics + const val BLENDER = "blender" const val ELECTROLYZER = "electrolyzer" const val PRECISION_ASSEMBLER = "precision_assembler" const val SCANNER = "scanner" diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTMixingRecipe.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTMixingRecipe.kt index 1360e1c1e..9e0b9328f 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTMixingRecipe.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTMixingRecipe.kt @@ -116,8 +116,7 @@ data class RTMixingRecipe( override fun test(first: ItemInstance, second: ItemInstance, third: FluidInstance): Boolean = when { !fluidIngredient.test(third) -> false - itemIngredients.head.test(first) && itemIngredients.getOrNull(1).testOrEmpty(second) -> true - else -> itemIngredients.head.test(second) && itemIngredients.getOrNull(1).testOrEmpty(first) + else -> itemIngredients.head.test(first) && itemIngredients.getOrNull(1).testOrEmpty(second) } override fun apply(first: ItemInstance, second: ItemInstance, third: FluidInstance): HTItemAndFluidStack = @@ -127,26 +126,37 @@ data class RTMixingRecipe( first: ItemInstance, second: ItemInstance, third: FluidInstance - ): Triple { - val fluid: FluidInstance = fluidIngredient.getMatchingStack(third) - return when { - itemIngredients.head.test(first) -> Triple( - itemIngredients.head.getMatchingStack(first), - itemIngredients.getOrNull(1)?.getMatchingStack(second) ?: ItemStack.EMPTY, - fluid - ) - - itemIngredients.head.test(second) -> Triple( - itemIngredients.head.getMatchingStack(second), - itemIngredients.getOrNull(1)?.getMatchingStack(first) ?: ItemStack.EMPTY, - fluid - ) - - else -> Triple(ItemStack.EMPTY, ItemStack.EMPTY, fluid) - } - } + ): Triple = Triple( + itemIngredients.head.getMatchingStack(first), + itemIngredients.getOrNull(1)?.getMatchingStack(second) ?: ItemStack.EMPTY, + fluidIngredient.getMatchingStack(third) + ) override fun getSerializer(): RecipeSerializer = RagiumRecipeSerializers.MIXING override fun getType(): RecipeType = RagiumRecipeTypes.MIXING + + @JvmRecord + data class Input(val firstItem: ItemStack, val secondItem: ItemStack, val fluid: FluidStack) : HTFluidRecipeInput { + override val fluidSize: Int + get() = 1 + + override fun getFluid(index: Int): FluidStack = when (index) { + 0 -> fluid + else -> error("No fluid for index: $index") + } + + override val isFluidEmpty: Boolean + get() = fluid.isEmpty + + override fun asFluidList(): List = listOf(fluid) + + override fun getItem(index: Int): ItemStack = when (index) { + 0 -> firstItem + 1 -> secondItem + else -> error("No item for index: $index") + } + + override fun size(): Int = 2 + } } diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt b/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt index 6ee29e6ac..0efdd3ce6 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt @@ -303,6 +303,10 @@ data object RagiumBlocks { registerMachine(RagiumBlockEntityTypes.PLANTER) // Electronics + @JvmField + val BLENDER: HTBasicDeferredBlockAndItem = + registerMachine(RagiumBlockEntityTypes.BLENDER) + @JvmField val ELECTROLYZER: HTBasicDeferredBlockAndItem = registerMachine(RagiumBlockEntityTypes.ELECTROLYZER) @@ -343,6 +347,7 @@ data object RagiumBlocks { put(HTMachineType.RESOURCE, PLANTER) + put(HTMachineType.ELECTRONICS, BLENDER) put(HTMachineType.ELECTRONICS, ELECTROLYZER) put(HTMachineType.ELECTRONICS, PRECISION_ASSEMBLER) put(HTMachineType.ELECTRONICS, SCANNER) diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/RagiumBlockEntityTypes.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/RagiumBlockEntityTypes.kt index f99af19d2..f57b0bf6d 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/RagiumBlockEntityTypes.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/RagiumBlockEntityTypes.kt @@ -14,6 +14,7 @@ import hiiragi283.ragium.common.block.HTBasicEntityBlock import hiiragi283.ragium.common.block.RagiumBlocks import hiiragi283.ragium.common.block.entity.machine.HTAlloySmelterBlockEntity import hiiragi283.ragium.common.block.entity.machine.HTAssemblerBlockEntity +import hiiragi283.ragium.common.block.entity.machine.HTBlenderBlockEntity import hiiragi283.ragium.common.block.entity.machine.HTChemicalBathBlockEntity import hiiragi283.ragium.common.block.entity.machine.HTCompressorBlockEntity import hiiragi283.ragium.common.block.entity.machine.HTCrusherBlockEntity @@ -112,6 +113,10 @@ data object RagiumBlockEntityTypes { registerTick(RagiumConstants.PLANTER, ::HTPlanterBlockEntity) // Electronics + @JvmField + val BLENDER: HTDeferredBlockEntityType = + registerTick(RagiumConstants.BLENDER, ::HTBlenderBlockEntity) + @JvmField val ELECTROLYZER: HTDeferredBlockEntityType = registerTick(RagiumConstants.ELECTROLYZER, ::HTElectrolyzerBlockEntity) @@ -195,6 +200,7 @@ data object RagiumBlockEntityTypes { registerProcessor(PLANTER.get()) + registerProcessor(BLENDER.get()) registerProcessor(ELECTROLYZER.get()) registerProcessor(PRECISION_ASSEMBLER.get()) diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTBlenderBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTBlenderBlockEntity.kt new file mode 100644 index 000000000..cb0269553 --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTBlenderBlockEntity.kt @@ -0,0 +1,197 @@ +package hiiragi283.ragium.common.block.entity.machine + +import hiiragi283.lib.HTConstants +import hiiragi283.lib.gui.HTBackgroundType +import hiiragi283.lib.gui.HTSlotHelper +import hiiragi283.lib.gui.widget.HTWidgetHolder +import hiiragi283.lib.recipe.handler.HTFluidInputTank +import hiiragi283.lib.recipe.handler.HTItemInputSlot +import hiiragi283.lib.recipe.handler.HTOutputSlot +import hiiragi283.lib.recipe.handler.HTOutputSlotHelper +import hiiragi283.lib.recipe.input.HTFluidRecipeInput +import hiiragi283.lib.recipe.lookup.HTRecipeCache +import hiiragi283.lib.recipe.result.HTItemAndFluidStack +import hiiragi283.lib.transfer.item.HTBasicItemSlot +import hiiragi283.lib.transfer.useTransaction +import hiiragi283.ragium.api.RagiumConfig +import hiiragi283.ragium.api.config.HTEnergyConfig +import hiiragi283.ragium.api.recipe.RTMixingRecipe +import hiiragi283.ragium.api.recipe.RagiumRecipeLookups +import hiiragi283.ragium.common.block.entity.RagiumBlockEntityTypes +import hiiragi283.ragium.common.gui.widget.HTFluidWidget +import hiiragi283.ragium.common.gui.widget.HTItemWidget +import hiiragi283.ragium.common.transfer.fluid.HTVariableFluidTank +import hiiragi283.ragium.common.transfer.holder.HTBasicFluidTankHolder +import hiiragi283.ragium.common.transfer.holder.HTBasicItemSlotHolder +import hiiragi283.ragium.common.transfer.holder.HTSlotInfo +import net.minecraft.core.BlockPos +import net.minecraft.server.level.ServerLevel +import net.minecraft.sounds.SoundEvents +import net.minecraft.world.item.ItemInstance +import net.minecraft.world.item.ItemStack +import net.minecraft.world.level.block.state.BlockState +import net.minecraft.world.level.storage.ValueInput +import net.minecraft.world.level.storage.ValueOutput +import net.neoforged.neoforge.fluids.FluidInstance +import net.neoforged.neoforge.fluids.FluidStack +import net.neoforged.neoforge.transfer.item.ItemResource +import net.neoforged.neoforge.transfer.transaction.Transaction + +class HTBlenderBlockEntity(pos: BlockPos, state: BlockState) : + HTProcessorBlockEntity.Energized(RagiumBlockEntityTypes.BLENDER.get(), pos, state) { + private val cache: HTRecipeCache = + HTRecipeCache(RagiumRecipeLookups.MIXING) + + override fun writeValue(output: ValueOutput) { + super.writeValue(output) + output.putChild(HTConstants.LAST_RECIPE, cache) + } + + override fun readValue(input: ValueInput) { + super.readValue(input) + input.readChild(HTConstants.LAST_RECIPE, cache) + } + + override fun initializeVariables(listener: Runnable) { + super.initializeVariables(listener) + recipeHandler = object : EnergizedHandler() { + private val topInputSlot: HTItemInputSlot by lazy { + HTItemInputSlot(this@HTBlenderBlockEntity.topInputSlot) + } + private val downInputSlot: HTItemInputSlot by lazy { + HTItemInputSlot(this@HTBlenderBlockEntity.downInputSlot) + } + private val inputTank: HTFluidInputTank by lazy { + HTFluidInputTank(this@HTBlenderBlockEntity.inputTank) + } + private val outputSlot: HTOutputSlot by lazy { + HTOutputSlotHelper.forItem(this@HTBlenderBlockEntity.outputSlot) + } + private val outputTank: HTOutputSlot by lazy { + HTOutputSlotHelper.forFluid(this@HTBlenderBlockEntity.outputTank) + } + + override fun createInput(): HTFluidRecipeInput = RTMixingRecipe.Input( + topInputSlot.getStoredInput(), + downInputSlot.getStoredInput(), + inputTank.getStoredInput() + ) + + override fun findRecipe(level: ServerLevel, input: HTFluidRecipeInput): RTMixingRecipe? = + cache.findFirstRecipe(input, level) + + override fun canComplete( + recipe: RTMixingRecipe, + input: HTFluidRecipeInput, + output: HTItemAndFluidStack + ): Boolean { + val (first: ItemInstance, second: ItemInstance, third: FluidInstance) = recipe.getMatchingStack(input) + val (item: ItemStack, fluid: FluidStack) = output + return useTransaction { transaction: Transaction -> + when { + topInputSlot.use(first, transaction).failed -> false + downInputSlot.use(second, transaction).failed -> false + inputTank.use(third, transaction).failed -> false + !outputSlot.take(item, transaction).fullOrNoneTaken -> false + else -> outputTank.take(fluid, transaction).fullOrNoneTaken + } + } + } + + override fun onComplete(recipe: RTMixingRecipe, input: HTFluidRecipeInput, output: HTItemAndFluidStack) { + val (first: ItemInstance, second: ItemInstance, third: FluidInstance) = recipe.getMatchingStack(input) + val (item: ItemStack, fluid: FluidStack) = output + useTransaction { transaction: Transaction -> + topInputSlot.use(first, transaction) + downInputSlot.use(second, transaction) + inputTank.use(third, transaction) + outputSlot.take(item, transaction) + outputTank.take(fluid, transaction) + transaction.commit() + } + playSound(SoundEvents.BUBBLE_COLUMN_WHIRLPOOL_INSIDE) + } + } + } + + private lateinit var inputTank: HTVariableFluidTank + private lateinit var outputTank: HTVariableFluidTank + + override fun createFluidTanks(builder: HTBasicFluidTankHolder.Builder, listener: Runnable) { + inputTank = builder.addSlot(HTSlotInfo.INPUT, HTVariableFluidTank.input(getTankCapacity(), listener)) + outputTank = builder.addSlot(HTSlotInfo.OUTPUT, HTVariableFluidTank.output(getTankCapacity(), listener)) + } + + private lateinit var topInputSlot: HTBasicItemSlot + private lateinit var downInputSlot: HTBasicItemSlot + private lateinit var outputSlot: HTBasicItemSlot + + override fun createItemSlots(builder: HTBasicItemSlotHolder.Builder, listener: Runnable) { + topInputSlot = builder.addSlot( + HTSlotInfo.INPUT, + HTBasicItemSlot.input( + listener, + filter = { resource: ItemResource -> downInputSlot.isEmpty || downInputSlot.resource != resource } + ) + ) + downInputSlot = builder.addSlot( + HTSlotInfo.EXTRA_INPUT, + HTBasicItemSlot.input( + listener, + filter = { resource: ItemResource -> topInputSlot.isEmpty || topInputSlot.resource != resource } + ) + ) + outputSlot = builder.addSlot(HTSlotInfo.OUTPUT, HTBasicItemSlot.output(listener)) + } + + override fun setupMenu(widgetHolder: HTWidgetHolder) { + super.setupMenu(widgetHolder) + addEnergySlot(widgetHolder, HTSlotHelper.getSlotPosX(2.5), HTSlotHelper.getSlotPosY(1)) + // progress + addProgressBar(widgetHolder) + // inputs + widgetHolder += HTFluidWidget.Tank( + inputTank, + HTSlotHelper.getSlotPosX(1), + HTSlotHelper.getSlotPosY(0), + HTBackgroundType.INPUT, + false + ) + widgetHolder.track(inputTank) + widgetHolder += HTItemWidget.Container( + topInputSlot, + 0, + HTSlotHelper.getSlotPosX(2.5), + HTSlotHelper.getSlotPosY(0), + HTBackgroundType.INPUT + ) + widgetHolder.track(topInputSlot) + widgetHolder += HTItemWidget.Container( + downInputSlot, + 1, + HTSlotHelper.getSlotPosX(2.5), + HTSlotHelper.getSlotPosY(2), + HTBackgroundType.EXTRA_INPUT + ) + widgetHolder.track(downInputSlot) + // outputs + widgetHolder += HTItemWidget.Container( + outputSlot, + 2, + HTSlotHelper.getSlotPosX(5.5), + HTSlotHelper.getSlotPosY(1), + HTBackgroundType.OUTPUT + ) + widgetHolder.track(outputSlot) + widgetHolder += HTFluidWidget.Tank( + outputTank, + HTSlotHelper.getSlotPosX(7), + HTSlotHelper.getSlotPosY(0), + HTBackgroundType.OUTPUT, + false + ) + widgetHolder.track(outputTank) + } + + override fun getConfig(): HTEnergyConfig = RagiumConfig.SERVER.machine.blender +} diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTElectrolyzerBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTElectrolyzerBlockEntity.kt index 1e7a03f10..d5a663d99 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTElectrolyzerBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTElectrolyzerBlockEntity.kt @@ -80,7 +80,7 @@ class HTElectrolyzerBlockEntity(pos: BlockPos, state: BlockState) : output: RTElectrolyzingRecipe.ElectrolyzedResult ): Boolean = rightOutputTank != null && leftOutputTank != null && useTransaction { transaction: Transaction -> - val inputConsume: FluidInstance = recipe.getMatchingStack(input.fluid) + val inputConsume: FluidInstance = recipe.getMatchingStack(input) when { inputTank.use(inputConsume, transaction).failed -> false @@ -101,7 +101,7 @@ class HTElectrolyzerBlockEntity(pos: BlockPos, state: BlockState) : output: RTElectrolyzingRecipe.ElectrolyzedResult ) { useTransaction { transaction: Transaction -> - val inputConsume: FluidInstance = recipe.getMatchingStack(input.fluid) + val inputConsume: FluidInstance = recipe.getMatchingStack(input) inputTank.use(inputConsume, transaction) val (right: FluidStack, left: FluidStack, main: FluidStack) = output outputTank.take(main, transaction) diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTFreezerBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTFreezerBlockEntity.kt index 8a7ce48f4..2d08bc826 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTFreezerBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTFreezerBlockEntity.kt @@ -70,7 +70,7 @@ class HTFreezerBlockEntity(pos: BlockPos, state: BlockState) : input: HTItemAndFluidRecipeInput, output: ItemStack ): Boolean = useTransaction { transaction: Transaction -> - val (_, inputConsume: FluidInstance) = recipe.getMatchingStack(input.item, input.fluid) + val (_, inputConsume: FluidInstance) = recipe.getMatchingStack(input) when { inputTank.use(inputConsume, transaction).failed -> false else -> outputSlot.take(output, transaction) == HTOutputSlot.TakeResult.FULL @@ -79,7 +79,7 @@ class HTFreezerBlockEntity(pos: BlockPos, state: BlockState) : override fun onComplete(recipe: RTFreezingRecipe, input: HTItemAndFluidRecipeInput, output: ItemStack) { useTransaction { transaction: Transaction -> - val (_, fluidInput: FluidInstance) = recipe.getMatchingStack(input.item, input.fluid) + val (_, fluidInput: FluidInstance) = recipe.getMatchingStack(input) inputTank.use(fluidInput, transaction) outputSlot.take(output, transaction) transaction.commit() diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTMelterBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTMelterBlockEntity.kt index cb5ffc5b2..4ada9e081 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTMelterBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTMelterBlockEntity.kt @@ -65,7 +65,7 @@ class HTMelterBlockEntity(pos: BlockPos, state: BlockState) : input: SingleRecipeInput, output: FluidStack ): Boolean = useTransaction { transaction: Transaction -> - val inputConsume: ItemInstance = recipe.getMatchingStack(input.item()) + val inputConsume: ItemInstance = recipe.getMatchingStack(input) when { inputSlot.use(inputConsume, transaction).failed -> false else -> outputSlot.take(output, transaction) == HTOutputSlot.TakeResult.FULL @@ -74,7 +74,7 @@ class HTMelterBlockEntity(pos: BlockPos, state: BlockState) : override fun onComplete(recipe: HTItemToFluidRecipe, input: SingleRecipeInput, output: FluidStack) { useTransaction { transaction: Transaction -> - inputSlot.use(recipe.getMatchingStack(input.item()), transaction) + inputSlot.use(recipe.getMatchingStack(input), transaction) outputSlot.take(output, transaction) transaction.commit() } diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTSmelterBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTSmelterBlockEntity.kt index 5f29bbf4f..af41c6305 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTSmelterBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTSmelterBlockEntity.kt @@ -96,7 +96,7 @@ class HTSmelterBlockEntity(pos: BlockPos, state: BlockState) : override fun canComplete(recipe: HTItemToItemRecipe, input: SingleRecipeInput, output: ItemStack): Boolean = useTransaction { transaction: Transaction -> - val inputConsume: ItemInstance = recipe.getMatchingStack(input.item()) + val inputConsume: ItemInstance = recipe.getMatchingStack(input) when { inputSlot.use(inputConsume, transaction).failed -> false else -> outputSlot.take(output, transaction) == HTOutputSlot.TakeResult.FULL @@ -105,7 +105,7 @@ class HTSmelterBlockEntity(pos: BlockPos, state: BlockState) : override fun onComplete(recipe: HTItemToItemRecipe, input: SingleRecipeInput, output: ItemStack) { useTransaction { transaction: Transaction -> - inputSlot.use(recipe.getMatchingStack(input.item()), transaction) + inputSlot.use(recipe.getMatchingStack(input), transaction) outputSlot.take(output, transaction) transaction.commit() } diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTDoubleItemToItemBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTDoubleItemToItemBlockEntity.kt index fa103cea2..430844698 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTDoubleItemToItemBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTDoubleItemToItemBlockEntity.kt @@ -9,7 +9,6 @@ import hiiragi283.lib.recipe.handler.HTItemInputSlot import hiiragi283.lib.recipe.handler.HTOutputSlot import hiiragi283.lib.recipe.handler.HTOutputSlotHelper import hiiragi283.lib.recipe.input.HTItemListRecipeInput -import hiiragi283.lib.recipe.input.getItemOrEmpty import hiiragi283.lib.recipe.lookup.HTRecipeCache import hiiragi283.lib.recipe.lookup.HTRecipeLookup import hiiragi283.lib.sounds.HTSoundInstance @@ -73,8 +72,7 @@ abstract class HTDoubleItemToItemBlockEntity( cache.findFirstRecipe(input, level) override fun canComplete(recipe: HTDoubleItemToItemRecipe, input: RecipeInput, output: ItemStack): Boolean { - val (firstConsume: ItemInstance, secondConsume: ItemInstance) = - recipe.getMatchingStack(input.getItemOrEmpty(0), input.getItemOrEmpty(1)) + val (firstConsume: ItemInstance, secondConsume: ItemInstance) = recipe.getMatchingStack(input) return useTransaction { transaction: Transaction -> when { primarySlot.use(firstConsume, transaction).failed -> false @@ -85,8 +83,7 @@ abstract class HTDoubleItemToItemBlockEntity( } override fun onComplete(recipe: HTDoubleItemToItemRecipe, input: RecipeInput, output: ItemStack) { - val (firstConsume: ItemInstance, secondConsume: ItemInstance) = - recipe.getMatchingStack(input.getItemOrEmpty(0), input.getItemOrEmpty(1)) + val (firstConsume: ItemInstance, secondConsume: ItemInstance) = recipe.getMatchingStack(input) useTransaction { transaction: Transaction -> primarySlot.use(firstConsume, transaction) secondarySlot.use(secondConsume, transaction) diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemAndFluidToFluidBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemAndFluidToFluidBlockEntity.kt index 42069ac88..801929805 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemAndFluidToFluidBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemAndFluidToFluidBlockEntity.kt @@ -83,8 +83,7 @@ abstract class HTItemAndFluidToFluidBlockEntity( input: HTItemAndFluidRecipeInput, output: FluidStack ): Boolean = useTransaction { transaction: Transaction -> - val (itemInput: ItemInstance, fluidInput: FluidInstance) = - recipe.getMatchingStack(input.item, input.fluid) + val (itemInput: ItemInstance, fluidInput: FluidInstance) = recipe.getMatchingStack(input) when { inputSlot.use(itemInput, transaction).failed -> false inputTank.use(fluidInput, transaction).failed -> false @@ -98,8 +97,7 @@ abstract class HTItemAndFluidToFluidBlockEntity( output: FluidStack ) { useTransaction { transaction: Transaction -> - val (itemInput: ItemInstance, fluidInput: FluidInstance) = - recipe.getMatchingStack(input.item, input.fluid) + val (itemInput: ItemInstance, fluidInput: FluidInstance) = recipe.getMatchingStack(input) inputSlot.use(itemInput, transaction) inputTank.use(fluidInput, transaction) outputTank.take(output, transaction) diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemAndFluidToItemBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemAndFluidToItemBlockEntity.kt index 313f51698..361b34d33 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemAndFluidToItemBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemAndFluidToItemBlockEntity.kt @@ -80,8 +80,7 @@ abstract class HTItemAndFluidToItemBlockEntity( input: HTItemAndFluidRecipeInput, output: ItemStack ): Boolean = useTransaction { transaction: Transaction -> - val (itemInput: ItemInstance, fluidInput: FluidInstance) = - recipe.getMatchingStack(input.item, input.fluid) + val (itemInput: ItemInstance, fluidInput: FluidInstance) = recipe.getMatchingStack(input) when { inputSlot.use(itemInput, transaction).failed -> false inputTank.use(fluidInput, transaction).failed -> false @@ -95,8 +94,7 @@ abstract class HTItemAndFluidToItemBlockEntity( output: ItemStack ) { useTransaction { transaction: Transaction -> - val (itemInput: ItemInstance, fluidInput: FluidInstance) = - recipe.getMatchingStack(input.item, input.fluid) + val (itemInput: ItemInstance, fluidInput: FluidInstance) = recipe.getMatchingStack(input) inputSlot.use(itemInput, transaction) inputTank.use(fluidInput, transaction) outputSlot.take(output, transaction) diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemToDoubleItemBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemToDoubleItemBlockEntity.kt index 5c2f676b1..f1567babe 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemToDoubleItemBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemToDoubleItemBlockEntity.kt @@ -75,7 +75,7 @@ abstract class HTItemToDoubleItemBlockEntity( input: SingleRecipeInput, output: Pair ): Boolean = useTransaction { transaction: Transaction -> - val inputConsume: ItemInstance = recipe.getMatchingStack(input.item()) + val inputConsume: ItemInstance = recipe.getMatchingStack(input) when { inputSlot.use(inputConsume, transaction).failed -> false primarySlot.take(output.first, transaction) != HTOutputSlot.TakeResult.FULL -> false @@ -89,7 +89,7 @@ abstract class HTItemToDoubleItemBlockEntity( output: Pair ) { useTransaction { transaction: Transaction -> - inputSlot.use(recipe.getMatchingStack(input.item()), transaction) + inputSlot.use(recipe.getMatchingStack(input), transaction) primarySlot.take(output.first, transaction) secondarySlot.take(output.second, transaction) transaction.commit() diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemToItemBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemToItemBlockEntity.kt index ccfcbe715..9221ea00a 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemToItemBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemToItemBlockEntity.kt @@ -66,7 +66,7 @@ abstract class HTItemToItemBlockEntity( override fun canComplete(recipe: HTItemToItemRecipe, input: SingleRecipeInput, output: ItemStack): Boolean = useTransaction { transaction: Transaction -> - val inputConsume: ItemInstance = recipe.getMatchingStack(input.item()) + val inputConsume: ItemInstance = recipe.getMatchingStack(input) when { inputSlot.use(inputConsume, transaction).failed -> false else -> outputSlot.take(output, transaction) == HTOutputSlot.TakeResult.FULL @@ -75,7 +75,7 @@ abstract class HTItemToItemBlockEntity( override fun onComplete(recipe: HTItemToItemRecipe, input: SingleRecipeInput, output: ItemStack) { useTransaction { transaction: Transaction -> - inputSlot.use(recipe.getMatchingStack(input.item()), transaction) + inputSlot.use(recipe.getMatchingStack(input), transaction) outputSlot.take(output, transaction) transaction.commit() } diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTTripleItemToItemBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTTripleItemToItemBlockEntity.kt index 5fda3b8e2..0cb1a7597 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTTripleItemToItemBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTTripleItemToItemBlockEntity.kt @@ -9,7 +9,6 @@ import hiiragi283.lib.recipe.handler.HTItemInputSlot import hiiragi283.lib.recipe.handler.HTOutputSlot import hiiragi283.lib.recipe.handler.HTOutputSlotHelper import hiiragi283.lib.recipe.input.HTItemListRecipeInput -import hiiragi283.lib.recipe.input.getItemOrEmpty import hiiragi283.lib.recipe.lookup.HTRecipeCache import hiiragi283.lib.recipe.lookup.HTRecipeLookup import hiiragi283.lib.sounds.HTSoundInstance @@ -81,7 +80,7 @@ abstract class HTTripleItemToItemBlockEntity( override fun canComplete(recipe: HTTripleItemToItemRecipe, input: RecipeInput, output: ItemStack): Boolean { val (firstInput: ItemInstance, secondInput: ItemInstance, thirdInput: ItemInstance) = - recipe.getMatchingStack(input.getItemOrEmpty(0), input.getItemOrEmpty(1), input.getItemOrEmpty(2)) + recipe.getMatchingStack(input) return useTransaction { transaction: Transaction -> when { primarySlot.use(firstInput, transaction).failed -> false @@ -94,7 +93,7 @@ abstract class HTTripleItemToItemBlockEntity( override fun onComplete(recipe: HTTripleItemToItemRecipe, input: RecipeInput, output: ItemStack) { val (firstInput: ItemInstance, secondInput: ItemInstance, thirdInput: ItemInstance) = - recipe.getMatchingStack(input.getItemOrEmpty(0), input.getItemOrEmpty(1), input.getItemOrEmpty(2)) + recipe.getMatchingStack(input) useTransaction { transaction: Transaction -> primarySlot.use(firstInput, transaction) secondarySlot.use(secondInput, transaction) From 78c583dee3db40191568cc8d22777b3637755d65 Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Sat, 10 Oct 2026 00:01:00 +0900 Subject: [PATCH 08/25] =?UTF-8?q?feat:=20Pyrolyzer=20=E3=81=A8=20Refinery?= =?UTF-8?q?=20=E3=81=AB=E6=A9=9F=E8=83=BD=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lib/recipe/handler/HTOutputSlotHelper.kt | 3 - .../ragium/common/block/RagiumBlocks.kt | 4 +- .../block/entity/RagiumBlockEntityTypes.kt | 12 ++ .../entity/machine/HTBlenderBlockEntity.kt | 22 +-- .../entity/machine/HTPyrolyzerBlockEntity.kt | 149 +++++++++++++++++ .../entity/machine/HTRefineryBlockEntity.kt | 150 ++++++++++++++++++ .../machine/base/HTItemToItemBlockEntity.kt | 2 +- 7 files changed, 325 insertions(+), 17 deletions(-) create mode 100644 src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTPyrolyzerBlockEntity.kt create mode 100644 src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTRefineryBlockEntity.kt diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/handler/HTOutputSlotHelper.kt b/src/lib/kotlin/hiiragi283/lib/recipe/handler/HTOutputSlotHelper.kt index 3822b384e..afc57978b 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/handler/HTOutputSlotHelper.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/handler/HTOutputSlotHelper.kt @@ -32,7 +32,6 @@ data object HTOutputSlotHelper { if (stack.isEmpty) return TakeResult.NONE val (resource: FluidResource, amount: Int) = stack.toResourcePair() return when (tank.insert(resource, amount, transaction, HTTransferAccess.INTERNAL)) { - 0 -> TakeResult.NONE amount -> TakeResult.FULL else -> TakeResult.PARTIALLY } @@ -54,7 +53,6 @@ data object HTOutputSlotHelper { if (stack.isEmpty) return TakeResult.NONE val (resource: ItemResource, amount: Int) = stack.toResourcePair() return when (slot.insert(resource, amount, transaction, HTTransferAccess.INTERNAL)) { - 0 -> TakeResult.NONE amount -> TakeResult.FULL else -> TakeResult.PARTIALLY } @@ -79,7 +77,6 @@ data object HTOutputSlotHelper { if (inserted == amount) break } return when (inserted) { - 0 -> TakeResult.NONE amount -> TakeResult.FULL else -> TakeResult.PARTIALLY } diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt b/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt index 0efdd3ce6..4ab5c91d5 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt @@ -274,11 +274,11 @@ data object RagiumBlocks { @JvmField val PYROLYZER: HTBasicDeferredBlockAndItem = - registerFakeMachine(RagiumConstants.PYROLYZER) + registerMachine(RagiumBlockEntityTypes.PYROLYZER) @JvmField val REFINERY: HTBasicDeferredBlockAndItem = - registerFakeMachine(RagiumConstants.REFINERY) + registerMachine(RagiumBlockEntityTypes.REFINERY) @JvmField val SMELTER: HTBasicDeferredBlockAndItem = diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/RagiumBlockEntityTypes.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/RagiumBlockEntityTypes.kt index f57b0bf6d..4d2aec8f7 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/RagiumBlockEntityTypes.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/RagiumBlockEntityTypes.kt @@ -27,6 +27,8 @@ import hiiragi283.ragium.common.block.entity.machine.HTMixerBlockEntity import hiiragi283.ragium.common.block.entity.machine.HTPlanterBlockEntity import hiiragi283.ragium.common.block.entity.machine.HTPrecisionAssemblerBlockEntity import hiiragi283.ragium.common.block.entity.machine.HTProcessorBlockEntity +import hiiragi283.ragium.common.block.entity.machine.HTPyrolyzerBlockEntity +import hiiragi283.ragium.common.block.entity.machine.HTRefineryBlockEntity import hiiragi283.ragium.common.block.entity.machine.HTSmelterBlockEntity import hiiragi283.ragium.common.block.entity.storage.HTCreativeBatteryBlockEntity import hiiragi283.ragium.common.block.entity.storage.HTCreativeTankBlockEntity @@ -94,6 +96,14 @@ data object RagiumBlockEntityTypes { val MELTER: HTDeferredBlockEntityType = registerTick(RagiumConstants.MELTER, ::HTMelterBlockEntity) + @JvmField + val PYROLYZER: HTDeferredBlockEntityType = + registerTick(RagiumConstants.PYROLYZER, ::HTPyrolyzerBlockEntity) + + @JvmField + val REFINERY: HTDeferredBlockEntityType = + registerTick(RagiumConstants.REFINERY, ::HTRefineryBlockEntity) + @JvmField val SMELTER: HTDeferredBlockEntityType = registerTick(RagiumConstants.SMELTER, ::HTSmelterBlockEntity) @@ -193,6 +203,8 @@ data object RagiumBlockEntityTypes { registerProcessor(ALLOY_SMELTER.get()) registerProcessor(FREEZER.get()) registerProcessor(MELTER.get()) + registerProcessor(PYROLYZER.get()) + registerProcessor(REFINERY.get()) registerProcessor(SMELTER.get()) registerProcessor(CHEMICAL_BATH.get()) diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTBlenderBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTBlenderBlockEntity.kt index cb0269553..2de8a56cd 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTBlenderBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTBlenderBlockEntity.kt @@ -84,24 +84,24 @@ class HTBlenderBlockEntity(pos: BlockPos, state: BlockState) : recipe: RTMixingRecipe, input: HTFluidRecipeInput, output: HTItemAndFluidStack - ): Boolean { + ): Boolean = useTransaction { transaction: Transaction -> val (first: ItemInstance, second: ItemInstance, third: FluidInstance) = recipe.getMatchingStack(input) val (item: ItemStack, fluid: FluidStack) = output - return useTransaction { transaction: Transaction -> - when { - topInputSlot.use(first, transaction).failed -> false - downInputSlot.use(second, transaction).failed -> false - inputTank.use(third, transaction).failed -> false - !outputSlot.take(item, transaction).fullOrNoneTaken -> false - else -> outputTank.take(fluid, transaction).fullOrNoneTaken - } + when { + topInputSlot.use(first, transaction).failed -> false + downInputSlot.use(second, transaction).failed -> false + inputTank.use(third, transaction).failed -> false + !outputSlot.take(item, transaction).fullOrNoneTaken -> false + else -> outputTank.take(fluid, transaction).fullOrNoneTaken } } override fun onComplete(recipe: RTMixingRecipe, input: HTFluidRecipeInput, output: HTItemAndFluidStack) { - val (first: ItemInstance, second: ItemInstance, third: FluidInstance) = recipe.getMatchingStack(input) - val (item: ItemStack, fluid: FluidStack) = output useTransaction { transaction: Transaction -> + val (first: ItemInstance, second: ItemInstance, third: FluidInstance) = recipe.getMatchingStack( + input + ) + val (item: ItemStack, fluid: FluidStack) = output topInputSlot.use(first, transaction) downInputSlot.use(second, transaction) inputTank.use(third, transaction) diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTPyrolyzerBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTPyrolyzerBlockEntity.kt new file mode 100644 index 000000000..fe86e3166 --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTPyrolyzerBlockEntity.kt @@ -0,0 +1,149 @@ +package hiiragi283.ragium.common.block.entity.machine + +import hiiragi283.lib.HTConstants +import hiiragi283.lib.gui.HTBackgroundType +import hiiragi283.lib.gui.HTSlotHelper +import hiiragi283.lib.gui.widget.HTWidgetHolder +import hiiragi283.lib.recipe.base.HTItemToItemAndFluidRecipe +import hiiragi283.lib.recipe.handler.HTItemInputSlot +import hiiragi283.lib.recipe.handler.HTOutputSlot +import hiiragi283.lib.recipe.handler.HTOutputSlotHelper +import hiiragi283.lib.recipe.lookup.HTRecipeCache +import hiiragi283.lib.recipe.result.HTItemAndFluidStack +import hiiragi283.lib.transfer.item.HTBasicItemSlot +import hiiragi283.lib.transfer.useTransaction +import hiiragi283.ragium.api.RagiumConfig +import hiiragi283.ragium.api.config.HTEnergyConfig +import hiiragi283.ragium.api.recipe.RagiumRecipeLookups +import hiiragi283.ragium.common.block.entity.RagiumBlockEntityTypes +import hiiragi283.ragium.common.gui.widget.HTFluidWidget +import hiiragi283.ragium.common.gui.widget.HTItemWidget +import hiiragi283.ragium.common.transfer.fluid.HTVariableFluidTank +import hiiragi283.ragium.common.transfer.holder.HTBasicFluidTankHolder +import hiiragi283.ragium.common.transfer.holder.HTBasicItemSlotHolder +import hiiragi283.ragium.common.transfer.holder.HTSlotInfo +import net.minecraft.core.BlockPos +import net.minecraft.server.level.ServerLevel +import net.minecraft.sounds.SoundEvents +import net.minecraft.world.item.ItemInstance +import net.minecraft.world.item.ItemStack +import net.minecraft.world.item.crafting.SingleRecipeInput +import net.minecraft.world.level.block.state.BlockState +import net.minecraft.world.level.storage.ValueInput +import net.minecraft.world.level.storage.ValueOutput +import net.neoforged.neoforge.fluids.FluidStack +import net.neoforged.neoforge.transfer.transaction.Transaction + +class HTPyrolyzerBlockEntity(pos: BlockPos, state: BlockState) : + HTProcessorBlockEntity.Energized(RagiumBlockEntityTypes.PYROLYZER.get(), pos, state) { + private val cache: HTRecipeCache = + HTRecipeCache(RagiumRecipeLookups.PYROLYZING) + + override fun writeValue(output: ValueOutput) { + super.writeValue(output) + output.putChild(HTConstants.LAST_RECIPE, cache) + } + + override fun readValue(input: ValueInput) { + super.readValue(input) + input.readChild(HTConstants.LAST_RECIPE, cache) + } + + override fun initializeVariables(listener: Runnable) { + super.initializeVariables(listener) + recipeHandler = object: EnergizedHandler() { + private val inputSlot: HTItemInputSlot by lazy { HTItemInputSlot(this@HTPyrolyzerBlockEntity.inputSlot) } + private val outputSlot: HTOutputSlot by lazy { + HTOutputSlotHelper.forItem(this@HTPyrolyzerBlockEntity.outputSlot) + } + private val outputTank: HTOutputSlot by lazy { + HTOutputSlotHelper.forFluid(this@HTPyrolyzerBlockEntity.outputTank) + } + + override fun createInput(): SingleRecipeInput = SingleRecipeInput(inputSlot.getStoredInput()) + + override fun findRecipe(level: ServerLevel, input: SingleRecipeInput): HTItemToItemAndFluidRecipe? = + cache.findFirstRecipe(input, level) + + override fun canComplete( + recipe: HTItemToItemAndFluidRecipe, + input: SingleRecipeInput, + output: HTItemAndFluidStack + ): Boolean = useTransaction { transaction: Transaction -> + val inputConsume: ItemInstance = recipe.getMatchingStack(input) + val (item: ItemStack, fluid: FluidStack) = output + when { + inputSlot.use(inputConsume, transaction).failed -> false + !outputSlot.take(item, transaction).fullOrNoneTaken -> false + else -> outputTank.take(fluid, transaction).fullOrNoneTaken + } + } + + override fun onComplete( + recipe: HTItemToItemAndFluidRecipe, + input: SingleRecipeInput, + output: HTItemAndFluidStack + ) { + useTransaction { transaction: Transaction -> + val inputConsume: ItemInstance = recipe.getMatchingStack(input) + val (item: ItemStack, fluid: FluidStack) = output + inputSlot.use(inputConsume, transaction) + outputSlot.take(item, transaction) + outputTank.take(fluid, transaction) + transaction.commit() + } + playSound(SoundEvents.BLAZE_DEATH) + } + } + } + + private lateinit var outputTank: HTVariableFluidTank + + override fun createFluidTanks(builder: HTBasicFluidTankHolder.Builder, listener: Runnable) { + outputTank = builder.addSlot(HTSlotInfo.OUTPUT, HTVariableFluidTank.output(getTankCapacity(), listener)) + } + + private lateinit var inputSlot: HTBasicItemSlot + private lateinit var outputSlot: HTBasicItemSlot + + override fun createItemSlots(builder: HTBasicItemSlotHolder.Builder, listener: Runnable) { + inputSlot = builder.addSlot(HTSlotInfo.INPUT, HTBasicItemSlot.input(listener)) + outputSlot = builder.addSlot(HTSlotInfo.OUTPUT, HTBasicItemSlot.output(listener)) + } + + override fun setupMenu(widgetHolder: HTWidgetHolder) { + super.setupMenu(widgetHolder) + addEnergySlot(widgetHolder, HTSlotHelper.getSlotPosX(2.5), HTSlotHelper.getSlotPosY(1.5)) + // progress + addProgressBar(widgetHolder) + // input + widgetHolder += HTItemWidget.Container( + inputSlot, + 0, + HTSlotHelper.getSlotPosX(2.5), + HTSlotHelper.getSlotPosY(0.5), + HTBackgroundType.INPUT + ) + widgetHolder.track(inputSlot) + // outputs + // outputs + widgetHolder += HTItemWidget.Container( + outputSlot, + 1, + HTSlotHelper.getSlotPosX(5.5), + HTSlotHelper.getSlotPosY(1), + HTBackgroundType.OUTPUT + ) + widgetHolder.track(outputSlot) + widgetHolder += HTFluidWidget.Tank( + outputTank, + HTSlotHelper.getSlotPosX(7), + HTSlotHelper.getSlotPosY(0), + HTBackgroundType.OUTPUT, + false + ) + widgetHolder.track(outputTank) + } + + override fun getConfig(): HTEnergyConfig = RagiumConfig.SERVER.machine.pyrolyzer +} diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTRefineryBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTRefineryBlockEntity.kt new file mode 100644 index 000000000..5b6a25294 --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTRefineryBlockEntity.kt @@ -0,0 +1,150 @@ +package hiiragi283.ragium.common.block.entity.machine + +import hiiragi283.lib.HTConstants +import hiiragi283.lib.gui.HTBackgroundType +import hiiragi283.lib.gui.HTSlotHelper +import hiiragi283.lib.gui.widget.HTWidgetHolder +import hiiragi283.lib.recipe.base.HTFluidToItemAndFluidRecipe +import hiiragi283.lib.recipe.handler.HTFluidInputTank +import hiiragi283.lib.recipe.handler.HTItemInputSlot +import hiiragi283.lib.recipe.handler.HTOutputSlot +import hiiragi283.lib.recipe.handler.HTOutputSlotHelper +import hiiragi283.lib.recipe.input.HTSingleFluidRecipeInput +import hiiragi283.lib.recipe.lookup.HTRecipeCache +import hiiragi283.lib.recipe.result.HTItemAndFluidStack +import hiiragi283.lib.transfer.item.HTBasicItemSlot +import hiiragi283.lib.transfer.useTransaction +import hiiragi283.ragium.api.RagiumConfig +import hiiragi283.ragium.api.config.HTEnergyConfig +import hiiragi283.ragium.api.recipe.RagiumRecipeLookups +import hiiragi283.ragium.common.block.entity.RagiumBlockEntityTypes +import hiiragi283.ragium.common.gui.widget.HTFluidWidget +import hiiragi283.ragium.common.gui.widget.HTItemWidget +import hiiragi283.ragium.common.transfer.fluid.HTVariableFluidTank +import hiiragi283.ragium.common.transfer.holder.HTBasicFluidTankHolder +import hiiragi283.ragium.common.transfer.holder.HTBasicItemSlotHolder +import hiiragi283.ragium.common.transfer.holder.HTSlotInfo +import net.minecraft.core.BlockPos +import net.minecraft.server.level.ServerLevel +import net.minecraft.sounds.SoundEvents +import net.minecraft.world.item.ItemStack +import net.minecraft.world.level.block.state.BlockState +import net.minecraft.world.level.storage.ValueInput +import net.minecraft.world.level.storage.ValueOutput +import net.neoforged.neoforge.fluids.FluidInstance +import net.neoforged.neoforge.fluids.FluidStack +import net.neoforged.neoforge.transfer.transaction.Transaction + +class HTRefineryBlockEntity(pos: BlockPos, state: BlockState) : + HTProcessorBlockEntity.Energized(RagiumBlockEntityTypes.REFINERY.get(), pos, state) { + private val cache: HTRecipeCache = + HTRecipeCache(RagiumRecipeLookups.REFINING) + + override fun writeValue(output: ValueOutput) { + super.writeValue(output) + output.putChild(HTConstants.LAST_RECIPE, cache) + } + + override fun readValue(input: ValueInput) { + super.readValue(input) + input.readChild(HTConstants.LAST_RECIPE, cache) + } + + override fun initializeVariables(listener: Runnable) { + super.initializeVariables(listener) + recipeHandler = object: EnergizedHandler() { + private val inputTank: HTFluidInputTank by lazy { HTFluidInputTank(this@HTRefineryBlockEntity.inputTank) } + private val outputSlot: HTOutputSlot by lazy { + HTOutputSlotHelper.forItem(this@HTRefineryBlockEntity.outputSlot) + } + private val outputTank: HTOutputSlot by lazy { + HTOutputSlotHelper.forFluid(this@HTRefineryBlockEntity.outputTank) + } + + override fun createInput(): HTSingleFluidRecipeInput = HTSingleFluidRecipeInput(inputTank.getStoredInput()) + + override fun findRecipe(level: ServerLevel, input: HTSingleFluidRecipeInput): HTFluidToItemAndFluidRecipe? = + cache.findFirstRecipe(input, level) + + override fun canComplete( + recipe: HTFluidToItemAndFluidRecipe, + input: HTSingleFluidRecipeInput, + output: HTItemAndFluidStack + ): Boolean = useTransaction { transaction: Transaction -> + val inputConsume: FluidInstance = recipe.getMatchingStack(input) + val (item: ItemStack, fluid: FluidStack) = output + when { + inputTank.use(inputConsume, transaction).failed -> false + !outputSlot.take(item, transaction).fullOrNoneTaken -> false + else -> outputTank.take(fluid, transaction).fullOrNoneTaken + } + } + + override fun onComplete( + recipe: HTFluidToItemAndFluidRecipe, + input: HTSingleFluidRecipeInput, + output: HTItemAndFluidStack + ) { + useTransaction { transaction: Transaction -> + val inputConsume: FluidInstance = recipe.getMatchingStack(input) + val (item: ItemStack, fluid: FluidStack) = output + inputTank.use(inputConsume, transaction) + outputSlot.take(item, transaction) + outputTank.take(fluid, transaction) + transaction.commit() + } + playSound(SoundEvents.FIRE_EXTINGUISH) + } + } + } + + private lateinit var inputTank: HTVariableFluidTank + private lateinit var outputTank: HTVariableFluidTank + + override fun createFluidTanks(builder: HTBasicFluidTankHolder.Builder, listener: Runnable) { + inputTank = builder.addSlot(HTSlotInfo.INPUT, HTVariableFluidTank.input(getTankCapacity(), listener)) + outputTank = builder.addSlot(HTSlotInfo.OUTPUT, HTVariableFluidTank.output(getTankCapacity(), listener)) + } + + private lateinit var outputSlot: HTBasicItemSlot + + override fun createItemSlots(builder: HTBasicItemSlotHolder.Builder, listener: Runnable) { + outputSlot = builder.addSlot(HTSlotInfo.OUTPUT, HTBasicItemSlot.output(listener)) + } + + override fun setupMenu(widgetHolder: HTWidgetHolder) { + super.setupMenu(widgetHolder) + addEnergySlot(widgetHolder, HTSlotHelper.getSlotPosX(2.5), HTSlotHelper.getSlotPosY(1.5)) + // progress + addProgressBar(widgetHolder) + // input + widgetHolder += HTFluidWidget.Tank( + inputTank, + HTSlotHelper.getSlotPosX(1), + HTSlotHelper.getSlotPosY(0), + HTBackgroundType.INPUT, + false + ) + widgetHolder.track(inputTank) + // outputs + // outputs + widgetHolder += HTItemWidget.Container( + outputSlot, + 1, + HTSlotHelper.getSlotPosX(5.5), + HTSlotHelper.getSlotPosY(1), + HTBackgroundType.OUTPUT + ) + widgetHolder.track(outputSlot) + widgetHolder += HTFluidWidget.Tank( + outputTank, + HTSlotHelper.getSlotPosX(7), + HTSlotHelper.getSlotPosY(0), + HTBackgroundType.OUTPUT, + false + ) + widgetHolder.track(outputTank) + } + + override fun getConfig(): HTEnergyConfig = RagiumConfig.SERVER.machine.refinery +} diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemToItemBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemToItemBlockEntity.kt index 9221ea00a..3046f931f 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemToItemBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemToItemBlockEntity.kt @@ -99,7 +99,7 @@ abstract class HTItemToItemBlockEntity( addEnergySlot(widgetHolder, HTSlotHelper.getSlotPosX(2.5), HTSlotHelper.getSlotPosY(1.5)) // progress addProgressBar(widgetHolder) - // inputs + // input widgetHolder += HTItemWidget.Container( inputSlot, 0, From 99cf57c74d088121a7636f6c26297f8da1ca3240 Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Sat, 10 Oct 2026 00:02:40 +0900 Subject: [PATCH 09/25] =?UTF-8?q?chore:=20registries.json=20=E3=82=92?= =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/generated/resources/reports/ragium/registries.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/generated/resources/reports/ragium/registries.json b/src/generated/resources/reports/ragium/registries.json index d4fbf8b27..b804e1fe0 100644 --- a/src/generated/resources/reports/ragium/registries.json +++ b/src/generated/resources/reports/ragium/registries.json @@ -101,6 +101,8 @@ "planter", "potion_tank", "precision_assembler", + "pyrolyzer", + "refinery", "smelter", "tank" ], From 57bf96a31d39ef19cc0921f7ef61094d21ce3f5d Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Sun, 11 Oct 2026 13:12:13 +0900 Subject: [PATCH 10/25] =?UTF-8?q?refactor:=20=E3=83=AC=E3=82=B7=E3=83=94?= =?UTF-8?q?=20JSON=20=E3=81=AE=E3=83=95=E3=82=A9=E3=83=BC=E3=83=9E?= =?UTF-8?q?=E3=83=83=E3=83=88=E3=82=92=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ragium/recipe/bathing/black/banner.json | 26 +++--- .../data/ragium/recipe/bathing/black/bed.json | 26 +++--- .../ragium/recipe/bathing/black/harness.json | 26 +++--- .../recipe/bathing/black/shulker_box.json | 26 +++--- .../ragium/recipe/bathing/black/wool.json | 26 +++--- .../recipe/bathing/black/wool_carpet.json | 26 +++--- .../ragium/recipe/bathing/blue/banner.json | 26 +++--- .../data/ragium/recipe/bathing/blue/bed.json | 26 +++--- .../ragium/recipe/bathing/blue/harness.json | 26 +++--- .../recipe/bathing/blue/shulker_box.json | 26 +++--- .../data/ragium/recipe/bathing/blue/wool.json | 26 +++--- .../recipe/bathing/blue/wool_carpet.json | 26 +++--- .../ragium/recipe/bathing/brown/banner.json | 26 +++--- .../data/ragium/recipe/bathing/brown/bed.json | 26 +++--- .../ragium/recipe/bathing/brown/harness.json | 26 +++--- .../recipe/bathing/brown/shulker_box.json | 26 +++--- .../ragium/recipe/bathing/brown/wool.json | 26 +++--- .../recipe/bathing/brown/wool_carpet.json | 26 +++--- .../ragium/recipe/bathing/cfrp_plate.json | 16 ++-- .../ragium/recipe/bathing/cyan/banner.json | 26 +++--- .../data/ragium/recipe/bathing/cyan/bed.json | 26 +++--- .../ragium/recipe/bathing/cyan/harness.json | 26 +++--- .../recipe/bathing/cyan/shulker_box.json | 26 +++--- .../data/ragium/recipe/bathing/cyan/wool.json | 26 +++--- .../recipe/bathing/cyan/wool_carpet.json | 26 +++--- .../recipe/bathing/fermented_spider_eye.json | 20 ++--- .../ragium/recipe/bathing/gray/banner.json | 26 +++--- .../data/ragium/recipe/bathing/gray/bed.json | 26 +++--- .../ragium/recipe/bathing/gray/harness.json | 26 +++--- .../recipe/bathing/gray/shulker_box.json | 26 +++--- .../data/ragium/recipe/bathing/gray/wool.json | 26 +++--- .../recipe/bathing/gray/wool_carpet.json | 26 +++--- .../ragium/recipe/bathing/green/banner.json | 26 +++--- .../data/ragium/recipe/bathing/green/bed.json | 26 +++--- .../ragium/recipe/bathing/green/harness.json | 26 +++--- .../recipe/bathing/green/shulker_box.json | 26 +++--- .../ragium/recipe/bathing/green/wool.json | 26 +++--- .../recipe/bathing/green/wool_carpet.json | 26 +++--- .../recipe/bathing/light_blue/banner.json | 26 +++--- .../ragium/recipe/bathing/light_blue/bed.json | 26 +++--- .../recipe/bathing/light_blue/harness.json | 26 +++--- .../bathing/light_blue/shulker_box.json | 26 +++--- .../recipe/bathing/light_blue/wool.json | 26 +++--- .../bathing/light_blue/wool_carpet.json | 26 +++--- .../recipe/bathing/light_gray/banner.json | 26 +++--- .../ragium/recipe/bathing/light_gray/bed.json | 26 +++--- .../recipe/bathing/light_gray/harness.json | 26 +++--- .../bathing/light_gray/shulker_box.json | 26 +++--- .../recipe/bathing/light_gray/wool.json | 26 +++--- .../bathing/light_gray/wool_carpet.json | 26 +++--- .../ragium/recipe/bathing/lime/banner.json | 26 +++--- .../data/ragium/recipe/bathing/lime/bed.json | 26 +++--- .../ragium/recipe/bathing/lime/harness.json | 26 +++--- .../recipe/bathing/lime/shulker_box.json | 26 +++--- .../data/ragium/recipe/bathing/lime/wool.json | 26 +++--- .../recipe/bathing/lime/wool_carpet.json | 26 +++--- .../ragium/recipe/bathing/magenta/banner.json | 26 +++--- .../ragium/recipe/bathing/magenta/bed.json | 26 +++--- .../recipe/bathing/magenta/harness.json | 26 +++--- .../recipe/bathing/magenta/shulker_box.json | 26 +++--- .../ragium/recipe/bathing/magenta/wool.json | 26 +++--- .../recipe/bathing/magenta/wool_carpet.json | 26 +++--- .../data/ragium/recipe/bathing/mortar.json | 16 ++-- .../ragium/recipe/bathing/orange/banner.json | 26 +++--- .../ragium/recipe/bathing/orange/bed.json | 26 +++--- .../ragium/recipe/bathing/orange/harness.json | 26 +++--- .../recipe/bathing/orange/shulker_box.json | 26 +++--- .../ragium/recipe/bathing/orange/wool.json | 26 +++--- .../recipe/bathing/orange/wool_carpet.json | 26 +++--- .../recipe/bathing/paper_dust_from_wood.json | 16 ++-- .../recipe/bathing/paper_from_pulp.json | 16 ++-- .../ragium/recipe/bathing/particle_board.json | 16 ++-- .../ragium/recipe/bathing/pink/banner.json | 26 +++--- .../data/ragium/recipe/bathing/pink/bed.json | 26 +++--- .../ragium/recipe/bathing/pink/harness.json | 26 +++--- .../recipe/bathing/pink/shulker_box.json | 26 +++--- .../data/ragium/recipe/bathing/pink/wool.json | 26 +++--- .../recipe/bathing/pink/wool_carpet.json | 26 +++--- .../recipe/bathing/poisonous_potato.json | 20 ++--- .../ragium/recipe/bathing/purple/banner.json | 26 +++--- .../ragium/recipe/bathing/purple/bed.json | 26 +++--- .../ragium/recipe/bathing/purple/harness.json | 26 +++--- .../recipe/bathing/purple/shulker_box.json | 26 +++--- .../ragium/recipe/bathing/purple/wool.json | 26 +++--- .../recipe/bathing/purple/wool_carpet.json | 26 +++--- .../ragium/recipe/bathing/red/banner.json | 26 +++--- .../data/ragium/recipe/bathing/red/bed.json | 26 +++--- .../ragium/recipe/bathing/red/harness.json | 26 +++--- .../recipe/bathing/red/shulker_box.json | 26 +++--- .../data/ragium/recipe/bathing/red/wool.json | 26 +++--- .../recipe/bathing/red/wool_carpet.json | 26 +++--- .../ragium/recipe/bathing/silicon_dust.json | 16 ++-- .../ragium/recipe/bathing/sticky_piston.json | 16 ++-- .../data/ragium/recipe/bathing/tnt.json | 16 ++-- .../ragium/recipe/bathing/white/banner.json | 42 +++++----- .../data/ragium/recipe/bathing/white/bed.json | 42 +++++----- .../ragium/recipe/bathing/white/harness.json | 42 +++++----- .../recipe/bathing/white/shulker_box.json | 42 +++++----- .../ragium/recipe/bathing/white/wool.json | 42 +++++----- .../recipe/bathing/white/wool_carpet.json | 42 +++++----- .../ragium/recipe/bathing/yellow/banner.json | 26 +++--- .../ragium/recipe/bathing/yellow/bed.json | 26 +++--- .../ragium/recipe/bathing/yellow/harness.json | 26 +++--- .../recipe/bathing/yellow/shulker_box.json | 26 +++--- .../ragium/recipe/bathing/yellow/wool.json | 26 +++--- .../recipe/bathing/yellow/wool_carpet.json | 26 +++--- .../recipe/brewing/potion/blindness.json | 44 +++++----- .../recipe/brewing/potion/darkness.json | 54 +++++++------ .../potion/enchanted_golden_apple.json | 80 ++++++++++--------- .../recipe/brewing/potion/golden_apple.json | 58 +++++++------- .../ragium/recipe/brewing/potion/hunger.json | 44 +++++----- .../ragium/recipe/brewing/potion/nausea.json | 44 +++++----- .../ragium/recipe/brewing/potion/wither.json | 50 ++++++------ .../recipe/draining/honey_from_bottle.json | 16 ++-- .../recipe/draining/honey_from_comb.json | 16 ++-- .../data/ragium/recipe/draining/sponge.json | 16 ++-- .../filling/black_concrete_from_powder.json | 16 ++-- .../filling/blue_concrete_from_powder.json | 16 ++-- .../filling/brown_concrete_from_powder.json | 16 ++-- .../filling/cyan_concrete_from_powder.json | 16 ++-- .../filling/gray_concrete_from_powder.json | 16 ++-- .../filling/green_concrete_from_powder.json | 16 ++-- .../ragium/recipe/filling/honey_bottle.json | 16 ++-- .../light_blue_concrete_from_powder.json | 16 ++-- .../light_gray_concrete_from_powder.json | 16 ++-- .../filling/lime_concrete_from_powder.json | 16 ++-- .../filling/magenta_concrete_from_powder.json | 16 ++-- .../data/ragium/recipe/filling/mud.json | 16 ++-- .../filling/orange_concrete_from_powder.json | 16 ++-- .../filling/pink_concrete_from_powder.json | 16 ++-- .../filling/purple_concrete_from_powder.json | 16 ++-- .../filling/red_concrete_from_powder.json | 16 ++-- .../filling/white_concrete_from_powder.json | 16 ++-- .../filling/yellow_concrete_from_powder.json | 16 ++-- .../ragium/recipe/mixing/anti_rust_oil.json | 24 +++--- .../ragium/recipe/mixing/black/concrete.json | 34 ++++---- .../recipe/mixing/black/liquid_dye.json | 24 +++--- .../ragium/recipe/mixing/blue/concrete.json | 34 ++++---- .../ragium/recipe/mixing/blue/liquid_dye.json | 24 +++--- .../ragium/recipe/mixing/brown/concrete.json | 34 ++++---- .../recipe/mixing/brown/liquid_dye.json | 24 +++--- .../ragium/recipe/mixing/cyan/concrete.json | 34 ++++---- .../ragium/recipe/mixing/cyan/liquid_dye.json | 24 +++--- .../ragium/recipe/mixing/fuel_from_tar.json | 24 +++--- .../ragium/recipe/mixing/gray/concrete.json | 34 ++++---- .../ragium/recipe/mixing/gray/liquid_dye.json | 24 +++--- .../ragium/recipe/mixing/green/concrete.json | 34 ++++---- .../recipe/mixing/green/liquid_dye.json | 24 +++--- .../recipe/mixing/hydrogen_chloride.json | 24 +++--- .../recipe/mixing/hydrogen_fluoride.json | 34 ++++---- .../recipe/mixing/light_blue/concrete.json | 34 ++++---- .../recipe/mixing/light_blue/liquid_dye.json | 24 +++--- .../recipe/mixing/light_gray/concrete.json | 34 ++++---- .../recipe/mixing/light_gray/liquid_dye.json | 24 +++--- .../ragium/recipe/mixing/lime/concrete.json | 34 ++++---- .../ragium/recipe/mixing/lime/liquid_dye.json | 24 +++--- .../recipe/mixing/magenta/concrete.json | 34 ++++---- .../recipe/mixing/magenta/liquid_dye.json | 24 +++--- .../recipe/mixing/nitric_acid_from_niter.json | 24 +++--- .../ragium/recipe/mixing/orange/concrete.json | 34 ++++---- .../recipe/mixing/orange/liquid_dye.json | 24 +++--- .../ragium/recipe/mixing/pink/concrete.json | 34 ++++---- .../ragium/recipe/mixing/pink/liquid_dye.json | 24 +++--- .../ragium/recipe/mixing/purple/concrete.json | 34 ++++---- .../recipe/mixing/purple/liquid_dye.json | 24 +++--- .../ragium/recipe/mixing/red/concrete.json | 34 ++++---- .../ragium/recipe/mixing/red/liquid_dye.json | 24 +++--- .../ragium/recipe/mixing/white/concrete.json | 34 ++++---- .../recipe/mixing/white/liquid_dye.json | 24 +++--- .../ragium/recipe/mixing/yellow/concrete.json | 34 ++++---- .../recipe/mixing/yellow/liquid_dye.json | 24 +++--- .../ragium/recipe/pyrolyzing/carbon_dust.json | 16 ++-- .../recipe/pyrolyzing/charcoal_dust.json | 16 ++-- .../recipe/pyrolyzing/charcoal_from_logs.json | 16 ++-- .../ragium/recipe/pyrolyzing/coal_coke.json | 16 ++-- .../recipe/pyrolyzing/coal_coke_block.json | 16 ++-- .../pyrolyzing/crude_oil_from_soul_sand.json | 16 ++-- .../pyrolyzing/crude_oil_from_soul_soil.json | 16 ++-- .../pyrolyzing/pitch_coke_from_tar.json | 16 ++-- .../recipe/pyrolyzing/quick_lime_dust.json | 16 ++-- .../recipe/pyrolyzing/sulfur_dioxide.json | 10 ++- .../recipe/pyrolyzing/sulfur_trioxide.json | 10 ++- .../recipe/reacting/hydrochloric_acid.json | 10 ++- .../recipe/reacting/hydrofluoric_acid.json | 10 ++- .../recipe/reacting/hydrogen_chloride.json | 10 ++- .../recipe/reacting/liquid_explosive.json | 10 ++- .../recipe/reacting/molten_plastic.json | 10 ++- .../recipe/reacting/sulfur_trioxide.json | 10 ++- .../ragium/recipe/reacting/sulfuric_acid.json | 10 ++- .../recipe/reacting/synthetic_resin.json | 10 ++- .../data/ragium/recipe/refining/aldehyde.json | 10 ++- .../data/ragium/recipe/refining/coal_tar.json | 16 ++-- .../ragium/recipe/refining/crude_oil.json | 16 ++-- .../data/ragium/recipe/refining/naphtha.json | 16 ++-- .../ragium/recipe/refining/salt_water.json | 16 ++-- .../refining/sodium_hydroxide_solution.json | 16 ++-- .../data/ragium/recipe/refining/wood_tar.json | 10 ++- .../washing/alumina_dust_from_clay.json | 16 ++-- .../data/ragium/recipe/washing/flint.json | 16 ++-- .../washing/netherite_scrap_from_debris.json | 16 ++-- .../washing/quartz_dust_from_red_sands.json | 16 ++-- .../washing/quartz_dust_from_sands.json | 16 ++-- src/lib/kotlin/hiiragi283/lib/HTConstants.kt | 8 -- .../builder/HTItemAndFluidToRecipeBuilder.kt | 6 ++ .../lib/recipe/base/HTBasicSingleRecipe.kt | 13 --- .../recipe/base/HTDoubleItemToItemRecipe.kt | 4 +- .../lib/recipe/base/HTItemAndFluidToRecipe.kt | 27 +------ .../lib/recipe/result/HTItemOrFluidResult.kt | 10 ++- .../lib/serialization/codec/HTCodecs.kt | 33 ++++---- .../ragium/api/recipe/RTMixingRecipe.kt | 26 +++--- .../ragium/api/recipe/RTReactingRecipe.kt | 2 +- .../ragium/api/recipe/RTWashingRecipe.kt | 21 +++-- .../entity/machine/HTPyrolyzerBlockEntity.kt | 10 ++- .../entity/machine/HTRefineryBlockEntity.kt | 13 +-- 214 files changed, 2807 insertions(+), 2318 deletions(-) diff --git a/src/generated/resources/data/ragium/recipe/bathing/black/banner.json b/src/generated/resources/data/ragium/recipe/bathing/black/banner.json index f7c27db1d..ec0d502ed 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/black/banner.json +++ b/src/generated/resources/data/ragium/recipe/bathing/black/banner.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/black" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:banners", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/black" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:banners", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/black/bed.json b/src/generated/resources/data/ragium/recipe/bathing/black/bed.json index 9743822bf..f00b50e6f 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/black/bed.json +++ b/src/generated/resources/data/ragium/recipe/bathing/black/bed.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/black" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:beds", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/black" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:beds", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/black/harness.json b/src/generated/resources/data/ragium/recipe/bathing/black/harness.json index 4366c7122..7b5342729 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/black/harness.json +++ b/src/generated/resources/data/ragium/recipe/bathing/black/harness.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/black" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:harnesses", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/black" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:harnesses", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/black/shulker_box.json b/src/generated/resources/data/ragium/recipe/bathing/black/shulker_box.json index ed1a4d14f..ba1a2867c 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/black/shulker_box.json +++ b/src/generated/resources/data/ragium/recipe/bathing/black/shulker_box.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/black" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:shulker_boxes", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/black" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:shulker_boxes", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/black/wool.json b/src/generated/resources/data/ragium/recipe/bathing/black/wool.json index 80fb16b45..25d2bdc30 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/black/wool.json +++ b/src/generated/resources/data/ragium/recipe/bathing/black/wool.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/black" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:wool", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/black" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:wool", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/black/wool_carpet.json b/src/generated/resources/data/ragium/recipe/bathing/black/wool_carpet.json index 62d36712c..065cc5e8a 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/black/wool_carpet.json +++ b/src/generated/resources/data/ragium/recipe/bathing/black/wool_carpet.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/black" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:wool_carpets", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/black" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:wool_carpets", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/blue/banner.json b/src/generated/resources/data/ragium/recipe/bathing/blue/banner.json index 68243a600..50deeb23d 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/blue/banner.json +++ b/src/generated/resources/data/ragium/recipe/bathing/blue/banner.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/blue" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:banners", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/blue" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:banners", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/blue/bed.json b/src/generated/resources/data/ragium/recipe/bathing/blue/bed.json index 16ae8d96b..ea9e6c4c7 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/blue/bed.json +++ b/src/generated/resources/data/ragium/recipe/bathing/blue/bed.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/blue" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:beds", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/blue" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:beds", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/blue/harness.json b/src/generated/resources/data/ragium/recipe/bathing/blue/harness.json index 37d26d798..f7b28a8e0 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/blue/harness.json +++ b/src/generated/resources/data/ragium/recipe/bathing/blue/harness.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/blue" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:harnesses", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/blue" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:harnesses", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/blue/shulker_box.json b/src/generated/resources/data/ragium/recipe/bathing/blue/shulker_box.json index 23d2d08f4..53f0625ee 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/blue/shulker_box.json +++ b/src/generated/resources/data/ragium/recipe/bathing/blue/shulker_box.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/blue" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:shulker_boxes", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/blue" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:shulker_boxes", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/blue/wool.json b/src/generated/resources/data/ragium/recipe/bathing/blue/wool.json index dd35a4261..d8117c915 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/blue/wool.json +++ b/src/generated/resources/data/ragium/recipe/bathing/blue/wool.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/blue" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:wool", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/blue" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:wool", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/blue/wool_carpet.json b/src/generated/resources/data/ragium/recipe/bathing/blue/wool_carpet.json index 4c3078fe2..69637099e 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/blue/wool_carpet.json +++ b/src/generated/resources/data/ragium/recipe/bathing/blue/wool_carpet.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/blue" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:wool_carpets", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/blue" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:wool_carpets", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/brown/banner.json b/src/generated/resources/data/ragium/recipe/bathing/brown/banner.json index 8d7f32ec6..7d0239d98 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/brown/banner.json +++ b/src/generated/resources/data/ragium/recipe/bathing/brown/banner.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/brown" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:banners", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/brown" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:banners", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/brown/bed.json b/src/generated/resources/data/ragium/recipe/bathing/brown/bed.json index b56708265..523289870 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/brown/bed.json +++ b/src/generated/resources/data/ragium/recipe/bathing/brown/bed.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/brown" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:beds", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/brown" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:beds", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/brown/harness.json b/src/generated/resources/data/ragium/recipe/bathing/brown/harness.json index ce74f2f85..bdd451a09 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/brown/harness.json +++ b/src/generated/resources/data/ragium/recipe/bathing/brown/harness.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/brown" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:harnesses", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/brown" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:harnesses", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/brown/shulker_box.json b/src/generated/resources/data/ragium/recipe/bathing/brown/shulker_box.json index 2e3a8c8fe..803543deb 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/brown/shulker_box.json +++ b/src/generated/resources/data/ragium/recipe/bathing/brown/shulker_box.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/brown" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:shulker_boxes", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/brown" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:shulker_boxes", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/brown/wool.json b/src/generated/resources/data/ragium/recipe/bathing/brown/wool.json index 30a4c1744..44713fbda 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/brown/wool.json +++ b/src/generated/resources/data/ragium/recipe/bathing/brown/wool.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/brown" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:wool", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/brown" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:wool", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/brown/wool_carpet.json b/src/generated/resources/data/ragium/recipe/bathing/brown/wool_carpet.json index 5c68c249d..2dd2b4e39 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/brown/wool_carpet.json +++ b/src/generated/resources/data/ragium/recipe/bathing/brown/wool_carpet.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/brown" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:wool_carpets", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/brown" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:wool_carpets", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/cfrp_plate.json b/src/generated/resources/data/ragium/recipe/bathing/cfrp_plate.json index 0f1f140f3..43098df32 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/cfrp_plate.json +++ b/src/generated/resources/data/ragium/recipe/bathing/cfrp_plate.json @@ -1,12 +1,14 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 250, - "fluids": "#ragium:resins" - }, - "item_ingredient": { - "count": 1, - "items": "ragium:carbon_fiber" + "ingredient": { + "fluid": { + "amount": 250, + "fluids": "#ragium:resins" + }, + "item": { + "count": 1, + "items": "ragium:carbon_fiber" + } }, "result": { "count": 1, diff --git a/src/generated/resources/data/ragium/recipe/bathing/cyan/banner.json b/src/generated/resources/data/ragium/recipe/bathing/cyan/banner.json index 7423e81db..ec1788e4c 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/cyan/banner.json +++ b/src/generated/resources/data/ragium/recipe/bathing/cyan/banner.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/cyan" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:banners", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/cyan" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:banners", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/cyan/bed.json b/src/generated/resources/data/ragium/recipe/bathing/cyan/bed.json index cfe35d6da..51e6d8412 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/cyan/bed.json +++ b/src/generated/resources/data/ragium/recipe/bathing/cyan/bed.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/cyan" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:beds", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/cyan" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:beds", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/cyan/harness.json b/src/generated/resources/data/ragium/recipe/bathing/cyan/harness.json index 92c71ab35..213a9e837 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/cyan/harness.json +++ b/src/generated/resources/data/ragium/recipe/bathing/cyan/harness.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/cyan" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:harnesses", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/cyan" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:harnesses", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/cyan/shulker_box.json b/src/generated/resources/data/ragium/recipe/bathing/cyan/shulker_box.json index 31b6e4c1c..45fd6b2c3 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/cyan/shulker_box.json +++ b/src/generated/resources/data/ragium/recipe/bathing/cyan/shulker_box.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/cyan" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:shulker_boxes", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/cyan" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:shulker_boxes", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/cyan/wool.json b/src/generated/resources/data/ragium/recipe/bathing/cyan/wool.json index c7aaff56d..a567cb080 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/cyan/wool.json +++ b/src/generated/resources/data/ragium/recipe/bathing/cyan/wool.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/cyan" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:wool", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/cyan" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:wool", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/cyan/wool_carpet.json b/src/generated/resources/data/ragium/recipe/bathing/cyan/wool_carpet.json index e51987f68..9ff87b377 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/cyan/wool_carpet.json +++ b/src/generated/resources/data/ragium/recipe/bathing/cyan/wool_carpet.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/cyan" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:wool_carpets", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/cyan" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:wool_carpets", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/fermented_spider_eye.json b/src/generated/resources/data/ragium/recipe/bathing/fermented_spider_eye.json index b3e7eee83..58e54a667 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/fermented_spider_eye.json +++ b/src/generated/resources/data/ragium/recipe/bathing/fermented_spider_eye.json @@ -1,16 +1,18 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 250, - "fluids": { - "neoforge:ingredient_type": "ragium:potion", - "potions": "minecraft:poison" + "ingredient": { + "fluid": { + "amount": 250, + "fluids": { + "neoforge:ingredient_type": "ragium:potion", + "potions": "minecraft:poison" + } + }, + "item": { + "count": 1, + "items": "minecraft:spider_eye" } }, - "item_ingredient": { - "count": 1, - "items": "minecraft:spider_eye" - }, "result": { "count": 1, "id": "minecraft:fermented_spider_eye" diff --git a/src/generated/resources/data/ragium/recipe/bathing/gray/banner.json b/src/generated/resources/data/ragium/recipe/bathing/gray/banner.json index dce8aca32..972ec11d4 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/gray/banner.json +++ b/src/generated/resources/data/ragium/recipe/bathing/gray/banner.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/gray" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:banners", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/gray" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:banners", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/gray/bed.json b/src/generated/resources/data/ragium/recipe/bathing/gray/bed.json index 7425b714b..25a22869f 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/gray/bed.json +++ b/src/generated/resources/data/ragium/recipe/bathing/gray/bed.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/gray" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:beds", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/gray" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:beds", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/gray/harness.json b/src/generated/resources/data/ragium/recipe/bathing/gray/harness.json index bfbfe646b..ed86fc8fb 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/gray/harness.json +++ b/src/generated/resources/data/ragium/recipe/bathing/gray/harness.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/gray" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:harnesses", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/gray" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:harnesses", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/gray/shulker_box.json b/src/generated/resources/data/ragium/recipe/bathing/gray/shulker_box.json index a955f74c6..7c71f3951 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/gray/shulker_box.json +++ b/src/generated/resources/data/ragium/recipe/bathing/gray/shulker_box.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/gray" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:shulker_boxes", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/gray" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:shulker_boxes", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/gray/wool.json b/src/generated/resources/data/ragium/recipe/bathing/gray/wool.json index 6e741b723..2224fc24f 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/gray/wool.json +++ b/src/generated/resources/data/ragium/recipe/bathing/gray/wool.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/gray" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:wool", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/gray" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:wool", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/gray/wool_carpet.json b/src/generated/resources/data/ragium/recipe/bathing/gray/wool_carpet.json index 29c5e0990..9b290024c 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/gray/wool_carpet.json +++ b/src/generated/resources/data/ragium/recipe/bathing/gray/wool_carpet.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/gray" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:wool_carpets", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/gray" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:wool_carpets", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/green/banner.json b/src/generated/resources/data/ragium/recipe/bathing/green/banner.json index 6142d2437..74c9e7526 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/green/banner.json +++ b/src/generated/resources/data/ragium/recipe/bathing/green/banner.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/green" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:banners", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/green" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:banners", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/green/bed.json b/src/generated/resources/data/ragium/recipe/bathing/green/bed.json index 1d59477be..ce24055a1 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/green/bed.json +++ b/src/generated/resources/data/ragium/recipe/bathing/green/bed.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/green" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:beds", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/green" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:beds", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/green/harness.json b/src/generated/resources/data/ragium/recipe/bathing/green/harness.json index 3d4b2e665..b0cb492b2 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/green/harness.json +++ b/src/generated/resources/data/ragium/recipe/bathing/green/harness.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/green" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:harnesses", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/green" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:harnesses", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/green/shulker_box.json b/src/generated/resources/data/ragium/recipe/bathing/green/shulker_box.json index 667b77d75..c62e55b5a 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/green/shulker_box.json +++ b/src/generated/resources/data/ragium/recipe/bathing/green/shulker_box.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/green" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:shulker_boxes", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/green" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:shulker_boxes", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/green/wool.json b/src/generated/resources/data/ragium/recipe/bathing/green/wool.json index 0e732470e..8719e1c9e 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/green/wool.json +++ b/src/generated/resources/data/ragium/recipe/bathing/green/wool.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/green" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:wool", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/green" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:wool", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/green/wool_carpet.json b/src/generated/resources/data/ragium/recipe/bathing/green/wool_carpet.json index 82d6a9fef..85c761f0d 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/green/wool_carpet.json +++ b/src/generated/resources/data/ragium/recipe/bathing/green/wool_carpet.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/green" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:wool_carpets", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/green" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:wool_carpets", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/light_blue/banner.json b/src/generated/resources/data/ragium/recipe/bathing/light_blue/banner.json index dc4c06dbe..eb9a997b8 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/light_blue/banner.json +++ b/src/generated/resources/data/ragium/recipe/bathing/light_blue/banner.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/light_blue" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:banners", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/light_blue" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:banners", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/light_blue/bed.json b/src/generated/resources/data/ragium/recipe/bathing/light_blue/bed.json index 4b9721f8b..ab0e6c1ea 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/light_blue/bed.json +++ b/src/generated/resources/data/ragium/recipe/bathing/light_blue/bed.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/light_blue" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:beds", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/light_blue" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:beds", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/light_blue/harness.json b/src/generated/resources/data/ragium/recipe/bathing/light_blue/harness.json index c13053911..08c576afe 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/light_blue/harness.json +++ b/src/generated/resources/data/ragium/recipe/bathing/light_blue/harness.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/light_blue" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:harnesses", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/light_blue" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:harnesses", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/light_blue/shulker_box.json b/src/generated/resources/data/ragium/recipe/bathing/light_blue/shulker_box.json index c4980ccd6..802301ead 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/light_blue/shulker_box.json +++ b/src/generated/resources/data/ragium/recipe/bathing/light_blue/shulker_box.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/light_blue" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:shulker_boxes", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/light_blue" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:shulker_boxes", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/light_blue/wool.json b/src/generated/resources/data/ragium/recipe/bathing/light_blue/wool.json index fac95d722..1b89e5c32 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/light_blue/wool.json +++ b/src/generated/resources/data/ragium/recipe/bathing/light_blue/wool.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/light_blue" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:wool", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/light_blue" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:wool", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/light_blue/wool_carpet.json b/src/generated/resources/data/ragium/recipe/bathing/light_blue/wool_carpet.json index d7e4fd034..f997cb1fd 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/light_blue/wool_carpet.json +++ b/src/generated/resources/data/ragium/recipe/bathing/light_blue/wool_carpet.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/light_blue" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:wool_carpets", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/light_blue" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:wool_carpets", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/light_gray/banner.json b/src/generated/resources/data/ragium/recipe/bathing/light_gray/banner.json index c037851c7..3c68db469 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/light_gray/banner.json +++ b/src/generated/resources/data/ragium/recipe/bathing/light_gray/banner.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/light_gray" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:banners", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/light_gray" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:banners", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/light_gray/bed.json b/src/generated/resources/data/ragium/recipe/bathing/light_gray/bed.json index 76a2540f8..aeeac01f3 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/light_gray/bed.json +++ b/src/generated/resources/data/ragium/recipe/bathing/light_gray/bed.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/light_gray" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:beds", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/light_gray" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:beds", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/light_gray/harness.json b/src/generated/resources/data/ragium/recipe/bathing/light_gray/harness.json index 1c9965f98..f18652f61 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/light_gray/harness.json +++ b/src/generated/resources/data/ragium/recipe/bathing/light_gray/harness.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/light_gray" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:harnesses", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/light_gray" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:harnesses", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/light_gray/shulker_box.json b/src/generated/resources/data/ragium/recipe/bathing/light_gray/shulker_box.json index 08178cfe2..e6bac3f09 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/light_gray/shulker_box.json +++ b/src/generated/resources/data/ragium/recipe/bathing/light_gray/shulker_box.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/light_gray" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:shulker_boxes", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/light_gray" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:shulker_boxes", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/light_gray/wool.json b/src/generated/resources/data/ragium/recipe/bathing/light_gray/wool.json index 7aa1e5e05..1b283a5e6 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/light_gray/wool.json +++ b/src/generated/resources/data/ragium/recipe/bathing/light_gray/wool.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/light_gray" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:wool", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/light_gray" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:wool", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/light_gray/wool_carpet.json b/src/generated/resources/data/ragium/recipe/bathing/light_gray/wool_carpet.json index b6ebef33f..38c53eb8a 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/light_gray/wool_carpet.json +++ b/src/generated/resources/data/ragium/recipe/bathing/light_gray/wool_carpet.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/light_gray" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:wool_carpets", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/light_gray" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:wool_carpets", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/lime/banner.json b/src/generated/resources/data/ragium/recipe/bathing/lime/banner.json index e8e69e09d..598e5dcd3 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/lime/banner.json +++ b/src/generated/resources/data/ragium/recipe/bathing/lime/banner.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/lime" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:banners", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/lime" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:banners", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/lime/bed.json b/src/generated/resources/data/ragium/recipe/bathing/lime/bed.json index 41d3129c7..b550bbd07 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/lime/bed.json +++ b/src/generated/resources/data/ragium/recipe/bathing/lime/bed.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/lime" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:beds", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/lime" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:beds", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/lime/harness.json b/src/generated/resources/data/ragium/recipe/bathing/lime/harness.json index 10b0ac15c..ec7aa8714 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/lime/harness.json +++ b/src/generated/resources/data/ragium/recipe/bathing/lime/harness.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/lime" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:harnesses", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/lime" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:harnesses", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/lime/shulker_box.json b/src/generated/resources/data/ragium/recipe/bathing/lime/shulker_box.json index 10d43763b..eb51566fc 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/lime/shulker_box.json +++ b/src/generated/resources/data/ragium/recipe/bathing/lime/shulker_box.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/lime" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:shulker_boxes", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/lime" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:shulker_boxes", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/lime/wool.json b/src/generated/resources/data/ragium/recipe/bathing/lime/wool.json index 47c6ef884..ca3679a23 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/lime/wool.json +++ b/src/generated/resources/data/ragium/recipe/bathing/lime/wool.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/lime" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:wool", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/lime" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:wool", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/lime/wool_carpet.json b/src/generated/resources/data/ragium/recipe/bathing/lime/wool_carpet.json index 005c22a6c..b5115c9f3 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/lime/wool_carpet.json +++ b/src/generated/resources/data/ragium/recipe/bathing/lime/wool_carpet.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/lime" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:wool_carpets", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/lime" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:wool_carpets", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/magenta/banner.json b/src/generated/resources/data/ragium/recipe/bathing/magenta/banner.json index 0f05a674b..e3eefe5f0 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/magenta/banner.json +++ b/src/generated/resources/data/ragium/recipe/bathing/magenta/banner.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/magenta" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:banners", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/magenta" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:banners", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/magenta/bed.json b/src/generated/resources/data/ragium/recipe/bathing/magenta/bed.json index a7e020d8b..fac1e4680 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/magenta/bed.json +++ b/src/generated/resources/data/ragium/recipe/bathing/magenta/bed.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/magenta" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:beds", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/magenta" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:beds", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/magenta/harness.json b/src/generated/resources/data/ragium/recipe/bathing/magenta/harness.json index fc1654bb4..d38c8744f 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/magenta/harness.json +++ b/src/generated/resources/data/ragium/recipe/bathing/magenta/harness.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/magenta" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:harnesses", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/magenta" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:harnesses", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/magenta/shulker_box.json b/src/generated/resources/data/ragium/recipe/bathing/magenta/shulker_box.json index 7164b009f..5997cb844 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/magenta/shulker_box.json +++ b/src/generated/resources/data/ragium/recipe/bathing/magenta/shulker_box.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/magenta" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:shulker_boxes", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/magenta" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:shulker_boxes", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/magenta/wool.json b/src/generated/resources/data/ragium/recipe/bathing/magenta/wool.json index c713b1694..4bb4e0823 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/magenta/wool.json +++ b/src/generated/resources/data/ragium/recipe/bathing/magenta/wool.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/magenta" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:wool", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/magenta" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:wool", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/magenta/wool_carpet.json b/src/generated/resources/data/ragium/recipe/bathing/magenta/wool_carpet.json index 33450be22..b7cac2349 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/magenta/wool_carpet.json +++ b/src/generated/resources/data/ragium/recipe/bathing/magenta/wool_carpet.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/magenta" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:wool_carpets", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/magenta" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:wool_carpets", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/mortar.json b/src/generated/resources/data/ragium/recipe/bathing/mortar.json index f2e35bb8d..4dfc576d1 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/mortar.json +++ b/src/generated/resources/data/ragium/recipe/bathing/mortar.json @@ -1,12 +1,14 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 250, - "fluids": "#c:water" - }, - "item_ingredient": { - "count": 1, - "items": "ragium:cement" + "ingredient": { + "fluid": { + "amount": 250, + "fluids": "#c:water" + }, + "item": { + "count": 1, + "items": "ragium:cement" + } }, "result": { "count": 1, diff --git a/src/generated/resources/data/ragium/recipe/bathing/orange/banner.json b/src/generated/resources/data/ragium/recipe/bathing/orange/banner.json index 8da0ab165..9fab20512 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/orange/banner.json +++ b/src/generated/resources/data/ragium/recipe/bathing/orange/banner.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/orange" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:banners", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/orange" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:banners", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/orange/bed.json b/src/generated/resources/data/ragium/recipe/bathing/orange/bed.json index 5cfba999b..be0e29ee0 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/orange/bed.json +++ b/src/generated/resources/data/ragium/recipe/bathing/orange/bed.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/orange" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:beds", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/orange" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:beds", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/orange/harness.json b/src/generated/resources/data/ragium/recipe/bathing/orange/harness.json index 1bf4e9f66..0330956e7 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/orange/harness.json +++ b/src/generated/resources/data/ragium/recipe/bathing/orange/harness.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/orange" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:harnesses", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/orange" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:harnesses", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/orange/shulker_box.json b/src/generated/resources/data/ragium/recipe/bathing/orange/shulker_box.json index 19700e86e..0f180dbef 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/orange/shulker_box.json +++ b/src/generated/resources/data/ragium/recipe/bathing/orange/shulker_box.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/orange" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:shulker_boxes", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/orange" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:shulker_boxes", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/orange/wool.json b/src/generated/resources/data/ragium/recipe/bathing/orange/wool.json index 36377d2ec..9acef3865 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/orange/wool.json +++ b/src/generated/resources/data/ragium/recipe/bathing/orange/wool.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/orange" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:wool", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/orange" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:wool", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/orange/wool_carpet.json b/src/generated/resources/data/ragium/recipe/bathing/orange/wool_carpet.json index ff208d3ad..72143096f 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/orange/wool_carpet.json +++ b/src/generated/resources/data/ragium/recipe/bathing/orange/wool_carpet.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/orange" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:wool_carpets", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/orange" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:wool_carpets", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/paper_dust_from_wood.json b/src/generated/resources/data/ragium/recipe/bathing/paper_dust_from_wood.json index d27a65cd7..271efe7e2 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/paper_dust_from_wood.json +++ b/src/generated/resources/data/ragium/recipe/bathing/paper_dust_from_wood.json @@ -1,12 +1,14 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 250, - "fluids": "#c:sodium_hydroxide_solution" - }, - "item_ingredient": { - "count": 1, - "items": "#c:dusts/wood" + "ingredient": { + "fluid": { + "amount": 250, + "fluids": "#c:sodium_hydroxide_solution" + }, + "item": { + "count": 1, + "items": "#c:dusts/wood" + } }, "result": { "count": 1, diff --git a/src/generated/resources/data/ragium/recipe/bathing/paper_from_pulp.json b/src/generated/resources/data/ragium/recipe/bathing/paper_from_pulp.json index af28670e4..ebd728179 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/paper_from_pulp.json +++ b/src/generated/resources/data/ragium/recipe/bathing/paper_from_pulp.json @@ -1,12 +1,14 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 250, - "fluids": "#c:water" - }, - "item_ingredient": { - "count": 1, - "items": "#c:dusts/paper" + "ingredient": { + "fluid": { + "amount": 250, + "fluids": "#c:water" + }, + "item": { + "count": 1, + "items": "#c:dusts/paper" + } }, "result": { "count": 1, diff --git a/src/generated/resources/data/ragium/recipe/bathing/particle_board.json b/src/generated/resources/data/ragium/recipe/bathing/particle_board.json index 717a98c83..20ea98bbc 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/particle_board.json +++ b/src/generated/resources/data/ragium/recipe/bathing/particle_board.json @@ -1,12 +1,14 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#ragium:resins" - }, - "item_ingredient": { - "count": 1, - "items": "#c:dusts/wood" + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#ragium:resins" + }, + "item": { + "count": 1, + "items": "#c:dusts/wood" + } }, "result": { "count": 1, diff --git a/src/generated/resources/data/ragium/recipe/bathing/pink/banner.json b/src/generated/resources/data/ragium/recipe/bathing/pink/banner.json index 4ada43fbd..0999b57ba 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/pink/banner.json +++ b/src/generated/resources/data/ragium/recipe/bathing/pink/banner.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/pink" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:banners", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/pink" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:banners", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/pink/bed.json b/src/generated/resources/data/ragium/recipe/bathing/pink/bed.json index 25b406292..10e1b54b3 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/pink/bed.json +++ b/src/generated/resources/data/ragium/recipe/bathing/pink/bed.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/pink" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:beds", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/pink" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:beds", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/pink/harness.json b/src/generated/resources/data/ragium/recipe/bathing/pink/harness.json index 0512cb907..61ef7ddc3 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/pink/harness.json +++ b/src/generated/resources/data/ragium/recipe/bathing/pink/harness.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/pink" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:harnesses", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/pink" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:harnesses", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/pink/shulker_box.json b/src/generated/resources/data/ragium/recipe/bathing/pink/shulker_box.json index b351b0d79..6f17cc158 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/pink/shulker_box.json +++ b/src/generated/resources/data/ragium/recipe/bathing/pink/shulker_box.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/pink" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:shulker_boxes", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/pink" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:shulker_boxes", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/pink/wool.json b/src/generated/resources/data/ragium/recipe/bathing/pink/wool.json index aed872d2a..351a65dfe 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/pink/wool.json +++ b/src/generated/resources/data/ragium/recipe/bathing/pink/wool.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/pink" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:wool", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/pink" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:wool", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/pink/wool_carpet.json b/src/generated/resources/data/ragium/recipe/bathing/pink/wool_carpet.json index 07524bcb0..149f34207 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/pink/wool_carpet.json +++ b/src/generated/resources/data/ragium/recipe/bathing/pink/wool_carpet.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/pink" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:wool_carpets", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/pink" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:wool_carpets", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/poisonous_potato.json b/src/generated/resources/data/ragium/recipe/bathing/poisonous_potato.json index cd3306af4..c1d5ef3a5 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/poisonous_potato.json +++ b/src/generated/resources/data/ragium/recipe/bathing/poisonous_potato.json @@ -1,16 +1,18 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 250, - "fluids": { - "neoforge:ingredient_type": "ragium:potion", - "potions": "minecraft:poison" + "ingredient": { + "fluid": { + "amount": 250, + "fluids": { + "neoforge:ingredient_type": "ragium:potion", + "potions": "minecraft:poison" + } + }, + "item": { + "count": 1, + "items": "#c:crops/potato" } }, - "item_ingredient": { - "count": 1, - "items": "#c:crops/potato" - }, "result": { "count": 1, "id": "minecraft:poisonous_potato" diff --git a/src/generated/resources/data/ragium/recipe/bathing/purple/banner.json b/src/generated/resources/data/ragium/recipe/bathing/purple/banner.json index d4742f6b2..9cf6bdfe8 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/purple/banner.json +++ b/src/generated/resources/data/ragium/recipe/bathing/purple/banner.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/purple" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:banners", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/purple" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:banners", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/purple/bed.json b/src/generated/resources/data/ragium/recipe/bathing/purple/bed.json index 0a84dbe1c..0a80f761b 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/purple/bed.json +++ b/src/generated/resources/data/ragium/recipe/bathing/purple/bed.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/purple" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:beds", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/purple" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:beds", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/purple/harness.json b/src/generated/resources/data/ragium/recipe/bathing/purple/harness.json index 8d2d278d6..4589bd4db 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/purple/harness.json +++ b/src/generated/resources/data/ragium/recipe/bathing/purple/harness.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/purple" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:harnesses", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/purple" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:harnesses", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/purple/shulker_box.json b/src/generated/resources/data/ragium/recipe/bathing/purple/shulker_box.json index a61a03a6e..92dcbefe1 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/purple/shulker_box.json +++ b/src/generated/resources/data/ragium/recipe/bathing/purple/shulker_box.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/purple" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:shulker_boxes", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/purple" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:shulker_boxes", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/purple/wool.json b/src/generated/resources/data/ragium/recipe/bathing/purple/wool.json index d309b6ddd..8524c3a6d 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/purple/wool.json +++ b/src/generated/resources/data/ragium/recipe/bathing/purple/wool.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/purple" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:wool", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/purple" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:wool", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/purple/wool_carpet.json b/src/generated/resources/data/ragium/recipe/bathing/purple/wool_carpet.json index 52e5ba3c9..25786ce7b 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/purple/wool_carpet.json +++ b/src/generated/resources/data/ragium/recipe/bathing/purple/wool_carpet.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/purple" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:wool_carpets", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/purple" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:wool_carpets", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/red/banner.json b/src/generated/resources/data/ragium/recipe/bathing/red/banner.json index 3012c34c1..cb215b8fe 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/red/banner.json +++ b/src/generated/resources/data/ragium/recipe/bathing/red/banner.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/red" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:banners", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/red" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:banners", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/red/bed.json b/src/generated/resources/data/ragium/recipe/bathing/red/bed.json index f8723b1b0..6fd62fa8d 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/red/bed.json +++ b/src/generated/resources/data/ragium/recipe/bathing/red/bed.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/red" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:beds", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/red" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:beds", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/red/harness.json b/src/generated/resources/data/ragium/recipe/bathing/red/harness.json index fd4fa109a..54bc5e716 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/red/harness.json +++ b/src/generated/resources/data/ragium/recipe/bathing/red/harness.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/red" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:harnesses", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/red" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:harnesses", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/red/shulker_box.json b/src/generated/resources/data/ragium/recipe/bathing/red/shulker_box.json index 30262b569..75b0bfc01 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/red/shulker_box.json +++ b/src/generated/resources/data/ragium/recipe/bathing/red/shulker_box.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/red" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:shulker_boxes", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/red" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:shulker_boxes", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/red/wool.json b/src/generated/resources/data/ragium/recipe/bathing/red/wool.json index ede9b4319..895ab58de 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/red/wool.json +++ b/src/generated/resources/data/ragium/recipe/bathing/red/wool.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/red" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:wool", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/red" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:wool", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/red/wool_carpet.json b/src/generated/resources/data/ragium/recipe/bathing/red/wool_carpet.json index 61c04f42b..8c871978b 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/red/wool_carpet.json +++ b/src/generated/resources/data/ragium/recipe/bathing/red/wool_carpet.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/red" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:wool_carpets", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/red" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:wool_carpets", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/silicon_dust.json b/src/generated/resources/data/ragium/recipe/bathing/silicon_dust.json index f11b25a58..3a0118ff5 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/silicon_dust.json +++ b/src/generated/resources/data/ragium/recipe/bathing/silicon_dust.json @@ -1,12 +1,14 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:hydrochloric_acid" - }, - "item_ingredient": { - "count": 1, - "items": "#c:silicon" + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:hydrochloric_acid" + }, + "item": { + "count": 1, + "items": "#c:silicon" + } }, "result": { "count": 1, diff --git a/src/generated/resources/data/ragium/recipe/bathing/sticky_piston.json b/src/generated/resources/data/ragium/recipe/bathing/sticky_piston.json index 14e0f73f0..a66e65c20 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/sticky_piston.json +++ b/src/generated/resources/data/ragium/recipe/bathing/sticky_piston.json @@ -1,12 +1,14 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#ragium:resins" - }, - "item_ingredient": { - "count": 1, - "items": "minecraft:piston" + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#ragium:resins" + }, + "item": { + "count": 1, + "items": "minecraft:piston" + } }, "result": { "count": 1, diff --git a/src/generated/resources/data/ragium/recipe/bathing/tnt.json b/src/generated/resources/data/ragium/recipe/bathing/tnt.json index 40d623351..fd96ade2b 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/tnt.json +++ b/src/generated/resources/data/ragium/recipe/bathing/tnt.json @@ -1,12 +1,14 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 1000, - "fluids": "#c:liquid_explosive" - }, - "item_ingredient": { - "count": 8, - "items": "#c:sands" + "ingredient": { + "fluid": { + "amount": 1000, + "fluids": "#c:liquid_explosive" + }, + "item": { + "count": 8, + "items": "#c:sands" + } }, "result": { "count": 8, diff --git a/src/generated/resources/data/ragium/recipe/bathing/white/banner.json b/src/generated/resources/data/ragium/recipe/bathing/white/banner.json index 49f2a2da9..af9b1b6fc 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/white/banner.json +++ b/src/generated/resources/data/ragium/recipe/bathing/white/banner.json @@ -1,25 +1,27 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:bleach" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - { - "type": "neoforge:or", - "values": [ - "#minecraft:banners" - ] - }, - { - "type": "neoforge:not", - "value": "#c:dyed/white" - } - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:bleach" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + { + "type": "neoforge:or", + "values": [ + "#minecraft:banners" + ] + }, + { + "type": "neoforge:not", + "value": "#c:dyed/white" + } + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/white/bed.json b/src/generated/resources/data/ragium/recipe/bathing/white/bed.json index ac228c144..42bd7b878 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/white/bed.json +++ b/src/generated/resources/data/ragium/recipe/bathing/white/bed.json @@ -1,25 +1,27 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:bleach" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - { - "type": "neoforge:or", - "values": [ - "#minecraft:beds" - ] - }, - { - "type": "neoforge:not", - "value": "#c:dyed/white" - } - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:bleach" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + { + "type": "neoforge:or", + "values": [ + "#minecraft:beds" + ] + }, + { + "type": "neoforge:not", + "value": "#c:dyed/white" + } + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/white/harness.json b/src/generated/resources/data/ragium/recipe/bathing/white/harness.json index e5d08c560..fa8d8213b 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/white/harness.json +++ b/src/generated/resources/data/ragium/recipe/bathing/white/harness.json @@ -1,25 +1,27 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:bleach" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - { - "type": "neoforge:or", - "values": [ - "#minecraft:harnesses" - ] - }, - { - "type": "neoforge:not", - "value": "#c:dyed/white" - } - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:bleach" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + { + "type": "neoforge:or", + "values": [ + "#minecraft:harnesses" + ] + }, + { + "type": "neoforge:not", + "value": "#c:dyed/white" + } + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/white/shulker_box.json b/src/generated/resources/data/ragium/recipe/bathing/white/shulker_box.json index 64804a678..c6044eaad 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/white/shulker_box.json +++ b/src/generated/resources/data/ragium/recipe/bathing/white/shulker_box.json @@ -1,25 +1,27 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:bleach" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - { - "type": "neoforge:or", - "values": [ - "#minecraft:shulker_boxes" - ] - }, - { - "type": "neoforge:not", - "value": "#c:dyed/white" - } - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:bleach" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + { + "type": "neoforge:or", + "values": [ + "#minecraft:shulker_boxes" + ] + }, + { + "type": "neoforge:not", + "value": "#c:dyed/white" + } + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/white/wool.json b/src/generated/resources/data/ragium/recipe/bathing/white/wool.json index 5cbcc2410..3931129fc 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/white/wool.json +++ b/src/generated/resources/data/ragium/recipe/bathing/white/wool.json @@ -1,25 +1,27 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:bleach" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - { - "type": "neoforge:or", - "values": [ - "#minecraft:wool" - ] - }, - { - "type": "neoforge:not", - "value": "#c:dyed/white" - } - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:bleach" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + { + "type": "neoforge:or", + "values": [ + "#minecraft:wool" + ] + }, + { + "type": "neoforge:not", + "value": "#c:dyed/white" + } + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/white/wool_carpet.json b/src/generated/resources/data/ragium/recipe/bathing/white/wool_carpet.json index c6dcb2638..1daa8d062 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/white/wool_carpet.json +++ b/src/generated/resources/data/ragium/recipe/bathing/white/wool_carpet.json @@ -1,25 +1,27 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:bleach" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - { - "type": "neoforge:or", - "values": [ - "#minecraft:wool_carpets" - ] - }, - { - "type": "neoforge:not", - "value": "#c:dyed/white" - } - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:bleach" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + { + "type": "neoforge:or", + "values": [ + "#minecraft:wool_carpets" + ] + }, + { + "type": "neoforge:not", + "value": "#c:dyed/white" + } + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/yellow/banner.json b/src/generated/resources/data/ragium/recipe/bathing/yellow/banner.json index d91e0cc7f..861b26817 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/yellow/banner.json +++ b/src/generated/resources/data/ragium/recipe/bathing/yellow/banner.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/yellow" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:banners", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/yellow" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:banners", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/yellow/bed.json b/src/generated/resources/data/ragium/recipe/bathing/yellow/bed.json index c6420768c..8948b6462 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/yellow/bed.json +++ b/src/generated/resources/data/ragium/recipe/bathing/yellow/bed.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/yellow" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:beds", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/yellow" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:beds", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/yellow/harness.json b/src/generated/resources/data/ragium/recipe/bathing/yellow/harness.json index e35c35ab6..89a255896 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/yellow/harness.json +++ b/src/generated/resources/data/ragium/recipe/bathing/yellow/harness.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/yellow" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:harnesses", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/yellow" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:harnesses", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/yellow/shulker_box.json b/src/generated/resources/data/ragium/recipe/bathing/yellow/shulker_box.json index 6ec6a13d9..2c394aa31 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/yellow/shulker_box.json +++ b/src/generated/resources/data/ragium/recipe/bathing/yellow/shulker_box.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/yellow" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:shulker_boxes", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/yellow" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:shulker_boxes", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/yellow/wool.json b/src/generated/resources/data/ragium/recipe/bathing/yellow/wool.json index 32f80a290..d364a80e3 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/yellow/wool.json +++ b/src/generated/resources/data/ragium/recipe/bathing/yellow/wool.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/yellow" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:wool", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/yellow" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:wool", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/yellow/wool_carpet.json b/src/generated/resources/data/ragium/recipe/bathing/yellow/wool_carpet.json index f343ce0a7..3cbada0b2 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/yellow/wool_carpet.json +++ b/src/generated/resources/data/ragium/recipe/bathing/yellow/wool_carpet.json @@ -1,17 +1,19 @@ { "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 125, - "fluids": "#c:dyes/yellow" - }, - "item_ingredient": { - "count": 1, - "items": { - "type": "neoforge:and", - "values": [ - "#minecraft:wool_carpets", - "#c:dyed/white" - ] + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/yellow" + }, + "item": { + "count": 1, + "items": { + "type": "neoforge:and", + "values": [ + "#minecraft:wool_carpets", + "#c:dyed/white" + ] + } } }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/brewing/potion/blindness.json b/src/generated/resources/data/ragium/recipe/brewing/potion/blindness.json index f84b46b2b..0c99b8ff7 100644 --- a/src/generated/resources/data/ragium/recipe/brewing/potion/blindness.json +++ b/src/generated/resources/data/ragium/recipe/brewing/potion/blindness.json @@ -1,27 +1,31 @@ { "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 1000, - "fluids": { - "neoforge:ingredient_type": "ragium:potion", - "potions": "minecraft:thick" - } - }, - "fluid_result": { - "type": "ragium:potion", - "amount": 1000, - "custom_effects": [ - { - "duration": 900, - "id": "minecraft:blindness", - "show_icon": true + "ingredient": { + "fluid": { + "amount": 1000, + "fluids": { + "neoforge:ingredient_type": "ragium:potion", + "potions": "minecraft:thick" } - ], - "custom_name": "blindness" + }, + "item": { + "count": 1, + "items": "#c:glass_blocks/tinted" + } }, - "item_ingredient": { - "count": 1, - "items": "#c:glass_blocks/tinted" + "result": { + "fluid": { + "type": "ragium:potion", + "amount": 1000, + "custom_effects": [ + { + "duration": 900, + "id": "minecraft:blindness", + "show_icon": true + } + ], + "custom_name": "blindness" + } }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/brewing/potion/darkness.json b/src/generated/resources/data/ragium/recipe/brewing/potion/darkness.json index 0ceaee492..b1b487188 100644 --- a/src/generated/resources/data/ragium/recipe/brewing/potion/darkness.json +++ b/src/generated/resources/data/ragium/recipe/brewing/potion/darkness.json @@ -1,32 +1,36 @@ { "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 1000, - "fluids": { - "neoforge:ingredient_type": "ragium:potion", - "potions": "minecraft:thick" - } - }, - "fluid_result": { - "type": "ragium:potion", - "amount": 1000, - "custom_effects": [ - { - "duration": 900, - "id": "minecraft:darkness", - "show_icon": true + "ingredient": { + "fluid": { + "amount": 1000, + "fluids": { + "neoforge:ingredient_type": "ragium:potion", + "potions": "minecraft:thick" } - ], - "custom_name": "darkness" + }, + "item": { + "count": 1, + "items": { + "neoforge:ingredient_type": "ragium:material_tags", + "tags": [ + "c:dusts/echo", + "c:gems/echo" + ] + } + } }, - "item_ingredient": { - "count": 1, - "items": { - "neoforge:ingredient_type": "ragium:material_tags", - "tags": [ - "c:dusts/echo", - "c:gems/echo" - ] + "result": { + "fluid": { + "type": "ragium:potion", + "amount": 1000, + "custom_effects": [ + { + "duration": 900, + "id": "minecraft:darkness", + "show_icon": true + } + ], + "custom_name": "darkness" } }, "time": 200 diff --git a/src/generated/resources/data/ragium/recipe/brewing/potion/enchanted_golden_apple.json b/src/generated/resources/data/ragium/recipe/brewing/potion/enchanted_golden_apple.json index 483d513f2..ff6e267e6 100644 --- a/src/generated/resources/data/ragium/recipe/brewing/potion/enchanted_golden_apple.json +++ b/src/generated/resources/data/ragium/recipe/brewing/potion/enchanted_golden_apple.json @@ -1,45 +1,49 @@ { "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 1000, - "fluids": { - "neoforge:ingredient_type": "ragium:potion", - "potions": "minecraft:thick" - } - }, - "fluid_result": { - "type": "ragium:potion", - "amount": 1000, - "custom_color": 16750848, - "custom_effects": [ - { - "amplifier": 1, - "duration": 400, - "id": "minecraft:regeneration", - "show_icon": true - }, - { - "duration": 6000, - "id": "minecraft:resistance", - "show_icon": true - }, - { - "duration": 6000, - "id": "minecraft:fire_resistance", - "show_icon": true - }, - { - "amplifier": 3, - "duration": 2400, - "id": "minecraft:absorption", - "show_icon": true + "ingredient": { + "fluid": { + "amount": 1000, + "fluids": { + "neoforge:ingredient_type": "ragium:potion", + "potions": "minecraft:thick" } - ], - "custom_name": "enchanted_golden_apple" + }, + "item": { + "count": 1, + "items": "minecraft:enchanted_golden_apple" + } }, - "item_ingredient": { - "count": 1, - "items": "minecraft:enchanted_golden_apple" + "result": { + "fluid": { + "type": "ragium:potion", + "amount": 1000, + "custom_color": 16750848, + "custom_effects": [ + { + "amplifier": 1, + "duration": 400, + "id": "minecraft:regeneration", + "show_icon": true + }, + { + "duration": 6000, + "id": "minecraft:resistance", + "show_icon": true + }, + { + "duration": 6000, + "id": "minecraft:fire_resistance", + "show_icon": true + }, + { + "amplifier": 3, + "duration": 2400, + "id": "minecraft:absorption", + "show_icon": true + } + ], + "custom_name": "enchanted_golden_apple" + } }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/brewing/potion/golden_apple.json b/src/generated/resources/data/ragium/recipe/brewing/potion/golden_apple.json index 6e34f14fd..6baa59618 100644 --- a/src/generated/resources/data/ragium/recipe/brewing/potion/golden_apple.json +++ b/src/generated/resources/data/ragium/recipe/brewing/potion/golden_apple.json @@ -1,34 +1,38 @@ { "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 1000, - "fluids": { - "neoforge:ingredient_type": "ragium:potion", - "potions": "minecraft:thick" - } - }, - "fluid_result": { - "type": "ragium:potion", - "amount": 1000, - "custom_color": 16750848, - "custom_effects": [ - { - "amplifier": 1, - "duration": 100, - "id": "minecraft:regeneration", - "show_icon": true - }, - { - "duration": 2400, - "id": "minecraft:absorption", - "show_icon": true + "ingredient": { + "fluid": { + "amount": 1000, + "fluids": { + "neoforge:ingredient_type": "ragium:potion", + "potions": "minecraft:thick" } - ], - "custom_name": "golden_apple" + }, + "item": { + "count": 1, + "items": "minecraft:golden_apple" + } }, - "item_ingredient": { - "count": 1, - "items": "minecraft:golden_apple" + "result": { + "fluid": { + "type": "ragium:potion", + "amount": 1000, + "custom_color": 16750848, + "custom_effects": [ + { + "amplifier": 1, + "duration": 100, + "id": "minecraft:regeneration", + "show_icon": true + }, + { + "duration": 2400, + "id": "minecraft:absorption", + "show_icon": true + } + ], + "custom_name": "golden_apple" + } }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/brewing/potion/hunger.json b/src/generated/resources/data/ragium/recipe/brewing/potion/hunger.json index 398ce6b00..659cbb94b 100644 --- a/src/generated/resources/data/ragium/recipe/brewing/potion/hunger.json +++ b/src/generated/resources/data/ragium/recipe/brewing/potion/hunger.json @@ -1,27 +1,31 @@ { "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 1000, - "fluids": { - "neoforge:ingredient_type": "ragium:potion", - "potions": "minecraft:thick" - } - }, - "fluid_result": { - "type": "ragium:potion", - "amount": 1000, - "custom_effects": [ - { - "duration": 900, - "id": "minecraft:hunger", - "show_icon": true + "ingredient": { + "fluid": { + "amount": 1000, + "fluids": { + "neoforge:ingredient_type": "ragium:potion", + "potions": "minecraft:thick" } - ], - "custom_name": "hunger" + }, + "item": { + "count": 1, + "items": "minecraft:rotten_flesh" + } }, - "item_ingredient": { - "count": 1, - "items": "minecraft:rotten_flesh" + "result": { + "fluid": { + "type": "ragium:potion", + "amount": 1000, + "custom_effects": [ + { + "duration": 900, + "id": "minecraft:hunger", + "show_icon": true + } + ], + "custom_name": "hunger" + } }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/brewing/potion/nausea.json b/src/generated/resources/data/ragium/recipe/brewing/potion/nausea.json index eba404075..0fdf0b398 100644 --- a/src/generated/resources/data/ragium/recipe/brewing/potion/nausea.json +++ b/src/generated/resources/data/ragium/recipe/brewing/potion/nausea.json @@ -1,27 +1,31 @@ { "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 1000, - "fluids": { - "neoforge:ingredient_type": "ragium:potion", - "potions": "minecraft:thick" - } - }, - "fluid_result": { - "type": "ragium:potion", - "amount": 1000, - "custom_effects": [ - { - "duration": 900, - "id": "minecraft:nausea", - "show_icon": true + "ingredient": { + "fluid": { + "amount": 1000, + "fluids": { + "neoforge:ingredient_type": "ragium:potion", + "potions": "minecraft:thick" } - ], - "custom_name": "nausea" + }, + "item": { + "count": 1, + "items": "minecraft:pufferfish" + } }, - "item_ingredient": { - "count": 1, - "items": "minecraft:pufferfish" + "result": { + "fluid": { + "type": "ragium:potion", + "amount": 1000, + "custom_effects": [ + { + "duration": 900, + "id": "minecraft:nausea", + "show_icon": true + } + ], + "custom_name": "nausea" + } }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/brewing/potion/wither.json b/src/generated/resources/data/ragium/recipe/brewing/potion/wither.json index 24022e38d..34fbe29f9 100644 --- a/src/generated/resources/data/ragium/recipe/brewing/potion/wither.json +++ b/src/generated/resources/data/ragium/recipe/brewing/potion/wither.json @@ -1,30 +1,34 @@ { "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 1000, - "fluids": { - "neoforge:ingredient_type": "ragium:potion", - "potions": "minecraft:thick" - } - }, - "fluid_result": { - "type": "ragium:potion", - "amount": 1000, - "custom_effects": [ - { - "duration": 900, - "id": "minecraft:wither", - "show_icon": true + "ingredient": { + "fluid": { + "amount": 1000, + "fluids": { + "neoforge:ingredient_type": "ragium:potion", + "potions": "minecraft:thick" } - ], - "custom_name": "wither" + }, + "item": { + "count": 1, + "items": [ + "minecraft:wither_rose", + "minecraft:wither_skeleton_skull" + ] + } }, - "item_ingredient": { - "count": 1, - "items": [ - "minecraft:wither_rose", - "minecraft:wither_skeleton_skull" - ] + "result": { + "fluid": { + "type": "ragium:potion", + "amount": 1000, + "custom_effects": [ + { + "duration": 900, + "id": "minecraft:wither", + "show_icon": true + } + ], + "custom_name": "wither" + } }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/draining/honey_from_bottle.json b/src/generated/resources/data/ragium/recipe/draining/honey_from_bottle.json index 2778fe351..91a7b322d 100644 --- a/src/generated/resources/data/ragium/recipe/draining/honey_from_bottle.json +++ b/src/generated/resources/data/ragium/recipe/draining/honey_from_bottle.json @@ -1,16 +1,18 @@ { "type": "ragium:draining", - "fluid_result": { - "amount": 250, - "id": "ragium:honey" - }, "ingredient": { "count": 1, "items": "#c:drinks/honey" }, - "item_result": { - "count": 1, - "id": "minecraft:glass_bottle" + "result": { + "fluid": { + "amount": 250, + "id": "ragium:honey" + }, + "item": { + "count": 1, + "id": "minecraft:glass_bottle" + } }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/draining/honey_from_comb.json b/src/generated/resources/data/ragium/recipe/draining/honey_from_comb.json index 9ad75d7d9..771cf7dbe 100644 --- a/src/generated/resources/data/ragium/recipe/draining/honey_from_comb.json +++ b/src/generated/resources/data/ragium/recipe/draining/honey_from_comb.json @@ -1,16 +1,18 @@ { "type": "ragium:draining", - "fluid_result": { - "amount": 1000, - "id": "ragium:honey" - }, "ingredient": { "count": 1, "items": "minecraft:honeycomb" }, - "item_result": { - "count": 1, - "id": "ragium:beeswax" + "result": { + "fluid": { + "amount": 1000, + "id": "ragium:honey" + }, + "item": { + "count": 1, + "id": "ragium:beeswax" + } }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/draining/sponge.json b/src/generated/resources/data/ragium/recipe/draining/sponge.json index d53d10ecc..bf1f64f3c 100644 --- a/src/generated/resources/data/ragium/recipe/draining/sponge.json +++ b/src/generated/resources/data/ragium/recipe/draining/sponge.json @@ -1,16 +1,18 @@ { "type": "ragium:draining", - "fluid_result": { - "amount": 1000, - "id": "minecraft:water" - }, "ingredient": { "count": 1, "items": "minecraft:wet_sponge" }, - "item_result": { - "count": 1, - "id": "minecraft:sponge" + "result": { + "fluid": { + "amount": 1000, + "id": "minecraft:water" + }, + "item": { + "count": 1, + "id": "minecraft:sponge" + } }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/filling/black_concrete_from_powder.json b/src/generated/resources/data/ragium/recipe/filling/black_concrete_from_powder.json index d9283b51f..192e974a8 100644 --- a/src/generated/resources/data/ragium/recipe/filling/black_concrete_from_powder.json +++ b/src/generated/resources/data/ragium/recipe/filling/black_concrete_from_powder.json @@ -1,12 +1,14 @@ { "type": "ragium:filling", - "fluid_ingredient": { - "amount": 10, - "fluids": "#c:water" - }, - "item_ingredient": { - "count": 1, - "items": "minecraft:black_concrete_powder" + "ingredient": { + "fluid": { + "amount": 10, + "fluids": "#c:water" + }, + "item": { + "count": 1, + "items": "minecraft:black_concrete_powder" + } }, "result": { "count": 1, diff --git a/src/generated/resources/data/ragium/recipe/filling/blue_concrete_from_powder.json b/src/generated/resources/data/ragium/recipe/filling/blue_concrete_from_powder.json index 9b5d9716b..0d79d8314 100644 --- a/src/generated/resources/data/ragium/recipe/filling/blue_concrete_from_powder.json +++ b/src/generated/resources/data/ragium/recipe/filling/blue_concrete_from_powder.json @@ -1,12 +1,14 @@ { "type": "ragium:filling", - "fluid_ingredient": { - "amount": 10, - "fluids": "#c:water" - }, - "item_ingredient": { - "count": 1, - "items": "minecraft:blue_concrete_powder" + "ingredient": { + "fluid": { + "amount": 10, + "fluids": "#c:water" + }, + "item": { + "count": 1, + "items": "minecraft:blue_concrete_powder" + } }, "result": { "count": 1, diff --git a/src/generated/resources/data/ragium/recipe/filling/brown_concrete_from_powder.json b/src/generated/resources/data/ragium/recipe/filling/brown_concrete_from_powder.json index 159ee9985..38919d5d3 100644 --- a/src/generated/resources/data/ragium/recipe/filling/brown_concrete_from_powder.json +++ b/src/generated/resources/data/ragium/recipe/filling/brown_concrete_from_powder.json @@ -1,12 +1,14 @@ { "type": "ragium:filling", - "fluid_ingredient": { - "amount": 10, - "fluids": "#c:water" - }, - "item_ingredient": { - "count": 1, - "items": "minecraft:brown_concrete_powder" + "ingredient": { + "fluid": { + "amount": 10, + "fluids": "#c:water" + }, + "item": { + "count": 1, + "items": "minecraft:brown_concrete_powder" + } }, "result": { "count": 1, diff --git a/src/generated/resources/data/ragium/recipe/filling/cyan_concrete_from_powder.json b/src/generated/resources/data/ragium/recipe/filling/cyan_concrete_from_powder.json index 6e333099e..ed71dbe11 100644 --- a/src/generated/resources/data/ragium/recipe/filling/cyan_concrete_from_powder.json +++ b/src/generated/resources/data/ragium/recipe/filling/cyan_concrete_from_powder.json @@ -1,12 +1,14 @@ { "type": "ragium:filling", - "fluid_ingredient": { - "amount": 10, - "fluids": "#c:water" - }, - "item_ingredient": { - "count": 1, - "items": "minecraft:cyan_concrete_powder" + "ingredient": { + "fluid": { + "amount": 10, + "fluids": "#c:water" + }, + "item": { + "count": 1, + "items": "minecraft:cyan_concrete_powder" + } }, "result": { "count": 1, diff --git a/src/generated/resources/data/ragium/recipe/filling/gray_concrete_from_powder.json b/src/generated/resources/data/ragium/recipe/filling/gray_concrete_from_powder.json index 25143ca3c..e15facb3c 100644 --- a/src/generated/resources/data/ragium/recipe/filling/gray_concrete_from_powder.json +++ b/src/generated/resources/data/ragium/recipe/filling/gray_concrete_from_powder.json @@ -1,12 +1,14 @@ { "type": "ragium:filling", - "fluid_ingredient": { - "amount": 10, - "fluids": "#c:water" - }, - "item_ingredient": { - "count": 1, - "items": "minecraft:gray_concrete_powder" + "ingredient": { + "fluid": { + "amount": 10, + "fluids": "#c:water" + }, + "item": { + "count": 1, + "items": "minecraft:gray_concrete_powder" + } }, "result": { "count": 1, diff --git a/src/generated/resources/data/ragium/recipe/filling/green_concrete_from_powder.json b/src/generated/resources/data/ragium/recipe/filling/green_concrete_from_powder.json index 2ec46ae10..f6fba4380 100644 --- a/src/generated/resources/data/ragium/recipe/filling/green_concrete_from_powder.json +++ b/src/generated/resources/data/ragium/recipe/filling/green_concrete_from_powder.json @@ -1,12 +1,14 @@ { "type": "ragium:filling", - "fluid_ingredient": { - "amount": 10, - "fluids": "#c:water" - }, - "item_ingredient": { - "count": 1, - "items": "minecraft:green_concrete_powder" + "ingredient": { + "fluid": { + "amount": 10, + "fluids": "#c:water" + }, + "item": { + "count": 1, + "items": "minecraft:green_concrete_powder" + } }, "result": { "count": 1, diff --git a/src/generated/resources/data/ragium/recipe/filling/honey_bottle.json b/src/generated/resources/data/ragium/recipe/filling/honey_bottle.json index 4756d3c92..44802ea97 100644 --- a/src/generated/resources/data/ragium/recipe/filling/honey_bottle.json +++ b/src/generated/resources/data/ragium/recipe/filling/honey_bottle.json @@ -1,12 +1,14 @@ { "type": "ragium:filling", - "fluid_ingredient": { - "amount": 250, - "fluids": "#c:honey" - }, - "item_ingredient": { - "count": 1, - "items": "minecraft:glass_bottle" + "ingredient": { + "fluid": { + "amount": 250, + "fluids": "#c:honey" + }, + "item": { + "count": 1, + "items": "minecraft:glass_bottle" + } }, "result": { "count": 1, diff --git a/src/generated/resources/data/ragium/recipe/filling/light_blue_concrete_from_powder.json b/src/generated/resources/data/ragium/recipe/filling/light_blue_concrete_from_powder.json index fb352bcd5..c384194b0 100644 --- a/src/generated/resources/data/ragium/recipe/filling/light_blue_concrete_from_powder.json +++ b/src/generated/resources/data/ragium/recipe/filling/light_blue_concrete_from_powder.json @@ -1,12 +1,14 @@ { "type": "ragium:filling", - "fluid_ingredient": { - "amount": 10, - "fluids": "#c:water" - }, - "item_ingredient": { - "count": 1, - "items": "minecraft:light_blue_concrete_powder" + "ingredient": { + "fluid": { + "amount": 10, + "fluids": "#c:water" + }, + "item": { + "count": 1, + "items": "minecraft:light_blue_concrete_powder" + } }, "result": { "count": 1, diff --git a/src/generated/resources/data/ragium/recipe/filling/light_gray_concrete_from_powder.json b/src/generated/resources/data/ragium/recipe/filling/light_gray_concrete_from_powder.json index aa84f1fea..7269da6ad 100644 --- a/src/generated/resources/data/ragium/recipe/filling/light_gray_concrete_from_powder.json +++ b/src/generated/resources/data/ragium/recipe/filling/light_gray_concrete_from_powder.json @@ -1,12 +1,14 @@ { "type": "ragium:filling", - "fluid_ingredient": { - "amount": 10, - "fluids": "#c:water" - }, - "item_ingredient": { - "count": 1, - "items": "minecraft:light_gray_concrete_powder" + "ingredient": { + "fluid": { + "amount": 10, + "fluids": "#c:water" + }, + "item": { + "count": 1, + "items": "minecraft:light_gray_concrete_powder" + } }, "result": { "count": 1, diff --git a/src/generated/resources/data/ragium/recipe/filling/lime_concrete_from_powder.json b/src/generated/resources/data/ragium/recipe/filling/lime_concrete_from_powder.json index 91b6dca3c..67ec3345b 100644 --- a/src/generated/resources/data/ragium/recipe/filling/lime_concrete_from_powder.json +++ b/src/generated/resources/data/ragium/recipe/filling/lime_concrete_from_powder.json @@ -1,12 +1,14 @@ { "type": "ragium:filling", - "fluid_ingredient": { - "amount": 10, - "fluids": "#c:water" - }, - "item_ingredient": { - "count": 1, - "items": "minecraft:lime_concrete_powder" + "ingredient": { + "fluid": { + "amount": 10, + "fluids": "#c:water" + }, + "item": { + "count": 1, + "items": "minecraft:lime_concrete_powder" + } }, "result": { "count": 1, diff --git a/src/generated/resources/data/ragium/recipe/filling/magenta_concrete_from_powder.json b/src/generated/resources/data/ragium/recipe/filling/magenta_concrete_from_powder.json index a19f8ecb2..fc683e4a2 100644 --- a/src/generated/resources/data/ragium/recipe/filling/magenta_concrete_from_powder.json +++ b/src/generated/resources/data/ragium/recipe/filling/magenta_concrete_from_powder.json @@ -1,12 +1,14 @@ { "type": "ragium:filling", - "fluid_ingredient": { - "amount": 10, - "fluids": "#c:water" - }, - "item_ingredient": { - "count": 1, - "items": "minecraft:magenta_concrete_powder" + "ingredient": { + "fluid": { + "amount": 10, + "fluids": "#c:water" + }, + "item": { + "count": 1, + "items": "minecraft:magenta_concrete_powder" + } }, "result": { "count": 1, diff --git a/src/generated/resources/data/ragium/recipe/filling/mud.json b/src/generated/resources/data/ragium/recipe/filling/mud.json index 772c681f5..c3eb8a03f 100644 --- a/src/generated/resources/data/ragium/recipe/filling/mud.json +++ b/src/generated/resources/data/ragium/recipe/filling/mud.json @@ -1,12 +1,14 @@ { "type": "ragium:filling", - "fluid_ingredient": { - "amount": 250, - "fluids": "#c:water" - }, - "item_ingredient": { - "count": 1, - "items": "minecraft:dirt" + "ingredient": { + "fluid": { + "amount": 250, + "fluids": "#c:water" + }, + "item": { + "count": 1, + "items": "minecraft:dirt" + } }, "result": { "count": 1, diff --git a/src/generated/resources/data/ragium/recipe/filling/orange_concrete_from_powder.json b/src/generated/resources/data/ragium/recipe/filling/orange_concrete_from_powder.json index 903e5bfe5..99e0a6591 100644 --- a/src/generated/resources/data/ragium/recipe/filling/orange_concrete_from_powder.json +++ b/src/generated/resources/data/ragium/recipe/filling/orange_concrete_from_powder.json @@ -1,12 +1,14 @@ { "type": "ragium:filling", - "fluid_ingredient": { - "amount": 10, - "fluids": "#c:water" - }, - "item_ingredient": { - "count": 1, - "items": "minecraft:orange_concrete_powder" + "ingredient": { + "fluid": { + "amount": 10, + "fluids": "#c:water" + }, + "item": { + "count": 1, + "items": "minecraft:orange_concrete_powder" + } }, "result": { "count": 1, diff --git a/src/generated/resources/data/ragium/recipe/filling/pink_concrete_from_powder.json b/src/generated/resources/data/ragium/recipe/filling/pink_concrete_from_powder.json index 3acc56eeb..2b56b076f 100644 --- a/src/generated/resources/data/ragium/recipe/filling/pink_concrete_from_powder.json +++ b/src/generated/resources/data/ragium/recipe/filling/pink_concrete_from_powder.json @@ -1,12 +1,14 @@ { "type": "ragium:filling", - "fluid_ingredient": { - "amount": 10, - "fluids": "#c:water" - }, - "item_ingredient": { - "count": 1, - "items": "minecraft:pink_concrete_powder" + "ingredient": { + "fluid": { + "amount": 10, + "fluids": "#c:water" + }, + "item": { + "count": 1, + "items": "minecraft:pink_concrete_powder" + } }, "result": { "count": 1, diff --git a/src/generated/resources/data/ragium/recipe/filling/purple_concrete_from_powder.json b/src/generated/resources/data/ragium/recipe/filling/purple_concrete_from_powder.json index d9bcc3dd6..8d977b022 100644 --- a/src/generated/resources/data/ragium/recipe/filling/purple_concrete_from_powder.json +++ b/src/generated/resources/data/ragium/recipe/filling/purple_concrete_from_powder.json @@ -1,12 +1,14 @@ { "type": "ragium:filling", - "fluid_ingredient": { - "amount": 10, - "fluids": "#c:water" - }, - "item_ingredient": { - "count": 1, - "items": "minecraft:purple_concrete_powder" + "ingredient": { + "fluid": { + "amount": 10, + "fluids": "#c:water" + }, + "item": { + "count": 1, + "items": "minecraft:purple_concrete_powder" + } }, "result": { "count": 1, diff --git a/src/generated/resources/data/ragium/recipe/filling/red_concrete_from_powder.json b/src/generated/resources/data/ragium/recipe/filling/red_concrete_from_powder.json index c95f14b24..5ed24f88a 100644 --- a/src/generated/resources/data/ragium/recipe/filling/red_concrete_from_powder.json +++ b/src/generated/resources/data/ragium/recipe/filling/red_concrete_from_powder.json @@ -1,12 +1,14 @@ { "type": "ragium:filling", - "fluid_ingredient": { - "amount": 10, - "fluids": "#c:water" - }, - "item_ingredient": { - "count": 1, - "items": "minecraft:red_concrete_powder" + "ingredient": { + "fluid": { + "amount": 10, + "fluids": "#c:water" + }, + "item": { + "count": 1, + "items": "minecraft:red_concrete_powder" + } }, "result": { "count": 1, diff --git a/src/generated/resources/data/ragium/recipe/filling/white_concrete_from_powder.json b/src/generated/resources/data/ragium/recipe/filling/white_concrete_from_powder.json index cfabe7342..b30553930 100644 --- a/src/generated/resources/data/ragium/recipe/filling/white_concrete_from_powder.json +++ b/src/generated/resources/data/ragium/recipe/filling/white_concrete_from_powder.json @@ -1,12 +1,14 @@ { "type": "ragium:filling", - "fluid_ingredient": { - "amount": 10, - "fluids": "#c:water" - }, - "item_ingredient": { - "count": 1, - "items": "minecraft:white_concrete_powder" + "ingredient": { + "fluid": { + "amount": 10, + "fluids": "#c:water" + }, + "item": { + "count": 1, + "items": "minecraft:white_concrete_powder" + } }, "result": { "count": 1, diff --git a/src/generated/resources/data/ragium/recipe/filling/yellow_concrete_from_powder.json b/src/generated/resources/data/ragium/recipe/filling/yellow_concrete_from_powder.json index 2f53c19f6..1f40af62f 100644 --- a/src/generated/resources/data/ragium/recipe/filling/yellow_concrete_from_powder.json +++ b/src/generated/resources/data/ragium/recipe/filling/yellow_concrete_from_powder.json @@ -1,12 +1,14 @@ { "type": "ragium:filling", - "fluid_ingredient": { - "amount": 10, - "fluids": "#c:water" - }, - "item_ingredient": { - "count": 1, - "items": "minecraft:yellow_concrete_powder" + "ingredient": { + "fluid": { + "amount": 10, + "fluids": "#c:water" + }, + "item": { + "count": 1, + "items": "minecraft:yellow_concrete_powder" + } }, "result": { "count": 1, diff --git a/src/generated/resources/data/ragium/recipe/mixing/anti_rust_oil.json b/src/generated/resources/data/ragium/recipe/mixing/anti_rust_oil.json index a91492031..bc15ce1b6 100644 --- a/src/generated/resources/data/ragium/recipe/mixing/anti_rust_oil.json +++ b/src/generated/resources/data/ragium/recipe/mixing/anti_rust_oil.json @@ -1,16 +1,20 @@ { "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 1000, - "fluids": "#c:naphtha" + "ingredient": { + "fluid": { + "amount": 1000, + "fluids": "#c:naphtha" + }, + "item": { + "count": 1, + "items": "#c:dusts/redstone" + } }, - "fluid_result": { - "amount": 1000, - "id": "ragium:anti_rust_oil" - }, - "item_ingredient": { - "count": 1, - "items": "#c:dusts/redstone" + "result": { + "fluid": { + "amount": 1000, + "id": "ragium:anti_rust_oil" + } }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/mixing/black/concrete.json b/src/generated/resources/data/ragium/recipe/mixing/black/concrete.json index 2759e4a94..0cfd6156a 100644 --- a/src/generated/resources/data/ragium/recipe/mixing/black/concrete.json +++ b/src/generated/resources/data/ragium/recipe/mixing/black/concrete.json @@ -1,22 +1,26 @@ { "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 250, - "fluids": "#c:dyes/black" - }, - "item_ingredient": [ - { - "count": 1, - "items": "#c:sands" + "ingredient": { + "fluid": { + "amount": 250, + "fluids": "#c:dyes/black" }, - { - "count": 1, - "items": "#c:gravels" + "items": [ + { + "count": 1, + "items": "#c:sands" + }, + { + "count": 1, + "items": "#c:gravels" + } + ] + }, + "result": { + "item": { + "count": 2, + "id": "minecraft:black_concrete" } - ], - "item_result": { - "count": 2, - "id": "minecraft:black_concrete" }, "time": 100 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/mixing/black/liquid_dye.json b/src/generated/resources/data/ragium/recipe/mixing/black/liquid_dye.json index 3f168170c..a0fb74178 100644 --- a/src/generated/resources/data/ragium/recipe/mixing/black/liquid_dye.json +++ b/src/generated/resources/data/ragium/recipe/mixing/black/liquid_dye.json @@ -1,16 +1,20 @@ { "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 250, - "fluids": "#c:water" + "ingredient": { + "fluid": { + "amount": 250, + "fluids": "#c:water" + }, + "item": { + "count": 1, + "items": "#c:dyes/black" + } }, - "fluid_result": { - "amount": 250, - "id": "ragium:black_dye" - }, - "item_ingredient": { - "count": 1, - "items": "#c:dyes/black" + "result": { + "fluid": { + "amount": 250, + "id": "ragium:black_dye" + } }, "time": 100 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/mixing/blue/concrete.json b/src/generated/resources/data/ragium/recipe/mixing/blue/concrete.json index 03c5e2248..98de1e3f8 100644 --- a/src/generated/resources/data/ragium/recipe/mixing/blue/concrete.json +++ b/src/generated/resources/data/ragium/recipe/mixing/blue/concrete.json @@ -1,22 +1,26 @@ { "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 250, - "fluids": "#c:dyes/blue" - }, - "item_ingredient": [ - { - "count": 1, - "items": "#c:sands" + "ingredient": { + "fluid": { + "amount": 250, + "fluids": "#c:dyes/blue" }, - { - "count": 1, - "items": "#c:gravels" + "items": [ + { + "count": 1, + "items": "#c:sands" + }, + { + "count": 1, + "items": "#c:gravels" + } + ] + }, + "result": { + "item": { + "count": 2, + "id": "minecraft:blue_concrete" } - ], - "item_result": { - "count": 2, - "id": "minecraft:blue_concrete" }, "time": 100 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/mixing/blue/liquid_dye.json b/src/generated/resources/data/ragium/recipe/mixing/blue/liquid_dye.json index bb76e9d9c..57913430c 100644 --- a/src/generated/resources/data/ragium/recipe/mixing/blue/liquid_dye.json +++ b/src/generated/resources/data/ragium/recipe/mixing/blue/liquid_dye.json @@ -1,16 +1,20 @@ { "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 250, - "fluids": "#c:water" + "ingredient": { + "fluid": { + "amount": 250, + "fluids": "#c:water" + }, + "item": { + "count": 1, + "items": "#c:dyes/blue" + } }, - "fluid_result": { - "amount": 250, - "id": "ragium:blue_dye" - }, - "item_ingredient": { - "count": 1, - "items": "#c:dyes/blue" + "result": { + "fluid": { + "amount": 250, + "id": "ragium:blue_dye" + } }, "time": 100 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/mixing/brown/concrete.json b/src/generated/resources/data/ragium/recipe/mixing/brown/concrete.json index 50dbe5668..86bae145d 100644 --- a/src/generated/resources/data/ragium/recipe/mixing/brown/concrete.json +++ b/src/generated/resources/data/ragium/recipe/mixing/brown/concrete.json @@ -1,22 +1,26 @@ { "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 250, - "fluids": "#c:dyes/brown" - }, - "item_ingredient": [ - { - "count": 1, - "items": "#c:sands" + "ingredient": { + "fluid": { + "amount": 250, + "fluids": "#c:dyes/brown" }, - { - "count": 1, - "items": "#c:gravels" + "items": [ + { + "count": 1, + "items": "#c:sands" + }, + { + "count": 1, + "items": "#c:gravels" + } + ] + }, + "result": { + "item": { + "count": 2, + "id": "minecraft:brown_concrete" } - ], - "item_result": { - "count": 2, - "id": "minecraft:brown_concrete" }, "time": 100 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/mixing/brown/liquid_dye.json b/src/generated/resources/data/ragium/recipe/mixing/brown/liquid_dye.json index d232fdfd8..3ce4ed2ab 100644 --- a/src/generated/resources/data/ragium/recipe/mixing/brown/liquid_dye.json +++ b/src/generated/resources/data/ragium/recipe/mixing/brown/liquid_dye.json @@ -1,16 +1,20 @@ { "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 250, - "fluids": "#c:water" + "ingredient": { + "fluid": { + "amount": 250, + "fluids": "#c:water" + }, + "item": { + "count": 1, + "items": "#c:dyes/brown" + } }, - "fluid_result": { - "amount": 250, - "id": "ragium:brown_dye" - }, - "item_ingredient": { - "count": 1, - "items": "#c:dyes/brown" + "result": { + "fluid": { + "amount": 250, + "id": "ragium:brown_dye" + } }, "time": 100 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/mixing/cyan/concrete.json b/src/generated/resources/data/ragium/recipe/mixing/cyan/concrete.json index d04f9ba48..72dd04993 100644 --- a/src/generated/resources/data/ragium/recipe/mixing/cyan/concrete.json +++ b/src/generated/resources/data/ragium/recipe/mixing/cyan/concrete.json @@ -1,22 +1,26 @@ { "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 250, - "fluids": "#c:dyes/cyan" - }, - "item_ingredient": [ - { - "count": 1, - "items": "#c:sands" + "ingredient": { + "fluid": { + "amount": 250, + "fluids": "#c:dyes/cyan" }, - { - "count": 1, - "items": "#c:gravels" + "items": [ + { + "count": 1, + "items": "#c:sands" + }, + { + "count": 1, + "items": "#c:gravels" + } + ] + }, + "result": { + "item": { + "count": 2, + "id": "minecraft:cyan_concrete" } - ], - "item_result": { - "count": 2, - "id": "minecraft:cyan_concrete" }, "time": 100 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/mixing/cyan/liquid_dye.json b/src/generated/resources/data/ragium/recipe/mixing/cyan/liquid_dye.json index 0a086fb48..747528092 100644 --- a/src/generated/resources/data/ragium/recipe/mixing/cyan/liquid_dye.json +++ b/src/generated/resources/data/ragium/recipe/mixing/cyan/liquid_dye.json @@ -1,16 +1,20 @@ { "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 250, - "fluids": "#c:water" + "ingredient": { + "fluid": { + "amount": 250, + "fluids": "#c:water" + }, + "item": { + "count": 1, + "items": "#c:dyes/cyan" + } }, - "fluid_result": { - "amount": 250, - "id": "ragium:cyan_dye" - }, - "item_ingredient": { - "count": 1, - "items": "#c:dyes/cyan" + "result": { + "fluid": { + "amount": 250, + "id": "ragium:cyan_dye" + } }, "time": 100 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/mixing/fuel_from_tar.json b/src/generated/resources/data/ragium/recipe/mixing/fuel_from_tar.json index d002fe907..d2e52d969 100644 --- a/src/generated/resources/data/ragium/recipe/mixing/fuel_from_tar.json +++ b/src/generated/resources/data/ragium/recipe/mixing/fuel_from_tar.json @@ -1,16 +1,20 @@ { "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 1000, - "fluids": "#c:hydrogen" + "ingredient": { + "fluid": { + "amount": 1000, + "fluids": "#c:hydrogen" + }, + "item": { + "count": 1, + "items": "ragium:tar" + } }, - "fluid_result": { - "amount": 500, - "id": "ragium:fuel" - }, - "item_ingredient": { - "count": 1, - "items": "ragium:tar" + "result": { + "fluid": { + "amount": 500, + "id": "ragium:fuel" + } }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/mixing/gray/concrete.json b/src/generated/resources/data/ragium/recipe/mixing/gray/concrete.json index 2a734f15d..c2b42bc97 100644 --- a/src/generated/resources/data/ragium/recipe/mixing/gray/concrete.json +++ b/src/generated/resources/data/ragium/recipe/mixing/gray/concrete.json @@ -1,22 +1,26 @@ { "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 250, - "fluids": "#c:dyes/gray" - }, - "item_ingredient": [ - { - "count": 1, - "items": "#c:sands" + "ingredient": { + "fluid": { + "amount": 250, + "fluids": "#c:dyes/gray" }, - { - "count": 1, - "items": "#c:gravels" + "items": [ + { + "count": 1, + "items": "#c:sands" + }, + { + "count": 1, + "items": "#c:gravels" + } + ] + }, + "result": { + "item": { + "count": 2, + "id": "minecraft:gray_concrete" } - ], - "item_result": { - "count": 2, - "id": "minecraft:gray_concrete" }, "time": 100 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/mixing/gray/liquid_dye.json b/src/generated/resources/data/ragium/recipe/mixing/gray/liquid_dye.json index ffe8e23e7..110206982 100644 --- a/src/generated/resources/data/ragium/recipe/mixing/gray/liquid_dye.json +++ b/src/generated/resources/data/ragium/recipe/mixing/gray/liquid_dye.json @@ -1,16 +1,20 @@ { "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 250, - "fluids": "#c:water" + "ingredient": { + "fluid": { + "amount": 250, + "fluids": "#c:water" + }, + "item": { + "count": 1, + "items": "#c:dyes/gray" + } }, - "fluid_result": { - "amount": 250, - "id": "ragium:gray_dye" - }, - "item_ingredient": { - "count": 1, - "items": "#c:dyes/gray" + "result": { + "fluid": { + "amount": 250, + "id": "ragium:gray_dye" + } }, "time": 100 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/mixing/green/concrete.json b/src/generated/resources/data/ragium/recipe/mixing/green/concrete.json index d979fab0b..ffcd5ef8d 100644 --- a/src/generated/resources/data/ragium/recipe/mixing/green/concrete.json +++ b/src/generated/resources/data/ragium/recipe/mixing/green/concrete.json @@ -1,22 +1,26 @@ { "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 250, - "fluids": "#c:dyes/green" - }, - "item_ingredient": [ - { - "count": 1, - "items": "#c:sands" + "ingredient": { + "fluid": { + "amount": 250, + "fluids": "#c:dyes/green" }, - { - "count": 1, - "items": "#c:gravels" + "items": [ + { + "count": 1, + "items": "#c:sands" + }, + { + "count": 1, + "items": "#c:gravels" + } + ] + }, + "result": { + "item": { + "count": 2, + "id": "minecraft:green_concrete" } - ], - "item_result": { - "count": 2, - "id": "minecraft:green_concrete" }, "time": 100 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/mixing/green/liquid_dye.json b/src/generated/resources/data/ragium/recipe/mixing/green/liquid_dye.json index d9dbca08d..39b92a30d 100644 --- a/src/generated/resources/data/ragium/recipe/mixing/green/liquid_dye.json +++ b/src/generated/resources/data/ragium/recipe/mixing/green/liquid_dye.json @@ -1,16 +1,20 @@ { "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 250, - "fluids": "#c:water" + "ingredient": { + "fluid": { + "amount": 250, + "fluids": "#c:water" + }, + "item": { + "count": 1, + "items": "#c:dyes/green" + } }, - "fluid_result": { - "amount": 250, - "id": "ragium:green_dye" - }, - "item_ingredient": { - "count": 1, - "items": "#c:dyes/green" + "result": { + "fluid": { + "amount": 250, + "id": "ragium:green_dye" + } }, "time": 100 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/mixing/hydrogen_chloride.json b/src/generated/resources/data/ragium/recipe/mixing/hydrogen_chloride.json index 80a32958d..45a5406c4 100644 --- a/src/generated/resources/data/ragium/recipe/mixing/hydrogen_chloride.json +++ b/src/generated/resources/data/ragium/recipe/mixing/hydrogen_chloride.json @@ -1,16 +1,20 @@ { "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 500, - "fluids": "#c:sulfuric_acid" + "ingredient": { + "fluid": { + "amount": 500, + "fluids": "#c:sulfuric_acid" + }, + "item": { + "count": 1, + "items": "#c:dusts/salt" + } }, - "fluid_result": { - "amount": 1000, - "id": "ragium:hydrogen_chloride" - }, - "item_ingredient": { - "count": 1, - "items": "#c:dusts/salt" + "result": { + "fluid": { + "amount": 1000, + "id": "ragium:hydrogen_chloride" + } }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/mixing/hydrogen_fluoride.json b/src/generated/resources/data/ragium/recipe/mixing/hydrogen_fluoride.json index 39f9a4b8f..d1976b06e 100644 --- a/src/generated/resources/data/ragium/recipe/mixing/hydrogen_fluoride.json +++ b/src/generated/resources/data/ragium/recipe/mixing/hydrogen_fluoride.json @@ -1,21 +1,25 @@ { "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 1000, - "fluids": "#c:sulfuric_acid" - }, - "fluid_result": { - "amount": 2000, - "id": "ragium:hydrogen_fluoride" + "ingredient": { + "fluid": { + "amount": 1000, + "fluids": "#c:sulfuric_acid" + }, + "item": { + "count": 1, + "items": { + "neoforge:ingredient_type": "ragium:material_tags", + "tags": [ + "c:dusts/fluorite", + "c:gems/fluorite" + ] + } + } }, - "item_ingredient": { - "count": 1, - "items": { - "neoforge:ingredient_type": "ragium:material_tags", - "tags": [ - "c:dusts/fluorite", - "c:gems/fluorite" - ] + "result": { + "fluid": { + "amount": 2000, + "id": "ragium:hydrogen_fluoride" } }, "time": 200 diff --git a/src/generated/resources/data/ragium/recipe/mixing/light_blue/concrete.json b/src/generated/resources/data/ragium/recipe/mixing/light_blue/concrete.json index bf3587b3b..ce9e4ca8c 100644 --- a/src/generated/resources/data/ragium/recipe/mixing/light_blue/concrete.json +++ b/src/generated/resources/data/ragium/recipe/mixing/light_blue/concrete.json @@ -1,22 +1,26 @@ { "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 250, - "fluids": "#c:dyes/light_blue" - }, - "item_ingredient": [ - { - "count": 1, - "items": "#c:sands" + "ingredient": { + "fluid": { + "amount": 250, + "fluids": "#c:dyes/light_blue" }, - { - "count": 1, - "items": "#c:gravels" + "items": [ + { + "count": 1, + "items": "#c:sands" + }, + { + "count": 1, + "items": "#c:gravels" + } + ] + }, + "result": { + "item": { + "count": 2, + "id": "minecraft:light_blue_concrete" } - ], - "item_result": { - "count": 2, - "id": "minecraft:light_blue_concrete" }, "time": 100 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/mixing/light_blue/liquid_dye.json b/src/generated/resources/data/ragium/recipe/mixing/light_blue/liquid_dye.json index 04d69f11c..c0fe75af2 100644 --- a/src/generated/resources/data/ragium/recipe/mixing/light_blue/liquid_dye.json +++ b/src/generated/resources/data/ragium/recipe/mixing/light_blue/liquid_dye.json @@ -1,16 +1,20 @@ { "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 250, - "fluids": "#c:water" + "ingredient": { + "fluid": { + "amount": 250, + "fluids": "#c:water" + }, + "item": { + "count": 1, + "items": "#c:dyes/light_blue" + } }, - "fluid_result": { - "amount": 250, - "id": "ragium:light_blue_dye" - }, - "item_ingredient": { - "count": 1, - "items": "#c:dyes/light_blue" + "result": { + "fluid": { + "amount": 250, + "id": "ragium:light_blue_dye" + } }, "time": 100 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/mixing/light_gray/concrete.json b/src/generated/resources/data/ragium/recipe/mixing/light_gray/concrete.json index 1fbab8c92..744035bae 100644 --- a/src/generated/resources/data/ragium/recipe/mixing/light_gray/concrete.json +++ b/src/generated/resources/data/ragium/recipe/mixing/light_gray/concrete.json @@ -1,22 +1,26 @@ { "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 250, - "fluids": "#c:dyes/light_gray" - }, - "item_ingredient": [ - { - "count": 1, - "items": "#c:sands" + "ingredient": { + "fluid": { + "amount": 250, + "fluids": "#c:dyes/light_gray" }, - { - "count": 1, - "items": "#c:gravels" + "items": [ + { + "count": 1, + "items": "#c:sands" + }, + { + "count": 1, + "items": "#c:gravels" + } + ] + }, + "result": { + "item": { + "count": 2, + "id": "minecraft:light_gray_concrete" } - ], - "item_result": { - "count": 2, - "id": "minecraft:light_gray_concrete" }, "time": 100 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/mixing/light_gray/liquid_dye.json b/src/generated/resources/data/ragium/recipe/mixing/light_gray/liquid_dye.json index 67aca08ba..5e1594b7b 100644 --- a/src/generated/resources/data/ragium/recipe/mixing/light_gray/liquid_dye.json +++ b/src/generated/resources/data/ragium/recipe/mixing/light_gray/liquid_dye.json @@ -1,16 +1,20 @@ { "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 250, - "fluids": "#c:water" + "ingredient": { + "fluid": { + "amount": 250, + "fluids": "#c:water" + }, + "item": { + "count": 1, + "items": "#c:dyes/light_gray" + } }, - "fluid_result": { - "amount": 250, - "id": "ragium:light_gray_dye" - }, - "item_ingredient": { - "count": 1, - "items": "#c:dyes/light_gray" + "result": { + "fluid": { + "amount": 250, + "id": "ragium:light_gray_dye" + } }, "time": 100 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/mixing/lime/concrete.json b/src/generated/resources/data/ragium/recipe/mixing/lime/concrete.json index d812c16e9..a589c7ce6 100644 --- a/src/generated/resources/data/ragium/recipe/mixing/lime/concrete.json +++ b/src/generated/resources/data/ragium/recipe/mixing/lime/concrete.json @@ -1,22 +1,26 @@ { "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 250, - "fluids": "#c:dyes/lime" - }, - "item_ingredient": [ - { - "count": 1, - "items": "#c:sands" + "ingredient": { + "fluid": { + "amount": 250, + "fluids": "#c:dyes/lime" }, - { - "count": 1, - "items": "#c:gravels" + "items": [ + { + "count": 1, + "items": "#c:sands" + }, + { + "count": 1, + "items": "#c:gravels" + } + ] + }, + "result": { + "item": { + "count": 2, + "id": "minecraft:lime_concrete" } - ], - "item_result": { - "count": 2, - "id": "minecraft:lime_concrete" }, "time": 100 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/mixing/lime/liquid_dye.json b/src/generated/resources/data/ragium/recipe/mixing/lime/liquid_dye.json index 612d6442a..9205ef13f 100644 --- a/src/generated/resources/data/ragium/recipe/mixing/lime/liquid_dye.json +++ b/src/generated/resources/data/ragium/recipe/mixing/lime/liquid_dye.json @@ -1,16 +1,20 @@ { "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 250, - "fluids": "#c:water" + "ingredient": { + "fluid": { + "amount": 250, + "fluids": "#c:water" + }, + "item": { + "count": 1, + "items": "#c:dyes/lime" + } }, - "fluid_result": { - "amount": 250, - "id": "ragium:lime_dye" - }, - "item_ingredient": { - "count": 1, - "items": "#c:dyes/lime" + "result": { + "fluid": { + "amount": 250, + "id": "ragium:lime_dye" + } }, "time": 100 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/mixing/magenta/concrete.json b/src/generated/resources/data/ragium/recipe/mixing/magenta/concrete.json index 4618ef3f9..965189333 100644 --- a/src/generated/resources/data/ragium/recipe/mixing/magenta/concrete.json +++ b/src/generated/resources/data/ragium/recipe/mixing/magenta/concrete.json @@ -1,22 +1,26 @@ { "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 250, - "fluids": "#c:dyes/magenta" - }, - "item_ingredient": [ - { - "count": 1, - "items": "#c:sands" + "ingredient": { + "fluid": { + "amount": 250, + "fluids": "#c:dyes/magenta" }, - { - "count": 1, - "items": "#c:gravels" + "items": [ + { + "count": 1, + "items": "#c:sands" + }, + { + "count": 1, + "items": "#c:gravels" + } + ] + }, + "result": { + "item": { + "count": 2, + "id": "minecraft:magenta_concrete" } - ], - "item_result": { - "count": 2, - "id": "minecraft:magenta_concrete" }, "time": 100 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/mixing/magenta/liquid_dye.json b/src/generated/resources/data/ragium/recipe/mixing/magenta/liquid_dye.json index c046916a4..f5ff9d692 100644 --- a/src/generated/resources/data/ragium/recipe/mixing/magenta/liquid_dye.json +++ b/src/generated/resources/data/ragium/recipe/mixing/magenta/liquid_dye.json @@ -1,16 +1,20 @@ { "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 250, - "fluids": "#c:water" + "ingredient": { + "fluid": { + "amount": 250, + "fluids": "#c:water" + }, + "item": { + "count": 1, + "items": "#c:dyes/magenta" + } }, - "fluid_result": { - "amount": 250, - "id": "ragium:magenta_dye" - }, - "item_ingredient": { - "count": 1, - "items": "#c:dyes/magenta" + "result": { + "fluid": { + "amount": 250, + "id": "ragium:magenta_dye" + } }, "time": 100 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/mixing/nitric_acid_from_niter.json b/src/generated/resources/data/ragium/recipe/mixing/nitric_acid_from_niter.json index aa0bf64a9..a53557c12 100644 --- a/src/generated/resources/data/ragium/recipe/mixing/nitric_acid_from_niter.json +++ b/src/generated/resources/data/ragium/recipe/mixing/nitric_acid_from_niter.json @@ -1,16 +1,20 @@ { "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 500, - "fluids": "#c:sulfuric_acid" + "ingredient": { + "fluid": { + "amount": 500, + "fluids": "#c:sulfuric_acid" + }, + "item": { + "count": 1, + "items": "#c:dusts/niter" + } }, - "fluid_result": { - "amount": 1000, - "id": "ragium:nitric_acid" - }, - "item_ingredient": { - "count": 1, - "items": "#c:dusts/niter" + "result": { + "fluid": { + "amount": 1000, + "id": "ragium:nitric_acid" + } }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/mixing/orange/concrete.json b/src/generated/resources/data/ragium/recipe/mixing/orange/concrete.json index 8cdbbeaad..ce25f55c6 100644 --- a/src/generated/resources/data/ragium/recipe/mixing/orange/concrete.json +++ b/src/generated/resources/data/ragium/recipe/mixing/orange/concrete.json @@ -1,22 +1,26 @@ { "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 250, - "fluids": "#c:dyes/orange" - }, - "item_ingredient": [ - { - "count": 1, - "items": "#c:sands" + "ingredient": { + "fluid": { + "amount": 250, + "fluids": "#c:dyes/orange" }, - { - "count": 1, - "items": "#c:gravels" + "items": [ + { + "count": 1, + "items": "#c:sands" + }, + { + "count": 1, + "items": "#c:gravels" + } + ] + }, + "result": { + "item": { + "count": 2, + "id": "minecraft:orange_concrete" } - ], - "item_result": { - "count": 2, - "id": "minecraft:orange_concrete" }, "time": 100 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/mixing/orange/liquid_dye.json b/src/generated/resources/data/ragium/recipe/mixing/orange/liquid_dye.json index 6892a84b4..995eca55e 100644 --- a/src/generated/resources/data/ragium/recipe/mixing/orange/liquid_dye.json +++ b/src/generated/resources/data/ragium/recipe/mixing/orange/liquid_dye.json @@ -1,16 +1,20 @@ { "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 250, - "fluids": "#c:water" + "ingredient": { + "fluid": { + "amount": 250, + "fluids": "#c:water" + }, + "item": { + "count": 1, + "items": "#c:dyes/orange" + } }, - "fluid_result": { - "amount": 250, - "id": "ragium:orange_dye" - }, - "item_ingredient": { - "count": 1, - "items": "#c:dyes/orange" + "result": { + "fluid": { + "amount": 250, + "id": "ragium:orange_dye" + } }, "time": 100 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/mixing/pink/concrete.json b/src/generated/resources/data/ragium/recipe/mixing/pink/concrete.json index 2b250906c..44641ece7 100644 --- a/src/generated/resources/data/ragium/recipe/mixing/pink/concrete.json +++ b/src/generated/resources/data/ragium/recipe/mixing/pink/concrete.json @@ -1,22 +1,26 @@ { "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 250, - "fluids": "#c:dyes/pink" - }, - "item_ingredient": [ - { - "count": 1, - "items": "#c:sands" + "ingredient": { + "fluid": { + "amount": 250, + "fluids": "#c:dyes/pink" }, - { - "count": 1, - "items": "#c:gravels" + "items": [ + { + "count": 1, + "items": "#c:sands" + }, + { + "count": 1, + "items": "#c:gravels" + } + ] + }, + "result": { + "item": { + "count": 2, + "id": "minecraft:pink_concrete" } - ], - "item_result": { - "count": 2, - "id": "minecraft:pink_concrete" }, "time": 100 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/mixing/pink/liquid_dye.json b/src/generated/resources/data/ragium/recipe/mixing/pink/liquid_dye.json index 89e0b6dde..cd35504cc 100644 --- a/src/generated/resources/data/ragium/recipe/mixing/pink/liquid_dye.json +++ b/src/generated/resources/data/ragium/recipe/mixing/pink/liquid_dye.json @@ -1,16 +1,20 @@ { "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 250, - "fluids": "#c:water" + "ingredient": { + "fluid": { + "amount": 250, + "fluids": "#c:water" + }, + "item": { + "count": 1, + "items": "#c:dyes/pink" + } }, - "fluid_result": { - "amount": 250, - "id": "ragium:pink_dye" - }, - "item_ingredient": { - "count": 1, - "items": "#c:dyes/pink" + "result": { + "fluid": { + "amount": 250, + "id": "ragium:pink_dye" + } }, "time": 100 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/mixing/purple/concrete.json b/src/generated/resources/data/ragium/recipe/mixing/purple/concrete.json index 667708c0f..d822791b5 100644 --- a/src/generated/resources/data/ragium/recipe/mixing/purple/concrete.json +++ b/src/generated/resources/data/ragium/recipe/mixing/purple/concrete.json @@ -1,22 +1,26 @@ { "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 250, - "fluids": "#c:dyes/purple" - }, - "item_ingredient": [ - { - "count": 1, - "items": "#c:sands" + "ingredient": { + "fluid": { + "amount": 250, + "fluids": "#c:dyes/purple" }, - { - "count": 1, - "items": "#c:gravels" + "items": [ + { + "count": 1, + "items": "#c:sands" + }, + { + "count": 1, + "items": "#c:gravels" + } + ] + }, + "result": { + "item": { + "count": 2, + "id": "minecraft:purple_concrete" } - ], - "item_result": { - "count": 2, - "id": "minecraft:purple_concrete" }, "time": 100 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/mixing/purple/liquid_dye.json b/src/generated/resources/data/ragium/recipe/mixing/purple/liquid_dye.json index 50af06307..a517733ee 100644 --- a/src/generated/resources/data/ragium/recipe/mixing/purple/liquid_dye.json +++ b/src/generated/resources/data/ragium/recipe/mixing/purple/liquid_dye.json @@ -1,16 +1,20 @@ { "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 250, - "fluids": "#c:water" + "ingredient": { + "fluid": { + "amount": 250, + "fluids": "#c:water" + }, + "item": { + "count": 1, + "items": "#c:dyes/purple" + } }, - "fluid_result": { - "amount": 250, - "id": "ragium:purple_dye" - }, - "item_ingredient": { - "count": 1, - "items": "#c:dyes/purple" + "result": { + "fluid": { + "amount": 250, + "id": "ragium:purple_dye" + } }, "time": 100 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/mixing/red/concrete.json b/src/generated/resources/data/ragium/recipe/mixing/red/concrete.json index 33e826686..94b8650e1 100644 --- a/src/generated/resources/data/ragium/recipe/mixing/red/concrete.json +++ b/src/generated/resources/data/ragium/recipe/mixing/red/concrete.json @@ -1,22 +1,26 @@ { "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 250, - "fluids": "#c:dyes/red" - }, - "item_ingredient": [ - { - "count": 1, - "items": "#c:sands" + "ingredient": { + "fluid": { + "amount": 250, + "fluids": "#c:dyes/red" }, - { - "count": 1, - "items": "#c:gravels" + "items": [ + { + "count": 1, + "items": "#c:sands" + }, + { + "count": 1, + "items": "#c:gravels" + } + ] + }, + "result": { + "item": { + "count": 2, + "id": "minecraft:red_concrete" } - ], - "item_result": { - "count": 2, - "id": "minecraft:red_concrete" }, "time": 100 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/mixing/red/liquid_dye.json b/src/generated/resources/data/ragium/recipe/mixing/red/liquid_dye.json index f622e4479..41125bb1e 100644 --- a/src/generated/resources/data/ragium/recipe/mixing/red/liquid_dye.json +++ b/src/generated/resources/data/ragium/recipe/mixing/red/liquid_dye.json @@ -1,16 +1,20 @@ { "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 250, - "fluids": "#c:water" + "ingredient": { + "fluid": { + "amount": 250, + "fluids": "#c:water" + }, + "item": { + "count": 1, + "items": "#c:dyes/red" + } }, - "fluid_result": { - "amount": 250, - "id": "ragium:red_dye" - }, - "item_ingredient": { - "count": 1, - "items": "#c:dyes/red" + "result": { + "fluid": { + "amount": 250, + "id": "ragium:red_dye" + } }, "time": 100 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/mixing/white/concrete.json b/src/generated/resources/data/ragium/recipe/mixing/white/concrete.json index 941802095..ea6449bc3 100644 --- a/src/generated/resources/data/ragium/recipe/mixing/white/concrete.json +++ b/src/generated/resources/data/ragium/recipe/mixing/white/concrete.json @@ -1,22 +1,26 @@ { "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 250, - "fluids": "#c:dyes/white" - }, - "item_ingredient": [ - { - "count": 1, - "items": "#c:sands" + "ingredient": { + "fluid": { + "amount": 250, + "fluids": "#c:dyes/white" }, - { - "count": 1, - "items": "#c:gravels" + "items": [ + { + "count": 1, + "items": "#c:sands" + }, + { + "count": 1, + "items": "#c:gravels" + } + ] + }, + "result": { + "item": { + "count": 2, + "id": "minecraft:white_concrete" } - ], - "item_result": { - "count": 2, - "id": "minecraft:white_concrete" }, "time": 100 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/mixing/white/liquid_dye.json b/src/generated/resources/data/ragium/recipe/mixing/white/liquid_dye.json index c1dc0e268..8cd9698cf 100644 --- a/src/generated/resources/data/ragium/recipe/mixing/white/liquid_dye.json +++ b/src/generated/resources/data/ragium/recipe/mixing/white/liquid_dye.json @@ -1,16 +1,20 @@ { "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 250, - "fluids": "#c:water" + "ingredient": { + "fluid": { + "amount": 250, + "fluids": "#c:water" + }, + "item": { + "count": 1, + "items": "#c:dyes/white" + } }, - "fluid_result": { - "amount": 250, - "id": "ragium:white_dye" - }, - "item_ingredient": { - "count": 1, - "items": "#c:dyes/white" + "result": { + "fluid": { + "amount": 250, + "id": "ragium:white_dye" + } }, "time": 100 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/mixing/yellow/concrete.json b/src/generated/resources/data/ragium/recipe/mixing/yellow/concrete.json index e4886cbd3..66e543876 100644 --- a/src/generated/resources/data/ragium/recipe/mixing/yellow/concrete.json +++ b/src/generated/resources/data/ragium/recipe/mixing/yellow/concrete.json @@ -1,22 +1,26 @@ { "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 250, - "fluids": "#c:dyes/yellow" - }, - "item_ingredient": [ - { - "count": 1, - "items": "#c:sands" + "ingredient": { + "fluid": { + "amount": 250, + "fluids": "#c:dyes/yellow" }, - { - "count": 1, - "items": "#c:gravels" + "items": [ + { + "count": 1, + "items": "#c:sands" + }, + { + "count": 1, + "items": "#c:gravels" + } + ] + }, + "result": { + "item": { + "count": 2, + "id": "minecraft:yellow_concrete" } - ], - "item_result": { - "count": 2, - "id": "minecraft:yellow_concrete" }, "time": 100 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/mixing/yellow/liquid_dye.json b/src/generated/resources/data/ragium/recipe/mixing/yellow/liquid_dye.json index 46eb467f6..a8c91b765 100644 --- a/src/generated/resources/data/ragium/recipe/mixing/yellow/liquid_dye.json +++ b/src/generated/resources/data/ragium/recipe/mixing/yellow/liquid_dye.json @@ -1,16 +1,20 @@ { "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 250, - "fluids": "#c:water" + "ingredient": { + "fluid": { + "amount": 250, + "fluids": "#c:water" + }, + "item": { + "count": 1, + "items": "#c:dyes/yellow" + } }, - "fluid_result": { - "amount": 250, - "id": "ragium:yellow_dye" - }, - "item_ingredient": { - "count": 1, - "items": "#c:dyes/yellow" + "result": { + "fluid": { + "amount": 250, + "id": "ragium:yellow_dye" + } }, "time": 100 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/pyrolyzing/carbon_dust.json b/src/generated/resources/data/ragium/recipe/pyrolyzing/carbon_dust.json index 27f9b0c3d..60be5bcec 100644 --- a/src/generated/resources/data/ragium/recipe/pyrolyzing/carbon_dust.json +++ b/src/generated/resources/data/ragium/recipe/pyrolyzing/carbon_dust.json @@ -1,16 +1,18 @@ { "type": "ragium:pyrolyzing", - "fluid_result": { - "amount": 500, - "id": "ragium:coal_tar" - }, "ingredient": { "count": 1, "items": "#c:dusts/coal" }, - "item_result": { - "count": 1, - "id": "ragium:carbon_dust" + "result": { + "fluid": { + "amount": 500, + "id": "ragium:coal_tar" + }, + "item": { + "count": 1, + "id": "ragium:carbon_dust" + } }, "time": 100 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/pyrolyzing/charcoal_dust.json b/src/generated/resources/data/ragium/recipe/pyrolyzing/charcoal_dust.json index 455d44277..a8834588a 100644 --- a/src/generated/resources/data/ragium/recipe/pyrolyzing/charcoal_dust.json +++ b/src/generated/resources/data/ragium/recipe/pyrolyzing/charcoal_dust.json @@ -1,16 +1,18 @@ { "type": "ragium:pyrolyzing", - "fluid_result": { - "amount": 250, - "id": "ragium:wood_tar" - }, "ingredient": { "count": 4, "items": "#c:dusts/wood" }, - "item_result": { - "count": 1, - "id": "ragium:charcoal_dust" + "result": { + "fluid": { + "amount": 250, + "id": "ragium:wood_tar" + }, + "item": { + "count": 1, + "id": "ragium:charcoal_dust" + } }, "time": 100 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/pyrolyzing/charcoal_from_logs.json b/src/generated/resources/data/ragium/recipe/pyrolyzing/charcoal_from_logs.json index 83c1262d3..a946d349d 100644 --- a/src/generated/resources/data/ragium/recipe/pyrolyzing/charcoal_from_logs.json +++ b/src/generated/resources/data/ragium/recipe/pyrolyzing/charcoal_from_logs.json @@ -1,16 +1,18 @@ { "type": "ragium:pyrolyzing", - "fluid_result": { - "amount": 250, - "id": "ragium:wood_tar" - }, "ingredient": { "count": 1, "items": "#minecraft:logs_that_burn" }, - "item_result": { - "count": 1, - "id": "minecraft:charcoal" + "result": { + "fluid": { + "amount": 250, + "id": "ragium:wood_tar" + }, + "item": { + "count": 1, + "id": "minecraft:charcoal" + } }, "time": 100 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/pyrolyzing/coal_coke.json b/src/generated/resources/data/ragium/recipe/pyrolyzing/coal_coke.json index c5066e21e..879b8e550 100644 --- a/src/generated/resources/data/ragium/recipe/pyrolyzing/coal_coke.json +++ b/src/generated/resources/data/ragium/recipe/pyrolyzing/coal_coke.json @@ -1,16 +1,18 @@ { "type": "ragium:pyrolyzing", - "fluid_result": { - "amount": 500, - "id": "ragium:coal_tar" - }, "ingredient": { "count": 1, "items": "minecraft:coal" }, - "item_result": { - "count": 1, - "id": "ragium:coal_coke" + "result": { + "fluid": { + "amount": 500, + "id": "ragium:coal_tar" + }, + "item": { + "count": 1, + "id": "ragium:coal_coke" + } }, "time": 100 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/pyrolyzing/coal_coke_block.json b/src/generated/resources/data/ragium/recipe/pyrolyzing/coal_coke_block.json index ca72edcb6..9b6e262d9 100644 --- a/src/generated/resources/data/ragium/recipe/pyrolyzing/coal_coke_block.json +++ b/src/generated/resources/data/ragium/recipe/pyrolyzing/coal_coke_block.json @@ -1,16 +1,18 @@ { "type": "ragium:pyrolyzing", - "fluid_result": { - "amount": 4500, - "id": "ragium:coal_tar" - }, "ingredient": { "count": 1, "items": "#c:storage_blocks/coal" }, - "item_result": { - "count": 1, - "id": "ragium:coal_coke_block" + "result": { + "fluid": { + "amount": 4500, + "id": "ragium:coal_tar" + }, + "item": { + "count": 1, + "id": "ragium:coal_coke_block" + } }, "time": 900 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/pyrolyzing/crude_oil_from_soul_sand.json b/src/generated/resources/data/ragium/recipe/pyrolyzing/crude_oil_from_soul_sand.json index fcd1922d9..c0815a6e8 100644 --- a/src/generated/resources/data/ragium/recipe/pyrolyzing/crude_oil_from_soul_sand.json +++ b/src/generated/resources/data/ragium/recipe/pyrolyzing/crude_oil_from_soul_sand.json @@ -1,16 +1,18 @@ { "type": "ragium:pyrolyzing", - "fluid_result": { - "amount": 250, - "id": "ragium:crude_oil" - }, "ingredient": { "count": 1, "items": "minecraft:soul_sand" }, - "item_result": { - "count": 1, - "id": "minecraft:sand" + "result": { + "fluid": { + "amount": 250, + "id": "ragium:crude_oil" + }, + "item": { + "count": 1, + "id": "minecraft:sand" + } }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/pyrolyzing/crude_oil_from_soul_soil.json b/src/generated/resources/data/ragium/recipe/pyrolyzing/crude_oil_from_soul_soil.json index 181d9a413..635d3a372 100644 --- a/src/generated/resources/data/ragium/recipe/pyrolyzing/crude_oil_from_soul_soil.json +++ b/src/generated/resources/data/ragium/recipe/pyrolyzing/crude_oil_from_soul_soil.json @@ -1,16 +1,18 @@ { "type": "ragium:pyrolyzing", - "fluid_result": { - "amount": 250, - "id": "ragium:crude_oil" - }, "ingredient": { "count": 1, "items": "minecraft:soul_soil" }, - "item_result": { - "count": 1, - "id": "minecraft:clay" + "result": { + "fluid": { + "amount": 250, + "id": "ragium:crude_oil" + }, + "item": { + "count": 1, + "id": "minecraft:clay" + } }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/pyrolyzing/pitch_coke_from_tar.json b/src/generated/resources/data/ragium/recipe/pyrolyzing/pitch_coke_from_tar.json index a171060a4..2641c95b5 100644 --- a/src/generated/resources/data/ragium/recipe/pyrolyzing/pitch_coke_from_tar.json +++ b/src/generated/resources/data/ragium/recipe/pyrolyzing/pitch_coke_from_tar.json @@ -1,16 +1,18 @@ { "type": "ragium:pyrolyzing", - "fluid_result": { - "amount": 1000, - "id": "ragium:aromatic_compound" - }, "ingredient": { "count": 1, "items": "ragium:tar" }, - "item_result": { - "count": 1, - "id": "ragium:pitch_coke" + "result": { + "fluid": { + "amount": 1000, + "id": "ragium:aromatic_compound" + }, + "item": { + "count": 1, + "id": "ragium:pitch_coke" + } }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/pyrolyzing/quick_lime_dust.json b/src/generated/resources/data/ragium/recipe/pyrolyzing/quick_lime_dust.json index 8c2cada30..880ccbfea 100644 --- a/src/generated/resources/data/ragium/recipe/pyrolyzing/quick_lime_dust.json +++ b/src/generated/resources/data/ragium/recipe/pyrolyzing/quick_lime_dust.json @@ -1,16 +1,18 @@ { "type": "ragium:pyrolyzing", - "fluid_result": { - "amount": 1000, - "id": "ragium:sulfur_trioxide" - }, "ingredient": { "count": 1, "items": "#c:dusts/gypsum" }, - "item_result": { - "count": 1, - "id": "ragium:quick_lime_dust" + "result": { + "fluid": { + "amount": 1000, + "id": "ragium:sulfur_trioxide" + }, + "item": { + "count": 1, + "id": "ragium:quick_lime_dust" + } }, "time": 800 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/pyrolyzing/sulfur_dioxide.json b/src/generated/resources/data/ragium/recipe/pyrolyzing/sulfur_dioxide.json index eda6ca4ef..af155f743 100644 --- a/src/generated/resources/data/ragium/recipe/pyrolyzing/sulfur_dioxide.json +++ b/src/generated/resources/data/ragium/recipe/pyrolyzing/sulfur_dioxide.json @@ -1,12 +1,14 @@ { "type": "ragium:pyrolyzing", - "fluid_result": { - "amount": 1000, - "id": "ragium:sulfur_dioxide" - }, "ingredient": { "count": 1, "items": "#c:dusts/sulfur" }, + "result": { + "fluid": { + "amount": 1000, + "id": "ragium:sulfur_dioxide" + } + }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/pyrolyzing/sulfur_trioxide.json b/src/generated/resources/data/ragium/recipe/pyrolyzing/sulfur_trioxide.json index 7a8efd59a..2db2371d2 100644 --- a/src/generated/resources/data/ragium/recipe/pyrolyzing/sulfur_trioxide.json +++ b/src/generated/resources/data/ragium/recipe/pyrolyzing/sulfur_trioxide.json @@ -1,12 +1,14 @@ { "type": "ragium:pyrolyzing", - "fluid_result": { - "amount": 1000, - "id": "ragium:sulfur_trioxide" - }, "ingredient": { "count": 1, "items": "minecraft:blaze_powder" }, + "result": { + "fluid": { + "amount": 1000, + "id": "ragium:sulfur_trioxide" + } + }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/reacting/hydrochloric_acid.json b/src/generated/resources/data/ragium/recipe/reacting/hydrochloric_acid.json index 8b16c8584..b5e03f092 100644 --- a/src/generated/resources/data/ragium/recipe/reacting/hydrochloric_acid.json +++ b/src/generated/resources/data/ragium/recipe/reacting/hydrochloric_acid.json @@ -1,9 +1,5 @@ { "type": "ragium:reacting", - "fluid_result": { - "amount": 1000, - "id": "ragium:hydrochloric_acid" - }, "ingredients": [ { "amount": 1000, @@ -14,5 +10,11 @@ "fluids": "#c:water" } ], + "result": { + "fluid": { + "amount": 1000, + "id": "ragium:hydrochloric_acid" + } + }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/reacting/hydrofluoric_acid.json b/src/generated/resources/data/ragium/recipe/reacting/hydrofluoric_acid.json index 8c479c60d..62951d67a 100644 --- a/src/generated/resources/data/ragium/recipe/reacting/hydrofluoric_acid.json +++ b/src/generated/resources/data/ragium/recipe/reacting/hydrofluoric_acid.json @@ -1,9 +1,5 @@ { "type": "ragium:reacting", - "fluid_result": { - "amount": 1000, - "id": "ragium:hydrofluoric_acid" - }, "ingredients": [ { "amount": 1000, @@ -14,5 +10,11 @@ "fluids": "#c:water" } ], + "result": { + "fluid": { + "amount": 1000, + "id": "ragium:hydrofluoric_acid" + } + }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/reacting/hydrogen_chloride.json b/src/generated/resources/data/ragium/recipe/reacting/hydrogen_chloride.json index 96cf50cb5..6e05aa71c 100644 --- a/src/generated/resources/data/ragium/recipe/reacting/hydrogen_chloride.json +++ b/src/generated/resources/data/ragium/recipe/reacting/hydrogen_chloride.json @@ -1,9 +1,5 @@ { "type": "ragium:reacting", - "fluid_result": { - "amount": 2000, - "id": "ragium:hydrogen_chloride" - }, "ingredients": [ { "amount": 1000, @@ -14,5 +10,11 @@ "fluids": "#c:chlorine" } ], + "result": { + "fluid": { + "amount": 2000, + "id": "ragium:hydrogen_chloride" + } + }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/reacting/liquid_explosive.json b/src/generated/resources/data/ragium/recipe/reacting/liquid_explosive.json index c865d71f3..f96cef9df 100644 --- a/src/generated/resources/data/ragium/recipe/reacting/liquid_explosive.json +++ b/src/generated/resources/data/ragium/recipe/reacting/liquid_explosive.json @@ -1,9 +1,5 @@ { "type": "ragium:reacting", - "fluid_result": { - "amount": 1000, - "id": "ragium:liquid_explosive" - }, "ingredients": [ { "amount": 1000, @@ -14,5 +10,11 @@ "fluids": "#c:nitric_acid" } ], + "result": { + "fluid": { + "amount": 1000, + "id": "ragium:liquid_explosive" + } + }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/reacting/molten_plastic.json b/src/generated/resources/data/ragium/recipe/reacting/molten_plastic.json index 2c28f5b86..ccefd3ae0 100644 --- a/src/generated/resources/data/ragium/recipe/reacting/molten_plastic.json +++ b/src/generated/resources/data/ragium/recipe/reacting/molten_plastic.json @@ -1,9 +1,5 @@ { "type": "ragium:reacting", - "fluid_result": { - "amount": 180, - "id": "ragium:molten_plastic" - }, "ingredients": [ { "amount": 500, @@ -14,5 +10,11 @@ "fluids": "#c:oxygen" } ], + "result": { + "fluid": { + "amount": 180, + "id": "ragium:molten_plastic" + } + }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/reacting/sulfur_trioxide.json b/src/generated/resources/data/ragium/recipe/reacting/sulfur_trioxide.json index f329876b1..f0d1b0aba 100644 --- a/src/generated/resources/data/ragium/recipe/reacting/sulfur_trioxide.json +++ b/src/generated/resources/data/ragium/recipe/reacting/sulfur_trioxide.json @@ -1,9 +1,5 @@ { "type": "ragium:reacting", - "fluid_result": { - "amount": 1000, - "id": "ragium:sulfur_trioxide" - }, "ingredients": [ { "amount": 1000, @@ -14,5 +10,11 @@ "fluids": "#c:oxygen" } ], + "result": { + "fluid": { + "amount": 1000, + "id": "ragium:sulfur_trioxide" + } + }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/reacting/sulfuric_acid.json b/src/generated/resources/data/ragium/recipe/reacting/sulfuric_acid.json index 84bfaaffa..2436339bf 100644 --- a/src/generated/resources/data/ragium/recipe/reacting/sulfuric_acid.json +++ b/src/generated/resources/data/ragium/recipe/reacting/sulfuric_acid.json @@ -1,9 +1,5 @@ { "type": "ragium:reacting", - "fluid_result": { - "amount": 1000, - "id": "ragium:sulfuric_acid" - }, "ingredients": [ { "amount": 1000, @@ -14,5 +10,11 @@ "fluids": "#c:water" } ], + "result": { + "fluid": { + "amount": 1000, + "id": "ragium:sulfuric_acid" + } + }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/reacting/synthetic_resin.json b/src/generated/resources/data/ragium/recipe/reacting/synthetic_resin.json index ffd4cfa33..1a88f4214 100644 --- a/src/generated/resources/data/ragium/recipe/reacting/synthetic_resin.json +++ b/src/generated/resources/data/ragium/recipe/reacting/synthetic_resin.json @@ -1,9 +1,5 @@ { "type": "ragium:reacting", - "fluid_result": { - "amount": 2000, - "id": "ragium:synthetic_resin" - }, "ingredients": [ { "amount": 1000, @@ -14,5 +10,11 @@ "fluids": "#ragium:aldehydes" } ], + "result": { + "fluid": { + "amount": 2000, + "id": "ragium:synthetic_resin" + } + }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/refining/aldehyde.json b/src/generated/resources/data/ragium/recipe/refining/aldehyde.json index 08c48c3d3..07c3852aa 100644 --- a/src/generated/resources/data/ragium/recipe/refining/aldehyde.json +++ b/src/generated/resources/data/ragium/recipe/refining/aldehyde.json @@ -1,12 +1,14 @@ { "type": "ragium:refining", - "fluid_result": { - "amount": 1000, - "id": "ragium:aldehyde" - }, "ingredient": { "amount": 1000, "fluids": "#ragium:alcohols" }, + "result": { + "fluid": { + "amount": 1000, + "id": "ragium:aldehyde" + } + }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/refining/coal_tar.json b/src/generated/resources/data/ragium/recipe/refining/coal_tar.json index bbd9c348d..ad3cb6c32 100644 --- a/src/generated/resources/data/ragium/recipe/refining/coal_tar.json +++ b/src/generated/resources/data/ragium/recipe/refining/coal_tar.json @@ -1,16 +1,18 @@ { "type": "ragium:refining", - "fluid_result": { - "amount": 250, - "id": "ragium:aromatic_compound" - }, "ingredient": { "amount": 1000, "fluids": "#c:coal_tar" }, - "item_result": { - "count": 1, - "id": "ragium:pitch_coke" + "result": { + "fluid": { + "amount": 250, + "id": "ragium:aromatic_compound" + }, + "item": { + "count": 1, + "id": "ragium:pitch_coke" + } }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/refining/crude_oil.json b/src/generated/resources/data/ragium/recipe/refining/crude_oil.json index 33908465e..4eedc73ae 100644 --- a/src/generated/resources/data/ragium/recipe/refining/crude_oil.json +++ b/src/generated/resources/data/ragium/recipe/refining/crude_oil.json @@ -1,16 +1,18 @@ { "type": "ragium:refining", - "fluid_result": { - "amount": 750, - "id": "ragium:naphtha" - }, "ingredient": { "amount": 1000, "fluids": "#c:crude_oil" }, - "item_result": { - "count": 1, - "id": "ragium:tar" + "result": { + "fluid": { + "amount": 750, + "id": "ragium:naphtha" + }, + "item": { + "count": 1, + "id": "ragium:tar" + } }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/refining/naphtha.json b/src/generated/resources/data/ragium/recipe/refining/naphtha.json index bdeb5228a..408736026 100644 --- a/src/generated/resources/data/ragium/recipe/refining/naphtha.json +++ b/src/generated/resources/data/ragium/recipe/refining/naphtha.json @@ -1,16 +1,18 @@ { "type": "ragium:refining", - "fluid_result": { - "amount": 500, - "id": "ragium:fuel" - }, "ingredient": { "amount": 1000, "fluids": "#c:naphtha" }, - "item_result": { - "count": 1, - "id": "ragium:sulfur_dust" + "result": { + "fluid": { + "amount": 500, + "id": "ragium:fuel" + }, + "item": { + "count": 1, + "id": "ragium:sulfur_dust" + } }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/refining/salt_water.json b/src/generated/resources/data/ragium/recipe/refining/salt_water.json index 82817b0d9..ab484caf0 100644 --- a/src/generated/resources/data/ragium/recipe/refining/salt_water.json +++ b/src/generated/resources/data/ragium/recipe/refining/salt_water.json @@ -1,16 +1,18 @@ { "type": "ragium:refining", - "fluid_result": { - "amount": 1000, - "id": "minecraft:water" - }, "ingredient": { "amount": 1000, "fluids": "#c:salt_water" }, - "item_result": { - "count": 1, - "id": "ragium:salt_dust" + "result": { + "fluid": { + "amount": 1000, + "id": "minecraft:water" + }, + "item": { + "count": 1, + "id": "ragium:salt_dust" + } }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/refining/sodium_hydroxide_solution.json b/src/generated/resources/data/ragium/recipe/refining/sodium_hydroxide_solution.json index 2938d91f0..5a0c4ce6c 100644 --- a/src/generated/resources/data/ragium/recipe/refining/sodium_hydroxide_solution.json +++ b/src/generated/resources/data/ragium/recipe/refining/sodium_hydroxide_solution.json @@ -1,16 +1,18 @@ { "type": "ragium:refining", - "fluid_result": { - "amount": 2000, - "id": "minecraft:water" - }, "ingredient": { "amount": 1000, "fluids": "#c:sodium_hydroxide_solution" }, - "item_result": { - "count": 1, - "id": "ragium:soda_ash_dust" + "result": { + "fluid": { + "amount": 2000, + "id": "minecraft:water" + }, + "item": { + "count": 1, + "id": "ragium:soda_ash_dust" + } }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/refining/wood_tar.json b/src/generated/resources/data/ragium/recipe/refining/wood_tar.json index 6ae089077..7bd4fbd1d 100644 --- a/src/generated/resources/data/ragium/recipe/refining/wood_tar.json +++ b/src/generated/resources/data/ragium/recipe/refining/wood_tar.json @@ -1,12 +1,14 @@ { "type": "ragium:refining", - "fluid_result": { - "amount": 500, - "id": "ragium:alcohol" - }, "ingredient": { "amount": 1000, "fluids": "#c:wood_tar" }, + "result": { + "fluid": { + "amount": 500, + "id": "ragium:alcohol" + } + }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/washing/alumina_dust_from_clay.json b/src/generated/resources/data/ragium/recipe/washing/alumina_dust_from_clay.json index 6623cdc76..a573c5c1a 100644 --- a/src/generated/resources/data/ragium/recipe/washing/alumina_dust_from_clay.json +++ b/src/generated/resources/data/ragium/recipe/washing/alumina_dust_from_clay.json @@ -1,12 +1,14 @@ { "type": "ragium:washing", - "fluid_ingredient": { - "amount": 1000, - "fluids": "#c:water" - }, - "item_ingredient": { - "count": 1, - "items": "minecraft:clay" + "ingredient": { + "fluid": { + "amount": 1000, + "fluids": "#c:water" + }, + "item": { + "count": 1, + "items": "minecraft:clay" + } }, "results": [ { diff --git a/src/generated/resources/data/ragium/recipe/washing/flint.json b/src/generated/resources/data/ragium/recipe/washing/flint.json index e4f391977..d2dad7fd5 100644 --- a/src/generated/resources/data/ragium/recipe/washing/flint.json +++ b/src/generated/resources/data/ragium/recipe/washing/flint.json @@ -1,12 +1,14 @@ { "type": "ragium:washing", - "fluid_ingredient": { - "amount": 1000, - "fluids": "#c:water" - }, - "item_ingredient": { - "count": 1, - "items": "#c:gravels" + "ingredient": { + "fluid": { + "amount": 1000, + "fluids": "#c:water" + }, + "item": { + "count": 1, + "items": "#c:gravels" + } }, "result": { "count": 1, diff --git a/src/generated/resources/data/ragium/recipe/washing/netherite_scrap_from_debris.json b/src/generated/resources/data/ragium/recipe/washing/netherite_scrap_from_debris.json index efc2d1ba4..44278efdf 100644 --- a/src/generated/resources/data/ragium/recipe/washing/netherite_scrap_from_debris.json +++ b/src/generated/resources/data/ragium/recipe/washing/netherite_scrap_from_debris.json @@ -1,12 +1,14 @@ { "type": "ragium:washing", - "fluid_ingredient": { - "amount": 250, - "fluids": "#c:hydrofluoric_acid" - }, - "item_ingredient": { - "count": 1, - "items": "minecraft:ancient_debris" + "ingredient": { + "fluid": { + "amount": 250, + "fluids": "#c:hydrofluoric_acid" + }, + "item": { + "count": 1, + "items": "minecraft:ancient_debris" + } }, "result": { "count": 3, diff --git a/src/generated/resources/data/ragium/recipe/washing/quartz_dust_from_red_sands.json b/src/generated/resources/data/ragium/recipe/washing/quartz_dust_from_red_sands.json index 654c22b8a..3ed232480 100644 --- a/src/generated/resources/data/ragium/recipe/washing/quartz_dust_from_red_sands.json +++ b/src/generated/resources/data/ragium/recipe/washing/quartz_dust_from_red_sands.json @@ -1,12 +1,14 @@ { "type": "ragium:washing", - "fluid_ingredient": { - "amount": 1000, - "fluids": "#c:water" - }, - "item_ingredient": { - "count": 4, - "items": "#c:sands/red" + "ingredient": { + "fluid": { + "amount": 1000, + "fluids": "#c:water" + }, + "item": { + "count": 4, + "items": "#c:sands/red" + } }, "results": [ { diff --git a/src/generated/resources/data/ragium/recipe/washing/quartz_dust_from_sands.json b/src/generated/resources/data/ragium/recipe/washing/quartz_dust_from_sands.json index ff7b409dc..97fe803ed 100644 --- a/src/generated/resources/data/ragium/recipe/washing/quartz_dust_from_sands.json +++ b/src/generated/resources/data/ragium/recipe/washing/quartz_dust_from_sands.json @@ -1,12 +1,14 @@ { "type": "ragium:washing", - "fluid_ingredient": { - "amount": 1000, - "fluids": "#c:water" - }, - "item_ingredient": { - "count": 4, - "items": "#c:sands/colorless" + "ingredient": { + "fluid": { + "amount": 1000, + "fluids": "#c:water" + }, + "item": { + "count": 4, + "items": "#c:sands/colorless" + } }, "results": [ { diff --git a/src/lib/kotlin/hiiragi283/lib/HTConstants.kt b/src/lib/kotlin/hiiragi283/lib/HTConstants.kt index 311b5adae..6c9dc6ede 100644 --- a/src/lib/kotlin/hiiragi283/lib/HTConstants.kt +++ b/src/lib/kotlin/hiiragi283/lib/HTConstants.kt @@ -93,19 +93,11 @@ data object HTConstants { const val INGREDIENT = "ingredient" const val INGREDIENTS = "ingredients" - const val PRIMARY_INGREDIENT = "primary_ingredient" - const val SECONDARY_INGREDIENT = "secondary_ingredient" - const val ITEM_INGREDIENT = "item_ingredient" - const val FLUID_INGREDIENT = "fluid_ingredient" const val CATALYST = "catalyst" const val RESULT = "result" const val RESULTS = "results" - const val PRIMARY_RESULT = "primary_result" - const val SECONDARY_RESULT = "secondary_result" - const val ITEM_RESULT = "item_result" - const val FLUID_RESULT = "fluid_result" // Text // diff --git a/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/HTItemAndFluidToRecipeBuilder.kt b/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/HTItemAndFluidToRecipeBuilder.kt index b272bf8a5..1591d136a 100644 --- a/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/HTItemAndFluidToRecipeBuilder.kt +++ b/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/HTItemAndFluidToRecipeBuilder.kt @@ -117,5 +117,11 @@ abstract class HTItemAndFluidToRecipeBuilder, out REC result: RESULT, progressData: HTProgressData ): RECIPE + + fun create( + ingredient: Pair, + result: RESULT, + progressData: HTProgressData + ): RECIPE = create(ingredient.first, ingredient.second, result, progressData) } } diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTBasicSingleRecipe.kt b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTBasicSingleRecipe.kt index 3aa010a53..8163d9da3 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTBasicSingleRecipe.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTBasicSingleRecipe.kt @@ -37,19 +37,6 @@ open class HTBasicSingleRecipe, RE ).apply(instance, factory::create) } - @JvmStatic - fun , RES : HTRecipeResult<*>, RECIPE : HTBasicSingleRecipe<*, ING, RES>> codec( - ingredient: Codec, - result: MapCodec, - factory: Factory - ): MapCodec = HTCodecs.recordMap { instance -> - instance.group( - ingredient.fieldOf(HTConstants.INGREDIENT).forGetter { it.ingredient }, - result.forGetter { it.result }, - HTProgressData.CODEC.forGetter { it.progressData } - ).apply(instance, factory::create) - } - @JvmStatic fun , RES : HTRecipeResult<*>, RECIPE : HTBasicSingleRecipe<*, ING, RES>> streamCodec( ingredient: StreamCodec, diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTDoubleItemToItemRecipe.kt b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTDoubleItemToItemRecipe.kt index b92de0585..ee05be90c 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTDoubleItemToItemRecipe.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTDoubleItemToItemRecipe.kt @@ -38,8 +38,8 @@ interface HTDoubleItemToItemRecipe : fun codec(factory: HTDoubleItemToItemRecipeBuilder.Factory): MapCodec = HTCodecs.recordMap { instance -> instance.group( - HTItemIngredient.CODEC.fieldOf(HTConstants.PRIMARY_INGREDIENT).forGetter(Basic::primary), - HTItemIngredient.CODEC.fieldOf(HTConstants.SECONDARY_INGREDIENT).forGetter(Basic::secondary), + HTItemIngredient.CODEC.fieldOf("primary_ingredient").forGetter(Basic::primary), + HTItemIngredient.CODEC.fieldOf("secondary_ingredient").forGetter(Basic::secondary), HTItemResult.CODEC.fieldOf(HTConstants.RESULT).forGetter(Basic::result), HTProgressData.CODEC.forGetter(Basic::progressData) ).apply(instance, factory::create) diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTItemAndFluidToRecipe.kt b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTItemAndFluidToRecipe.kt index d473c4323..6f7fcc755 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTItemAndFluidToRecipe.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTItemAndFluidToRecipe.kt @@ -69,34 +69,15 @@ interface HTItemAndFluidToRecipe : factory: HTItemAndFluidToRecipeBuilder.Factory ): MapCodec = HTCodecs.recordMap { instance -> instance.group( - HTItemIngredient.CODEC - .fieldOf(HTConstants.ITEM_INGREDIENT) - .forGetter(Basic::itemIngredient), - HTFluidIngredient.CODEC - .fieldOf(HTConstants.FLUID_INGREDIENT) - .forGetter(Basic::fluidIngredient), + HTCodecs.mapPair( + HTItemIngredient.CODEC.fieldOf(HTConstants.ITEM), + HTFluidIngredient.CODEC.fieldOf(HTConstants.FLUID) + ).fieldOf(HTConstants.INGREDIENT).forGetter { it.itemIngredient to it.fluidIngredient }, resultCodec.fieldOf(HTConstants.RESULT).forGetter(Basic::result), HTProgressData.CODEC.forGetter(Basic::progressData) ).apply(instance, factory::create) } - @JvmStatic - fun , RECIPE : Basic> codec( - resultCodec: MapCodec, - factory: HTItemAndFluidToRecipeBuilder.Factory - ): MapCodec = HTCodecs.recordMap { instance -> - instance.group( - HTItemIngredient.CODEC - .fieldOf(HTConstants.ITEM_INGREDIENT) - .forGetter(Basic::itemIngredient), - HTFluidIngredient.CODEC - .fieldOf(HTConstants.FLUID_INGREDIENT) - .forGetter(Basic::fluidIngredient), - resultCodec.forGetter(Basic::result), - HTProgressData.CODEC.forGetter(Basic::progressData) - ).apply(instance, factory::create) - } - @JvmStatic fun , RECIPE : Basic> streamCodec( resultCodec: StreamCodec, diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/result/HTItemOrFluidResult.kt b/src/lib/kotlin/hiiragi283/lib/recipe/result/HTItemOrFluidResult.kt index 07d26b5fd..b8b782191 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/result/HTItemOrFluidResult.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/result/HTItemOrFluidResult.kt @@ -1,5 +1,6 @@ package hiiragi283.lib.recipe.result +import com.mojang.serialization.Codec import com.mojang.serialization.MapCodec import hiiragi283.lib.HTConstants import hiiragi283.lib.serialization.codec.HTCodecs @@ -18,11 +19,14 @@ import net.minecraft.resources.Identifier data class HTItemOrFluidResult(val content: Ior) : HTRecipeResult { companion object { @JvmField - val CODEC: MapCodec = HTCodecs.ior( - HTItemResult.CODEC.fieldOf(HTConstants.ITEM_RESULT), - HTFluidResult.CODEC.fieldOf(HTConstants.FLUID_RESULT) + val MAP_CODEC: MapCodec = HTCodecs.ior( + HTItemResult.CODEC.fieldOf(HTConstants.ITEM), + HTFluidResult.CODEC.fieldOf(HTConstants.FLUID) ).xmap(::HTItemOrFluidResult, HTItemOrFluidResult::content) + @JvmField + val CODEC: Codec = Codec.lazyInitialized(MAP_CODEC::codec) + @JvmField val STREAM_CODEC: StreamCodec = HTStreamCodecs .ior(HTItemResult.STREAM_CODEC, HTFluidResult.STREAM_CODEC) diff --git a/src/lib/kotlin/hiiragi283/lib/serialization/codec/HTCodecs.kt b/src/lib/kotlin/hiiragi283/lib/serialization/codec/HTCodecs.kt index 8bd980ac1..5b9c84b2f 100644 --- a/src/lib/kotlin/hiiragi283/lib/serialization/codec/HTCodecs.kt +++ b/src/lib/kotlin/hiiragi283/lib/serialization/codec/HTCodecs.kt @@ -128,25 +128,28 @@ data object HTCodecs { val bothResult: DataResult> = leftResult.flatMap { leftIn: A -> rightResult.map { rightIn: B -> Ior.Both(leftIn, rightIn) } } - if (bothResult.isSuccess) return bothResult - if (leftResult.isSuccess) { - return when { - rightResult.isSuccess -> leftResult.flatMap { leftIn: A -> - rightResult.map { rightIn: B -> Ior.Both(leftIn, rightIn) } + return when { + bothResult.isSuccess -> bothResult + + leftResult.isSuccess -> + when { + rightResult.isSuccess -> leftResult.flatMap { leftIn: A -> + rightResult.map { rightIn: B -> Ior.Both(leftIn, rightIn) } + } + + else -> leftResult.map { Ior.Left(it) } } - else -> leftResult.map { Ior.Left(it) } - } - } else { - return when { - rightResult.isSuccess -> rightResult.map { Ior.Right(it) } + else -> + when { + rightResult.isSuccess -> rightResult.map { Ior.Right(it) } - else -> DataResult.error { - val leftError: String = leftResult.error().orElseThrow().message() - val rightError: String = rightResult.error().orElseThrow().message() - "Failed to parse ior. Left: $leftError; Right: $rightError;" + else -> DataResult.error { + val leftError: String = leftResult.error().orElseThrow().message() + val rightError: String = rightResult.error().orElseThrow().message() + "Failed to parse ior. Left: $leftError; Right: $rightError;" + } } - } } } diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTMixingRecipe.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTMixingRecipe.kt index 9e0b9328f..c442b171d 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTMixingRecipe.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTMixingRecipe.kt @@ -18,7 +18,7 @@ import hiiragi283.lib.recipe.input.HTItemAndFluidRecipeInput import hiiragi283.lib.recipe.result.HTItemAndFluidStack import hiiragi283.lib.recipe.result.HTItemOrFluidResult import hiiragi283.lib.serialization.codec.HTCodecs -import hiiragi283.lib.serialization.codec.nelOrElement +import hiiragi283.lib.serialization.codec.compactNelFieldOf import hiiragi283.lib.serialization.network.nelOf import net.minecraft.network.RegistryFriendlyByteBuf import net.minecraft.network.codec.StreamCodec @@ -43,14 +43,11 @@ data class RTMixingRecipe( @JvmField val CODEC: MapCodec = HTCodecs.recordMap { instance -> instance.group( - HTItemIngredient.CODEC - .nelOrElement(2) - .fieldOf(HTConstants.ITEM_INGREDIENT) - .forGetter(RTMixingRecipe::itemIngredients), - HTFluidIngredient.CODEC - .fieldOf(HTConstants.FLUID_INGREDIENT) - .forGetter(RTMixingRecipe::fluidIngredient), - HTItemOrFluidResult.CODEC.forGetter(RTMixingRecipe::result), + HTCodecs.mapPair( + HTItemIngredient.CODEC.compactNelFieldOf(HTConstants.ITEM, HTConstants.ITEMS, 2), + HTFluidIngredient.CODEC.fieldOf(HTConstants.FLUID) + ).fieldOf(HTConstants.INGREDIENT).forGetter { it.itemIngredients to it.fluidIngredient }, + HTItemOrFluidResult.CODEC.fieldOf(HTConstants.RESULT).forGetter(RTMixingRecipe::result), HTProgressData.CODEC.forGetter(RTMixingRecipe::progressData) ).apply(instance, ::RTMixingRecipe) } @@ -72,6 +69,17 @@ data class RTMixingRecipe( val SERIALIZER: RecipeSerializer = RecipeSerializer(CODEC, STREAM_CODEC) } + constructor( + ingredient: Pair, HTFluidIngredient>, + result: HTItemOrFluidResult, + progressData: HTProgressData + ) : this( + ingredient.first, + ingredient.second, + result, + progressData + ) + fun toItemAndFluidToFluid(): HTItemAndFluidToFluidRecipe? = when { itemIngredients.size > 1 -> null diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTReactingRecipe.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTReactingRecipe.kt index 61b5af94a..5033e9f78 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTReactingRecipe.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTReactingRecipe.kt @@ -42,7 +42,7 @@ data class RTReactingRecipe( .compactNelFieldOf(HTConstants.INGREDIENT, HTConstants.INGREDIENTS, 2) .forGetter(RTReactingRecipe::fluidIngredients), HTItemCatalyst.CODEC.forGetter(RTReactingRecipe::catalyst), - HTItemOrFluidResult.CODEC.forGetter(RTReactingRecipe::result), + HTItemOrFluidResult.CODEC.fieldOf(HTConstants.RESULT).forGetter(RTReactingRecipe::result), HTProgressData.CODEC.forGetter(RTReactingRecipe::progressData) ).apply(instance, ::RTReactingRecipe) } diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTWashingRecipe.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTWashingRecipe.kt index 4f6c214ba..3af204ec3 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTWashingRecipe.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTWashingRecipe.kt @@ -36,12 +36,10 @@ data class RTWashingRecipe( @JvmField val CODEC: MapCodec = HTCodecs.recordMap { instance -> instance.group( - HTItemIngredient.CODEC - .fieldOf(HTConstants.ITEM_INGREDIENT) - .forGetter(RTWashingRecipe::itemIngredient), - HTFluidIngredient.CODEC - .fieldOf(HTConstants.FLUID_INGREDIENT) - .forGetter(RTWashingRecipe::fluidIngredient), + HTCodecs.mapPair( + HTItemIngredient.CODEC.fieldOf(HTConstants.ITEM), + HTFluidIngredient.CODEC.fieldOf(HTConstants.FLUID) + ).fieldOf(HTConstants.INGREDIENT).forGetter { it.itemIngredient to it.fluidIngredient }, HTItemResult.CODEC .compactNelFieldOf(HTConstants.RESULT, HTConstants.RESULTS, 2) .forGetter(RTWashingRecipe::results), @@ -66,6 +64,17 @@ data class RTWashingRecipe( val SERIALIZER: RecipeSerializer = RecipeSerializer(CODEC, STREAM_CODEC) } + constructor( + ingredient: Pair, + results: Nel, + progressData: HTProgressData + ) : this( + ingredient.first, + ingredient.second, + results, + progressData + ) + override fun test(first: ItemInstance, second: FluidInstance): Boolean = itemIngredient.test(first) && fluidIngredient.test(second) diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTPyrolyzerBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTPyrolyzerBlockEntity.kt index fe86e3166..2cf940634 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTPyrolyzerBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTPyrolyzerBlockEntity.kt @@ -51,7 +51,11 @@ class HTPyrolyzerBlockEntity(pos: BlockPos, state: BlockState) : override fun initializeVariables(listener: Runnable) { super.initializeVariables(listener) - recipeHandler = object: EnergizedHandler() { + recipeHandler = object : EnergizedHandler< + SingleRecipeInput, + HTItemAndFluidStack, + HTItemToItemAndFluidRecipe + >() { private val inputSlot: HTItemInputSlot by lazy { HTItemInputSlot(this@HTPyrolyzerBlockEntity.inputSlot) } private val outputSlot: HTOutputSlot by lazy { HTOutputSlotHelper.forItem(this@HTPyrolyzerBlockEntity.outputSlot) @@ -59,7 +63,7 @@ class HTPyrolyzerBlockEntity(pos: BlockPos, state: BlockState) : private val outputTank: HTOutputSlot by lazy { HTOutputSlotHelper.forFluid(this@HTPyrolyzerBlockEntity.outputTank) } - + override fun createInput(): SingleRecipeInput = SingleRecipeInput(inputSlot.getStoredInput()) override fun findRecipe(level: ServerLevel, input: SingleRecipeInput): HTItemToItemAndFluidRecipe? = @@ -144,6 +148,6 @@ class HTPyrolyzerBlockEntity(pos: BlockPos, state: BlockState) : ) widgetHolder.track(outputTank) } - + override fun getConfig(): HTEnergyConfig = RagiumConfig.SERVER.machine.pyrolyzer } diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTRefineryBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTRefineryBlockEntity.kt index 5b6a25294..9f91faaf8 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTRefineryBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTRefineryBlockEntity.kt @@ -6,7 +6,6 @@ import hiiragi283.lib.gui.HTSlotHelper import hiiragi283.lib.gui.widget.HTWidgetHolder import hiiragi283.lib.recipe.base.HTFluidToItemAndFluidRecipe import hiiragi283.lib.recipe.handler.HTFluidInputTank -import hiiragi283.lib.recipe.handler.HTItemInputSlot import hiiragi283.lib.recipe.handler.HTOutputSlot import hiiragi283.lib.recipe.handler.HTOutputSlotHelper import hiiragi283.lib.recipe.input.HTSingleFluidRecipeInput @@ -52,7 +51,11 @@ class HTRefineryBlockEntity(pos: BlockPos, state: BlockState) : override fun initializeVariables(listener: Runnable) { super.initializeVariables(listener) - recipeHandler = object: EnergizedHandler() { + recipeHandler = object : EnergizedHandler< + HTSingleFluidRecipeInput, + HTItemAndFluidStack, + HTFluidToItemAndFluidRecipe + >() { private val inputTank: HTFluidInputTank by lazy { HTFluidInputTank(this@HTRefineryBlockEntity.inputTank) } private val outputSlot: HTOutputSlot by lazy { HTOutputSlotHelper.forItem(this@HTRefineryBlockEntity.outputSlot) @@ -60,7 +63,7 @@ class HTRefineryBlockEntity(pos: BlockPos, state: BlockState) : private val outputTank: HTOutputSlot by lazy { HTOutputSlotHelper.forFluid(this@HTRefineryBlockEntity.outputTank) } - + override fun createInput(): HTSingleFluidRecipeInput = HTSingleFluidRecipeInput(inputTank.getStoredInput()) override fun findRecipe(level: ServerLevel, input: HTSingleFluidRecipeInput): HTFluidToItemAndFluidRecipe? = @@ -105,7 +108,7 @@ class HTRefineryBlockEntity(pos: BlockPos, state: BlockState) : inputTank = builder.addSlot(HTSlotInfo.INPUT, HTVariableFluidTank.input(getTankCapacity(), listener)) outputTank = builder.addSlot(HTSlotInfo.OUTPUT, HTVariableFluidTank.output(getTankCapacity(), listener)) } - + private lateinit var outputSlot: HTBasicItemSlot override fun createItemSlots(builder: HTBasicItemSlotHolder.Builder, listener: Runnable) { @@ -145,6 +148,6 @@ class HTRefineryBlockEntity(pos: BlockPos, state: BlockState) : ) widgetHolder.track(outputTank) } - + override fun getConfig(): HTEnergyConfig = RagiumConfig.SERVER.machine.refinery } From 180adc99a442345147b61d5d2e71a67bf2e4b621 Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Sun, 11 Oct 2026 14:03:32 +0900 Subject: [PATCH 11/25] =?UTF-8?q?feat:=20=E6=96=B0=E3=81=97=E3=81=84?= =?UTF-8?q?=E3=83=96=E3=83=AD=E3=83=83=E3=82=AF=E3=80=8CUpgrade=20Station?= =?UTF-8?q?=20/=20=E5=BC=B7=E5=8C=96=E3=82=B9=E3=83=86=E3=83=BC=E3=82=B7?= =?UTF-8?q?=E3=83=A7=E3=83=B3=E3=80=8D=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data/lang/RagiumEnglishLangProvider.kt | 5 +- .../data/lang/RagiumJapaneseLangProvider.kt | 5 +- .../data/loot/RagiumBlockLootTableProvider.kt | 2 + .../ragium/data/model/RagiumModelProvider.kt | 2 + .../data/tag/RagiumBlockTagsProvider.kt | 2 + .../ragium/blockstates/upgrade_station.json | 7 + .../assets/ragium/items/upgrade_station.json | 6 + .../resources/assets/ragium/lang/en_us.json | 1 + .../resources/assets/ragium/lang/ja_jp.json | 1 + .../ragium/models/block/upgrade_station.json | 8 + .../tags/block/mineable/pickaxe.json | 1 + .../loot_table/blocks/upgrade_station.json | 31 ++++ .../resources/reports/ragium/registries.json | 5 +- .../ragium/api/data/RagiumDataComponents.kt | 9 + .../kotlin/hiiragi283/ragium/common/Ragium.kt | 1 + .../ragium/common/block/RagiumBlocks.kt | 21 ++- .../block/entity/HTBaseMachineBlockEntity.kt | 13 -- .../block/entity/HTBlockEntityWithMenu.kt | 19 +++ .../block/entity/RagiumBlockEntityTypes.kt | 22 ++- .../entity/machine/HTProcessorBlockEntity.kt | 4 +- .../misc/HTUpgradeStationBlockEntity.kt | 155 ++++++++++++++++++ .../block/misc/HTUpgradeStationBlock.kt | 35 ++++ .../ragium/common/gui/HTContainerItemSlot.kt | 7 +- .../ragium/common/gui/HTWidgetSlot.kt | 7 + .../ragium/common/gui/menu/HTContainerMenu.kt | 4 +- 25 files changed, 342 insertions(+), 31 deletions(-) create mode 100644 src/generated/resources/assets/ragium/blockstates/upgrade_station.json create mode 100644 src/generated/resources/assets/ragium/items/upgrade_station.json create mode 100644 src/generated/resources/assets/ragium/models/block/upgrade_station.json create mode 100644 src/generated/resources/data/ragium/loot_table/blocks/upgrade_station.json create mode 100644 src/main/kotlin/hiiragi283/ragium/common/block/entity/misc/HTUpgradeStationBlockEntity.kt create mode 100644 src/main/kotlin/hiiragi283/ragium/common/block/misc/HTUpgradeStationBlock.kt create mode 100644 src/main/kotlin/hiiragi283/ragium/common/gui/HTWidgetSlot.kt diff --git a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt index 92d906fac..43335f704 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt @@ -72,9 +72,12 @@ class RagiumEnglishLangProvider(output: PackOutput) : add(RagiumBlocks.TANK, "Variable Tank") add(RagiumBlocks.POTION_TANK, "Potion Tank") add(RagiumBlocks.VOID_TANK, "Void Tank") - add(RagiumBlocks.CREATIVE_BATTERY, "Creative Battery") add(RagiumBlocks.CREATIVE_TANK, "Creative Tank") + add(RagiumBlocks.CREATIVE_BATTERY, "Creative Battery") + + add(RagiumBlocks.UPGRADE_STATION, "Upgrade Station") + add(RagiumBlocks.MACHINE_CASING, "Machine Casing") // Damage Type add("death.attack.chemicalBurn", $$"%1$s was injured chemical burn") diff --git a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt index 28a24e78b..482ac5dca 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt @@ -68,9 +68,12 @@ class RagiumJapaneseLangProvider(output: PackOutput) : add(RagiumBlocks.TANK, "可変タンク") add(RagiumBlocks.POTION_TANK, "ポーションタンク") add(RagiumBlocks.VOID_TANK, "廃棄タンク") - add(RagiumBlocks.CREATIVE_BATTERY, "クリエイティブ用バッテリー") add(RagiumBlocks.CREATIVE_TANK, "クリエイティブ用タンク") + add(RagiumBlocks.CREATIVE_BATTERY, "クリエイティブ用バッテリー") + + add(RagiumBlocks.UPGRADE_STATION, "強化ステーション") + add(RagiumBlocks.MACHINE_CASING, "機械ケーシング") // Damage Type add("death.attack.chemicalBurn", $$"%1$sは化学火傷を負った") diff --git a/src/data/kotlin/hiiragi283/ragium/data/loot/RagiumBlockLootTableProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/loot/RagiumBlockLootTableProvider.kt index b53eb0c40..cf1192db5 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/loot/RagiumBlockLootTableProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/loot/RagiumBlockLootTableProvider.kt @@ -36,6 +36,8 @@ class RagiumBlockLootTableProvider(registries: HolderLookup.Provider) : ).forEach { blockItem: HTSimpleDeferredBlockAndItem -> add(blockItem) { block: Block -> copyComponent(block) { include(RagiumDataComponents.FLUID) } } } + // Misc + add(RagiumBlocks.UPGRADE_STATION, ::copyComponent) } private inline fun buildTable(builderAction: HTLootTableBuilder.() -> Unit): LootTable.Builder = diff --git a/src/data/kotlin/hiiragi283/ragium/data/model/RagiumModelProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/model/RagiumModelProvider.kt index 0cb3da2a0..7462ad15c 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/model/RagiumModelProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/model/RagiumModelProvider.kt @@ -123,6 +123,8 @@ class RagiumModelProvider(output: PackOutput) : HTModelProvider(output, RagiumAP for (blockItem: HTSimpleDeferredBlockAndItem in RagiumBlocks.TANKS) { generators.createTrivialBlock(blockItem.getOrThrow(), HTModelTemplates.Providers.TANK_TEMPLATE) } + // Misc + generators.createTrivialBlock(RagiumBlocks.UPGRADE_STATION.getOrThrow(), TexturedModel.CUBE_TOP_BOTTOM) } private fun machineModel( diff --git a/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumBlockTagsProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumBlockTagsProvider.kt index c5ab7a049..43890c67a 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumBlockTagsProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumBlockTagsProvider.kt @@ -38,6 +38,8 @@ class RagiumBlockTagsProvider(output: PackOutput, lookupProvider: CompletableFut yieldAll(RagiumBlocks.TANKS) yield(RagiumBlocks.CREATIVE_BATTERY) + + yield(RagiumBlocks.UPGRADE_STATION) }.forEach(pickaxe::add) } } diff --git a/src/generated/resources/assets/ragium/blockstates/upgrade_station.json b/src/generated/resources/assets/ragium/blockstates/upgrade_station.json new file mode 100644 index 000000000..818db8009 --- /dev/null +++ b/src/generated/resources/assets/ragium/blockstates/upgrade_station.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "ragium:block/upgrade_station" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/items/upgrade_station.json b/src/generated/resources/assets/ragium/items/upgrade_station.json new file mode 100644 index 000000000..cee21a48f --- /dev/null +++ b/src/generated/resources/assets/ragium/items/upgrade_station.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "ragium:block/upgrade_station" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/lang/en_us.json b/src/generated/resources/assets/ragium/lang/en_us.json index 46e7c46e5..1a95ab517 100644 --- a/src/generated/resources/assets/ragium/lang/en_us.json +++ b/src/generated/resources/assets/ragium/lang/en_us.json @@ -115,6 +115,7 @@ "block.ragium.sulfuric_acid": "Sulfuric Acid", "block.ragium.synthetic_resin": "Synthetic Resin", "block.ragium.tank": "Variable Tank", + "block.ragium.upgrade_station": "Upgrade Station", "block.ragium.void_metal_block": "Block of Void Metal", "block.ragium.void_tank": "Void Tank", "block.ragium.white_dye": "White Dye", diff --git a/src/generated/resources/assets/ragium/lang/ja_jp.json b/src/generated/resources/assets/ragium/lang/ja_jp.json index 16aab23a9..9045dc1f8 100644 --- a/src/generated/resources/assets/ragium/lang/ja_jp.json +++ b/src/generated/resources/assets/ragium/lang/ja_jp.json @@ -115,6 +115,7 @@ "block.ragium.sulfuric_acid": "硫酸", "block.ragium.synthetic_resin": "合成樹脂", "block.ragium.tank": "可変タンク", + "block.ragium.upgrade_station": "強化ステーション", "block.ragium.void_metal_block": "虚金ブロック", "block.ragium.void_tank": "廃棄タンク", "block.ragium.white_dye": "白色の染料", diff --git a/src/generated/resources/assets/ragium/models/block/upgrade_station.json b/src/generated/resources/assets/ragium/models/block/upgrade_station.json new file mode 100644 index 000000000..c71c38d64 --- /dev/null +++ b/src/generated/resources/assets/ragium/models/block/upgrade_station.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/cube_bottom_top", + "textures": { + "bottom": "ragium:block/upgrade_station_bottom", + "side": "ragium:block/upgrade_station_side", + "top": "ragium:block/upgrade_station_top" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json b/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json index f9e0b59f0..ad0e4b8b7 100644 --- a/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json +++ b/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json @@ -50,6 +50,7 @@ "ragium:sooty_iron_block", "ragium:sulfur_ore", "ragium:tank", + "ragium:upgrade_station", "ragium:void_metal_block", "ragium:void_tank" ] diff --git a/src/generated/resources/data/ragium/loot_table/blocks/upgrade_station.json b/src/generated/resources/data/ragium/loot_table/blocks/upgrade_station.json new file mode 100644 index 000000000..1b3638168 --- /dev/null +++ b/src/generated/resources/data/ragium/loot_table/blocks/upgrade_station.json @@ -0,0 +1,31 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_components", + "include": [ + "minecraft:custom_name", + "ragium:owner_id" + ], + "source": "block_entity" + } + ], + "name": "ragium:upgrade_station" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "ragium:blocks/upgrade_station" +} \ No newline at end of file diff --git a/src/generated/resources/reports/ragium/registries.json b/src/generated/resources/reports/ragium/registries.json index b804e1fe0..a90617efc 100644 --- a/src/generated/resources/reports/ragium/registries.json +++ b/src/generated/resources/reports/ragium/registries.json @@ -77,6 +77,7 @@ "sulfur_ore", "sulfuric_acid", "tank", + "upgrade_station", "void_metal_block", "void_tank", "white_dye", @@ -104,7 +105,8 @@ "pyrolyzer", "refinery", "smelter", - "tank" + "tank", + "upgrade_station" ], "minecraft:creative_mode_tab": [ "common" @@ -392,6 +394,7 @@ "tiny_coal", "tiny_coal_coke", "tiny_pitch_coke", + "upgrade_station", "void_metal_block", "void_metal_ingot", "void_metal_nugget", diff --git a/src/lib/kotlin/hiiragi283/ragium/api/data/RagiumDataComponents.kt b/src/lib/kotlin/hiiragi283/ragium/api/data/RagiumDataComponents.kt index daa07702d..b7d92d3ca 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/data/RagiumDataComponents.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/data/RagiumDataComponents.kt @@ -2,12 +2,14 @@ package hiiragi283.ragium.api.data import hiiragi283.lib.data.DataComponentType import hiiragi283.lib.serialization.codec.HTCodecs +import hiiragi283.lib.serialization.codec.listOrElement import hiiragi283.lib.serialization.network.HTStreamCodecs import hiiragi283.ragium.api.data.chemical.HTChemical import hiiragi283.ragium.api.text.HTItemTooltip import net.minecraft.core.Holder import net.minecraft.core.component.DataComponentType import net.minecraft.network.codec.ByteBufCodecs +import net.minecraft.world.item.ItemStack import net.minecraft.world.item.ItemStackTemplate import net.neoforged.neoforge.fluids.SimpleFluidContent import java.util.UUID @@ -50,4 +52,11 @@ data object RagiumDataComponents { @JvmField val OWNER_ID: DataComponentType = DataComponentType(HTCodecs.UUID, HTStreamCodecs.UUID) + + /** + * @since 26.1.9 + */ + @JvmField + val UPGRADES: DataComponentType> = + DataComponentType(ItemStack.OPTIONAL_CODEC.listOrElement(0, 4), ItemStack.OPTIONAL_LIST_STREAM_CODEC) } diff --git a/src/main/kotlin/hiiragi283/ragium/common/Ragium.kt b/src/main/kotlin/hiiragi283/ragium/common/Ragium.kt index 20200d9fc..870424f0a 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/Ragium.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/Ragium.kt @@ -95,6 +95,7 @@ data object Ragium : HTCommonMod() { helper.register(RagiumAPI.id(HTConstants.FLUID), RagiumDataComponents.FLUID) helper.register(RagiumAPI.id("memory_disc_data"), RagiumDataComponents.MEMORY_DISC_DATA) helper.register(RagiumAPI.id("owner_id"), RagiumDataComponents.OWNER_ID) + helper.register(RagiumAPI.id("upgrades"), RagiumDataComponents.UPGRADES) } event.register(Registries.MENU) { helper -> helper.register( diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt b/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt index 4ab5c91d5..f841bbdd8 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt @@ -31,6 +31,7 @@ import hiiragi283.ragium.api.tag.HTMachineType import hiiragi283.ragium.api.util.HTStorageHelper import hiiragi283.ragium.common.block.entity.HTFluidStorageBlock import hiiragi283.ragium.common.block.entity.RagiumBlockEntityTypes +import hiiragi283.ragium.common.block.misc.HTUpgradeStationBlock import hiiragi283.ragium.common.block.storage.HTPotionTankBlock import hiiragi283.ragium.common.block.storage.HTTankBlock import hiiragi283.ragium.common.block.storage.HTVoidTankBlock @@ -367,11 +368,17 @@ data object RagiumBlocks { // Storage // // Tank + @JvmStatic + private val tankProperty: BlockBehaviour.Properties = properties(1.5f, 16f) + .mapColor(MapColor.COLOR_BLACK) + .sound(SoundType.COPPER) + .noOcclusion() + @JvmField val TANK: HTBasicDeferredBlockAndItem = registerMachine( RagiumBlockEntityTypes.TANK, ::HTTankBlock, - machine().noOcclusion() + tankProperty ) @JvmField @@ -379,13 +386,13 @@ data object RagiumBlocks { RagiumBlockEntityTypes.POTION_TANK, ::HTPotionTankBlock, ::HTPotionTankBlockItem, - machine().noOcclusion() + tankProperty ) @JvmField val VOID_TANK: HTBasicDeferredBlockAndItem = REGISTER.registerSimple( "void_tank", - machine().noOcclusion(), + tankProperty, ::HTVoidTankBlock ) @@ -394,7 +401,7 @@ data object RagiumBlocks { RagiumBlockEntityTypes.CREATIVE_TANK, ::HTTankBlock, ::HTCreativeTankBlockItem, - machine().noOcclusion() + tankProperty ) @JvmField @@ -405,6 +412,12 @@ data object RagiumBlocks { val CREATIVE_BATTERY: HTBasicDeferredBlockAndItem = registerMachine(RagiumBlockEntityTypes.CREATIVE_BATTERY, ::HTBasicEntityBlock) + // Misc // + + @JvmField + val UPGRADE_STATION: HTBasicDeferredBlockAndItem = + registerMachine(RagiumBlockEntityTypes.UPGRADE_STATION, ::HTUpgradeStationBlock) + // Decoration // @JvmField diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTBaseMachineBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTBaseMachineBlockEntity.kt index 2fb94841b..bd16fbb14 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTBaseMachineBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTBaseMachineBlockEntity.kt @@ -1,11 +1,6 @@ package hiiragi283.ragium.common.block.entity -import hiiragi283.lib.gui.sync.HTFluidSyncSlot -import hiiragi283.lib.gui.sync.HTItemSyncSlot -import hiiragi283.lib.gui.sync.HTSyncType import hiiragi283.lib.gui.widget.HTWidgetHolder -import hiiragi283.lib.transfer.fluid.HTBasicFluidTank -import hiiragi283.lib.transfer.item.HTBasicItemSlot import hiiragi283.ragium.api.RagiumConfig import hiiragi283.ragium.common.block.HTHorizontalEntityBlock import hiiragi283.ragium.common.block.HTMachineBlock @@ -29,14 +24,6 @@ abstract class HTBaseMachineBlockEntity(type: BlockEntityType<*>, pos: BlockPos, override fun setupMenu(widgetHolder: HTWidgetHolder) {} - protected fun HTWidgetHolder.track(slot: HTBasicFluidTank, syncType: HTSyncType = HTSyncType.S2C) { - this.track(HTFluidSyncSlot(slot), syncType) - } - - protected fun HTWidgetHolder.track(slot: HTBasicItemSlot, syncType: HTSyncType = HTSyncType.S2C) { - this.track(HTItemSyncSlot(slot), syncType) - } - // Ticking // final override fun onUpdateServer(level: ServerLevel, pos: BlockPos, state: BlockState): Boolean { diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTBlockEntityWithMenu.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTBlockEntityWithMenu.kt index 282ebfb7f..63a3b591d 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTBlockEntityWithMenu.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTBlockEntityWithMenu.kt @@ -1,7 +1,26 @@ package hiiragi283.ragium.common.block.entity +import hiiragi283.lib.gui.sync.HTFluidSyncSlot +import hiiragi283.lib.gui.sync.HTIntSyncSlot +import hiiragi283.lib.gui.sync.HTItemSyncSlot +import hiiragi283.lib.gui.sync.HTSyncType import hiiragi283.lib.gui.widget.HTWidgetHolder +import hiiragi283.lib.transfer.energy.HTBasicEnergyHandler +import hiiragi283.lib.transfer.fluid.HTBasicFluidTank +import hiiragi283.lib.transfer.item.HTBasicItemSlot fun interface HTBlockEntityWithMenu { fun setupMenu(widgetHolder: HTWidgetHolder) + + fun HTWidgetHolder.track(tank: HTBasicFluidTank, syncType: HTSyncType = HTSyncType.S2C) { + this.track(HTFluidSyncSlot(tank), syncType) + } + + fun HTWidgetHolder.track(slot: HTBasicItemSlot, syncType: HTSyncType = HTSyncType.S2C) { + this.track(HTItemSyncSlot(slot), syncType) + } + + fun HTWidgetHolder.track(handler: HTBasicEnergyHandler, syncType: HTSyncType = HTSyncType.S2C) { + this.track(HTIntSyncSlot.create(handler::amount, handler::setAmount), syncType) + } } diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/RagiumBlockEntityTypes.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/RagiumBlockEntityTypes.kt index 4d2aec8f7..6ddb840fc 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/RagiumBlockEntityTypes.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/RagiumBlockEntityTypes.kt @@ -30,6 +30,7 @@ import hiiragi283.ragium.common.block.entity.machine.HTProcessorBlockEntity import hiiragi283.ragium.common.block.entity.machine.HTPyrolyzerBlockEntity import hiiragi283.ragium.common.block.entity.machine.HTRefineryBlockEntity import hiiragi283.ragium.common.block.entity.machine.HTSmelterBlockEntity +import hiiragi283.ragium.common.block.entity.misc.HTUpgradeStationBlockEntity import hiiragi283.ragium.common.block.entity.storage.HTCreativeBatteryBlockEntity import hiiragi283.ragium.common.block.entity.storage.HTCreativeTankBlockEntity import hiiragi283.ragium.common.block.entity.storage.HTFluidOutputBusBlockEntity @@ -148,6 +149,7 @@ data object RagiumBlockEntityTypes { // Storage // + // Tank @JvmField val TANK: HTDeferredBlockEntityType = registerTick(HTConstants.TANK, ::HTTankBlockEntity) @@ -156,13 +158,20 @@ data object RagiumBlockEntityTypes { val POTION_TANK: HTDeferredBlockEntityType = registerTick("potion_tank", ::HTPotionTankBlockEntity) + @JvmField + val CREATIVE_TANK: HTDeferredBlockEntityType = + registerTick("creative_tank", ::HTCreativeTankBlockEntity) + + // Battery @JvmField val CREATIVE_BATTERY: HTDeferredBlockEntityType = registerTick("creative_battery", ::HTCreativeBatteryBlockEntity) + // Misc // + @JvmField - val CREATIVE_TANK: HTDeferredBlockEntityType = - registerTick("creative_tank", ::HTCreativeTankBlockEntity) + val UPGRADE_STATION: HTDeferredBlockEntityType = + registerTick("upgrade_station", ::HTUpgradeStationBlockEntity) // Events // @@ -222,7 +231,6 @@ data object RagiumBlockEntityTypes { // Storage registerBlockEntity(TANK.get()) registerBlockEntity(POTION_TANK.get()) - event.registerBlock( HTFluidCapabilities.block, { _, _, _, _, _ -> @@ -230,11 +238,17 @@ data object RagiumBlockEntityTypes { }, RagiumBlocks.VOID_TANK.getOrThrow() ) + registerBlockEntity(CREATIVE_TANK.get()) event.registerBlockEntity( HTEnergyCapabilities.block, CREATIVE_BATTERY.get() ) { _, _ -> InfiniteEnergyHandler.INSTANCE } - registerBlockEntity(CREATIVE_TANK.get()) + // Misc + registerBlockEntity(UPGRADE_STATION.get()) + event.registerBlockEntity( + HTEnergyCapabilities.block, + UPGRADE_STATION.get() + ) { blockEntity, _ -> blockEntity.energyHandler.asForge() } } } diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTProcessorBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTProcessorBlockEntity.kt index 22de90357..d8cb72e1a 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTProcessorBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTProcessorBlockEntity.kt @@ -2,8 +2,6 @@ package hiiragi283.ragium.common.block.entity.machine import hiiragi283.lib.HTConstants import hiiragi283.lib.gui.HTSlotHelper -import hiiragi283.lib.gui.sync.HTIntSyncSlot -import hiiragi283.lib.gui.sync.HTSyncType import hiiragi283.lib.gui.widget.HTWidgetHolder import hiiragi283.lib.recipe.HTRecipeFactory import hiiragi283.lib.recipe.base.HTProgressRecipe @@ -100,7 +98,7 @@ abstract class HTProcessorBlockEntity(type: BlockEntityType<*>, pos: BlockPos, s fun addEnergySlot(widgetHolder: HTWidgetHolder, x: Int, y: Int) { widgetHolder += HTEnergySlotWidget(handler, x, y) - widgetHolder.track(HTIntSyncSlot.create(handler::amount, handler::setAmount), HTSyncType.S2C) + widgetHolder.track(handler) } override fun writeValue(output: ValueOutput) { diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/misc/HTUpgradeStationBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/misc/HTUpgradeStationBlockEntity.kt new file mode 100644 index 000000000..985d9bdb4 --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/misc/HTUpgradeStationBlockEntity.kt @@ -0,0 +1,155 @@ +package hiiragi283.ragium.common.block.entity.misc + +import hiiragi283.lib.HTConstants +import hiiragi283.lib.capability.HTEnergyCapabilities +import hiiragi283.lib.gui.HTBackgroundType +import hiiragi283.lib.gui.HTSlotHelper +import hiiragi283.lib.gui.widget.HTWidgetHolder +import hiiragi283.lib.transfer.energy.HTBasicEnergyHandler +import hiiragi283.lib.transfer.fluid.HTBasicFluidTank +import hiiragi283.lib.transfer.fluid.HTFluidTank +import hiiragi283.lib.transfer.holder.HTResourceSlotHolder +import hiiragi283.lib.transfer.item.HTBasicItemSlot +import hiiragi283.lib.transfer.item.HTItemSlot +import hiiragi283.ragium.api.data.RagiumDataComponents +import hiiragi283.ragium.common.block.entity.HTBlockEntity +import hiiragi283.ragium.common.block.entity.HTBlockEntityWithMenu +import hiiragi283.ragium.common.block.entity.RagiumBlockEntityTypes +import hiiragi283.ragium.common.gui.HTWidgetSlot +import hiiragi283.ragium.common.gui.widget.HTEnergySlotWidget +import hiiragi283.ragium.common.gui.widget.HTFluidWidget +import hiiragi283.ragium.common.gui.widget.HTItemWidget +import hiiragi283.ragium.common.transfer.fluid.HTVariableFluidTank +import net.minecraft.core.BlockPos +import net.minecraft.core.Direction +import net.minecraft.server.level.ServerLevel +import net.minecraft.world.item.ItemStack +import net.minecraft.world.level.block.state.BlockState +import net.minecraft.world.level.storage.ValueInput +import net.minecraft.world.level.storage.ValueOutput +import net.neoforged.neoforge.transfer.energy.EnergyHandlerUtil +import net.neoforged.neoforge.world.inventory.StackCopySlot + +class HTUpgradeStationBlockEntity(worldPosition: BlockPos, blockState: BlockState) : + HTBlockEntity(RagiumBlockEntityTypes.UPGRADE_STATION.get(), worldPosition, blockState), + HTBlockEntityWithMenu { + + lateinit var energyHandler: HTBasicEnergyHandler + private set + + override fun initializeVariables(listener: Runnable) { + super.initializeVariables(listener) + energyHandler = HTBasicEnergyHandler.input(8000, listener) // TODO + } + + lateinit var inputTank: HTBasicFluidTank + private set + + override fun createFluidHandler(listener: Runnable): HTResourceSlotHolder { + inputTank = HTVariableFluidTank.create({ 4000 }, listener) // TODO + return object : HTResourceSlotHolder { + override fun getSlots(side: Direction?): List = listOf(inputTank) + + override fun canInsert(side: Direction?): Boolean = true + + override fun canExtract(side: Direction?): Boolean = true + } + } + + lateinit var toolSlot: HTBasicItemSlot + + override fun createItemHandler(listener: Runnable): HTResourceSlotHolder { + toolSlot = HTBasicItemSlot.create(listener, limit = 1) + return object : HTResourceSlotHolder { + override fun getSlots(side: Direction?): List = listOf(toolSlot) + + override fun canInsert(side: Direction?): Boolean = false + + override fun canExtract(side: Direction?): Boolean = false + } + } + + override fun writeValue(output: ValueOutput) { + super.writeValue(output) + output.putChild(HTConstants.ENERGY, energyHandler) + } + + override fun readValue(input: ValueInput) { + super.readValue(input) + input.readChild(HTConstants.ENERGY, energyHandler) + } + + override fun onUpdateServer(level: ServerLevel, pos: BlockPos, state: BlockState): Boolean { + // 液体の搬入 + // 充電 + return false // TODO + } + + override fun setupMenu(widgetHolder: HTWidgetHolder) { + // Energy + widgetHolder += HTEnergySlotWidget(energyHandler, HTSlotHelper.getSlotPosX(2.5), HTSlotHelper.getSlotPosY(1.5)) + widgetHolder.track(energyHandler) + // Fluid + widgetHolder += HTFluidWidget.Tank( + inputTank, + HTSlotHelper.getSlotPosX(1), + HTSlotHelper.getSlotPosY(0), + HTBackgroundType.BOTH, + false + ) + widgetHolder.track(inputTank) + // Tool + widgetHolder += HTItemWidget.Container( + toolSlot, + 0, + HTSlotHelper.getSlotPosX(2.5), + HTSlotHelper.getSlotPosY(0.5), + HTBackgroundType.NONE + ) + widgetHolder.track(toolSlot) + // Upgrades + for (index: Int in 0..3) { + widgetHolder += HTItemWidget.Container( + UpgradeSlot(index, HTSlotHelper.getSlotPosX(6 + index % 2), HTSlotHelper.getSlotPosY(0.5 + index / 2)), + HTBackgroundType.NONE + ) + } + } + + // UpgradeSlot // + + inner class UpgradeSlot(slot: Int, x: Int, y: Int) : + StackCopySlot(slot, x, y), + HTWidgetSlot { + private fun getUpgrades(): List = this@HTUpgradeStationBlockEntity + .toolSlot + .resource + .getOrDefault(RagiumDataComponents.UPGRADES, listOf()) + + private fun getUpgrade(index: Int): ItemStack = getUpgrades().getOrNull(index) ?: ItemStack.EMPTY + + override fun mayPlace(itemStack: ItemStack): Boolean = !this@HTUpgradeStationBlockEntity.toolSlot.isEmpty + + override fun getStackCopy(): ItemStack = getUpgrade(slotIndex) + + override fun setStackCopy(stack: ItemStack) { + val upgrades: MutableList = MutableList(4) { ItemStack.EMPTY } + getUpgrades().forEachIndexed { index: Int, stackIn: ItemStack -> + upgrades[index] = stackIn + } + upgrades[slotIndex] = stack + + val toolStack: ItemStack = this@HTUpgradeStationBlockEntity.toolSlot.getStackCopy() + toolStack[RagiumDataComponents.UPGRADES] = upgrades + this@HTUpgradeStationBlockEntity.toolSlot.setStack(toolStack) + } + + override fun onQuickCraft(picked: ItemStack, original: ItemStack): Unit = Unit + + override fun getMaxStackSize(): Int = 1 + + override val slotType: HTBackgroundType = HTBackgroundType.NONE + + override fun toString(): String = "UpgradeSlot(slot=$slotIndex)" + } +} diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/misc/HTUpgradeStationBlock.kt b/src/main/kotlin/hiiragi283/ragium/common/block/misc/HTUpgradeStationBlock.kt new file mode 100644 index 000000000..91e5dfdc5 --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/block/misc/HTUpgradeStationBlock.kt @@ -0,0 +1,35 @@ +package hiiragi283.ragium.common.block.misc + +import hiiragi283.lib.gui.widget.HTWidgetHolder +import hiiragi283.lib.registry.HTDeferredBlockEntityType +import hiiragi283.ragium.common.block.HTHorizontalEntityBlock +import hiiragi283.ragium.common.block.entity.HTBlockEntityWithMenu +import hiiragi283.ragium.common.gui.factory.HTBlockWidgetHolderContext +import net.minecraft.core.BlockPos +import net.minecraft.server.level.ServerPlayer +import net.minecraft.world.InteractionResult +import net.minecraft.world.entity.player.Player +import net.minecraft.world.level.Level +import net.minecraft.world.level.block.state.BlockState +import net.minecraft.world.phys.BlockHitResult + +class HTUpgradeStationBlock(type: HTDeferredBlockEntityType<*>, properties: Properties) : + HTHorizontalEntityBlock(type, properties), + HTBlockWidgetHolderContext.Factory { + override fun useWithoutItem( + state: BlockState, + level: Level, + pos: BlockPos, + player: Player, + hitResult: BlockHitResult + ): InteractionResult { + if (player is ServerPlayer) { + HTBlockWidgetHolderContext.openMenu(player, pos) + } + return InteractionResult.SUCCESS + } + + override fun setup(context: HTBlockWidgetHolderContext, widgetHolder: HTWidgetHolder) { + (context.blockEntity as? HTBlockEntityWithMenu)?.setupMenu(widgetHolder) + } +} diff --git a/src/main/kotlin/hiiragi283/ragium/common/gui/HTContainerItemSlot.kt b/src/main/kotlin/hiiragi283/ragium/common/gui/HTContainerItemSlot.kt index 8ab60606d..aa34c5099 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/gui/HTContainerItemSlot.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/gui/HTContainerItemSlot.kt @@ -21,8 +21,9 @@ class HTContainerItemSlot( y: Int, private val stackSetter: Consumer, private val manualFilter: BiPredicate, - val slotType: HTBackgroundType -) : StackCopySlot(index, x, y) { + override val slotType: HTBackgroundType +) : StackCopySlot(index, x, y), + HTWidgetSlot { companion object { @JvmStatic fun create(slot: HTBasicItemSlot, index: Int, x: Int, y: Int, slotType: HTBackgroundType): HTContainerItemSlot = @@ -46,6 +47,8 @@ class HTContainerItemSlot( override fun mayPlace(itemStack: ItemStack): Boolean = !itemStack.isEmpty && manualFilter.test(ItemResource.of(itemStack), HTTransferAccess.MANUAL) + override fun onQuickCraft(picked: ItemStack, original: ItemStack): Unit = Unit + override fun getMaxStackSize(): Int = slot.currentCapacity override fun getMaxStackSize(itemStack: ItemStack): Int = slot.getCapacity(ItemResource.of(itemStack)) diff --git a/src/main/kotlin/hiiragi283/ragium/common/gui/HTWidgetSlot.kt b/src/main/kotlin/hiiragi283/ragium/common/gui/HTWidgetSlot.kt new file mode 100644 index 000000000..dd59048d4 --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/gui/HTWidgetSlot.kt @@ -0,0 +1,7 @@ +package hiiragi283.ragium.common.gui + +import hiiragi283.lib.gui.HTBackgroundType + +interface HTWidgetSlot { + val slotType: HTBackgroundType +} diff --git a/src/main/kotlin/hiiragi283/ragium/common/gui/menu/HTContainerMenu.kt b/src/main/kotlin/hiiragi283/ragium/common/gui/menu/HTContainerMenu.kt index 1bb1a581b..ba60921eb 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/gui/menu/HTContainerMenu.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/gui/menu/HTContainerMenu.kt @@ -8,7 +8,7 @@ import hiiragi283.lib.gui.sync.HTSyncableMenu import hiiragi283.lib.gui.sync.HTSyncablePayload import hiiragi283.lib.gui.sync.HTSyncableSlot import hiiragi283.ragium.api.RagiumAPI -import hiiragi283.ragium.common.gui.HTContainerItemSlot +import hiiragi283.ragium.common.gui.HTWidgetSlot import hiiragi283.ragium.common.network.HTUpdateMenuPacket import it.unimi.dsi.fastutil.ints.IntArrayList import it.unimi.dsi.fastutil.objects.ObjectArrayList @@ -90,7 +90,7 @@ abstract class HTContainerMenu(menuType: MenuType<*>, containerId: Int, val i private val inventorySlots: MutableList = IntArrayList() override fun addSlot(slot: Slot): Slot { - if (slot is HTContainerItemSlot) { + if (slot is HTWidgetSlot) { widgetSlots += slotCount val slotType: HTBackgroundType = slot.slotType if (slotType.isInput || !slotType.isOutput) { From a959a6609e3ac0270efb307923f3378d1051e1dc Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Sun, 11 Oct 2026 14:35:53 +0900 Subject: [PATCH 12/25] =?UTF-8?q?feat:=20Upgrade=20Station=20=E3=81=AE?= =?UTF-8?q?=E5=AF=BE=E8=B1=A1=E3=82=92=E3=82=BF=E3=82=B0=E3=81=A7=E5=88=B6?= =?UTF-8?q?=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ragium/data/tag/RagiumItemTagsProvider.kt | 5 +++ .../ragium/tags/item/support_upgrades.json | 7 +++ .../resources/reports/ragium/registries.json | 3 +- .../hiiragi283/ragium/api/tag/RagiumTags.kt | 6 +++ .../misc/HTUpgradeStationBlockEntity.kt | 44 +++++++++++++++---- 5 files changed, 55 insertions(+), 10 deletions(-) create mode 100644 src/generated/resources/data/ragium/tags/item/support_upgrades.json diff --git a/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumItemTagsProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumItemTagsProvider.kt index f08ceb089..893874417 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumItemTagsProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumItemTagsProvider.kt @@ -14,6 +14,7 @@ import hiiragi283.lib.tag.HTTagPrefix import hiiragi283.ragium.api.RagiumAPI import hiiragi283.ragium.api.material.HTItemPart import hiiragi283.ragium.api.material.RagiumMaterial +import hiiragi283.ragium.api.tag.HTMachineType import hiiragi283.ragium.api.tag.RagiumTags import hiiragi283.ragium.common.block.RagiumBlocks import hiiragi283.ragium.common.fluid.RagiumFluids @@ -90,5 +91,9 @@ class RagiumItemTagsProvider(output: PackOutput, lookupProvider: CompletableFutu builder(RagiumTags.Items.SHOW_FLUID_TOOLTIPS) .add(RagiumBlocks.FLUID_OUTPUT_BUS) .apply { RagiumBlocks.TANKS.forEach { add(it) } } + builder(RagiumTags.Items.SUPPORT_UPGRADES) + .add(RagiumBlocks.TANK) + .add(RagiumBlocks.POTION_TANK) + .addTag(HTMachineType.PREFIX.rawCommonTag.item) } } diff --git a/src/generated/resources/data/ragium/tags/item/support_upgrades.json b/src/generated/resources/data/ragium/tags/item/support_upgrades.json new file mode 100644 index 000000000..957d699fa --- /dev/null +++ b/src/generated/resources/data/ragium/tags/item/support_upgrades.json @@ -0,0 +1,7 @@ +{ + "values": [ + "#ragium:machines", + "ragium:potion_tank", + "ragium:tank" + ] +} \ No newline at end of file diff --git a/src/generated/resources/reports/ragium/registries.json b/src/generated/resources/reports/ragium/registries.json index a90617efc..b4f68c57d 100644 --- a/src/generated/resources/reports/ragium/registries.json +++ b/src/generated/resources/reports/ragium/registries.json @@ -119,7 +119,8 @@ "energy", "fluid", "memory_disc_data", - "owner_id" + "owner_id", + "upgrades" ], "minecraft:fluid": [ "alcohol", diff --git a/src/lib/kotlin/hiiragi283/ragium/api/tag/RagiumTags.kt b/src/lib/kotlin/hiiragi283/ragium/api/tag/RagiumTags.kt index 97e542fc4..7ef92e329 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/tag/RagiumTags.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/tag/RagiumTags.kt @@ -97,6 +97,12 @@ data object RagiumTags { @JvmField val SOOTY_IRON_TOOL_MATERIALS: TagKey = create("sooty_iron_tool_materials") + /** + * @since 26.1.9 + */ + @JvmField + val SUPPORT_UPGRADES: TagKey = create("support_upgrades") + @JvmStatic private fun create(vararg path: String): TagKey = ItemTags.create(RagiumAPI.id(*path)) } diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/misc/HTUpgradeStationBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/misc/HTUpgradeStationBlockEntity.kt index 985d9bdb4..53e0a932d 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/misc/HTUpgradeStationBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/misc/HTUpgradeStationBlockEntity.kt @@ -1,7 +1,6 @@ package hiiragi283.ragium.common.block.entity.misc import hiiragi283.lib.HTConstants -import hiiragi283.lib.capability.HTEnergyCapabilities import hiiragi283.lib.gui.HTBackgroundType import hiiragi283.lib.gui.HTSlotHelper import hiiragi283.lib.gui.widget.HTWidgetHolder @@ -12,6 +11,7 @@ import hiiragi283.lib.transfer.holder.HTResourceSlotHolder import hiiragi283.lib.transfer.item.HTBasicItemSlot import hiiragi283.lib.transfer.item.HTItemSlot import hiiragi283.ragium.api.data.RagiumDataComponents +import hiiragi283.ragium.api.tag.RagiumTags import hiiragi283.ragium.common.block.entity.HTBlockEntity import hiiragi283.ragium.common.block.entity.HTBlockEntityWithMenu import hiiragi283.ragium.common.block.entity.RagiumBlockEntityTypes @@ -27,7 +27,7 @@ import net.minecraft.world.item.ItemStack import net.minecraft.world.level.block.state.BlockState import net.minecraft.world.level.storage.ValueInput import net.minecraft.world.level.storage.ValueOutput -import net.neoforged.neoforge.transfer.energy.EnergyHandlerUtil +import net.neoforged.neoforge.transfer.item.ItemResource import net.neoforged.neoforge.world.inventory.StackCopySlot class HTUpgradeStationBlockEntity(worldPosition: BlockPos, blockState: BlockState) : @@ -59,7 +59,11 @@ class HTUpgradeStationBlockEntity(worldPosition: BlockPos, blockState: BlockStat lateinit var toolSlot: HTBasicItemSlot override fun createItemHandler(listener: Runnable): HTResourceSlotHolder { - toolSlot = HTBasicItemSlot.create(listener, limit = 1) + toolSlot = HTBasicItemSlot.create( + listener, + limit = 1, + filter = { resource: ItemResource -> resource.`is`(RagiumTags.Items.SUPPORT_UPGRADES) } + ) return object : HTResourceSlotHolder { override fun getSlots(side: Direction?): List = listOf(toolSlot) @@ -79,11 +83,33 @@ class HTUpgradeStationBlockEntity(worldPosition: BlockPos, blockState: BlockStat input.readChild(HTConstants.ENERGY, energyHandler) } - override fun onUpdateServer(level: ServerLevel, pos: BlockPos, state: BlockState): Boolean { - // 液体の搬入 - // 充電 - return false // TODO - } + /*override fun onUpdateServer(level: ServerLevel, pos: BlockPos, state: BlockState): Boolean = + !toolSlot.isEmpty && useTransaction { transaction: Transaction -> + val toolStackIn: ItemStack = toolSlot.getStackCopy() + // 液体の搬入 + val fluidMoved: Int = ResourceHandlerUtil.move( + getFluidHandler(null), + HTFluidCapabilities.getCapability(toolStackIn), + HTTransferPredicates.alwaysTrue(), + Int.MAX_VALUE, // TODO, + transaction + ) + // 充電 + val energyMoved: Int = EnergyHandlerUtil.move( + this.energyHandler.asForge(), + HTEnergyCapabilities.getCapability(toolStackIn), + Int.MAX_VALUE, // TODO, + transaction + ) + val moved: Boolean = fluidMoved > 0 || energyMoved > 0 + if (moved) { + toolSlot.setStack(toolStackIn) + transaction.commit() + } + moved + }*/ + + override fun onUpdateServer(level: ServerLevel, pos: BlockPos, state: BlockState): Boolean = false override fun setupMenu(widgetHolder: HTWidgetHolder) { // Energy @@ -115,7 +141,7 @@ class HTUpgradeStationBlockEntity(worldPosition: BlockPos, blockState: BlockStat ) } } - + // UpgradeSlot // inner class UpgradeSlot(slot: Int, x: Int, y: Int) : From 1dd4e703df91bf1e984cd4b531f03ef215e36ec0 Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Mon, 12 Oct 2026 13:18:36 +0900 Subject: [PATCH 13/25] =?UTF-8?q?feat:=20HTMachineUpgrade=20=E3=82=92?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hiiragi283/ragium/client/RagiumClient.kt | 10 +++ .../advancement/RagiumAdvancementProvider.kt | 2 +- .../data/lang/RagiumEnglishLangProvider.kt | 8 ++ .../data/lang/RagiumJapaneseLangProvider.kt | 8 ++ .../data/loot/RagiumBlockLootTableProvider.kt | 1 + .../ragium/data/model/RagiumModelProvider.kt | 2 +- .../data/recipe/RagiumCommonRecipeProvider.kt | 2 +- .../data/recipe/RagiumHeatRecipeProvider.kt | 2 +- .../recipe/RagiumMechanicalRecipeProvider.kt | 2 +- .../recipe/RagiumVanillaRecipeProvider.kt | 48 ++++++++-- .../data/tag/RagiumBlockItemTagsProvider.kt | 2 +- .../ragium/data/tag/RagiumItemTagsProvider.kt | 2 +- .../assets/ragium/items/advanced_upgrade.json | 6 ++ .../assets/ragium/items/basic_upgrade.json | 6 ++ .../assets/ragium/items/elite_upgrade.json | 6 ++ .../assets/ragium/items/ultimate_upgrade.json | 6 ++ .../resources/assets/ragium/lang/en_us.json | 9 +- .../resources/assets/ragium/lang/ja_jp.json | 9 +- .../ragium/models/item/advanced_upgrade.json | 6 ++ .../ragium/models/item/basic_upgrade.json | 6 ++ .../ragium/models/item/elite_upgrade.json | 6 ++ .../ragium/models/item/ultimate_upgrade.json | 6 ++ .../loot_table/blocks/alloy_smelter.json | 3 +- .../ragium/loot_table/blocks/assembler.json | 3 +- .../ragium/loot_table/blocks/blender.json | 3 +- .../loot_table/blocks/chemical_bath.json | 3 +- .../loot_table/blocks/chemical_reactor.json | 3 +- .../ragium/loot_table/blocks/compressor.json | 3 +- .../loot_table/blocks/creative_tank.json | 1 + .../ragium/loot_table/blocks/crusher.json | 3 +- .../loot_table/blocks/cutting_machine.json | 3 +- .../loot_table/blocks/electrolyzer.json | 3 +- .../ragium/loot_table/blocks/enchanter.json | 3 +- .../loot_table/blocks/fluid_output_bus.json | 1 + .../ragium/loot_table/blocks/freezer.json | 3 +- .../data/ragium/loot_table/blocks/melter.json | 3 +- .../data/ragium/loot_table/blocks/mixer.json | 3 +- .../ragium/loot_table/blocks/planter.json | 3 +- .../ragium/loot_table/blocks/potion_tank.json | 1 + .../blocks/precision_assembler.json | 3 +- .../ragium/loot_table/blocks/pyrolyzer.json | 3 +- .../ragium/loot_table/blocks/refinery.json | 3 +- .../ragium/loot_table/blocks/scanner.json | 3 +- .../ragium/loot_table/blocks/smelter.json | 3 +- .../data/ragium/loot_table/blocks/tank.json | 1 + .../loot_table/blocks/upgrade_station.json | 3 +- .../recipe/shaped/advanced_upgrade.json | 18 ++++ .../ragium/recipe/shaped/basic_upgrade.json | 18 ++++ .../ragium/recipe/shaped/elite_upgrade.json | 18 ++++ .../recipe/smithing/ultimate_upgrade.json | 9 ++ .../resources/reports/ragium/registries.json | 5 ++ src/lib/kotlin/hiiragi283/lib/HTConstants.kt | 9 ++ .../lib/data/recipe/HTRecipeProvider.kt | 27 ++++-- .../hiiragi283/lib/resource/HTValueWithKey.kt | 6 -- .../ragium/api/data/RagiumDataComponents.kt | 15 +++- .../api/{tag => machine}/HTMachineType.kt | 2 +- .../ragium/api/machine/HTMachineUpgrade.kt | 84 +++++++++++++++++ .../api/machine/HTMachineUpgradeHelper.kt | 41 +++++++++ .../api/machine/HTMachineUpgradeList.kt | 85 ++++++++++++++++++ .../ragium/api/text/RagiumTranslation.kt | 5 +- .../lib/integration/jei/HTJeiDrawables.kt | 7 +- .../kotlin/hiiragi283/ragium/common/Ragium.kt | 5 +- .../ragium/common/block/RagiumBlocks.kt | 8 +- .../block/entity/RagiumBlockEntityTypes.kt | 8 -- .../entity/machine/HTProcessorBlockEntity.kt | 19 ++-- .../misc/HTUpgradeStationBlockEntity.kt | 23 +++-- .../ragium/common/item/RagiumItems.kt | 25 +++++- .../ragium/textures/item/advanced_upgrade.png | Bin 0 -> 319 bytes .../ragium/textures/item/basic_upgrade.png | Bin 0 -> 279 bytes .../ragium/textures/item/elite_upgrade.png | Bin 0 -> 301 bytes .../ragium/textures/item/ultimate_upgrade.png | Bin 0 -> 318 bytes 71 files changed, 564 insertions(+), 92 deletions(-) create mode 100644 src/generated/resources/assets/ragium/items/advanced_upgrade.json create mode 100644 src/generated/resources/assets/ragium/items/basic_upgrade.json create mode 100644 src/generated/resources/assets/ragium/items/elite_upgrade.json create mode 100644 src/generated/resources/assets/ragium/items/ultimate_upgrade.json create mode 100644 src/generated/resources/assets/ragium/models/item/advanced_upgrade.json create mode 100644 src/generated/resources/assets/ragium/models/item/basic_upgrade.json create mode 100644 src/generated/resources/assets/ragium/models/item/elite_upgrade.json create mode 100644 src/generated/resources/assets/ragium/models/item/ultimate_upgrade.json create mode 100644 src/generated/resources/data/ragium/recipe/shaped/advanced_upgrade.json create mode 100644 src/generated/resources/data/ragium/recipe/shaped/basic_upgrade.json create mode 100644 src/generated/resources/data/ragium/recipe/shaped/elite_upgrade.json create mode 100644 src/generated/resources/data/ragium/recipe/smithing/ultimate_upgrade.json rename src/lib/kotlin/hiiragi283/ragium/api/{tag => machine}/HTMachineType.kt (95%) create mode 100644 src/lib/kotlin/hiiragi283/ragium/api/machine/HTMachineUpgrade.kt create mode 100644 src/lib/kotlin/hiiragi283/ragium/api/machine/HTMachineUpgradeHelper.kt create mode 100644 src/lib/kotlin/hiiragi283/ragium/api/machine/HTMachineUpgradeList.kt create mode 100644 src/main/resources/assets/ragium/textures/item/advanced_upgrade.png create mode 100644 src/main/resources/assets/ragium/textures/item/basic_upgrade.png create mode 100644 src/main/resources/assets/ragium/textures/item/elite_upgrade.png create mode 100644 src/main/resources/assets/ragium/textures/item/ultimate_upgrade.png diff --git a/src/client/kotlin/hiiragi283/ragium/client/RagiumClient.kt b/src/client/kotlin/hiiragi283/ragium/client/RagiumClient.kt index de06d0cc7..b04b295c3 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/RagiumClient.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/RagiumClient.kt @@ -63,6 +63,8 @@ data object RagiumClient : HTClientMod() { eventBus.addListener(::registerTooltipAppenders) configScreen(container) + + RagiumAPI.LOGGER.info("Ragium Client has been initialized!") } override fun clientSetup(event: FMLClientSetupEvent) { @@ -301,5 +303,13 @@ data object RagiumClient : HTClientMod() { TooltipLocation.PRE_ITEM_INFO, TooltipAppender.createComponentAppender(RagiumDataComponents.ITEM_TOOLTIP) ) + event.registerAppender( + TooltipLocation.PRE_ITEM_INFO, + TooltipAppender.createComponentAppender(RagiumDataComponents.UPGRADE) + ) + event.registerAppender( + TooltipLocation.PRE_ITEM_INFO, + TooltipAppender.createComponentAppender(RagiumDataComponents.UPGRADES) + ) } } diff --git a/src/data/kotlin/hiiragi283/ragium/data/advancement/RagiumAdvancementProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/advancement/RagiumAdvancementProvider.kt index b040367e4..7b7e92918 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/advancement/RagiumAdvancementProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/advancement/RagiumAdvancementProvider.kt @@ -8,9 +8,9 @@ import hiiragi283.lib.registry.HTSimpleDeferredBlockAndItem import hiiragi283.lib.registry.HTSimpleDeferredItem import hiiragi283.lib.resource.vanillaId import hiiragi283.ragium.api.RagiumAPI +import hiiragi283.ragium.api.machine.HTMachineType import hiiragi283.ragium.api.material.HTItemPart import hiiragi283.ragium.api.material.RagiumMaterial -import hiiragi283.ragium.api.tag.HTMachineType import hiiragi283.ragium.common.advancment.RagiumAdvancementKeys import hiiragi283.ragium.common.block.RagiumBlocks import hiiragi283.ragium.common.item.RagiumItems diff --git a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt index 43335f704..f77cd785e 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt @@ -154,6 +154,11 @@ class RagiumEnglishLangProvider(output: PackOutput) : add(RagiumItems.PLATE_MOLD, "Plate Mold") add(RagiumItems.MEMORY_DISC, "Memory Disc") + add(RagiumItems.BASIC_UPGRADE, "Basic Upgrade") + add(RagiumItems.ADVANCED_UPGRADE, "Advanced Upgrade") + add(RagiumItems.ELITE_UPGRADE, "Elite Upgrade") + add(RagiumItems.ULTIMATE_UPGRADE, "Ultimate Upgrade") + // Mob Effect add(RagiumMobEffects.FROSTBITE, "Frostbite") add(RagiumMobEffects.CHEMICAL_BURN, "Chemical Burn") @@ -236,6 +241,9 @@ class RagiumEnglishLangProvider(output: PackOutput) : add(RagiumTranslation.TOOLTIPS_CARBON, "Dropped from Diamond Ores") add(RagiumTranslation.TOOLTIPS_MEMORY_DISC_DATA, $$"Scanned Item: %1$s") + add(RagiumTranslation.TOOLTIPS_UPGRADE_SPEED, $$"Speed: %1$s") + add(RagiumTranslation.TOOLTIPS_UPGRADE_EFFICIENCY, $$"Energy Efficiency: %1$s") + add(RagiumTranslation.TOOLTIPS_UPGRADE_CAPACITY, $$"Energy Capacity: %1$s") addDataTranslations() } diff --git a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt index 482ac5dca..59a412bc9 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt @@ -150,6 +150,11 @@ class RagiumJapaneseLangProvider(output: PackOutput) : add(RagiumItems.PLATE_MOLD, "板の鋳型") add(RagiumItems.MEMORY_DISC, "メモリーディスク") + add(RagiumItems.BASIC_UPGRADE, "基本アップグレード") + add(RagiumItems.ADVANCED_UPGRADE, "発展アップグレード") + add(RagiumItems.ELITE_UPGRADE, "精鋭アップグレード") + add(RagiumItems.ULTIMATE_UPGRADE, "究極アップグレード") + // Mob Effect add(RagiumMobEffects.FROSTBITE, "凍傷") add(RagiumMobEffects.CHEMICAL_BURN, "化学火傷") @@ -232,6 +237,9 @@ class RagiumJapaneseLangProvider(output: PackOutput) : add(RagiumTranslation.TOOLTIPS_CARBON, "ダイヤモンド鉱石からドロップします") add(RagiumTranslation.TOOLTIPS_MEMORY_DISC_DATA, $$"スキャン済み: %1$s") + add(RagiumTranslation.TOOLTIPS_UPGRADE_SPEED, $$"処理速度: %1$s") + add(RagiumTranslation.TOOLTIPS_UPGRADE_EFFICIENCY, $$"エネルギー効率: %1$s") + add(RagiumTranslation.TOOLTIPS_UPGRADE_CAPACITY, $$"エネルギー容量: %1$s") addDataTranslations() } diff --git a/src/data/kotlin/hiiragi283/ragium/data/loot/RagiumBlockLootTableProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/loot/RagiumBlockLootTableProvider.kt index cf1192db5..432390264 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/loot/RagiumBlockLootTableProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/loot/RagiumBlockLootTableProvider.kt @@ -55,6 +55,7 @@ class RagiumBlockLootTableProvider(registries: HolderLookup.Provider) : .copyComponentsFromBlockEntity(LootContextParams.BLOCK_ENTITY) .include(DataComponents.CUSTOM_NAME) .include(RagiumDataComponents.OWNER_ID) + .include(RagiumDataComponents.UPGRADES) .apply(builderAction) ) +ExplosionCondition.survivesExplosion() diff --git a/src/data/kotlin/hiiragi283/ragium/data/model/RagiumModelProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/model/RagiumModelProvider.kt index 7462ad15c..54d00c65a 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/model/RagiumModelProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/model/RagiumModelProvider.kt @@ -10,7 +10,7 @@ import hiiragi283.lib.resource.HTSimpleValueWithKey import hiiragi283.lib.resource.blockId import hiiragi283.lib.resource.vanillaId import hiiragi283.ragium.api.RagiumAPI -import hiiragi283.ragium.api.tag.HTMachineType +import hiiragi283.ragium.api.machine.HTMachineType import hiiragi283.ragium.common.block.HTMachineBlock import hiiragi283.ragium.common.block.RagiumBlocks import hiiragi283.ragium.common.fluid.RagiumFluids diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt index e4e53bf95..295c7938f 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt @@ -15,9 +15,9 @@ import hiiragi283.lib.tag.HTCommonTags import hiiragi283.lib.tag.HTMaterialLike import hiiragi283.ragium.api.RagiumAPI import hiiragi283.ragium.api.data.recipe.builder.RagiumRecipeBuilders +import hiiragi283.ragium.api.machine.HTMachineType import hiiragi283.ragium.api.material.HTItemPart import hiiragi283.ragium.api.material.RagiumMaterial -import hiiragi283.ragium.api.tag.HTMachineType import hiiragi283.ragium.api.tag.RagiumTags import hiiragi283.ragium.common.block.RagiumBlocks import hiiragi283.ragium.common.fluid.RagiumFluids diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumHeatRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumHeatRecipeProvider.kt index 4d4c04f5e..ef66551d7 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumHeatRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumHeatRecipeProvider.kt @@ -7,9 +7,9 @@ import hiiragi283.lib.data.recipe.builder.result import hiiragi283.lib.tag.CommonTagPrefixes import hiiragi283.ragium.api.RagiumAPI import hiiragi283.ragium.api.data.recipe.builder.RagiumRecipeBuilders +import hiiragi283.ragium.api.machine.HTMachineType import hiiragi283.ragium.api.material.HTItemPart import hiiragi283.ragium.api.material.RagiumMaterial -import hiiragi283.ragium.api.tag.HTMachineType import hiiragi283.ragium.api.tag.RagiumTags import hiiragi283.ragium.common.fluid.RagiumFluids import hiiragi283.ragium.common.item.RagiumItems diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumMechanicalRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumMechanicalRecipeProvider.kt index ed365ae99..bad8cf8d8 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumMechanicalRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumMechanicalRecipeProvider.kt @@ -12,9 +12,9 @@ import hiiragi283.lib.resource.vanillaId import hiiragi283.lib.tag.CommonTagPrefixes import hiiragi283.ragium.api.RagiumAPI import hiiragi283.ragium.api.data.recipe.builder.RagiumRecipeBuilders +import hiiragi283.ragium.api.machine.HTMachineType import hiiragi283.ragium.api.material.HTItemPart import hiiragi283.ragium.api.material.RagiumMaterial -import hiiragi283.ragium.api.tag.HTMachineType import hiiragi283.ragium.api.tag.RagiumTags import hiiragi283.ragium.common.block.RagiumBlocks import hiiragi283.ragium.common.fluid.RagiumFluids diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt index fee6c90d0..d6326ad21 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt @@ -15,10 +15,10 @@ import hiiragi283.lib.tag.HTCommonTags import hiiragi283.lib.tag.HTMaterialLike import hiiragi283.lib.tag.HTTagPrefix import hiiragi283.ragium.api.RagiumAPI +import hiiragi283.ragium.api.machine.HTMachineType import hiiragi283.ragium.api.material.HTItemPart import hiiragi283.ragium.api.material.HTStorageBlockPart import hiiragi283.ragium.api.material.RagiumMaterial -import hiiragi283.ragium.api.tag.HTMachineType import hiiragi283.ragium.api.tag.RagiumTags import hiiragi283.ragium.common.block.RagiumBlocks import hiiragi283.ragium.common.fluid.RagiumFluids @@ -46,6 +46,7 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut decoration() machine() storage() + upgrade() material() // Bamboo Charcoal @@ -522,7 +523,7 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut }.save(exporter) } - // Machine // + // Storage // private fun storage() { // Tank @@ -556,6 +557,43 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut }.save(exporter) } + // Upgrade // + + private fun upgrade() { + // Basic + VanillaRecipeBuilders.shaped { + crossLayered() + define('A') { +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.IRON) } + define('B') { +holderSet(Tags.Items.GLASS_BLOCKS_CHEAP) } + define('C') { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Mineral.REDSTONE) } + define('D') { +holderSet(CommonTagPrefixes.GEAR, RagiumMaterial.Metal.COPPER) } + result { +RagiumItems.BASIC_UPGRADE } + }.save(exporter) + // Advanced + VanillaRecipeBuilders.shaped { + crossLayered() + define('A') { +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.GOLD) } + define('B') { +holderSet(CommonTagPrefixes.GEM, RagiumMaterial.Gem.QUARTZ) } + define('C') { +holderSet(CommonTagPrefixes.GEAR, RagiumMaterial.Metal.IRON) } + define('D') { items { +RagiumItems.BASIC_UPGRADE } } + result { +RagiumItems.ADVANCED_UPGRADE } + }.save(exporter) + // Elite + VanillaRecipeBuilders.shaped { + crossLayered() + define('A') { +holderSet(CommonTagPrefixes.GEM, RagiumMaterial.Gem.DIAMOND) } + define('B') { +holderSet(HTCommonTags.BlockItems.GLASS_BLOCKS_QUARTZ.item) } + define('C') { +holderSet(CommonTagPrefixes.GEAR, RagiumMaterial.Metal.GOLD) } + define('D') { items { +RagiumItems.ADVANCED_UPGRADE } } + result { +RagiumItems.ELITE_UPGRADE } + }.save(exporter) + // Ultimate + netheriteUpgrading { + base { items { +RagiumItems.ELITE_UPGRADE } } + result { +RagiumItems.ULTIMATE_UPGRADE } + } + } + // Material // private fun material() { @@ -589,12 +627,10 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut gear(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.IRON) gear(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.GOLD) RagiumItems.MATERIAL_ITEMS[HTItemPart.GEAR, RagiumMaterial.Alloy.NETHERITE]?.let { - VanillaRecipeBuilders.smithing { - template { items { +Items.NETHERITE_UPGRADE_SMITHING_TEMPLATE } } + netheriteUpgrading { base { +holderSet(CommonTagPrefixes.GEAR, RagiumMaterial.Gem.DIAMOND) } - addition { +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Alloy.NETHERITE) } result { +it } - }.save(exporter) + } } // Dust -> Ingot for (metalLike: RagiumMaterial.MetalLike in RagiumMaterial.MetalLike.entries) { diff --git a/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumBlockItemTagsProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumBlockItemTagsProvider.kt index e65b93a8e..edb340c46 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumBlockItemTagsProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumBlockItemTagsProvider.kt @@ -8,9 +8,9 @@ import hiiragi283.lib.resource.BlockItemKey import hiiragi283.lib.resource.vanillaId import hiiragi283.lib.tag.BlockItemTag import hiiragi283.lib.tag.HTCommonTags +import hiiragi283.ragium.api.machine.HTMachineType import hiiragi283.ragium.api.material.HTBlockPart import hiiragi283.ragium.api.material.RagiumMaterial -import hiiragi283.ragium.api.tag.HTMachineType import hiiragi283.ragium.api.tag.RagiumTags import hiiragi283.ragium.common.block.RagiumBlocks import net.neoforged.neoforge.common.Tags diff --git a/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumItemTagsProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumItemTagsProvider.kt index 893874417..49ab510f7 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumItemTagsProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumItemTagsProvider.kt @@ -12,9 +12,9 @@ import hiiragi283.lib.tag.CommonTagPrefixes import hiiragi283.lib.tag.HTCommonTags import hiiragi283.lib.tag.HTTagPrefix import hiiragi283.ragium.api.RagiumAPI +import hiiragi283.ragium.api.machine.HTMachineType import hiiragi283.ragium.api.material.HTItemPart import hiiragi283.ragium.api.material.RagiumMaterial -import hiiragi283.ragium.api.tag.HTMachineType import hiiragi283.ragium.api.tag.RagiumTags import hiiragi283.ragium.common.block.RagiumBlocks import hiiragi283.ragium.common.fluid.RagiumFluids diff --git a/src/generated/resources/assets/ragium/items/advanced_upgrade.json b/src/generated/resources/assets/ragium/items/advanced_upgrade.json new file mode 100644 index 000000000..b11970510 --- /dev/null +++ b/src/generated/resources/assets/ragium/items/advanced_upgrade.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "ragium:item/advanced_upgrade" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/items/basic_upgrade.json b/src/generated/resources/assets/ragium/items/basic_upgrade.json new file mode 100644 index 000000000..ed7966c41 --- /dev/null +++ b/src/generated/resources/assets/ragium/items/basic_upgrade.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "ragium:item/basic_upgrade" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/items/elite_upgrade.json b/src/generated/resources/assets/ragium/items/elite_upgrade.json new file mode 100644 index 000000000..f1d646297 --- /dev/null +++ b/src/generated/resources/assets/ragium/items/elite_upgrade.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "ragium:item/elite_upgrade" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/items/ultimate_upgrade.json b/src/generated/resources/assets/ragium/items/ultimate_upgrade.json new file mode 100644 index 000000000..2d0646efd --- /dev/null +++ b/src/generated/resources/assets/ragium/items/ultimate_upgrade.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "ragium:item/ultimate_upgrade" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/lang/en_us.json b/src/generated/resources/assets/ragium/lang/en_us.json index 1a95ab517..38939f388 100644 --- a/src/generated/resources/assets/ragium/lang/en_us.json +++ b/src/generated/resources/assets/ragium/lang/en_us.json @@ -192,6 +192,7 @@ "item.minecraft.tipped_arrow.effect.hunger": "Arrow of Hunger", "item.minecraft.tipped_arrow.effect.nausea": "Arrow of Nausea", "item.minecraft.tipped_arrow.effect.wither": "Arrow of Wither", + "item.ragium.advanced_upgrade": "Advanced Upgrade", "item.ragium.alcohol_bucket": "Alcohol Bucket", "item.ragium.aldehyde_bucket": "Aldehyde Bucket", "item.ragium.alumina_dust": "Alumina Dust", @@ -205,6 +206,7 @@ "item.ragium.ash_dust": "Ash Dust", "item.ragium.ball_mold": "Ball Mold", "item.ragium.bamboo_charcoal": "Bamboo Charcoal", + "item.ragium.basic_upgrade": "Basic Upgrade", "item.ragium.bauxite_dust": "Bauxite Dust", "item.ragium.beeswax": "Beeswax", "item.ragium.black_dye_bucket": "Black Dye Bucket", @@ -240,6 +242,7 @@ "item.ragium.elder_heart": "Elder Heart", "item.ragium.electric_circuit": "Electric Circuit", "item.ragium.electronics_machine_parts": "Machine Parts (Electronics)", + "item.ragium.elite_upgrade": "Elite Upgrade", "item.ragium.emerald_dust": "Emerald Dust", "item.ragium.emerald_gear": "Emerald Gear", "item.ragium.fluorite": "Fluorite", @@ -331,6 +334,7 @@ "item.ragium.tiny_coal": "Tiny Coal", "item.ragium.tiny_coal_coke": "Tiny Coal Coke", "item.ragium.tiny_pitch_coke": "Tiny Pitch Coke", + "item.ragium.ultimate_upgrade": "Ultimate Upgrade", "item.ragium.void_metal_ingot": "Void Metal Ingot", "item.ragium.void_metal_nugget": "Void Metal Nugget", "item.ragium.white_dye_bucket": "White Dye Bucket", @@ -524,5 +528,8 @@ "tooltip.ragium.memory_disc_data": "Scanned Item: %1$s", "tooltip.ragium.show_description": "Press Shift to show description", "tooltip.ragium.show_details": "Press Ctrl to show details", - "tooltip.ragium.sulfur": "Dropped from Coal Ores" + "tooltip.ragium.sulfur": "Dropped from Coal Ores", + "tooltip.ragium.upgrade.capacity": "Energy Capacity: %1$s", + "tooltip.ragium.upgrade.efficiency": "Energy Efficiency: %1$s", + "tooltip.ragium.upgrade.speed": "Speed: %1$s" } \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/lang/ja_jp.json b/src/generated/resources/assets/ragium/lang/ja_jp.json index 9045dc1f8..3fa3d2282 100644 --- a/src/generated/resources/assets/ragium/lang/ja_jp.json +++ b/src/generated/resources/assets/ragium/lang/ja_jp.json @@ -192,6 +192,7 @@ "item.minecraft.tipped_arrow.effect.hunger": "空腹の矢", "item.minecraft.tipped_arrow.effect.nausea": "吐き気の矢", "item.minecraft.tipped_arrow.effect.wither": "衰退の矢", + "item.ragium.advanced_upgrade": "発展アップグレード", "item.ragium.alcohol_bucket": "アルコール入りバケツ", "item.ragium.aldehyde_bucket": "アルデヒド入りバケツ", "item.ragium.alumina_dust": "アルミナの粉", @@ -205,6 +206,7 @@ "item.ragium.ash_dust": "灰の粉", "item.ragium.ball_mold": "ボールの鋳型", "item.ragium.bamboo_charcoal": "竹炭", + "item.ragium.basic_upgrade": "基本アップグレード", "item.ragium.bauxite_dust": "ボーキサイトの粉", "item.ragium.beeswax": "密猟", "item.ragium.black_dye_bucket": "黒色の染料入りバケツ", @@ -240,6 +242,7 @@ "item.ragium.elder_heart": "エルダーの心臓", "item.ragium.electric_circuit": "電子回路", "item.ragium.electronics_machine_parts": "機械部品 (電子)", + "item.ragium.elite_upgrade": "精鋭アップグレード", "item.ragium.emerald_dust": "エメラルドの粉", "item.ragium.emerald_gear": "エメラルドの歯車", "item.ragium.fluorite": "蛍石", @@ -331,6 +334,7 @@ "item.ragium.tiny_coal": "小さな石炭", "item.ragium.tiny_coal_coke": "小さな石炭コークス", "item.ragium.tiny_pitch_coke": "小さなピッチコークス", + "item.ragium.ultimate_upgrade": "究極アップグレード", "item.ragium.void_metal_ingot": "虚金インゴット", "item.ragium.void_metal_nugget": "虚金ナゲット", "item.ragium.white_dye_bucket": "白色の染料入りバケツ", @@ -524,5 +528,8 @@ "tooltip.ragium.memory_disc_data": "スキャン済み: %1$s", "tooltip.ragium.show_description": "シフトキーを押して説明を表示", "tooltip.ragium.show_details": "シフトキーを押して詳細を表示", - "tooltip.ragium.sulfur": "石炭鉱石からドロップします" + "tooltip.ragium.sulfur": "石炭鉱石からドロップします", + "tooltip.ragium.upgrade.capacity": "エネルギー容量: %1$s", + "tooltip.ragium.upgrade.efficiency": "エネルギー効率: %1$s", + "tooltip.ragium.upgrade.speed": "処理速度: %1$s" } \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/models/item/advanced_upgrade.json b/src/generated/resources/assets/ragium/models/item/advanced_upgrade.json new file mode 100644 index 000000000..c4d540480 --- /dev/null +++ b/src/generated/resources/assets/ragium/models/item/advanced_upgrade.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "ragium:item/advanced_upgrade" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/models/item/basic_upgrade.json b/src/generated/resources/assets/ragium/models/item/basic_upgrade.json new file mode 100644 index 000000000..48b4a9e26 --- /dev/null +++ b/src/generated/resources/assets/ragium/models/item/basic_upgrade.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "ragium:item/basic_upgrade" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/models/item/elite_upgrade.json b/src/generated/resources/assets/ragium/models/item/elite_upgrade.json new file mode 100644 index 000000000..8b209ed8f --- /dev/null +++ b/src/generated/resources/assets/ragium/models/item/elite_upgrade.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "ragium:item/elite_upgrade" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/models/item/ultimate_upgrade.json b/src/generated/resources/assets/ragium/models/item/ultimate_upgrade.json new file mode 100644 index 000000000..0626c2f20 --- /dev/null +++ b/src/generated/resources/assets/ragium/models/item/ultimate_upgrade.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "ragium:item/ultimate_upgrade" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/loot_table/blocks/alloy_smelter.json b/src/generated/resources/data/ragium/loot_table/blocks/alloy_smelter.json index 1649a28f9..c827b449f 100644 --- a/src/generated/resources/data/ragium/loot_table/blocks/alloy_smelter.json +++ b/src/generated/resources/data/ragium/loot_table/blocks/alloy_smelter.json @@ -16,7 +16,8 @@ "function": "minecraft:copy_components", "include": [ "minecraft:custom_name", - "ragium:owner_id" + "ragium:owner_id", + "ragium:upgrades" ], "source": "block_entity" } diff --git a/src/generated/resources/data/ragium/loot_table/blocks/assembler.json b/src/generated/resources/data/ragium/loot_table/blocks/assembler.json index 9bdc1aa1f..bd71c767d 100644 --- a/src/generated/resources/data/ragium/loot_table/blocks/assembler.json +++ b/src/generated/resources/data/ragium/loot_table/blocks/assembler.json @@ -16,7 +16,8 @@ "function": "minecraft:copy_components", "include": [ "minecraft:custom_name", - "ragium:owner_id" + "ragium:owner_id", + "ragium:upgrades" ], "source": "block_entity" } diff --git a/src/generated/resources/data/ragium/loot_table/blocks/blender.json b/src/generated/resources/data/ragium/loot_table/blocks/blender.json index d7ceca31b..e9b0631eb 100644 --- a/src/generated/resources/data/ragium/loot_table/blocks/blender.json +++ b/src/generated/resources/data/ragium/loot_table/blocks/blender.json @@ -16,7 +16,8 @@ "function": "minecraft:copy_components", "include": [ "minecraft:custom_name", - "ragium:owner_id" + "ragium:owner_id", + "ragium:upgrades" ], "source": "block_entity" } diff --git a/src/generated/resources/data/ragium/loot_table/blocks/chemical_bath.json b/src/generated/resources/data/ragium/loot_table/blocks/chemical_bath.json index ec2e1ead6..272d8b614 100644 --- a/src/generated/resources/data/ragium/loot_table/blocks/chemical_bath.json +++ b/src/generated/resources/data/ragium/loot_table/blocks/chemical_bath.json @@ -16,7 +16,8 @@ "function": "minecraft:copy_components", "include": [ "minecraft:custom_name", - "ragium:owner_id" + "ragium:owner_id", + "ragium:upgrades" ], "source": "block_entity" } diff --git a/src/generated/resources/data/ragium/loot_table/blocks/chemical_reactor.json b/src/generated/resources/data/ragium/loot_table/blocks/chemical_reactor.json index e2ac729b2..4c33c4bd0 100644 --- a/src/generated/resources/data/ragium/loot_table/blocks/chemical_reactor.json +++ b/src/generated/resources/data/ragium/loot_table/blocks/chemical_reactor.json @@ -16,7 +16,8 @@ "function": "minecraft:copy_components", "include": [ "minecraft:custom_name", - "ragium:owner_id" + "ragium:owner_id", + "ragium:upgrades" ], "source": "block_entity" } diff --git a/src/generated/resources/data/ragium/loot_table/blocks/compressor.json b/src/generated/resources/data/ragium/loot_table/blocks/compressor.json index 364e2c9f9..19906e9e7 100644 --- a/src/generated/resources/data/ragium/loot_table/blocks/compressor.json +++ b/src/generated/resources/data/ragium/loot_table/blocks/compressor.json @@ -16,7 +16,8 @@ "function": "minecraft:copy_components", "include": [ "minecraft:custom_name", - "ragium:owner_id" + "ragium:owner_id", + "ragium:upgrades" ], "source": "block_entity" } diff --git a/src/generated/resources/data/ragium/loot_table/blocks/creative_tank.json b/src/generated/resources/data/ragium/loot_table/blocks/creative_tank.json index 23360595c..d3d2e3ba6 100644 --- a/src/generated/resources/data/ragium/loot_table/blocks/creative_tank.json +++ b/src/generated/resources/data/ragium/loot_table/blocks/creative_tank.json @@ -17,6 +17,7 @@ "include": [ "minecraft:custom_name", "ragium:owner_id", + "ragium:upgrades", "ragium:fluid" ], "source": "block_entity" diff --git a/src/generated/resources/data/ragium/loot_table/blocks/crusher.json b/src/generated/resources/data/ragium/loot_table/blocks/crusher.json index 5c46060f4..6a437bc45 100644 --- a/src/generated/resources/data/ragium/loot_table/blocks/crusher.json +++ b/src/generated/resources/data/ragium/loot_table/blocks/crusher.json @@ -16,7 +16,8 @@ "function": "minecraft:copy_components", "include": [ "minecraft:custom_name", - "ragium:owner_id" + "ragium:owner_id", + "ragium:upgrades" ], "source": "block_entity" } diff --git a/src/generated/resources/data/ragium/loot_table/blocks/cutting_machine.json b/src/generated/resources/data/ragium/loot_table/blocks/cutting_machine.json index 76e2af19f..412021740 100644 --- a/src/generated/resources/data/ragium/loot_table/blocks/cutting_machine.json +++ b/src/generated/resources/data/ragium/loot_table/blocks/cutting_machine.json @@ -16,7 +16,8 @@ "function": "minecraft:copy_components", "include": [ "minecraft:custom_name", - "ragium:owner_id" + "ragium:owner_id", + "ragium:upgrades" ], "source": "block_entity" } diff --git a/src/generated/resources/data/ragium/loot_table/blocks/electrolyzer.json b/src/generated/resources/data/ragium/loot_table/blocks/electrolyzer.json index ffa2c6901..6f80aecf5 100644 --- a/src/generated/resources/data/ragium/loot_table/blocks/electrolyzer.json +++ b/src/generated/resources/data/ragium/loot_table/blocks/electrolyzer.json @@ -16,7 +16,8 @@ "function": "minecraft:copy_components", "include": [ "minecraft:custom_name", - "ragium:owner_id" + "ragium:owner_id", + "ragium:upgrades" ], "source": "block_entity" } diff --git a/src/generated/resources/data/ragium/loot_table/blocks/enchanter.json b/src/generated/resources/data/ragium/loot_table/blocks/enchanter.json index 0189e8cc9..2d37584e9 100644 --- a/src/generated/resources/data/ragium/loot_table/blocks/enchanter.json +++ b/src/generated/resources/data/ragium/loot_table/blocks/enchanter.json @@ -16,7 +16,8 @@ "function": "minecraft:copy_components", "include": [ "minecraft:custom_name", - "ragium:owner_id" + "ragium:owner_id", + "ragium:upgrades" ], "source": "block_entity" } diff --git a/src/generated/resources/data/ragium/loot_table/blocks/fluid_output_bus.json b/src/generated/resources/data/ragium/loot_table/blocks/fluid_output_bus.json index 689aeadd8..d7b7db3db 100644 --- a/src/generated/resources/data/ragium/loot_table/blocks/fluid_output_bus.json +++ b/src/generated/resources/data/ragium/loot_table/blocks/fluid_output_bus.json @@ -17,6 +17,7 @@ "include": [ "minecraft:custom_name", "ragium:owner_id", + "ragium:upgrades", "ragium:fluid" ], "source": "block_entity" diff --git a/src/generated/resources/data/ragium/loot_table/blocks/freezer.json b/src/generated/resources/data/ragium/loot_table/blocks/freezer.json index 89ca3ae9f..83041de8f 100644 --- a/src/generated/resources/data/ragium/loot_table/blocks/freezer.json +++ b/src/generated/resources/data/ragium/loot_table/blocks/freezer.json @@ -16,7 +16,8 @@ "function": "minecraft:copy_components", "include": [ "minecraft:custom_name", - "ragium:owner_id" + "ragium:owner_id", + "ragium:upgrades" ], "source": "block_entity" } diff --git a/src/generated/resources/data/ragium/loot_table/blocks/melter.json b/src/generated/resources/data/ragium/loot_table/blocks/melter.json index d486c42aa..0cbd2cefa 100644 --- a/src/generated/resources/data/ragium/loot_table/blocks/melter.json +++ b/src/generated/resources/data/ragium/loot_table/blocks/melter.json @@ -16,7 +16,8 @@ "function": "minecraft:copy_components", "include": [ "minecraft:custom_name", - "ragium:owner_id" + "ragium:owner_id", + "ragium:upgrades" ], "source": "block_entity" } diff --git a/src/generated/resources/data/ragium/loot_table/blocks/mixer.json b/src/generated/resources/data/ragium/loot_table/blocks/mixer.json index 89ccafc1d..e4c8e13bd 100644 --- a/src/generated/resources/data/ragium/loot_table/blocks/mixer.json +++ b/src/generated/resources/data/ragium/loot_table/blocks/mixer.json @@ -16,7 +16,8 @@ "function": "minecraft:copy_components", "include": [ "minecraft:custom_name", - "ragium:owner_id" + "ragium:owner_id", + "ragium:upgrades" ], "source": "block_entity" } diff --git a/src/generated/resources/data/ragium/loot_table/blocks/planter.json b/src/generated/resources/data/ragium/loot_table/blocks/planter.json index b67a6e928..8490c5bc0 100644 --- a/src/generated/resources/data/ragium/loot_table/blocks/planter.json +++ b/src/generated/resources/data/ragium/loot_table/blocks/planter.json @@ -16,7 +16,8 @@ "function": "minecraft:copy_components", "include": [ "minecraft:custom_name", - "ragium:owner_id" + "ragium:owner_id", + "ragium:upgrades" ], "source": "block_entity" } diff --git a/src/generated/resources/data/ragium/loot_table/blocks/potion_tank.json b/src/generated/resources/data/ragium/loot_table/blocks/potion_tank.json index b7594c193..d86457b39 100644 --- a/src/generated/resources/data/ragium/loot_table/blocks/potion_tank.json +++ b/src/generated/resources/data/ragium/loot_table/blocks/potion_tank.json @@ -17,6 +17,7 @@ "include": [ "minecraft:custom_name", "ragium:owner_id", + "ragium:upgrades", "ragium:fluid" ], "source": "block_entity" diff --git a/src/generated/resources/data/ragium/loot_table/blocks/precision_assembler.json b/src/generated/resources/data/ragium/loot_table/blocks/precision_assembler.json index 74545e4b7..6f52a9565 100644 --- a/src/generated/resources/data/ragium/loot_table/blocks/precision_assembler.json +++ b/src/generated/resources/data/ragium/loot_table/blocks/precision_assembler.json @@ -16,7 +16,8 @@ "function": "minecraft:copy_components", "include": [ "minecraft:custom_name", - "ragium:owner_id" + "ragium:owner_id", + "ragium:upgrades" ], "source": "block_entity" } diff --git a/src/generated/resources/data/ragium/loot_table/blocks/pyrolyzer.json b/src/generated/resources/data/ragium/loot_table/blocks/pyrolyzer.json index 780f54649..72cfbeb5c 100644 --- a/src/generated/resources/data/ragium/loot_table/blocks/pyrolyzer.json +++ b/src/generated/resources/data/ragium/loot_table/blocks/pyrolyzer.json @@ -16,7 +16,8 @@ "function": "minecraft:copy_components", "include": [ "minecraft:custom_name", - "ragium:owner_id" + "ragium:owner_id", + "ragium:upgrades" ], "source": "block_entity" } diff --git a/src/generated/resources/data/ragium/loot_table/blocks/refinery.json b/src/generated/resources/data/ragium/loot_table/blocks/refinery.json index eb1f91ee7..39df7a0b3 100644 --- a/src/generated/resources/data/ragium/loot_table/blocks/refinery.json +++ b/src/generated/resources/data/ragium/loot_table/blocks/refinery.json @@ -16,7 +16,8 @@ "function": "minecraft:copy_components", "include": [ "minecraft:custom_name", - "ragium:owner_id" + "ragium:owner_id", + "ragium:upgrades" ], "source": "block_entity" } diff --git a/src/generated/resources/data/ragium/loot_table/blocks/scanner.json b/src/generated/resources/data/ragium/loot_table/blocks/scanner.json index 1d87bfab5..2fc9fb925 100644 --- a/src/generated/resources/data/ragium/loot_table/blocks/scanner.json +++ b/src/generated/resources/data/ragium/loot_table/blocks/scanner.json @@ -16,7 +16,8 @@ "function": "minecraft:copy_components", "include": [ "minecraft:custom_name", - "ragium:owner_id" + "ragium:owner_id", + "ragium:upgrades" ], "source": "block_entity" } diff --git a/src/generated/resources/data/ragium/loot_table/blocks/smelter.json b/src/generated/resources/data/ragium/loot_table/blocks/smelter.json index 4d83b362e..3e615198b 100644 --- a/src/generated/resources/data/ragium/loot_table/blocks/smelter.json +++ b/src/generated/resources/data/ragium/loot_table/blocks/smelter.json @@ -16,7 +16,8 @@ "function": "minecraft:copy_components", "include": [ "minecraft:custom_name", - "ragium:owner_id" + "ragium:owner_id", + "ragium:upgrades" ], "source": "block_entity" } diff --git a/src/generated/resources/data/ragium/loot_table/blocks/tank.json b/src/generated/resources/data/ragium/loot_table/blocks/tank.json index 21b5a4cd6..a92eff699 100644 --- a/src/generated/resources/data/ragium/loot_table/blocks/tank.json +++ b/src/generated/resources/data/ragium/loot_table/blocks/tank.json @@ -17,6 +17,7 @@ "include": [ "minecraft:custom_name", "ragium:owner_id", + "ragium:upgrades", "ragium:fluid" ], "source": "block_entity" diff --git a/src/generated/resources/data/ragium/loot_table/blocks/upgrade_station.json b/src/generated/resources/data/ragium/loot_table/blocks/upgrade_station.json index 1b3638168..0fecdf117 100644 --- a/src/generated/resources/data/ragium/loot_table/blocks/upgrade_station.json +++ b/src/generated/resources/data/ragium/loot_table/blocks/upgrade_station.json @@ -16,7 +16,8 @@ "function": "minecraft:copy_components", "include": [ "minecraft:custom_name", - "ragium:owner_id" + "ragium:owner_id", + "ragium:upgrades" ], "source": "block_entity" } diff --git a/src/generated/resources/data/ragium/recipe/shaped/advanced_upgrade.json b/src/generated/resources/data/ragium/recipe/shaped/advanced_upgrade.json new file mode 100644 index 000000000..32f02e13b --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/shaped/advanced_upgrade.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "A": "#c:ingots/gold", + "B": "#c:gems/quartz", + "C": "#c:gears/iron", + "D": "ragium:basic_upgrade" + }, + "pattern": [ + "ABA", + "CDC", + "ABA" + ], + "result": { + "id": "ragium:advanced_upgrade" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/shaped/basic_upgrade.json b/src/generated/resources/data/ragium/recipe/shaped/basic_upgrade.json new file mode 100644 index 000000000..560444603 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/shaped/basic_upgrade.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "A": "#c:ingots/iron", + "B": "#c:glass_blocks/cheap", + "C": "#c:dusts/redstone", + "D": "#c:gears/copper" + }, + "pattern": [ + "ABA", + "CDC", + "ABA" + ], + "result": { + "id": "ragium:basic_upgrade" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/shaped/elite_upgrade.json b/src/generated/resources/data/ragium/recipe/shaped/elite_upgrade.json new file mode 100644 index 000000000..945f9cc58 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/shaped/elite_upgrade.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "A": "#c:gems/diamond", + "B": "#c:glass_blocks/quartz", + "C": "#c:gears/gold", + "D": "ragium:advanced_upgrade" + }, + "pattern": [ + "ABA", + "CDC", + "ABA" + ], + "result": { + "id": "ragium:elite_upgrade" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/smithing/ultimate_upgrade.json b/src/generated/resources/data/ragium/recipe/smithing/ultimate_upgrade.json new file mode 100644 index 000000000..8918289c5 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/smithing/ultimate_upgrade.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smithing_transform", + "addition": "#c:ingots/netherite", + "base": "ragium:elite_upgrade", + "result": { + "id": "ragium:ultimate_upgrade" + }, + "template": "minecraft:netherite_upgrade_smithing_template" +} \ No newline at end of file diff --git a/src/generated/resources/reports/ragium/registries.json b/src/generated/resources/reports/ragium/registries.json index b4f68c57d..70701026f 100644 --- a/src/generated/resources/reports/ragium/registries.json +++ b/src/generated/resources/reports/ragium/registries.json @@ -120,6 +120,7 @@ "fluid", "memory_disc_data", "owner_id", + "upgrade", "upgrades" ], "minecraft:fluid": [ @@ -206,6 +207,7 @@ "yellow_dye" ], "minecraft:item": [ + "advanced_upgrade", "alcohol_bucket", "aldehyde_bucket", "alloy_smelter", @@ -223,6 +225,7 @@ "assembler", "ball_mold", "bamboo_charcoal", + "basic_upgrade", "bauxite_dust", "beeswax", "black_dye_bucket", @@ -275,6 +278,7 @@ "electrolyzer", "electronics_machine_casing", "electronics_machine_parts", + "elite_upgrade", "emerald_dust", "emerald_gear", "enchanter", @@ -395,6 +399,7 @@ "tiny_coal", "tiny_coal_coke", "tiny_pitch_coke", + "ultimate_upgrade", "upgrade_station", "void_metal_block", "void_metal_ingot", diff --git a/src/lib/kotlin/hiiragi283/lib/HTConstants.kt b/src/lib/kotlin/hiiragi283/lib/HTConstants.kt index 6c9dc6ede..ec3ed666d 100644 --- a/src/lib/kotlin/hiiragi283/lib/HTConstants.kt +++ b/src/lib/kotlin/hiiragi283/lib/HTConstants.kt @@ -107,7 +107,16 @@ data object HTConstants { const val TOOLTIP = "tooltip" const val ITEM_GROUP = "itemGroup" + + // Upgrades // + const val UPGRADE = "upgrade" + const val UPGRADES = "upgrades" + + const val SPEED = "speed" + const val EFFICIENCY = "efficiency" + + // Keys // data object Keys { @JvmField diff --git a/src/lib/kotlin/hiiragi283/lib/data/recipe/HTRecipeProvider.kt b/src/lib/kotlin/hiiragi283/lib/data/recipe/HTRecipeProvider.kt index 2330815c2..219f9adc2 100644 --- a/src/lib/kotlin/hiiragi283/lib/data/recipe/HTRecipeProvider.kt +++ b/src/lib/kotlin/hiiragi283/lib/data/recipe/HTRecipeProvider.kt @@ -6,16 +6,20 @@ import hiiragi283.lib.collection.Nel import hiiragi283.lib.collection.nelOf import hiiragi283.lib.collection.toNel import hiiragi283.lib.data.ExporterDataProvider +import hiiragi283.lib.data.recipe.builder.VanillaRecipeBuilders +import hiiragi283.lib.data.recipe.builder.vanilla.HTSmithingRecipeBuilder import hiiragi283.lib.recipe.ingredient.HTMaterialTagsIngredient import hiiragi283.lib.tag.CommonTagPrefixes import hiiragi283.lib.tag.HTMaterialLike import hiiragi283.lib.tag.HTTagPrefix +import hiiragi283.ragium.api.material.RagiumMaterial import net.minecraft.core.HolderLookup import net.minecraft.core.registries.Registries import net.minecraft.data.PackOutput import net.minecraft.resources.Identifier import net.minecraft.tags.TagKey import net.minecraft.world.item.Item +import net.minecraft.world.item.Items import net.minecraft.world.item.crafting.Recipe import net.neoforged.neoforge.common.conditions.ModLoadedCondition import java.util.concurrent.CompletableFuture @@ -36,12 +40,12 @@ abstract class HTRecipeProvider( /** * @since 26.1.7 */ - fun materialTags(tags: Nel>): HTMaterialTagsIngredient = HTMaterialTagsIngredient(tags) + protected fun materialTags(tags: Nel>): HTMaterialTagsIngredient = HTMaterialTagsIngredient(tags) /** * @since 26.1.7 */ - fun materialTags(prefixes: Nel, materials: Nel): HTMaterialTagsIngredient = + protected fun materialTags(prefixes: Nel, materials: Nel): HTMaterialTagsIngredient = materialTags( prefixes .flatMap { prefix: HTTagPrefix -> materials.map(prefix::itemTagKey) } @@ -52,27 +56,38 @@ abstract class HTRecipeProvider( /** * @since 26.1.7 */ - fun materialTags(prefixes: Nel, material: HTMaterialLike): HTMaterialTagsIngredient = + protected fun materialTags(prefixes: Nel, material: HTMaterialLike): HTMaterialTagsIngredient = materialTags(prefixes.map { it.itemTagKey(material) }) /** * @since 26.1.7 */ - fun materialTags(prefix: HTTagPrefix, materials: Nel): HTMaterialTagsIngredient = + protected fun materialTags(prefix: HTTagPrefix, materials: Nel): HTMaterialTagsIngredient = materialTags(materials.map(prefix::itemTagKey)) /** * @since 26.1.7 */ - fun dustOrGem(material: HTMaterialLike): HTMaterialTagsIngredient = + protected fun dustOrGem(material: HTMaterialLike): HTMaterialTagsIngredient = materialTags(nelOf(CommonTagPrefixes.DUST, CommonTagPrefixes.GEM), material) /** * @since 26.1.7 */ - fun dustOrIngot(material: HTMaterialLike): HTMaterialTagsIngredient = + protected fun dustOrIngot(material: HTMaterialLike): HTMaterialTagsIngredient = materialTags(nelOf(CommonTagPrefixes.DUST, CommonTagPrefixes.INGOT), material) + /** + * @since 26.1.9 + */ + protected inline fun netheriteUpgrading(builderAction: HTSmithingRecipeBuilder.() -> Unit) { + VanillaRecipeBuilders.smithing { + template { items { +Items.NETHERITE_UPGRADE_SMITHING_TEMPLATE } } + addition { +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Alloy.NETHERITE) } + builderAction() + }.save(exporter) + } + // Integration // abstract class Integration( diff --git a/src/lib/kotlin/hiiragi283/lib/resource/HTValueWithKey.kt b/src/lib/kotlin/hiiragi283/lib/resource/HTValueWithKey.kt index 3f26e657f..956bf0909 100644 --- a/src/lib/kotlin/hiiragi283/lib/resource/HTValueWithKey.kt +++ b/src/lib/kotlin/hiiragi283/lib/resource/HTValueWithKey.kt @@ -1,6 +1,5 @@ package hiiragi283.lib.resource -import hiiragi283.lib.util.Either import net.minecraft.resources.Identifier import net.minecraft.resources.ResourceKey @@ -32,11 +31,6 @@ interface HTValueWithKey { */ fun id(): Identifier = key().identifier() - /** - * 値を取得します。 - */ - fun asEither(): Either = TODO() - fun asResult(): Result /** diff --git a/src/lib/kotlin/hiiragi283/ragium/api/data/RagiumDataComponents.kt b/src/lib/kotlin/hiiragi283/ragium/api/data/RagiumDataComponents.kt index b7d92d3ca..b7f6c9bcb 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/data/RagiumDataComponents.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/data/RagiumDataComponents.kt @@ -2,14 +2,14 @@ package hiiragi283.ragium.api.data import hiiragi283.lib.data.DataComponentType import hiiragi283.lib.serialization.codec.HTCodecs -import hiiragi283.lib.serialization.codec.listOrElement import hiiragi283.lib.serialization.network.HTStreamCodecs import hiiragi283.ragium.api.data.chemical.HTChemical +import hiiragi283.ragium.api.machine.HTMachineUpgrade +import hiiragi283.ragium.api.machine.HTMachineUpgradeList import hiiragi283.ragium.api.text.HTItemTooltip import net.minecraft.core.Holder import net.minecraft.core.component.DataComponentType import net.minecraft.network.codec.ByteBufCodecs -import net.minecraft.world.item.ItemStack import net.minecraft.world.item.ItemStackTemplate import net.neoforged.neoforge.fluids.SimpleFluidContent import java.util.UUID @@ -57,6 +57,13 @@ data object RagiumDataComponents { * @since 26.1.9 */ @JvmField - val UPGRADES: DataComponentType> = - DataComponentType(ItemStack.OPTIONAL_CODEC.listOrElement(0, 4), ItemStack.OPTIONAL_LIST_STREAM_CODEC) + val UPGRADE: DataComponentType = + DataComponentType(HTMachineUpgrade.CODEC, HTMachineUpgrade.STREAM_CODEC) + + /** + * @since 26.1.9 + */ + @JvmField + val UPGRADES: DataComponentType = + DataComponentType(HTMachineUpgradeList.CODEC, HTMachineUpgradeList.STREAM_CODEC) } diff --git a/src/lib/kotlin/hiiragi283/ragium/api/tag/HTMachineType.kt b/src/lib/kotlin/hiiragi283/ragium/api/machine/HTMachineType.kt similarity index 95% rename from src/lib/kotlin/hiiragi283/ragium/api/tag/HTMachineType.kt rename to src/lib/kotlin/hiiragi283/ragium/api/machine/HTMachineType.kt index b033b6bd4..1c6cea864 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/tag/HTMachineType.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/machine/HTMachineType.kt @@ -1,4 +1,4 @@ -package hiiragi283.ragium.api.tag +package hiiragi283.ragium.api.machine import hiiragi283.lib.data.lang.HTLangName import hiiragi283.lib.tag.HTMaterialLike diff --git a/src/lib/kotlin/hiiragi283/ragium/api/machine/HTMachineUpgrade.kt b/src/lib/kotlin/hiiragi283/ragium/api/machine/HTMachineUpgrade.kt new file mode 100644 index 000000000..5e298238d --- /dev/null +++ b/src/lib/kotlin/hiiragi283/ragium/api/machine/HTMachineUpgrade.kt @@ -0,0 +1,84 @@ +package hiiragi283.ragium.api.machine + +import com.mojang.serialization.Codec +import hiiragi283.lib.HTConstants +import hiiragi283.lib.serialization.codec.HTCodecs +import hiiragi283.lib.text.HTCommonTranslation +import hiiragi283.lib.text.Text +import hiiragi283.ragium.api.text.RagiumTranslation +import io.netty.buffer.ByteBuf +import net.minecraft.ChatFormatting +import net.minecraft.core.component.DataComponentGetter +import net.minecraft.network.chat.Component +import net.minecraft.network.codec.ByteBufCodecs +import net.minecraft.network.codec.StreamCodec +import net.minecraft.world.item.Item +import net.minecraft.world.item.TooltipFlag +import net.minecraft.world.item.component.TooltipProvider +import net.neoforged.neoforge.common.util.NeoForgeExtraCodecs +import java.util.function.Consumer + +/** + * 機械のアップグレードのパラメータを保持するクラスです。 + * @param speed 機械の処理速度 + * @param efficiency 機械の電力効率 + * @param capacity 機械の電気容量 + * @param customKeys 固有処理のフラグの一覧 + * @author Hiiragi Tsubasa + * @since 26.1.9 + */ +@JvmRecord +data class HTMachineUpgrade( + val speed: Int = 0, + val efficiency: Int = 0, + val capacity: Int = 0, + val customKeys: Set = setOf() +) : TooltipProvider { + companion object { + @JvmField + val CODEC: Codec = HTCodecs.record { instance -> + instance.group( + Codec.INT.optionalFieldOf(HTConstants.SPEED, 0).forGetter(HTMachineUpgrade::speed), + Codec.INT.optionalFieldOf(HTConstants.EFFICIENCY, 0).forGetter(HTMachineUpgrade::efficiency), + Codec.INT.optionalFieldOf(HTConstants.CAPACITY, 0).forGetter(HTMachineUpgrade::capacity), + NeoForgeExtraCodecs.setOf(Codec.STRING) + .optionalFieldOf("custom_keys", setOf()) + .forGetter(HTMachineUpgrade::customKeys) + ).apply(instance, ::HTMachineUpgrade) + } + + @JvmField + val STREAM_CODEC: StreamCodec = StreamCodec.composite( + ByteBufCodecs.VAR_INT, + HTMachineUpgrade::speed, + ByteBufCodecs.VAR_INT, + HTMachineUpgrade::efficiency, + ByteBufCodecs.VAR_INT, + HTMachineUpgrade::capacity, + ByteBufCodecs.STRING_UTF8.apply(ByteBufCodecs.collection(::LinkedHashSet)), + HTMachineUpgrade::customKeys, + ::HTMachineUpgrade + ) + } + + override fun addToTooltip( + context: Item.TooltipContext, + consumer: Consumer, + flag: TooltipFlag, + components: DataComponentGetter + ) { + setOf( + this.speed to RagiumTranslation.TOOLTIPS_UPGRADE_SPEED, + this.efficiency to RagiumTranslation.TOOLTIPS_UPGRADE_EFFICIENCY, + this.capacity to RagiumTranslation.TOOLTIPS_UPGRADE_CAPACITY + ).forEach { (value: Int, translation: RagiumTranslation) -> + getText(value)?.let { consumer.accept(translation.translateColored(ChatFormatting.YELLOW, it)) } + } + } + + private fun getText(value: Int): Text? = when { + value < 0 -> HTCommonTranslation.PERCENTAGE.translateColored(ChatFormatting.RED, "-$value") + value > 0 -> HTCommonTranslation.PERCENTAGE.translateColored(ChatFormatting.GREEN, "+$value") + else -> null + } +} diff --git a/src/lib/kotlin/hiiragi283/ragium/api/machine/HTMachineUpgradeHelper.kt b/src/lib/kotlin/hiiragi283/ragium/api/machine/HTMachineUpgradeHelper.kt new file mode 100644 index 000000000..2f38e3033 --- /dev/null +++ b/src/lib/kotlin/hiiragi283/ragium/api/machine/HTMachineUpgradeHelper.kt @@ -0,0 +1,41 @@ +package hiiragi283.ragium.api.machine + +import com.google.common.primitives.Ints +import hiiragi283.ragium.api.data.RagiumDataComponents +import net.minecraft.core.component.DataComponentGetter +import net.neoforged.neoforge.common.MutableDataComponentHolder + +data object HTMachineUpgradeHelper { + @JvmStatic + fun getUpgrades(getter: DataComponentGetter): HTMachineUpgradeList = + getter.getOrDefault(RagiumDataComponents.UPGRADES, HTMachineUpgradeList.EMPTY) + + @JvmStatic + fun getCombinedUpgrade(getter: DataComponentGetter): HTMachineUpgrade = getUpgrades(getter).combinedUpgrade + + @JvmStatic + fun setUpgrades(holder: MutableDataComponentHolder, upgradeList: HTMachineUpgradeList.Mutable) { + setUpgrades(holder, upgradeList.toImmutable()) + } + + @JvmStatic + fun setUpgrades(holder: MutableDataComponentHolder, upgradeList: HTMachineUpgradeList) { + holder.set(RagiumDataComponents.UPGRADES, upgradeList.takeUnless(HTMachineUpgradeList::isEmpty)) + } + + @JvmStatic + fun modifySpeed(getter: DataComponentGetter, base: Int): Int = + Ints.saturatedCast(base * (100L + getCombinedUpgrade(getter).speed) / 100) + + @JvmStatic + fun modifyTime(getter: DataComponentGetter, base: Int): Int = + Ints.saturatedCast(base * 100 / (100L + getCombinedUpgrade(getter).speed)) + + @JvmStatic + fun modifyEfficiency(getter: DataComponentGetter, base: Int): Int = + Ints.saturatedCast(base * (100L + getCombinedUpgrade(getter).efficiency) / 100) + + @JvmStatic + fun modifyCapacity(getter: DataComponentGetter, base: Int): Int = + Ints.saturatedCast(base * (100L + getCombinedUpgrade(getter).capacity) / 100) +} diff --git a/src/lib/kotlin/hiiragi283/ragium/api/machine/HTMachineUpgradeList.kt b/src/lib/kotlin/hiiragi283/ragium/api/machine/HTMachineUpgradeList.kt new file mode 100644 index 000000000..cc2f613c9 --- /dev/null +++ b/src/lib/kotlin/hiiragi283/ragium/api/machine/HTMachineUpgradeList.kt @@ -0,0 +1,85 @@ +package hiiragi283.ragium.api.machine + +import com.mojang.serialization.Codec +import hiiragi283.ragium.api.data.RagiumDataComponents +import net.minecraft.core.component.DataComponentGetter +import net.minecraft.network.RegistryFriendlyByteBuf +import net.minecraft.network.chat.Component +import net.minecraft.network.codec.StreamCodec +import net.minecraft.world.item.Item +import net.minecraft.world.item.ItemStack +import net.minecraft.world.item.TooltipFlag +import net.minecraft.world.item.component.TooltipProvider +import java.util.function.Consumer + +/** + * 機械のアップグレードを束ねるクラスです。 + * @author Hiiragi Tsubasa + * @since 26.1.9 + */ +class HTMachineUpgradeList private constructor(private val stacks: List) : TooltipProvider { + companion object { + @JvmField + val EMPTY = HTMachineUpgradeList(List(4) { ItemStack.EMPTY }) + + @JvmField + val CODEC: Codec = ItemStack.OPTIONAL_CODEC + .listOf(4, 4) + .xmap(::HTMachineUpgradeList, HTMachineUpgradeList::stacks) + + @JvmField + val STREAM_CODEC: StreamCodec = + ItemStack.OPTIONAL_LIST_STREAM_CODEC.map(::HTMachineUpgradeList, HTMachineUpgradeList::stacks) + } + + val isEmpty: Boolean get() = stacks.all(ItemStack::isEmpty) + + operator fun get(index: Int): ItemStack = stacks[index].copy() + + val combinedUpgrade: HTMachineUpgrade = stacks.mapNotNull { it.get(RagiumDataComponents.UPGRADE) }.let { + HTMachineUpgrade( + it.sumOf(HTMachineUpgrade::speed), + it.sumOf(HTMachineUpgrade::efficiency), + it.sumOf(HTMachineUpgrade::capacity), + it.flatMap(HTMachineUpgrade::customKeys).toSet() + ) + } + + override fun addToTooltip( + context: Item.TooltipContext, + consumer: Consumer, + flag: TooltipFlag, + components: DataComponentGetter + ) { + combinedUpgrade.addToTooltip(context, consumer, flag, components) + } + + @Suppress("DEPRECATION") + override fun equals(other: Any?): Boolean = + other is HTMachineUpgradeList && ItemStack.listMatches(this.stacks, other.stacks) + + @Suppress("DEPRECATION") + override fun hashCode(): Int = ItemStack.hashStackList(stacks) + + override fun toString(): String = "HTMachineUpgradeList(stacks=$stacks)" + + // Mutable // + + /** + * @author Hiiragi Tsubasa + * @since 26.1.9 + */ + class Mutable { + private val stacks: MutableList = MutableList(4) { ItemStack.EMPTY } + + constructor(parent: HTMachineUpgradeList) { + parent.stacks.forEachIndexed(stacks::set) + } + + operator fun set(index: Int, stack: ItemStack) { + stacks[index] = stack.copyWithCount(1) + } + + fun toImmutable(): HTMachineUpgradeList = HTMachineUpgradeList(stacks) + } +} diff --git a/src/lib/kotlin/hiiragi283/ragium/api/text/RagiumTranslation.kt b/src/lib/kotlin/hiiragi283/ragium/api/text/RagiumTranslation.kt index 4cc03e09d..ec7e0ef8d 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/text/RagiumTranslation.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/text/RagiumTranslation.kt @@ -23,7 +23,10 @@ enum class RagiumTranslation(type: String, vararg path: String) : HTTranslation TOOLTIPS_FLUORITE(HTConstants.TOOLTIP, "fluorite"), TOOLTIPS_CARBON(HTConstants.TOOLTIP, "carbon"), - TOOLTIPS_MEMORY_DISC_DATA(HTConstants.TOOLTIP, "memory_disc_data") + TOOLTIPS_MEMORY_DISC_DATA(HTConstants.TOOLTIP, "memory_disc_data"), + TOOLTIPS_UPGRADE_SPEED(HTConstants.TOOLTIP, HTConstants.UPGRADE, HTConstants.SPEED), + TOOLTIPS_UPGRADE_EFFICIENCY(HTConstants.TOOLTIP, HTConstants.UPGRADE, HTConstants.EFFICIENCY), + TOOLTIPS_UPGRADE_CAPACITY(HTConstants.TOOLTIP, HTConstants.UPGRADE, HTConstants.CAPACITY) ; override val translationKey: String = RagiumAPI.id(path.joinToString(separator = ".")).toLanguageKey(type) diff --git a/src/libClient/kotlin/hiiragi283/lib/integration/jei/HTJeiDrawables.kt b/src/libClient/kotlin/hiiragi283/lib/integration/jei/HTJeiDrawables.kt index 34f36f867..19d591670 100644 --- a/src/libClient/kotlin/hiiragi283/lib/integration/jei/HTJeiDrawables.kt +++ b/src/libClient/kotlin/hiiragi283/lib/integration/jei/HTJeiDrawables.kt @@ -2,7 +2,7 @@ package hiiragi283.lib.integration.jei import hiiragi283.lib.collection.mutableEnumMapOf import hiiragi283.lib.gui.HTBackgroundType -import hiiragi283.lib.util.HTDelegates +import hiiragi283.ragium.api.RagiumAPI import mezz.jei.api.gui.drawable.IDrawable import mezz.jei.api.helpers.IGuiHelper @@ -13,11 +13,11 @@ import mezz.jei.api.helpers.IGuiHelper */ data object HTJeiDrawables { @JvmStatic - var slots: Map by HTDelegates.onceInitialize() + var slots: Map = mapOf() private set @JvmStatic - var tanks: Map by HTDelegates.onceInitialize() + var tanks: Map = mapOf() private set @JvmStatic @@ -34,6 +34,7 @@ data object HTJeiDrawables { .setTextureSize(18, 18) .build() } + RagiumAPI.LOGGER.info("HTJeiDrawables has been initialized") } /** diff --git a/src/main/kotlin/hiiragi283/ragium/common/Ragium.kt b/src/main/kotlin/hiiragi283/ragium/common/Ragium.kt index 870424f0a..b250b836d 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/Ragium.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/Ragium.kt @@ -62,6 +62,8 @@ data object Ragium : HTCommonMod() { container.registerConfig(ModConfig.Type.COMMON, RagiumConfig.COMMON_SPEC) container.registerConfig(ModConfig.Type.SERVER, RagiumConfig.SERVER_SPEC) + + RagiumAPI.LOGGER.info("Ragium has been initialized!") } private fun register(event: RegisterEvent) { @@ -95,7 +97,8 @@ data object Ragium : HTCommonMod() { helper.register(RagiumAPI.id(HTConstants.FLUID), RagiumDataComponents.FLUID) helper.register(RagiumAPI.id("memory_disc_data"), RagiumDataComponents.MEMORY_DISC_DATA) helper.register(RagiumAPI.id("owner_id"), RagiumDataComponents.OWNER_ID) - helper.register(RagiumAPI.id("upgrades"), RagiumDataComponents.UPGRADES) + helper.register(RagiumAPI.id(HTConstants.UPGRADE), RagiumDataComponents.UPGRADE) + helper.register(RagiumAPI.id(HTConstants.UPGRADES), RagiumDataComponents.UPGRADES) } event.register(Registries.MENU) { helper -> helper.register( diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt b/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt index f841bbdd8..820ec573c 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt @@ -23,11 +23,11 @@ import hiiragi283.ragium.api.RagiumConfig import hiiragi283.ragium.api.RagiumConstants import hiiragi283.ragium.api.data.RagiumDataComponents import hiiragi283.ragium.api.data.chemical.RagiumChemicals +import hiiragi283.ragium.api.machine.HTMachineType import hiiragi283.ragium.api.material.HTBlockPart import hiiragi283.ragium.api.material.HTOreBlockPart import hiiragi283.ragium.api.material.HTStorageBlockPart import hiiragi283.ragium.api.material.RagiumMaterial -import hiiragi283.ragium.api.tag.HTMachineType import hiiragi283.ragium.api.util.HTStorageHelper import hiiragi283.ragium.common.block.entity.HTFluidStorageBlock import hiiragi283.ragium.common.block.entity.RagiumBlockEntityTypes @@ -437,6 +437,12 @@ data object RagiumBlocks { @JvmStatic private fun registerCapabilities(event: RegisterCapabilitiesEvent) { // Block + event.registerBlock( + HTFluidCapabilities.block, + { _, _, _, _, _ -> HTVoidTankBlock.VOIDING_HANDLER }, + VOID_TANK.getOrThrow() + ) + // Item event.registerItem( HTFluidCapabilities.item, { _, access -> diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/RagiumBlockEntityTypes.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/RagiumBlockEntityTypes.kt index 6ddb840fc..7f3f05b42 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/RagiumBlockEntityTypes.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/RagiumBlockEntityTypes.kt @@ -36,7 +36,6 @@ import hiiragi283.ragium.common.block.entity.storage.HTCreativeTankBlockEntity import hiiragi283.ragium.common.block.entity.storage.HTFluidOutputBusBlockEntity import hiiragi283.ragium.common.block.entity.storage.HTPotionTankBlockEntity import hiiragi283.ragium.common.block.entity.storage.HTTankBlockEntity -import hiiragi283.ragium.common.block.storage.HTVoidTankBlock import net.minecraft.core.Direction import net.minecraft.world.level.block.Block import net.minecraft.world.level.block.entity.BlockEntity @@ -231,13 +230,6 @@ data object RagiumBlockEntityTypes { // Storage registerBlockEntity(TANK.get()) registerBlockEntity(POTION_TANK.get()) - event.registerBlock( - HTFluidCapabilities.block, - { _, _, _, _, _ -> - HTVoidTankBlock.VOIDING_HANDLER - }, - RagiumBlocks.VOID_TANK.getOrThrow() - ) registerBlockEntity(CREATIVE_TANK.get()) event.registerBlockEntity( diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTProcessorBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTProcessorBlockEntity.kt index d8cb72e1a..44414c64f 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTProcessorBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTProcessorBlockEntity.kt @@ -10,6 +10,7 @@ import hiiragi283.lib.transfer.fluid.HTFluidTank import hiiragi283.lib.transfer.holder.HTResourceSlotHolder import hiiragi283.lib.transfer.item.HTItemSlot import hiiragi283.ragium.api.config.HTEnergyConfig +import hiiragi283.ragium.api.machine.HTMachineUpgradeHelper import hiiragi283.ragium.common.block.entity.HTBaseMachineBlockEntity import hiiragi283.ragium.common.gui.widget.HTEnergySlotWidget import hiiragi283.ragium.common.gui.widget.HTProgressWidget @@ -70,8 +71,6 @@ abstract class HTProcessorBlockEntity(type: BlockEntityType<*>, pos: BlockPos, s // Ticking // - fun modifyTime(time: Int): Int = time - final override fun onUpdateMachine(level: ServerLevel, pos: BlockPos, state: BlockState): Boolean = recipeHandler.tick(level) @@ -89,13 +88,6 @@ abstract class HTProcessorBlockEntity(type: BlockEntityType<*>, pos: BlockPos, s abstract fun getConfig(): HTEnergyConfig - fun updateAndGetProgress(time: Int): Int { - // if (isCreative()) return 0 - handler.currentEnergyPerTick = handler.baseEnergyPerTick - // modifyValue(HTUpgradeKeys.ENERGY_EFFICIENCY) { battery.baseEnergyPerTick / it } TODO - return handler.currentEnergyPerTick * modifyTime(time) - } - fun addEnergySlot(widgetHolder: HTWidgetHolder, x: Int, y: Int) { widgetHolder += HTEnergySlotWidget(handler, x, y) widgetHolder.track(handler) @@ -117,9 +109,12 @@ abstract class HTProcessorBlockEntity(type: BlockEntityType<*>, pos: BlockPos, s HTRecipeHandler() where RECIPE : HTRecipeFactory, RECIPE : HTProgressRecipe { - final override fun getMaxProgress(recipe: RECIPE, input: INPUT): Int = recipe.getProgressData(input) - .getProcessTime(handler.currentEnergyPerTick) - .let(::updateAndGetProgress) + final override fun getMaxProgress(recipe: RECIPE, input: INPUT): Int { + handler.currentEnergyPerTick = + HTMachineUpgradeHelper.modifyEfficiency(components(), handler.baseEnergyPerTick) + val time: Int = recipe.getProgressData(input).getProcessTime(handler.currentEnergyPerTick) + return handler.currentEnergyPerTick * HTMachineUpgradeHelper.modifyTime(components(), time) + } // TODO final override fun getProgress(): Int = handler.consume() } diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/misc/HTUpgradeStationBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/misc/HTUpgradeStationBlockEntity.kt index 53e0a932d..1a891dede 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/misc/HTUpgradeStationBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/misc/HTUpgradeStationBlockEntity.kt @@ -11,6 +11,8 @@ import hiiragi283.lib.transfer.holder.HTResourceSlotHolder import hiiragi283.lib.transfer.item.HTBasicItemSlot import hiiragi283.lib.transfer.item.HTItemSlot import hiiragi283.ragium.api.data.RagiumDataComponents +import hiiragi283.ragium.api.machine.HTMachineUpgradeHelper +import hiiragi283.ragium.api.machine.HTMachineUpgradeList import hiiragi283.ragium.api.tag.RagiumTags import hiiragi283.ragium.common.block.entity.HTBlockEntity import hiiragi283.ragium.common.block.entity.HTBlockEntityWithMenu @@ -147,26 +149,21 @@ class HTUpgradeStationBlockEntity(worldPosition: BlockPos, blockState: BlockStat inner class UpgradeSlot(slot: Int, x: Int, y: Int) : StackCopySlot(slot, x, y), HTWidgetSlot { - private fun getUpgrades(): List = this@HTUpgradeStationBlockEntity + private fun getUpgrades(): HTMachineUpgradeList = this@HTUpgradeStationBlockEntity .toolSlot .resource - .getOrDefault(RagiumDataComponents.UPGRADES, listOf()) + .let(HTMachineUpgradeHelper::getUpgrades) - private fun getUpgrade(index: Int): ItemStack = getUpgrades().getOrNull(index) ?: ItemStack.EMPTY + override fun mayPlace(itemStack: ItemStack): Boolean = + !this@HTUpgradeStationBlockEntity.toolSlot.isEmpty && itemStack.has(RagiumDataComponents.UPGRADE) - override fun mayPlace(itemStack: ItemStack): Boolean = !this@HTUpgradeStationBlockEntity.toolSlot.isEmpty - - override fun getStackCopy(): ItemStack = getUpgrade(slotIndex) + override fun getStackCopy(): ItemStack = getUpgrades()[slotIndex] override fun setStackCopy(stack: ItemStack) { - val upgrades: MutableList = MutableList(4) { ItemStack.EMPTY } - getUpgrades().forEachIndexed { index: Int, stackIn: ItemStack -> - upgrades[index] = stackIn - } - upgrades[slotIndex] = stack - + val mutable = HTMachineUpgradeList.Mutable(getUpgrades()) + mutable[slotIndex] = stack val toolStack: ItemStack = this@HTUpgradeStationBlockEntity.toolSlot.getStackCopy() - toolStack[RagiumDataComponents.UPGRADES] = upgrades + HTMachineUpgradeHelper.setUpgrades(toolStack, mutable) this@HTUpgradeStationBlockEntity.toolSlot.setStack(toolStack) } diff --git a/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt b/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt index ed707b6fd..b416ce72f 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt @@ -13,9 +13,10 @@ import hiiragi283.lib.text.HTHasTranslationKey import hiiragi283.ragium.api.RagiumAPI import hiiragi283.ragium.api.data.RagiumDataComponents import hiiragi283.ragium.api.data.chemical.RagiumChemicals +import hiiragi283.ragium.api.machine.HTMachineType +import hiiragi283.ragium.api.machine.HTMachineUpgrade import hiiragi283.ragium.api.material.HTItemPart import hiiragi283.ragium.api.material.RagiumMaterial -import hiiragi283.ragium.api.tag.HTMachineType import hiiragi283.ragium.api.text.HTItemTooltip import hiiragi283.ragium.api.text.RagiumTranslation import hiiragi283.ragium.common.fluid.RagiumFluids @@ -262,6 +263,28 @@ data object RagiumItems { ) } + // Upgrades // + + @JvmField + val BASIC_UPGRADE: HTSimpleDeferredItem = REGISTER.registerSimpleItem("basic_upgrade") { + it.component(RagiumDataComponents.UPGRADE, HTMachineUpgrade(speed = 25, efficiency = 25, capacity = 25)) + } + + @JvmField + val ADVANCED_UPGRADE: HTSimpleDeferredItem = REGISTER.registerSimpleItem("advanced_upgrade") { + it.component(RagiumDataComponents.UPGRADE, HTMachineUpgrade(speed = 50, efficiency = 50, capacity = 50)) + } + + @JvmField + val ELITE_UPGRADE: HTSimpleDeferredItem = REGISTER.registerSimpleItem("elite_upgrade") { + it.component(RagiumDataComponents.UPGRADE, HTMachineUpgrade(speed = 75, efficiency = 75, capacity = 75)) + } + + @JvmField + val ULTIMATE_UPGRADE: HTSimpleDeferredItem = REGISTER.registerSimpleItem("ultimate_upgrade") { + it.component(RagiumDataComponents.UPGRADE, HTMachineUpgrade(speed = 100, efficiency = 100, capacity = 100)) + } + // Events // @JvmStatic diff --git a/src/main/resources/assets/ragium/textures/item/advanced_upgrade.png b/src/main/resources/assets/ragium/textures/item/advanced_upgrade.png new file mode 100644 index 0000000000000000000000000000000000000000..0a3e8228fbfe7a3d2a0ff0ecfdfaa4b16971c216 GIT binary patch literal 319 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Up!qLLn;`zOfckYau9IcuM%^h zLNJ^Aq29cM8LBrbIQ5${x&iL3jbsAT9DIAlFXg6+1!Jbs2&u|xi;R~IV8 zU11I=nUMT8oLBu4zbI=0gOS*gW;RBX{THPf82 zR?&#Y$Qg}55{N>h_IY#$aeN36ec2*=|L-^LKR^D;U-a#@&e4y- zO-QOuaZ9fB((iRGDGiE-%N}gfxyhe$Y_j}!B_^A`#}a*xjp`mOZx$TL=-$OMt#npo z%1S%tZMnN!8!nspUOYaZ@w1J&+>44%0nSMR^X;EG0J6peDS<8#ly{QJR zm7iFpye5cv)GI#HEM<~tvSIzXg3EwmWv+>KDW`^S`B!!ZhX4OtzMPu}^cNe*U(5{h XKi4V-pWVg;6k+gm^>bP0l+XkKQhjYV literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ragium/textures/item/elite_upgrade.png b/src/main/resources/assets/ragium/textures/item/elite_upgrade.png new file mode 100644 index 0000000000000000000000000000000000000000..727aeb9267b602c1db630b21a5e4a657aed7c7fc GIT binary patch literal 301 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k33x*Ln;{eOgJdmWFX)gzPoYt z(i_a*_eM3Oue-!)ThV4b^+o*=hY3dtk4Z|}soea3Ur*-k@z?wfi4_uBK2h@;CR_=b zx=<*EKY+t{;p{`|rEYI5ua_0CZ}9mrE5dsML%@%9c^i{?;#fMeb#>V}8A7c&o8zXj zT{hk7#xHgBd?dqOuK5ZFE=KOFTs5yHlHtnNL@D>jFJzrK1YJ%^$KBIlh)7k~`QXa7 zw32drfoR4zLL9fZJXU*Q*Zwhwan2rv8m`6Dnj$XB9ayO__uomQRlhGyELvs5(5~<- xjwi`6mEo%X7ZwJF|NpzDTsQ^vEgQ(U%nW*Nd5Wg}B56Po22WQ%mvv4FO#m@bb-n-q literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ragium/textures/item/ultimate_upgrade.png b/src/main/resources/assets/ragium/textures/item/ultimate_upgrade.png new file mode 100644 index 0000000000000000000000000000000000000000..492e6c73b0f2ad62ee184904be2dea7061951526 GIT binary patch literal 318 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`pFLe1Ln;`zOfckb3J__{f9vSn z;^dNR$)VfJ+xz!R1{d>mrCzqo0E4KgQ|}x5r`zdvG&z62TYauvzwGJp`~Mla@7FI{ z<}9tR&@$(ui@;XiAm#*@mb7~@zxM7E%KsJG!Diqhar%L&WwyOST1Clb4UvXtSv#j? z6};$qD(u3@HKApBz@0{K&9n<^B&&k`b(1vnc`NRG4&x};ay$P@Xk?wTKGz1`Ccjxr zlbQvbSOhiq{846Iu)#6sV6qJNZT`Y5ipv>od^qxp7fb3KuDHiw;>969HF$PYMIf(( zut!nnmzB@lo-JF$z~gYMsUkqR;h}jIBLl<#|52OLOo85K19_jBf!}AX;sM9IX+RMM MPgg&ebxsLQ04r&C9RL6T literal 0 HcmV?d00001 From f922bf2f76c524349e813d6b314c99f7ad5b2e35 Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Mon, 12 Oct 2026 13:59:29 +0900 Subject: [PATCH 14/25] =?UTF-8?q?feat:=20Jade=20=E9=80=A3=E6=90=BA?= =?UTF-8?q?=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle.kts | 1 + gradle/libs.versions.toml | 1 - .../jade/HTMachineOwnerProvider.kt | 39 +++++++++++++++++++ .../jade/HTMachineUpgradeProvider.kt | 36 +++++++++++++++++ .../integration/jade/RagiumJadePlugin.kt | 21 ++++++++++ .../data/lang/RagiumEnglishLangProvider.kt | 6 +++ .../data/lang/RagiumJapaneseLangProvider.kt | 6 +++ .../resources/assets/ragium/lang/en_us.json | 2 + .../resources/assets/ragium/lang/ja_jp.json | 2 + .../lib/data/lang/HTLangProvider.kt | 8 ++++ .../ragium/api/machine/HTMachineUpgrade.kt | 4 ++ .../api/machine/HTMachineUpgradeList.kt | 4 ++ 12 files changed, 129 insertions(+), 1 deletion(-) create mode 100644 src/client/kotlin/hiiragi283/ragium/client/integration/jade/HTMachineOwnerProvider.kt create mode 100644 src/client/kotlin/hiiragi283/ragium/client/integration/jade/HTMachineUpgradeProvider.kt create mode 100644 src/client/kotlin/hiiragi283/ragium/client/integration/jade/RagiumJadePlugin.kt diff --git a/build.gradle.kts b/build.gradle.kts index 928b3328f..059627b93 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -281,6 +281,7 @@ dependencies { "localRuntime"(libs.bundles.common.runtime) "libClientCompileOnly"(libs.jei.api) + "libClientImplementation"(libs.jade) "clientRuntimeOnly"(libs.jei) } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 486941050..e5a66398d 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -37,7 +37,6 @@ common-compile = [] common-runtime = [ "ae2", "curios", - "jade", ] [plugins] diff --git a/src/client/kotlin/hiiragi283/ragium/client/integration/jade/HTMachineOwnerProvider.kt b/src/client/kotlin/hiiragi283/ragium/client/integration/jade/HTMachineOwnerProvider.kt new file mode 100644 index 000000000..5317ff198 --- /dev/null +++ b/src/client/kotlin/hiiragi283/ragium/client/integration/jade/HTMachineOwnerProvider.kt @@ -0,0 +1,39 @@ +package hiiragi283.ragium.client.integration.jade + +import hiiragi283.lib.block.entity.HTOwnedBlockEntity +import hiiragi283.lib.text.HTTextUtil +import hiiragi283.ragium.api.RagiumAPI +import net.minecraft.ChatFormatting +import net.minecraft.network.RegistryFriendlyByteBuf +import net.minecraft.network.codec.ByteBufCodecs +import net.minecraft.network.codec.StreamCodec +import net.minecraft.resources.Identifier +import snownee.jade.api.BlockAccessor +import snownee.jade.api.IBlockComponentProvider +import snownee.jade.api.ITooltip +import snownee.jade.api.StreamServerDataProvider +import snownee.jade.api.config.IPluginConfig + +data object HTMachineOwnerProvider { + @JvmField + val ID: Identifier = RagiumAPI.id("machine_owner") + + data object Server : StreamServerDataProvider { + override fun streamData(accessor: BlockAccessor): String? = + (accessor.blockEntity as? HTOwnedBlockEntity)?.getOwnerName() + + override fun streamCodec(): StreamCodec = ByteBufCodecs.STRING_UTF8.cast() + + override fun getUid(): Identifier = ID + } + + data object Client : IBlockComponentProvider { + override fun appendTooltip(tooltip: ITooltip, accessor: BlockAccessor, config: IPluginConfig) { + Server.decodeFromData(accessor).ifPresent { + tooltip.add(HTTextUtil.smartTranslate("jade.owner", ChatFormatting.WHITE, it)) + } + } + + override fun getUid(): Identifier = ID + } +} diff --git a/src/client/kotlin/hiiragi283/ragium/client/integration/jade/HTMachineUpgradeProvider.kt b/src/client/kotlin/hiiragi283/ragium/client/integration/jade/HTMachineUpgradeProvider.kt new file mode 100644 index 000000000..4640c2f4b --- /dev/null +++ b/src/client/kotlin/hiiragi283/ragium/client/integration/jade/HTMachineUpgradeProvider.kt @@ -0,0 +1,36 @@ +package hiiragi283.ragium.client.integration.jade + +import hiiragi283.ragium.api.RagiumAPI +import hiiragi283.ragium.api.data.RagiumDataComponents +import hiiragi283.ragium.api.machine.HTMachineUpgradeList +import net.minecraft.network.RegistryFriendlyByteBuf +import net.minecraft.network.codec.StreamCodec +import net.minecraft.resources.Identifier +import snownee.jade.api.BlockAccessor +import snownee.jade.api.IBlockComponentProvider +import snownee.jade.api.ITooltip +import snownee.jade.api.StreamServerDataProvider +import snownee.jade.api.config.IPluginConfig + +data object HTMachineUpgradeProvider { + @JvmField + val ID: Identifier = RagiumAPI.id("machine_upgrade") + + data object Server : StreamServerDataProvider { + override fun streamData(accessor: BlockAccessor): HTMachineUpgradeList? = + accessor.blockEntity?.components()?.get(RagiumDataComponents.UPGRADES) + + override fun streamCodec(): StreamCodec = + HTMachineUpgradeList.STREAM_CODEC + + override fun getUid(): Identifier = ID + } + + data object Client : IBlockComponentProvider { + override fun appendTooltip(tooltip: ITooltip, accessor: BlockAccessor, config: IPluginConfig) { + Server.decodeFromData(accessor).ifPresent { it.addToTooltip(tooltip::add) } + } + + override fun getUid(): Identifier = ID + } +} diff --git a/src/client/kotlin/hiiragi283/ragium/client/integration/jade/RagiumJadePlugin.kt b/src/client/kotlin/hiiragi283/ragium/client/integration/jade/RagiumJadePlugin.kt new file mode 100644 index 000000000..344ac52ca --- /dev/null +++ b/src/client/kotlin/hiiragi283/ragium/client/integration/jade/RagiumJadePlugin.kt @@ -0,0 +1,21 @@ +package hiiragi283.ragium.client.integration.jade + +import hiiragi283.ragium.common.block.HTBasicEntityBlock +import hiiragi283.ragium.common.block.entity.HTBlockEntity +import snownee.jade.api.IWailaClientRegistration +import snownee.jade.api.IWailaCommonRegistration +import snownee.jade.api.IWailaPlugin +import snownee.jade.api.WailaPlugin + +@WailaPlugin +class RagiumJadePlugin : IWailaPlugin { + override fun register(registration: IWailaCommonRegistration) { + registration.registerBlockDataProvider(HTMachineOwnerProvider.Server, HTBlockEntity::class.java) + registration.registerBlockDataProvider(HTMachineUpgradeProvider.Server, HTBlockEntity::class.java) + } + + override fun registerClient(registration: IWailaClientRegistration) { + registration.registerBlockComponent(HTMachineOwnerProvider.Client, HTBasicEntityBlock::class.java) + registration.registerBlockComponent(HTMachineUpgradeProvider.Client, HTBasicEntityBlock::class.java) + } +} diff --git a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt index f77cd785e..2bccd0ca7 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt @@ -8,6 +8,8 @@ import hiiragi283.ragium.api.data.chemical.RagiumChemicals import hiiragi283.ragium.api.data.element.RagiumElements import hiiragi283.ragium.api.recipe.RagiumRecipeTypes import hiiragi283.ragium.api.text.RagiumTranslation +import hiiragi283.ragium.client.integration.jade.HTMachineOwnerProvider +import hiiragi283.ragium.client.integration.jade.HTMachineUpgradeProvider import hiiragi283.ragium.common.advancment.RagiumAdvancementKeys import hiiragi283.ragium.common.block.RagiumBlocks import hiiragi283.ragium.common.effect.RagiumMobEffects @@ -246,6 +248,10 @@ class RagiumEnglishLangProvider(output: PackOutput) : add(RagiumTranslation.TOOLTIPS_UPGRADE_CAPACITY, $$"Energy Capacity: %1$s") addDataTranslations() + + // Jade Config + addJadeConfig(HTMachineOwnerProvider.ID, "機械の所有者") + addJadeConfig(HTMachineUpgradeProvider.ID, "機械のアップグレード") } private fun addDataTranslations() { diff --git a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt index 59a412bc9..5ec75eab3 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt @@ -8,6 +8,8 @@ import hiiragi283.ragium.api.data.chemical.RagiumChemicals import hiiragi283.ragium.api.data.element.RagiumElements import hiiragi283.ragium.api.recipe.RagiumRecipeTypes import hiiragi283.ragium.api.text.RagiumTranslation +import hiiragi283.ragium.client.integration.jade.HTMachineOwnerProvider +import hiiragi283.ragium.client.integration.jade.HTMachineUpgradeProvider import hiiragi283.ragium.common.advancment.RagiumAdvancementKeys import hiiragi283.ragium.common.block.RagiumBlocks import hiiragi283.ragium.common.effect.RagiumMobEffects @@ -242,6 +244,10 @@ class RagiumJapaneseLangProvider(output: PackOutput) : add(RagiumTranslation.TOOLTIPS_UPGRADE_CAPACITY, $$"エネルギー容量: %1$s") addDataTranslations() + + // Jade Config + addJadeConfig(HTMachineOwnerProvider.ID, "Machine Owner") + addJadeConfig(HTMachineUpgradeProvider.ID, "Machine Upgrades") } private fun addDataTranslations() { diff --git a/src/generated/resources/assets/ragium/lang/en_us.json b/src/generated/resources/assets/ragium/lang/en_us.json index 38939f388..5941b689d 100644 --- a/src/generated/resources/assets/ragium/lang/en_us.json +++ b/src/generated/resources/assets/ragium/lang/en_us.json @@ -121,6 +121,8 @@ "block.ragium.white_dye": "White Dye", "block.ragium.wood_tar": "Wood Tar", "block.ragium.yellow_dye": "Yellow Dye", + "config.jade.plugin_ragium.machine_owner": "機械の所有者", + "config.jade.plugin_ragium.machine_upgrade": "機械のアップグレード", "config.ragium.energy_capacity": "Energy Capacity", "config.ragium.energy_rate": "Energy Rate", "constants.ragium.empty": "Empty", diff --git a/src/generated/resources/assets/ragium/lang/ja_jp.json b/src/generated/resources/assets/ragium/lang/ja_jp.json index 3fa3d2282..9942c793a 100644 --- a/src/generated/resources/assets/ragium/lang/ja_jp.json +++ b/src/generated/resources/assets/ragium/lang/ja_jp.json @@ -121,6 +121,8 @@ "block.ragium.white_dye": "白色の染料", "block.ragium.wood_tar": "木タール", "block.ragium.yellow_dye": "黄色の染料", + "config.jade.plugin_ragium.machine_owner": "Machine Owner", + "config.jade.plugin_ragium.machine_upgrade": "Machine Upgrades", "config.ragium.energy_capacity": "エネルギー容量", "config.ragium.energy_rate": "エネルギー使用速度", "constants.ragium.empty": "空", diff --git a/src/lib/kotlin/hiiragi283/lib/data/lang/HTLangProvider.kt b/src/lib/kotlin/hiiragi283/lib/data/lang/HTLangProvider.kt index afce749ac..c7cfe6028 100644 --- a/src/lib/kotlin/hiiragi283/lib/data/lang/HTLangProvider.kt +++ b/src/lib/kotlin/hiiragi283/lib/data/lang/HTLangProvider.kt @@ -10,6 +10,7 @@ import hiiragi283.lib.resource.toLanguageKey import hiiragi283.lib.text.HTHasTranslationKey import net.minecraft.core.registries.BuiltInRegistries import net.minecraft.data.PackOutput +import net.minecraft.resources.Identifier import net.minecraft.resources.ResourceKey import net.minecraft.world.item.crafting.RecipeType import net.minecraft.world.item.enchantment.Enchantment @@ -138,4 +139,11 @@ abstract class HTLangProvider(output: PackOutput, modId: String, val langType: H add(it.toLanguageKey(), value) } } + + /** + * @since 26.1.9 + */ + fun addJadeConfig(id: Identifier, value: String) { + add("config.jade.plugin_${id.namespace}.${id.path}", value) + } } diff --git a/src/lib/kotlin/hiiragi283/ragium/api/machine/HTMachineUpgrade.kt b/src/lib/kotlin/hiiragi283/ragium/api/machine/HTMachineUpgrade.kt index 5e298238d..14996158b 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/machine/HTMachineUpgrade.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/machine/HTMachineUpgrade.kt @@ -67,6 +67,10 @@ data class HTMachineUpgrade( flag: TooltipFlag, components: DataComponentGetter ) { + addToTooltip(consumer) + } + + fun addToTooltip(consumer: Consumer) { setOf( this.speed to RagiumTranslation.TOOLTIPS_UPGRADE_SPEED, this.efficiency to RagiumTranslation.TOOLTIPS_UPGRADE_EFFICIENCY, diff --git a/src/lib/kotlin/hiiragi283/ragium/api/machine/HTMachineUpgradeList.kt b/src/lib/kotlin/hiiragi283/ragium/api/machine/HTMachineUpgradeList.kt index cc2f613c9..6a1095da1 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/machine/HTMachineUpgradeList.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/machine/HTMachineUpgradeList.kt @@ -54,6 +54,10 @@ class HTMachineUpgradeList private constructor(private val stacks: List) { + combinedUpgrade.addToTooltip(consumer) + } + @Suppress("DEPRECATION") override fun equals(other: Any?): Boolean = other is HTMachineUpgradeList && ItemStack.listMatches(this.stacks, other.stacks) From ab3bcc35c1a3913d3b8d7796763643d3505a90e6 Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Mon, 12 Oct 2026 20:31:26 +0900 Subject: [PATCH 15/25] =?UTF-8?q?feat:=20=E6=96=B0=E3=81=97=E3=81=84?= =?UTF-8?q?=E3=83=AC=E3=82=B7=E3=83=94=E3=82=BF=E3=82=A4=E3=83=97=E3=80=8C?= =?UTF-8?q?Centrifuging=20/=20=E9=81=A0=E5=BF=83=E5=88=86=E9=9B=A2?= =?UTF-8?q?=E3=80=8D=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/integration/jei/RagiumJeiPlugin.kt | 17 ++- .../integration/jei/RagiumJeiRecipeTypes.kt | 11 +- .../category/RTCentrifugingRecipeCategory.kt | 55 ++++++++++ .../data/lang/RagiumEnglishLangProvider.kt | 3 +- .../data/lang/RagiumJapaneseLangProvider.kt | 3 +- .../data/recipe/RagiumCommonRecipeProvider.kt | 4 +- .../recipe/RagiumMechanicalRecipeProvider.kt | 57 +++++----- .../resources/assets/ragium/lang/en_us.json | 1 - .../resources/assets/ragium/lang/ja_jp.json | 1 - .../crude_oil_from_soul_sand.json | 2 +- .../crude_oil_from_soul_soil.json | 2 +- .../honey_from_bottle.json | 2 +- .../honey_from_comb.json | 2 +- .../{draining => centrifuging}/sponge.json | 2 +- .../resources/reports/ragium/registries.json | 2 - .../recipe/base/HTFluidToDoubleFluidRecipe.kt | 88 --------------- .../hiiragi283/ragium/api/RagiumConstants.kt | 5 +- .../builder/RTCentrifugingRecipeBuilder.kt | 71 ++++++++++++ .../recipe/builder/RagiumRecipeBuilders.kt | 20 +--- .../ragium/api/recipe/RTCentrifugingRecipe.kt | 103 ++++++++++++++++-- .../ragium/api/recipe/RTDrainingRecipe.kt | 24 ---- .../ragium/api/recipe/RagiumRecipeLookups.kt | 10 +- .../api/recipe/RagiumRecipeSerializers.kt | 12 +- .../ragium/api/recipe/RagiumRecipeTypes.kt | 9 +- .../hiiragi283/ragium/common/RagiumCommon.kt | 13 ++- ...kt => RTPotionBottleCentrifugingRecipe.kt} | 11 +- 26 files changed, 292 insertions(+), 238 deletions(-) create mode 100644 src/client/kotlin/hiiragi283/ragium/client/integration/jei/category/RTCentrifugingRecipeCategory.kt rename src/generated/resources/data/ragium/recipe/{pyrolyzing => centrifuging}/crude_oil_from_soul_sand.json (88%) rename src/generated/resources/data/ragium/recipe/{pyrolyzing => centrifuging}/crude_oil_from_soul_soil.json (88%) rename src/generated/resources/data/ragium/recipe/{draining => centrifuging}/honey_from_bottle.json (88%) rename src/generated/resources/data/ragium/recipe/{draining => centrifuging}/honey_from_comb.json (88%) rename src/generated/resources/data/ragium/recipe/{draining => centrifuging}/sponge.json (88%) delete mode 100644 src/lib/kotlin/hiiragi283/lib/recipe/base/HTFluidToDoubleFluidRecipe.kt create mode 100644 src/lib/kotlin/hiiragi283/ragium/api/data/recipe/builder/RTCentrifugingRecipeBuilder.kt delete mode 100644 src/lib/kotlin/hiiragi283/ragium/api/recipe/RTDrainingRecipe.kt rename src/main/kotlin/hiiragi283/ragium/common/recipe/{RTPotionBottleDrainingRecipe.kt => RTPotionBottleCentrifugingRecipe.kt} (76%) diff --git a/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiPlugin.kt b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiPlugin.kt index 96ab40f68..41b365264 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiPlugin.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiPlugin.kt @@ -22,6 +22,7 @@ import hiiragi283.ragium.api.data.recipe.builder.RagiumRecipeBuilders import hiiragi283.ragium.api.recipe.RagiumRecipeLookups import hiiragi283.ragium.api.recipe.RagiumRecipeTypes import hiiragi283.ragium.client.gui.screen.HTWidgetContainerScreen +import hiiragi283.ragium.client.integration.jei.category.RTCentrifugingRecipeCategory import hiiragi283.ragium.client.integration.jei.category.RTElectrolyzingRecipeCategory import hiiragi283.ragium.client.integration.jei.category.RTEnchantingRecipeCategory import hiiragi283.ragium.client.integration.jei.category.RTFreezingRecipeCategory @@ -31,7 +32,7 @@ import hiiragi283.ragium.client.integration.jei.category.RTResourceExtractingRec import hiiragi283.ragium.client.integration.jei.category.RTWashingRecipeCategory import hiiragi283.ragium.common.block.RagiumBlocks import hiiragi283.ragium.common.fluid.RagiumFluids -import hiiragi283.ragium.common.recipe.RTPotionBottleDrainingRecipe +import hiiragi283.ragium.common.recipe.RTPotionBottleCentrifugingRecipe import hiiragi283.ragium.common.recipe.RTPotionBottleFillingRecipe import mezz.jei.api.JeiPlugin import mezz.jei.api.constants.RecipeTypes @@ -117,6 +118,7 @@ class RagiumJeiPlugin : HTJeiPlugin(RagiumAPI.MOD_ID) { RagiumRecipeTypes.ASSEMBLING, guiHelper.createDrawableItemLike(RagiumBlocks.ASSEMBLER) ), + RTCentrifugingRecipeCategory(guiHelper), HTSingleRecipeCategory.ItemToItem( RagiumJeiRecipeTypes.COMPRESSING, RagiumRecipeTypes.COMPRESSING, @@ -132,11 +134,6 @@ class RagiumJeiPlugin : HTJeiPlugin(RagiumAPI.MOD_ID) { RagiumRecipeTypes.CUTTING, guiHelper.createDrawableItemLike(RagiumBlocks.CUTTING_MACHINE) ), - HTSingleToItemAndFluidRecipeCategory.ItemTo( - RagiumJeiRecipeTypes.DRAINING, - RagiumRecipeTypes.DRAINING, - guiHelper.createDrawableItemLike(RagiumBlocks.MACHINE_CASING) - ), HTItemAndFluidToItemRecipeCategory( RagiumJeiRecipeTypes.FILLING, RagiumRecipeTypes.FILLING, @@ -190,10 +187,10 @@ class RagiumJeiPlugin : HTJeiPlugin(RagiumAPI.MOD_ID) { override fun registerRecipes(registration: IRecipeRegistration) { // Mechanical HTJeiRecipeHelper.addRecipes(registration, RagiumJeiRecipeTypes.ASSEMBLING, RagiumRecipeLookups.ASSEMBLING) + HTJeiRecipeHelper.addRecipes(registration, RagiumJeiRecipeTypes.CENTRIFUGING, RagiumRecipeLookups.CENTRIFUGING) HTJeiRecipeHelper.addRecipes(registration, RagiumJeiRecipeTypes.COMPRESSING, RagiumRecipeLookups.COMPRESSING) HTJeiRecipeHelper.addRecipes(registration, RagiumJeiRecipeTypes.CRUSHING, RagiumRecipeLookups.CRUSHING) HTJeiRecipeHelper.addRecipes(registration, RagiumJeiRecipeTypes.CUTTING, RagiumRecipeLookups.CUTTING) - HTJeiRecipeHelper.addRecipes(registration, RagiumJeiRecipeTypes.DRAINING, RagiumRecipeLookups.DRAINING) HTJeiRecipeHelper.addRecipes(registration, RagiumJeiRecipeTypes.FILLING, RagiumRecipeLookups.FILLING) // Heat HTJeiRecipeHelper.addRecipes(registration, RagiumJeiRecipeTypes.ALLOYING, RagiumRecipeLookups.ALLOYING) @@ -228,11 +225,11 @@ class RagiumJeiPlugin : HTJeiPlugin(RagiumAPI.MOD_ID) { private fun registerDynamicRecipes(registration: IRecipeRegistration) { // Mechanical registration.addRecipes( - RagiumJeiRecipeTypes.DRAINING, + RagiumJeiRecipeTypes.CENTRIFUGING, listPotions() .flatMap { potion: Holder.Reference -> HTBottleType.entries.map { bottleType: HTBottleType -> - RagiumRecipeBuilders.draining { + RagiumRecipeBuilders.centrifuging { +HTJeiRecipeHelper.fakeItem( bottleType.filledItem.asStackOrEmpty(patch = HTPotionHelper.createPotionPatch(potion)) ) @@ -240,7 +237,7 @@ class RagiumJeiPlugin : HTJeiPlugin(RagiumAPI.MOD_ID) { fluidResult { from(HTPotionHelper.createFluid(potion, HTPotionHelper.BOTTLE_AMOUNT).getOrThrow()) } - progressData = RTPotionBottleDrainingRecipe.PROGRESS_DATA + progressData = RTPotionBottleCentrifugingRecipe.PROGRESS_DATA recipeId replace potion.getKeyOrThrow() .identifier() .withPrefix("potion_bottle/${bottleType.serializedName}/") diff --git a/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiRecipeTypes.kt b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiRecipeTypes.kt index f414f4d02..1b05f3983 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiRecipeTypes.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiRecipeTypes.kt @@ -3,7 +3,6 @@ package hiiragi283.ragium.client.integration.jei import hiiragi283.lib.integration.jei.HTRecipeHolderType import hiiragi283.lib.integration.jei.IRecipeType import hiiragi283.lib.recipe.HTRecipeHolder -import hiiragi283.lib.recipe.base.HTFluidToDoubleFluidRecipe import hiiragi283.lib.recipe.base.HTFluidToRecipe import hiiragi283.lib.recipe.base.HTItemAndFluidToRecipe import hiiragi283.lib.recipe.base.HTItemToDoubleItemRecipe @@ -11,6 +10,7 @@ import hiiragi283.lib.recipe.base.HTItemToRecipe import hiiragi283.lib.recipe.base.HTTripleItemToItemRecipe import hiiragi283.ragium.api.RagiumAPI import hiiragi283.ragium.api.RagiumConstants +import hiiragi283.ragium.api.recipe.RTCentrifugingRecipe import hiiragi283.ragium.api.recipe.RTElectrolyzingRecipe import hiiragi283.ragium.api.recipe.RTEnchantingRecipe import hiiragi283.ragium.api.recipe.RTFreezingRecipe @@ -28,6 +28,9 @@ data object RagiumJeiRecipeTypes { @JvmField val ASSEMBLING: HTRecipeHolderType = create(RagiumConstants.ASSEMBLING) + @JvmField + val CENTRIFUGING: HTRecipeHolderType = create(RagiumConstants.CENTRIFUGING) + @JvmField val COMPRESSING: HTRecipeHolderType = create(RagiumConstants.COMPRESSING) @@ -37,9 +40,6 @@ data object RagiumJeiRecipeTypes { @JvmField val CUTTING: HTRecipeHolderType = create(RagiumConstants.CUTTING) - @JvmField - val DRAINING: HTRecipeHolderType = create(RagiumConstants.DRAINING) - @JvmField val FILLING: HTRecipeHolderType = create(RagiumConstants.FILLING) @@ -63,9 +63,6 @@ data object RagiumJeiRecipeTypes { @JvmField val BATHING: HTRecipeHolderType = create(RagiumConstants.BATHING) - @JvmField - val CENTRIFUGING: HTRecipeHolderType = create(RagiumConstants.CENTRIFUGING) - @JvmField val MIXING: HTRecipeHolderType = create(RagiumConstants.MIXING) diff --git a/src/client/kotlin/hiiragi283/ragium/client/integration/jei/category/RTCentrifugingRecipeCategory.kt b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/category/RTCentrifugingRecipeCategory.kt new file mode 100644 index 000000000..940325512 --- /dev/null +++ b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/category/RTCentrifugingRecipeCategory.kt @@ -0,0 +1,55 @@ +package hiiragi283.ragium.client.integration.jei.category + +import hiiragi283.lib.gui.HTBackgroundType +import hiiragi283.lib.integration.jei.add +import hiiragi283.lib.integration.jei.category.HTHolderRecipeCategory +import hiiragi283.lib.recipe.result.HTItemResult +import hiiragi283.ragium.api.recipe.RTCentrifugingRecipe +import hiiragi283.ragium.api.recipe.RagiumRecipeTypes +import hiiragi283.ragium.client.integration.jei.RagiumJeiRecipeTypes +import hiiragi283.ragium.common.block.RagiumBlocks +import mezz.jei.api.gui.builder.IRecipeLayoutBuilder +import mezz.jei.api.gui.builder.IRecipeSlotBuilder +import mezz.jei.api.gui.widgets.IRecipeExtrasBuilder +import mezz.jei.api.helpers.IGuiHelper +import mezz.jei.api.recipe.IFocusGroup + +class RTCentrifugingRecipeCategory(guiHelper: IGuiHelper) : + HTHolderRecipeCategory( + RagiumJeiRecipeTypes.CENTRIFUGING, + RagiumRecipeTypes.CENTRIFUGING, + guiHelper.createDrawableItemLike(RagiumBlocks.MACHINE_CASING), + 18 * 7, + 18 * 2, + RTCentrifugingRecipe.Basic.CODEC + ) { + override fun setupRecipe(builder: IRecipeLayoutBuilder, recipe: RTCentrifugingRecipe.Basic, focuses: IFocusGroup) { + // input + builder + .addInputSlot(getPosition(0), getPosition(0.5)) + .add(recipe.ingredient) + .setSlotBackground(HTBackgroundType.INPUT) + // outputs + val itemOutputs: List = List(4) { index: Int -> + builder + .addOutputSlot(getPosition(3 + index % 2), getPosition(index / 2)) + .setSlotBackground(HTBackgroundType.OUTPUT) + } + recipe.result.items.forEachIndexed { index: Int, result: HTItemResult -> + itemOutputs[index].add(result) + } + val fluidOutput: IRecipeSlotBuilder = builder + .addOutputSlot(getPosition(6), getPosition(00.5)) + .setSlotBackground(HTBackgroundType.OUTPUT) + recipe.result.fluid.ifPresent(fluidOutput::add) + } + + override fun setupRecipeExtras( + builder: IRecipeExtrasBuilder, + recipe: RTCentrifugingRecipe.Basic, + focuses: IFocusGroup + ) { + builder.addRecipeArrow(recipe).setPosition(getPosition(1.25), getPosition(0.5)) + builder.addRecipePlus(getPosition(5), getPosition(0.5)) + } +} diff --git a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt index 2bccd0ca7..7a3174af0 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt @@ -179,10 +179,10 @@ class RagiumEnglishLangProvider(output: PackOutput) : // Recipe Type addRecipeType(RagiumRecipeTypes.ASSEMBLING, "Assembling") + addRecipeType(RagiumRecipeTypes.CENTRIFUGING, "Centrifuging") addRecipeType(RagiumRecipeTypes.COMPRESSING, "Compressing") addRecipeType(RagiumRecipeTypes.CRUSHING, "Crushing") addRecipeType(RagiumRecipeTypes.CUTTING, "Cutting") - addRecipeType(RagiumRecipeTypes.DRAINING, "Draining") addRecipeType(RagiumRecipeTypes.FILLING, "Filling") addRecipeType(RagiumRecipeTypes.ALLOYING, "Alloying") @@ -192,7 +192,6 @@ class RagiumEnglishLangProvider(output: PackOutput) : addRecipeType(RagiumRecipeTypes.REFINING, "Refining") addRecipeType(RagiumRecipeTypes.BATHING, "Chemical Bathing") - addRecipeType(RagiumRecipeTypes.CENTRIFUGING, "Centrifuging") addRecipeType(RagiumRecipeTypes.EXCHANGING, "Exchanging") addRecipeType(RagiumRecipeTypes.MIXING, "Mixing") addRecipeType(RagiumRecipeTypes.REACTING, "Chemical Reacting") diff --git a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt index 5ec75eab3..6bf183d48 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt @@ -175,10 +175,10 @@ class RagiumJapaneseLangProvider(output: PackOutput) : // Recipe Type addRecipeType(RagiumRecipeTypes.ASSEMBLING, "組立") + addRecipeType(RagiumRecipeTypes.CENTRIFUGING, "遠心分離") addRecipeType(RagiumRecipeTypes.COMPRESSING, "圧縮") addRecipeType(RagiumRecipeTypes.CRUSHING, "粉砕") addRecipeType(RagiumRecipeTypes.CUTTING, "切断") - addRecipeType(RagiumRecipeTypes.DRAINING, "排出") addRecipeType(RagiumRecipeTypes.FILLING, "封入") addRecipeType(RagiumRecipeTypes.ALLOYING, "合金") @@ -188,7 +188,6 @@ class RagiumJapaneseLangProvider(output: PackOutput) : addRecipeType(RagiumRecipeTypes.REFINING, "蒸留") addRecipeType(RagiumRecipeTypes.BATHING, "化学洗浄") - addRecipeType(RagiumRecipeTypes.CENTRIFUGING, "遠心分離") addRecipeType(RagiumRecipeTypes.EXCHANGING, "交換") addRecipeType(RagiumRecipeTypes.MIXING, "混合") addRecipeType(RagiumRecipeTypes.REACTING, "化学反応") diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt index 295c7938f..418a2f019 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt @@ -280,7 +280,7 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu plastic() // Soul Sand -> Sand + Crude Oil - RagiumRecipeBuilders.pyrolyzing { + RagiumRecipeBuilders.centrifuging { ingredient { items { +Items.SOUL_SAND } } itemResult { +Items.SAND } fluidResult { @@ -290,7 +290,7 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu recipeId replace id("crude_oil_from_soul_sand") }.save(exporter) // Soul Soil -> Clay + Crude Oil - RagiumRecipeBuilders.pyrolyzing { + RagiumRecipeBuilders.centrifuging { ingredient { items { +Items.SOUL_SOIL } } itemResult { +Items.CLAY } fluidResult { diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumMechanicalRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumMechanicalRecipeProvider.kt index bad8cf8d8..8335e9ab6 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumMechanicalRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumMechanicalRecipeProvider.kt @@ -39,10 +39,11 @@ class RagiumMechanicalRecipeProvider(packOutput: PackOutput, future: Completable HTRecipeProvider(packOutput, future, RagiumAPI.MOD_ID) { override fun exportValues() { assembling() + centrifuging() compressing() crushing() cutting() - draining() + filling() } @@ -292,6 +293,33 @@ class RagiumMechanicalRecipeProvider(packOutput: PackOutput, future: Completable }.save(exporter) } + private fun centrifuging() { + // Honey Bottle -> Glass Bottle + Honey + RagiumRecipeBuilders.centrifuging { + ingredient { +holderSet(Tags.Items.DRINKS_HONEY) } + itemResult { +Items.GLASS_BOTTLE } + fluidResult { + +RagiumFluids.HONEY + amount = 250 + } + recipeId replace id("honey_from_bottle") + }.save(exporter) + // Wet Sponge -> Sponge + Water + RagiumRecipeBuilders.centrifuging { + ingredient { items { +Items.WET_SPONGE } } + itemResult { +Items.SPONGE } + fluidResult { water() } + }.save(exporter) + + // Honeycomb -> Beeswax + Honey + RagiumRecipeBuilders.centrifuging { + ingredient { items { +Items.HONEYCOMB } } + itemResult { +RagiumItems.BEESWAX } + fluidResult { +RagiumFluids.HONEY } + recipeId replace id("honey_from_comb") + }.save(exporter) + } + private fun compressing() { // Snow -> Snow Block RagiumRecipeBuilders.compressing { @@ -737,33 +765,6 @@ class RagiumMechanicalRecipeProvider(packOutput: PackOutput, future: Completable }.save(exporter) } - private fun draining() { - // Honey Bottle -> Glass Bottle + Honey - RagiumRecipeBuilders.draining { - ingredient { +holderSet(Tags.Items.DRINKS_HONEY) } - itemResult { +Items.GLASS_BOTTLE } - fluidResult { - +RagiumFluids.HONEY - amount = 250 - } - recipeId replace id("honey_from_bottle") - }.save(exporter) - // Wet Sponge -> Sponge + Water - RagiumRecipeBuilders.draining { - ingredient { items { +Items.WET_SPONGE } } - itemResult { +Items.SPONGE } - fluidResult { water() } - }.save(exporter) - - // Honeycomb -> Beeswax + Honey - RagiumRecipeBuilders.draining { - ingredient { items { +Items.HONEYCOMB } } - itemResult { +RagiumItems.BEESWAX } - fluidResult { +RagiumFluids.HONEY } - recipeId replace id("honey_from_comb") - }.save(exporter) - } - private fun filling() { // Honey Bottle <- Glass Bottle + Honey RagiumRecipeBuilders.filling { diff --git a/src/generated/resources/assets/ragium/lang/en_us.json b/src/generated/resources/assets/ragium/lang/en_us.json index 5941b689d..53cd4b49f 100644 --- a/src/generated/resources/assets/ragium/lang/en_us.json +++ b/src/generated/resources/assets/ragium/lang/en_us.json @@ -407,7 +407,6 @@ "recipe_type.ragium.compressing": "Compressing", "recipe_type.ragium.crushing": "Crushing", "recipe_type.ragium.cutting": "Cutting", - "recipe_type.ragium.draining": "Draining", "recipe_type.ragium.electrolyzing": "Electrolyzing", "recipe_type.ragium.enchanting": "Enchanting", "recipe_type.ragium.exchanging": "Exchanging", diff --git a/src/generated/resources/assets/ragium/lang/ja_jp.json b/src/generated/resources/assets/ragium/lang/ja_jp.json index 9942c793a..b2e537f5e 100644 --- a/src/generated/resources/assets/ragium/lang/ja_jp.json +++ b/src/generated/resources/assets/ragium/lang/ja_jp.json @@ -407,7 +407,6 @@ "recipe_type.ragium.compressing": "圧縮", "recipe_type.ragium.crushing": "粉砕", "recipe_type.ragium.cutting": "切断", - "recipe_type.ragium.draining": "排出", "recipe_type.ragium.electrolyzing": "電気分解", "recipe_type.ragium.enchanting": "エンチャント", "recipe_type.ragium.exchanging": "交換", diff --git a/src/generated/resources/data/ragium/recipe/pyrolyzing/crude_oil_from_soul_sand.json b/src/generated/resources/data/ragium/recipe/centrifuging/crude_oil_from_soul_sand.json similarity index 88% rename from src/generated/resources/data/ragium/recipe/pyrolyzing/crude_oil_from_soul_sand.json rename to src/generated/resources/data/ragium/recipe/centrifuging/crude_oil_from_soul_sand.json index c0815a6e8..529d65a6b 100644 --- a/src/generated/resources/data/ragium/recipe/pyrolyzing/crude_oil_from_soul_sand.json +++ b/src/generated/resources/data/ragium/recipe/centrifuging/crude_oil_from_soul_sand.json @@ -1,5 +1,5 @@ { - "type": "ragium:pyrolyzing", + "type": "ragium:centrifuging", "ingredient": { "count": 1, "items": "minecraft:soul_sand" diff --git a/src/generated/resources/data/ragium/recipe/pyrolyzing/crude_oil_from_soul_soil.json b/src/generated/resources/data/ragium/recipe/centrifuging/crude_oil_from_soul_soil.json similarity index 88% rename from src/generated/resources/data/ragium/recipe/pyrolyzing/crude_oil_from_soul_soil.json rename to src/generated/resources/data/ragium/recipe/centrifuging/crude_oil_from_soul_soil.json index 635d3a372..b3c3c0877 100644 --- a/src/generated/resources/data/ragium/recipe/pyrolyzing/crude_oil_from_soul_soil.json +++ b/src/generated/resources/data/ragium/recipe/centrifuging/crude_oil_from_soul_soil.json @@ -1,5 +1,5 @@ { - "type": "ragium:pyrolyzing", + "type": "ragium:centrifuging", "ingredient": { "count": 1, "items": "minecraft:soul_soil" diff --git a/src/generated/resources/data/ragium/recipe/draining/honey_from_bottle.json b/src/generated/resources/data/ragium/recipe/centrifuging/honey_from_bottle.json similarity index 88% rename from src/generated/resources/data/ragium/recipe/draining/honey_from_bottle.json rename to src/generated/resources/data/ragium/recipe/centrifuging/honey_from_bottle.json index 91a7b322d..dc6766fe6 100644 --- a/src/generated/resources/data/ragium/recipe/draining/honey_from_bottle.json +++ b/src/generated/resources/data/ragium/recipe/centrifuging/honey_from_bottle.json @@ -1,5 +1,5 @@ { - "type": "ragium:draining", + "type": "ragium:centrifuging", "ingredient": { "count": 1, "items": "#c:drinks/honey" diff --git a/src/generated/resources/data/ragium/recipe/draining/honey_from_comb.json b/src/generated/resources/data/ragium/recipe/centrifuging/honey_from_comb.json similarity index 88% rename from src/generated/resources/data/ragium/recipe/draining/honey_from_comb.json rename to src/generated/resources/data/ragium/recipe/centrifuging/honey_from_comb.json index 771cf7dbe..f294ba43b 100644 --- a/src/generated/resources/data/ragium/recipe/draining/honey_from_comb.json +++ b/src/generated/resources/data/ragium/recipe/centrifuging/honey_from_comb.json @@ -1,5 +1,5 @@ { - "type": "ragium:draining", + "type": "ragium:centrifuging", "ingredient": { "count": 1, "items": "minecraft:honeycomb" diff --git a/src/generated/resources/data/ragium/recipe/draining/sponge.json b/src/generated/resources/data/ragium/recipe/centrifuging/sponge.json similarity index 88% rename from src/generated/resources/data/ragium/recipe/draining/sponge.json rename to src/generated/resources/data/ragium/recipe/centrifuging/sponge.json index bf1f64f3c..5be0f44a0 100644 --- a/src/generated/resources/data/ragium/recipe/draining/sponge.json +++ b/src/generated/resources/data/ragium/recipe/centrifuging/sponge.json @@ -1,5 +1,5 @@ { - "type": "ragium:draining", + "type": "ragium:centrifuging", "ingredient": { "count": 1, "items": "minecraft:wet_sponge" diff --git a/src/generated/resources/reports/ragium/registries.json b/src/generated/resources/reports/ragium/registries.json index 70701026f..7fa66916f 100644 --- a/src/generated/resources/reports/ragium/registries.json +++ b/src/generated/resources/reports/ragium/registries.json @@ -439,7 +439,6 @@ "compressing", "crushing", "cutting", - "draining", "electrolyzing", "enchanting", "exchanging", @@ -462,7 +461,6 @@ "compressing", "crushing", "cutting", - "draining", "electrolyzing", "enchanting", "exchanging", diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTFluidToDoubleFluidRecipe.kt b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTFluidToDoubleFluidRecipe.kt deleted file mode 100644 index 37803ee60..000000000 --- a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTFluidToDoubleFluidRecipe.kt +++ /dev/null @@ -1,88 +0,0 @@ -package hiiragi283.lib.recipe.base - -import com.mojang.serialization.MapCodec -import hiiragi283.lib.HTConstants -import hiiragi283.lib.collection.Nel -import hiiragi283.lib.data.recipe.builder.HTFluidToDoubleFluidRecipeBuilder -import hiiragi283.lib.recipe.ingredient.HTFluidIngredient -import hiiragi283.lib.recipe.input.HTSingleFluidRecipeInput -import hiiragi283.lib.recipe.result.HTFluidResult -import hiiragi283.lib.recipe.result.createOrEmpty -import hiiragi283.lib.serialization.codec.HTCodecs -import hiiragi283.lib.serialization.codec.compactNelFieldOf -import hiiragi283.lib.serialization.network.nelOf -import net.minecraft.network.RegistryFriendlyByteBuf -import net.minecraft.network.codec.StreamCodec -import net.neoforged.neoforge.fluids.FluidInstance -import net.neoforged.neoforge.fluids.FluidStack - -/** - * 1種類の液体から2種類の液体を作成するレシピを表すインターフェースです。 - * @author Hiiragi Tsubasa - * @since 26.1.8 - */ -interface HTFluidToDoubleFluidRecipe : - HTRecipePredicates.SingleFluid, - HTRecipeFactories.SingleFluidTo>, - HTProgressRecipe { - - fun asSingleOutput(): HTFluidToFluidRecipe = object : HTFluidToFluidRecipe { - override fun test(input: FluidInstance): Boolean = this@HTFluidToDoubleFluidRecipe.test(input) - - override fun getMatchingStack(input: FluidInstance): FluidInstance = - this@HTFluidToDoubleFluidRecipe.getMatchingStack(input) - - override fun apply(input: FluidInstance): FluidStack = this@HTFluidToDoubleFluidRecipe.apply(input).first - - override fun getProgressData(input: HTSingleFluidRecipeInput): HTProgressData = - this@HTFluidToDoubleFluidRecipe.getProgressData(input) - } - - /** - * @author Hiiragi Tsubasa - * @since 26.1.8 - */ - open class Basic( - val ingredient: HTFluidIngredient, - val result: Nel, - override val progressData: HTProgressData - ) : HTFluidToDoubleFluidRecipe, - HTProgressRecipe.Simple { - companion object { - @JvmStatic - fun codec(factory: HTFluidToDoubleFluidRecipeBuilder.Factory): MapCodec = - HTCodecs.recordMap { instance -> - instance.group( - HTFluidIngredient.CODEC.fieldOf(HTConstants.INGREDIENT).forGetter(Basic::ingredient), - HTFluidResult.CODEC - .compactNelFieldOf(HTConstants.RESULT, HTConstants.RESULTS, 2) - .forGetter(Basic::result), - HTProgressData.CODEC.forGetter(Basic::progressData) - ).apply(instance, factory::create) - } - - @JvmField - val SIMPLE_CODEC: MapCodec = codec(::Basic) - - @JvmStatic - fun streamCodec( - factory: HTFluidToDoubleFluidRecipeBuilder.Factory - ): StreamCodec = StreamCodec.composite( - HTFluidIngredient.STREAM_CODEC, - Basic::ingredient, - HTFluidResult.STREAM_CODEC.nelOf(), - Basic::result, - HTProgressData.STREAM_CODEC, - Basic::progressData, - factory::create - ) - } - - override fun test(input: FluidInstance): Boolean = ingredient.test(input) - - override fun apply(input: FluidInstance): Pair = - result.head.create() to result.getOrNull(1).createOrEmpty() - - override fun getMatchingStack(input: FluidInstance): FluidInstance = ingredient.getMatchingStack(input) - } -} diff --git a/src/lib/kotlin/hiiragi283/ragium/api/RagiumConstants.kt b/src/lib/kotlin/hiiragi283/ragium/api/RagiumConstants.kt index f36976d7c..281ee245d 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/RagiumConstants.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/RagiumConstants.kt @@ -10,6 +10,7 @@ data object RagiumConstants { // Mechanical const val ASSEMBLER = "assembler" + const val CENTRIFUGE = "centrifuge" const val COMPRESSOR = "compressor" const val CRUSHER = "crusher" const val CUTTING_MACHINE = "cutting_machine" @@ -23,7 +24,6 @@ data object RagiumConstants { const val SMELTER = "smelter" // Chemical - const val CENTRIFUGE = "centrifuge" const val CHEMICAL_BATH = "chemical_bath" const val CHEMICAL_REACTOR = "chemical_reactor" const val MIXER = "mixer" @@ -47,10 +47,10 @@ data object RagiumConstants { // Mechanical const val ASSEMBLING = "assembling" + const val CENTRIFUGING = "centrifuging" const val COMPRESSING = "compressing" const val CRUSHING = "crushing" const val CUTTING = "cutting" - const val DRAINING = "draining" const val FILLING = "filling" // Heat @@ -62,7 +62,6 @@ data object RagiumConstants { // Chemical const val BATHING = "bathing" - const val CENTRIFUGING = "centrifuging" const val EXCHANGING = "exchanging" const val MIXING = "mixing" const val REACTING = "reacting" diff --git a/src/lib/kotlin/hiiragi283/ragium/api/data/recipe/builder/RTCentrifugingRecipeBuilder.kt b/src/lib/kotlin/hiiragi283/ragium/api/data/recipe/builder/RTCentrifugingRecipeBuilder.kt new file mode 100644 index 000000000..2b3dc1c1d --- /dev/null +++ b/src/lib/kotlin/hiiragi283/ragium/api/data/recipe/builder/RTCentrifugingRecipeBuilder.kt @@ -0,0 +1,71 @@ +@file:OptIn(ExperimentalContracts::class) + +package hiiragi283.ragium.api.data.recipe.builder + +import hiiragi283.lib.collection.toNel +import hiiragi283.lib.data.recipe.builder.HTProgressRecipeBuilder +import hiiragi283.lib.data.recipe.ingredient.HTItemIngredientBuilder +import hiiragi283.lib.data.recipe.result.HTFluidResultBuilder +import hiiragi283.lib.data.recipe.result.HTItemResultBuilder +import hiiragi283.lib.recipe.ingredient.HTItemIngredient +import hiiragi283.lib.recipe.result.HTFluidResult +import hiiragi283.lib.recipe.result.HTItemResult +import hiiragi283.lib.util.HTDelegates +import hiiragi283.ragium.api.RagiumConstants +import hiiragi283.ragium.api.recipe.RTCentrifugingRecipe +import net.minecraft.resources.Identifier +import java.util.Optional +import kotlin.contracts.ExperimentalContracts +import kotlin.contracts.InvocationKind +import kotlin.contracts.contract + +class RTCentrifugingRecipeBuilder : HTProgressRecipeBuilder(RagiumConstants.CENTRIFUGING) { + override fun getRecipeId(): Identifier? = itemResults.first().getId() + + override fun createRecipe(): RTCentrifugingRecipe.Basic = RTCentrifugingRecipe.Basic( + ingredient, + RTCentrifugingRecipe.Result(itemResults.toNel(), fluidResult), + progressData + ) + + // Ingredient + @PublishedApi internal var ingredient: HTItemIngredient by HTDelegates.onceInitialize() + + operator fun HTItemIngredient.unaryPlus() { + ingredient = this + } + + inline fun ingredient(builderAction: HTItemIngredientBuilder.() -> Unit) { + contract { + callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) + } + +HTItemIngredientBuilder.build(builderAction) + } + + // Results + var itemResults: MutableList = mutableListOf() + + var fluidResult: Optional by HTDelegates.optionalInitialize() + + operator fun HTItemResult.unaryPlus() { + itemResults += this + } + + operator fun HTFluidResult.unaryPlus() { + fluidResult = Optional.of(this) + } + + inline fun itemResult(builderAction: HTItemResultBuilder.() -> Unit) { + contract { + callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) + } + +HTItemResultBuilder.build(builderAction) + } + + inline fun fluidResult(builderAction: HTFluidResultBuilder.() -> Unit) { + contract { + callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) + } + +HTFluidResultBuilder.build(builderAction) + } +} diff --git a/src/lib/kotlin/hiiragi283/ragium/api/data/recipe/builder/RagiumRecipeBuilders.kt b/src/lib/kotlin/hiiragi283/ragium/api/data/recipe/builder/RagiumRecipeBuilders.kt index d2776cd24..841d85f1b 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/data/recipe/builder/RagiumRecipeBuilders.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/data/recipe/builder/RagiumRecipeBuilders.kt @@ -2,7 +2,6 @@ package hiiragi283.ragium.api.data.recipe.builder -import hiiragi283.lib.data.recipe.builder.HTFluidToDoubleFluidRecipeBuilder import hiiragi283.lib.data.recipe.builder.HTFluidToItemAndFluidRecipeBuilder import hiiragi283.lib.data.recipe.builder.HTItemAndFluidToRecipeBuilder import hiiragi283.lib.data.recipe.builder.HTItemOrFluidRecipeBuilder @@ -16,11 +15,9 @@ import hiiragi283.ragium.api.RagiumConstants import hiiragi283.ragium.api.recipe.RTAlloyingRecipe import hiiragi283.ragium.api.recipe.RTAssemblingRecipe import hiiragi283.ragium.api.recipe.RTBathingRecipe -import hiiragi283.ragium.api.recipe.RTCentrifugingRecipe import hiiragi283.ragium.api.recipe.RTCompressingRecipe import hiiragi283.ragium.api.recipe.RTCrushingRecipe import hiiragi283.ragium.api.recipe.RTCuttingRecipe -import hiiragi283.ragium.api.recipe.RTDrainingRecipe import hiiragi283.ragium.api.recipe.RTEnchantingRecipe import hiiragi283.ragium.api.recipe.RTExchangingRecipe import hiiragi283.ragium.api.recipe.RTFillingRecipe @@ -80,13 +77,11 @@ data object RagiumRecipeBuilders { } @JvmStatic - inline fun draining( - builderAction: HTItemToItemAndFluidRecipeBuilder.() -> Unit - ): HTItemToItemAndFluidRecipeBuilder { + inline fun centrifuging(builderAction: RTCentrifugingRecipeBuilder.() -> Unit): RTCentrifugingRecipeBuilder { contract { callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) } - return HTItemToItemAndFluidRecipeBuilder(RagiumConstants.DRAINING, ::RTDrainingRecipe).apply(builderAction) + return RTCentrifugingRecipeBuilder().apply(builderAction) } @JvmStatic @@ -159,17 +154,6 @@ data object RagiumRecipeBuilders { return HTItemAndFluidToRecipeBuilder.ToItem(RagiumConstants.BATHING, ::RTBathingRecipe).apply(builderAction) } - @JvmStatic - inline fun centrifuging( - builderAction: HTFluidToDoubleFluidRecipeBuilder.() -> Unit - ): HTFluidToDoubleFluidRecipeBuilder { - contract { - callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) - } - return HTFluidToDoubleFluidRecipeBuilder(RagiumConstants.CENTRIFUGING, ::RTCentrifugingRecipe) - .apply(builderAction) - } - @JvmStatic inline fun exchanging( builderAction: HTItemOrFluidRecipeBuilder.() -> Unit diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTCentrifugingRecipe.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTCentrifugingRecipe.kt index 8783ef87d..5cda7a53d 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTCentrifugingRecipe.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTCentrifugingRecipe.kt @@ -1,25 +1,104 @@ package hiiragi283.ragium.api.recipe +import com.mojang.serialization.Codec +import com.mojang.serialization.MapCodec +import hiiragi283.lib.HTConstants import hiiragi283.lib.collection.Nel import hiiragi283.lib.recipe.HTSerializableRecipe -import hiiragi283.lib.recipe.base.HTFluidToDoubleFluidRecipe import hiiragi283.lib.recipe.base.HTProgressData -import hiiragi283.lib.recipe.ingredient.HTFluidIngredient -import hiiragi283.lib.recipe.input.HTSingleFluidRecipeInput +import hiiragi283.lib.recipe.base.HTProgressRecipe +import hiiragi283.lib.recipe.base.HTRecipeFactories +import hiiragi283.lib.recipe.base.HTRecipePredicates +import hiiragi283.lib.recipe.ingredient.HTItemIngredient import hiiragi283.lib.recipe.result.HTFluidResult +import hiiragi283.lib.recipe.result.HTItemResult +import hiiragi283.lib.recipe.result.createOrEmpty +import hiiragi283.lib.serialization.codec.HTCodecs +import hiiragi283.lib.serialization.codec.compactNelFieldOf +import hiiragi283.lib.serialization.network.nelOf +import net.minecraft.network.RegistryFriendlyByteBuf +import net.minecraft.network.codec.ByteBufCodecs +import net.minecraft.network.codec.StreamCodec +import net.minecraft.world.item.ItemInstance +import net.minecraft.world.item.ItemStack import net.minecraft.world.item.crafting.RecipeSerializer import net.minecraft.world.item.crafting.RecipeType +import net.minecraft.world.item.crafting.SingleRecipeInput +import net.neoforged.neoforge.fluids.FluidStack +import java.util.Optional -class RTCentrifugingRecipe(ingredient: HTFluidIngredient, result: Nel, progressData: HTProgressData) : - HTFluidToDoubleFluidRecipe.Basic(ingredient, result, progressData), - HTSerializableRecipe { - companion object { - @JvmField - val SERIALIZER: RecipeSerializer = - RecipeSerializer(codec(::RTCentrifugingRecipe), streamCodec(::RTCentrifugingRecipe)) +interface RTCentrifugingRecipe : + HTRecipePredicates.SingleItem, + HTRecipeFactories.SingleItemTo, + HTProgressRecipe { + + @JvmRecord + data class Output(val items: List, val fluid: FluidStack) + + @JvmRecord + data class Result(val items: Nel, val fluid: Optional) { + companion object { + @JvmField + val CODEC: Codec = HTCodecs.record { instance -> + instance.group( + HTItemResult.CODEC + .compactNelFieldOf(HTConstants.ITEM, HTConstants.ITEMS, 4) + .forGetter(Result::items), + HTFluidResult.CODEC.optionalFieldOf(HTConstants.FLUID).forGetter(Result::fluid) + ).apply(instance, ::Result) + } + + @JvmField + val STREAM_CODEC: StreamCodec = StreamCodec.composite( + HTItemResult.STREAM_CODEC.nelOf(), + Result::items, + ByteBufCodecs.optional(HTFluidResult.STREAM_CODEC), + Result::fluid, + ::Result + ) + } + + fun create(): Output = Output(items.map(HTItemResult::create), fluid.createOrEmpty()) } - override fun getSerializer(): RecipeSerializer = RagiumRecipeSerializers.CENTRIFUGING + @JvmRecord + data class Basic(val ingredient: HTItemIngredient, val result: Result, override val progressData: HTProgressData) : + RTCentrifugingRecipe, + HTProgressRecipe.Simple, + HTSerializableRecipe { + companion object { + @JvmField + val CODEC: MapCodec = HTCodecs.recordMap { instance -> + instance.group( + HTItemIngredient.CODEC.fieldOf(HTConstants.INGREDIENT).forGetter(Basic::ingredient), + Result.CODEC.fieldOf(HTConstants.RESULT).forGetter(Basic::result), + HTProgressData.CODEC.forGetter(Basic::progressData) + ).apply(instance, ::Basic) + } + + @JvmField + val STREAM_CODEC: StreamCodec = StreamCodec.composite( + HTItemIngredient.STREAM_CODEC, + Basic::ingredient, + Result.STREAM_CODEC, + Basic::result, + HTProgressData.STREAM_CODEC, + Basic::progressData, + ::Basic + ) + + @JvmField + val SERIALIZER: RecipeSerializer = RecipeSerializer(CODEC, STREAM_CODEC) + } - override fun getType(): RecipeType = RagiumRecipeTypes.CENTRIFUGING + override fun test(input: ItemInstance): Boolean = ingredient.test(input) + + override fun apply(input: ItemInstance): Output = result.create() + + override fun getMatchingStack(input: ItemInstance): ItemInstance = ingredient.getMatchingStack(input) + + override fun getSerializer(): RecipeSerializer = RagiumRecipeSerializers.CENTRIFUGING + + override fun getType(): RecipeType = RagiumRecipeTypes.CENTRIFUGING + } } diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTDrainingRecipe.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTDrainingRecipe.kt deleted file mode 100644 index 2c5bdf00f..000000000 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTDrainingRecipe.kt +++ /dev/null @@ -1,24 +0,0 @@ -package hiiragi283.ragium.api.recipe - -import hiiragi283.lib.recipe.HTSerializableRecipe -import hiiragi283.lib.recipe.base.HTItemToRecipe -import hiiragi283.lib.recipe.base.HTProgressData -import hiiragi283.lib.recipe.ingredient.HTItemIngredient -import hiiragi283.lib.recipe.result.HTItemOrFluidResult -import net.minecraft.world.item.crafting.RecipeSerializer -import net.minecraft.world.item.crafting.RecipeType -import net.minecraft.world.item.crafting.SingleRecipeInput - -class RTDrainingRecipe(ingredient: HTItemIngredient, result: HTItemOrFluidResult, progressData: HTProgressData) : - HTItemToRecipe.BasicItemAndFluid(ingredient, result, progressData), - HTSerializableRecipe { - companion object { - @JvmField - val SERIALIZER: RecipeSerializer = - RecipeSerializer(codec(::RTDrainingRecipe), streamCodec(::RTDrainingRecipe)) - } - - override fun getSerializer(): RecipeSerializer = RagiumRecipeSerializers.DRAINING - - override fun getType(): RecipeType = RagiumRecipeTypes.DRAINING -} diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeLookups.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeLookups.kt index 5df7b76b3..10652d514 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeLookups.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeLookups.kt @@ -1,6 +1,5 @@ package hiiragi283.ragium.api.recipe -import hiiragi283.lib.recipe.base.HTFluidToDoubleFluidRecipe import hiiragi283.lib.recipe.base.HTFluidToItemAndFluidRecipe import hiiragi283.lib.recipe.base.HTItemAndFluidToItemRecipe import hiiragi283.lib.recipe.base.HTItemOrFluidRecipe @@ -37,6 +36,9 @@ data object RagiumRecipeLookups { @JvmField val ASSEMBLING: HTCompoundRecipeLookup = create(RagiumConstants.ASSEMBLING) + @JvmField + val CENTRIFUGING: HTCompoundRecipeLookup = create(RagiumConstants.CENTRIFUGING) + @JvmField val COMPRESSING: HTCompoundRecipeLookup = create(RagiumConstants.COMPRESSING) @@ -46,9 +48,6 @@ data object RagiumRecipeLookups { @JvmField val CUTTING: HTCompoundRecipeLookup = create(RagiumConstants.CUTTING) - @JvmField - val DRAINING: HTCompoundRecipeLookup = create(RagiumConstants.DRAINING) - @JvmField val FILLING: HTCompoundRecipeLookup = create(RagiumConstants.FILLING) @@ -72,9 +71,6 @@ data object RagiumRecipeLookups { @JvmField val BATHING: HTCompoundRecipeLookup = create(RagiumConstants.BATHING) - @JvmField - val CENTRIFUGING: HTCompoundRecipeLookup = create(RagiumConstants.CENTRIFUGING) - @JvmField val EXCHANGING: HTCompoundRecipeLookup = create(RagiumConstants.EXCHANGING) diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeSerializers.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeSerializers.kt index 963f2449b..9a0d3429e 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeSerializers.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeSerializers.kt @@ -41,6 +41,10 @@ data object RagiumRecipeSerializers { val ASSEMBLING: RecipeSerializer = register(RagiumConstants.ASSEMBLING, RTAssemblingRecipe.SERIALIZER) + @JvmField + val CENTRIFUGING: RecipeSerializer = + register(RagiumConstants.CENTRIFUGING, RTCentrifugingRecipe.Basic.SERIALIZER) + @JvmField val COMPRESSING: RecipeSerializer = register(RagiumConstants.COMPRESSING, RTCompressingRecipe.SERIALIZER) @@ -53,10 +57,6 @@ data object RagiumRecipeSerializers { val CUTTING: RecipeSerializer = register(RagiumConstants.CUTTING, RTCuttingRecipe.SERIALIZER) - @JvmField - val DRAINING: RecipeSerializer = - register(RagiumConstants.DRAINING, RTDrainingRecipe.SERIALIZER) - @JvmField val FILLING: RecipeSerializer = register(RagiumConstants.FILLING, RTFillingRecipe.SERIALIZER) @@ -87,10 +87,6 @@ data object RagiumRecipeSerializers { val BATHING: RecipeSerializer = register(RagiumConstants.BATHING, RTBathingRecipe.SERIALIZER) - @JvmField - val CENTRIFUGING: RecipeSerializer = - register(RagiumConstants.CENTRIFUGING, RTCentrifugingRecipe.SERIALIZER) - @JvmField val EXCHANGING: RecipeSerializer = register(RagiumConstants.EXCHANGING, RTExchangingRecipe.SERIALIZER) diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeTypes.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeTypes.kt index eab8aaa5d..208996323 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeTypes.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeTypes.kt @@ -38,6 +38,9 @@ data object RagiumRecipeTypes { @JvmField val ASSEMBLING: RecipeType = create(RagiumConstants.ASSEMBLING) + @JvmField + val CENTRIFUGING: RecipeType = create(RagiumConstants.CENTRIFUGING) + @JvmField val COMPRESSING: RecipeType = create(RagiumConstants.COMPRESSING) @@ -47,9 +50,6 @@ data object RagiumRecipeTypes { @JvmField val CUTTING: RecipeType = create(RagiumConstants.CUTTING) - @JvmField - val DRAINING: RecipeType = create(RagiumConstants.DRAINING) - @JvmField val FILLING: RecipeType = create(RagiumConstants.FILLING) @@ -73,9 +73,6 @@ data object RagiumRecipeTypes { @JvmField val BATHING: RecipeType = create(RagiumConstants.BATHING) - @JvmField - val CENTRIFUGING: RecipeType = create(RagiumConstants.CENTRIFUGING) - @JvmField val EXCHANGING: RecipeType = create(RagiumConstants.EXCHANGING) diff --git a/src/main/kotlin/hiiragi283/ragium/common/RagiumCommon.kt b/src/main/kotlin/hiiragi283/ragium/common/RagiumCommon.kt index 9d3ac2e6a..bbc9ce6ca 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/RagiumCommon.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/RagiumCommon.kt @@ -25,7 +25,7 @@ import hiiragi283.ragium.api.data.recipe.builder.RagiumRecipeBuilders import hiiragi283.ragium.api.recipe.RagiumRecipeLookups import hiiragi283.ragium.api.recipe.RagiumRecipeTypes import hiiragi283.ragium.common.fluid.RagiumFluids -import hiiragi283.ragium.common.recipe.RTPotionBottleDrainingRecipe +import hiiragi283.ragium.common.recipe.RTPotionBottleCentrifugingRecipe import hiiragi283.ragium.common.recipe.RTPotionBottleFillingRecipe import it.unimi.dsi.fastutil.objects.ObjectArrayList import net.minecraft.core.Holder @@ -125,10 +125,10 @@ internal data object RagiumCommon { private fun initRecipeLookups() { // from recipe types RagiumRecipeLookups.ASSEMBLING.fromRecipeType(RagiumRecipeTypes.ASSEMBLING, identity()) + RagiumRecipeLookups.CENTRIFUGING.fromRecipeType(RagiumRecipeTypes.CENTRIFUGING, identity()) RagiumRecipeLookups.COMPRESSING.fromRecipeType(RagiumRecipeTypes.COMPRESSING, identity()) RagiumRecipeLookups.CRUSHING.fromRecipeType(RagiumRecipeTypes.CRUSHING, identity()) RagiumRecipeLookups.CUTTING.fromRecipeType(RagiumRecipeTypes.CUTTING, identity()) - RagiumRecipeLookups.DRAINING.fromRecipeType(RagiumRecipeTypes.DRAINING, identity()) RagiumRecipeLookups.FILLING.fromRecipeType(RagiumRecipeTypes.FILLING, identity()) RagiumRecipeLookups.ALLOYING.fromRecipeType(RagiumRecipeTypes.ALLOYING, identity()) @@ -137,17 +137,18 @@ internal data object RagiumCommon { RagiumRecipeLookups.REFINING.fromRecipeType(RagiumRecipeTypes.REFINING, identity()) RagiumRecipeLookups.BATHING.fromRecipeType(RagiumRecipeTypes.BATHING, identity()) - RagiumRecipeLookups.CENTRIFUGING.fromRecipeType(RagiumRecipeTypes.CENTRIFUGING, identity()) RagiumRecipeLookups.EXCHANGING.fromRecipeType(RagiumRecipeTypes.EXCHANGING, identity()) RagiumRecipeLookups.MIXING.fromRecipeType(RagiumRecipeTypes.MIXING, identity()) RagiumRecipeLookups.PLANTING.fromRecipeType(RagiumRecipeTypes.PLANTING, identity()) // runtime recipes - RagiumRecipeLookups.DRAINING.addRecipes( + RagiumRecipeLookups.CENTRIFUGING.addRecipes( HTBottleType.entries.associate { bottleType: HTBottleType -> Pair( - RecipeKey(RagiumAPI.id("/${RagiumConstants.DRAINING}/potion_bottle/${bottleType.serializedName}")), - RTPotionBottleDrainingRecipe(bottleType) + RecipeKey( + RagiumAPI.id("/${RagiumConstants.CENTRIFUGING}/potion_bottle/${bottleType.serializedName}") + ), + RTPotionBottleCentrifugingRecipe(bottleType) ) } ) diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/RTPotionBottleDrainingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/RTPotionBottleCentrifugingRecipe.kt similarity index 76% rename from src/main/kotlin/hiiragi283/ragium/common/recipe/RTPotionBottleDrainingRecipe.kt rename to src/main/kotlin/hiiragi283/ragium/common/recipe/RTPotionBottleCentrifugingRecipe.kt index d599d37a4..0965308cb 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/recipe/RTPotionBottleDrainingRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/RTPotionBottleCentrifugingRecipe.kt @@ -2,11 +2,10 @@ package hiiragi283.ragium.common.recipe import hiiragi283.lib.item.alchemy.HTBottleType import hiiragi283.lib.item.alchemy.HTPotionHelper -import hiiragi283.lib.recipe.base.HTItemToItemAndFluidRecipe import hiiragi283.lib.recipe.base.HTProgressData import hiiragi283.lib.recipe.base.HTProgressRecipe import hiiragi283.lib.recipe.ingredient.HTIngredientHelper -import hiiragi283.lib.recipe.result.HTItemAndFluidStack +import hiiragi283.ragium.api.recipe.RTCentrifugingRecipe import net.minecraft.world.item.ItemInstance import net.minecraft.world.item.ItemStack import net.minecraft.world.item.crafting.SingleRecipeInput @@ -14,8 +13,8 @@ import net.neoforged.neoforge.fluids.FluidStack import net.neoforged.neoforge.fluids.FluidStackTemplate @JvmRecord -data class RTPotionBottleDrainingRecipe(val bottleType: HTBottleType, override val progressData: HTProgressData) : - HTItemToItemAndFluidRecipe, +data class RTPotionBottleCentrifugingRecipe(val bottleType: HTBottleType, override val progressData: HTProgressData) : + RTCentrifugingRecipe, HTProgressRecipe.Simple { companion object { @JvmField @@ -27,8 +26,8 @@ data class RTPotionBottleDrainingRecipe(val bottleType: HTBottleType, override v override fun test(input: ItemInstance): Boolean = bottleType.filledItem.isOf(input) && HTPotionHelper.hasAnyEffect(input) - override fun apply(input: ItemInstance): HTItemAndFluidStack = HTItemAndFluidStack( - bottleType.emptyItem.asStackOrEmpty(), + override fun apply(input: ItemInstance): RTCentrifugingRecipe.Output = RTCentrifugingRecipe.Output( + bottleType.emptyItem.asStack().fold(::listOf) { listOf() }, HTPotionHelper.createFluid(input, HTPotionHelper.BOTTLE_AMOUNT) .fold(FluidStackTemplate::create) { FluidStack.EMPTY } ) From 46256668a6d82dbd84797ad95494145ba1eb8ddf Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Mon, 12 Oct 2026 21:54:39 +0900 Subject: [PATCH 16/25] =?UTF-8?q?feat:=20=E6=B6=B2=E4=BD=93=E5=85=A5?= =?UTF-8?q?=E3=82=8A=E3=83=90=E3=82=B1=E3=83=84=E3=82=92=E9=81=A0=E5=BF=83?= =?UTF-8?q?=E5=88=86=E9=9B=A2=E3=81=97=E3=81=A6=E4=B8=AD=E8=BA=AB=E3=82=92?= =?UTF-8?q?=E5=8F=96=E3=82=8A=E5=87=BA=E3=81=99=E3=83=AC=E3=82=B7=E3=83=94?= =?UTF-8?q?=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/integration/jei/RagiumJeiPlugin.kt | 64 ++++++++++++++++++- .../integration/jei/RagiumJeiRecipeTypes.kt | 4 +- .../category/RTCentrifugingRecipeCategory.kt | 27 ++++---- .../data/recipe/builder/HTRecipeBuilder.kt | 11 +++- .../hiiragi283/lib/recipe/HTRecipeHolder.kt | 21 ------ .../recipe/lookup/HTCompoundRecipeLookup.kt | 11 +--- .../builder/RTCentrifugingRecipeBuilder.kt | 2 +- .../ragium/api/recipe/RTCentrifugingRecipe.kt | 12 +++- .../lib/integration/jei/HTJeiRecipeHelper.kt | 12 ++-- .../lib/integration/jei/HTJeiRecipeHolder.kt | 47 ++++++++++++++ .../lib/integration/jei/JeiExtensions.kt | 3 +- .../jei/category/HTHolderRecipeCategory.kt | 22 ++++--- .../hiiragi283/ragium/common/RagiumCommon.kt | 17 +++-- .../recipe/RTBucketCentrifugingRecipe.kt | 34 ++++++++++ .../RTPotionBottleCentrifugingRecipe.kt | 2 +- 15 files changed, 208 insertions(+), 81 deletions(-) create mode 100644 src/libClient/kotlin/hiiragi283/lib/integration/jei/HTJeiRecipeHolder.kt create mode 100644 src/main/kotlin/hiiragi283/ragium/common/recipe/RTBucketCentrifugingRecipe.kt diff --git a/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiPlugin.kt b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiPlugin.kt index 41b365264..4fea43216 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiPlugin.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiPlugin.kt @@ -1,9 +1,11 @@ package hiiragi283.ragium.client.integration.jei import hiiragi283.lib.HTPhysicalSideHelper +import hiiragi283.lib.fluid.HTFlowingFluidHelper import hiiragi283.lib.integration.jei.HTJeiDrawables import hiiragi283.lib.integration.jei.HTJeiPlugin import hiiragi283.lib.integration.jei.HTJeiRecipeHelper +import hiiragi283.lib.integration.jei.HTJeiRecipeHolder import hiiragi283.lib.integration.jei.category.HTItemAndFluidToItemRecipeCategory import hiiragi283.lib.integration.jei.category.HTItemToDoubleItemRecipeCategory import hiiragi283.lib.integration.jei.category.HTSingleRecipeCategory @@ -14,11 +16,14 @@ import hiiragi283.lib.item.HTPotionBasedItem import hiiragi283.lib.item.alchemy.HTBottleType import hiiragi283.lib.item.alchemy.HTPotionHelper import hiiragi283.lib.recipe.ingredient.HTPotionFluidIngredient +import hiiragi283.lib.recipe.result.HTItemResult import hiiragi283.lib.registry.asHolderSequence import hiiragi283.lib.registry.getKeyOrThrow import hiiragi283.ragium.api.RagiumAPI import hiiragi283.ragium.api.data.RagiumDataComponents import hiiragi283.ragium.api.data.recipe.builder.RagiumRecipeBuilders +import hiiragi283.ragium.api.recipe.RTCentrifugingRecipe +import hiiragi283.ragium.api.recipe.RTFillingRecipe import hiiragi283.ragium.api.recipe.RagiumRecipeLookups import hiiragi283.ragium.api.recipe.RagiumRecipeTypes import hiiragi283.ragium.client.gui.screen.HTWidgetContainerScreen @@ -37,7 +42,10 @@ import hiiragi283.ragium.common.recipe.RTPotionBottleFillingRecipe import mezz.jei.api.JeiPlugin import mezz.jei.api.constants.RecipeTypes import mezz.jei.api.helpers.IGuiHelper +import mezz.jei.api.helpers.IJeiHelpers import mezz.jei.api.helpers.IPlatformFluidHelper +import mezz.jei.api.ingredients.IIngredientHelper +import mezz.jei.api.ingredients.subtypes.UidContext import mezz.jei.api.neoforge.NeoForgeTypes import mezz.jei.api.registration.IExtraIngredientRegistration import mezz.jei.api.registration.IGuiHandlerRegistration @@ -49,7 +57,9 @@ import mezz.jei.api.registration.ISubtypeRegistration import net.minecraft.core.Holder import net.minecraft.core.component.DataComponents import net.minecraft.core.registries.BuiltInRegistries +import net.minecraft.resources.Identifier import net.minecraft.world.item.Item +import net.minecraft.world.item.ItemStack import net.minecraft.world.item.alchemy.Potion import net.minecraft.world.item.alchemy.Potions import net.neoforged.neoforge.fluids.FluidStack @@ -57,6 +67,11 @@ import net.neoforged.neoforge.fluids.FluidStack @JeiPlugin class RagiumJeiPlugin : HTJeiPlugin(RagiumAPI.MOD_ID) { companion object { + @JvmStatic + private fun listFluidStacks(helper: IJeiHelpers): Iterable = helper.ingredientManager + .getAllIngredients(NeoForgeTypes.FLUID_STACK) + .filter(HTFlowingFluidHelper::isSource) + @JvmStatic private fun listItems(): Sequence> = HTPhysicalSideHelper .filteredLookup(BuiltInRegistries.ITEM) @@ -223,6 +238,8 @@ class RagiumJeiPlugin : HTJeiPlugin(RagiumAPI.MOD_ID) { } private fun registerDynamicRecipes(registration: IRecipeRegistration) { + val fluidHelper: IIngredientHelper = + registration.ingredientManager.getIngredientHelper(NeoForgeTypes.FLUID_STACK) // Mechanical registration.addRecipes( RagiumJeiRecipeTypes.CENTRIFUGING, @@ -243,7 +260,29 @@ class RagiumJeiPlugin : HTJeiPlugin(RagiumAPI.MOD_ID) { .withPrefix("potion_bottle/${bottleType.serializedName}/") }.buildSynthetic() } - }.toList() + }.map(::HTJeiRecipeHolder) + .toList() + ) + registration.addRecipes( + RagiumJeiRecipeTypes.CENTRIFUGING, + listFluidStacks(registration.jeiHelpers) + .mapNotNull { fluid: FluidStack -> + val filledBucket: ItemStack = fluid.fluidType.getBucket(fluid) + val remainder: HTItemResult = + filledBucket.craftingRemainder?.let(::HTItemResult) ?: return@mapNotNull null + RagiumRecipeBuilders.centrifuging { + ingredient = HTJeiRecipeHelper.fakeItem(filledBucket) + +remainder + fluidResult { from(fluid) } + }.buildSynthetic { id: Identifier, recipe: RTCentrifugingRecipe.Basic -> + // 液体ポーションなどのバリエーションを持つ液体はIDなしで登録する + if (fluidHelper.getUid(fluid, UidContext.Recipe) is List<*>) { + HTJeiRecipeHolder(recipe) + } else { + HTJeiRecipeHolder(id, recipe) + } + } + } ) registration.addRecipes( RagiumJeiRecipeTypes.FILLING, @@ -268,7 +307,28 @@ class RagiumJeiPlugin : HTJeiPlugin(RagiumAPI.MOD_ID) { .withPrefix("potion_bottle/${bottleType.serializedName}/") }.buildSynthetic() } - }.toList() + }.map(::HTJeiRecipeHolder) + .toList() + ) + registration.addRecipes( + RagiumJeiRecipeTypes.FILLING, + listFluidStacks(registration.jeiHelpers) + .mapNotNull { fluid: FluidStack -> + val filledBucket: ItemStack = fluid.fluidType.getBucket(fluid) + val remainder: ItemStack = filledBucket.craftingRemainder?.create() ?: return@mapNotNull null + RagiumRecipeBuilders.filling { + itemIngredient = HTJeiRecipeHelper.fakeItem(remainder) + fluidIngredient = HTJeiRecipeHelper.fakeFluid(fluid) + result { from(filledBucket) } + }.buildSynthetic { id: Identifier, recipe: RTFillingRecipe -> + // 液体ポーションなどのバリエーションを持つ液体はIDなしで登録する + if (fluidHelper.getUid(fluid, UidContext.Recipe) is List<*>) { + HTJeiRecipeHolder(recipe) + } else { + HTJeiRecipeHolder(id, recipe) + } + } + } ) // Chemical } diff --git a/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiRecipeTypes.kt b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiRecipeTypes.kt index 1b05f3983..4dd35dc06 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiRecipeTypes.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiRecipeTypes.kt @@ -1,8 +1,8 @@ package hiiragi283.ragium.client.integration.jei +import hiiragi283.lib.integration.jei.HTJeiRecipeHolder import hiiragi283.lib.integration.jei.HTRecipeHolderType import hiiragi283.lib.integration.jei.IRecipeType -import hiiragi283.lib.recipe.HTRecipeHolder import hiiragi283.lib.recipe.base.HTFluidToRecipe import hiiragi283.lib.recipe.base.HTItemAndFluidToRecipe import hiiragi283.lib.recipe.base.HTItemToDoubleItemRecipe @@ -22,7 +22,7 @@ import hiiragi283.ragium.api.recipe.RTWashingRecipe data object RagiumJeiRecipeTypes { @JvmStatic private inline fun create(name: String): HTRecipeHolderType = - IRecipeType>(RagiumAPI.id(name)) + IRecipeType>(RagiumAPI.id(name)) // Mechanical @JvmField diff --git a/src/client/kotlin/hiiragi283/ragium/client/integration/jei/category/RTCentrifugingRecipeCategory.kt b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/category/RTCentrifugingRecipeCategory.kt index 940325512..d7e98e94c 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/integration/jei/category/RTCentrifugingRecipeCategory.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/category/RTCentrifugingRecipeCategory.kt @@ -3,7 +3,6 @@ package hiiragi283.ragium.client.integration.jei.category import hiiragi283.lib.gui.HTBackgroundType import hiiragi283.lib.integration.jei.add import hiiragi283.lib.integration.jei.category.HTHolderRecipeCategory -import hiiragi283.lib.recipe.result.HTItemResult import hiiragi283.ragium.api.recipe.RTCentrifugingRecipe import hiiragi283.ragium.api.recipe.RagiumRecipeTypes import hiiragi283.ragium.client.integration.jei.RagiumJeiRecipeTypes @@ -20,26 +19,26 @@ class RTCentrifugingRecipeCategory(guiHelper: IGuiHelper) : RagiumRecipeTypes.CENTRIFUGING, guiHelper.createDrawableItemLike(RagiumBlocks.MACHINE_CASING), 18 * 7, - 18 * 2, + 18 * 1, RTCentrifugingRecipe.Basic.CODEC ) { override fun setupRecipe(builder: IRecipeLayoutBuilder, recipe: RTCentrifugingRecipe.Basic, focuses: IFocusGroup) { // input builder - .addInputSlot(getPosition(0), getPosition(0.5)) + .addInputSlot(getPosition(0), getPosition(0)) .add(recipe.ingredient) .setSlotBackground(HTBackgroundType.INPUT) // outputs - val itemOutputs: List = List(4) { index: Int -> - builder - .addOutputSlot(getPosition(3 + index % 2), getPosition(index / 2)) - .setSlotBackground(HTBackgroundType.OUTPUT) - } - recipe.result.items.forEachIndexed { index: Int, result: HTItemResult -> - itemOutputs[index].add(result) - } + builder + .addOutputSlot(getPosition(3), getPosition(0)) + .add(recipe.result.items.head) + .setSlotBackground(HTBackgroundType.OUTPUT) + val itemOutput: IRecipeSlotBuilder = builder + .addOutputSlot(getPosition(4), getPosition(0)) + .setSlotBackground(HTBackgroundType.EXTRA_OUTPUT) + recipe.result.items.getOrNull(1)?.let(itemOutput::add) val fluidOutput: IRecipeSlotBuilder = builder - .addOutputSlot(getPosition(6), getPosition(00.5)) + .addOutputSlot(getPosition(6), getPosition(0)) .setSlotBackground(HTBackgroundType.OUTPUT) recipe.result.fluid.ifPresent(fluidOutput::add) } @@ -49,7 +48,7 @@ class RTCentrifugingRecipeCategory(guiHelper: IGuiHelper) : recipe: RTCentrifugingRecipe.Basic, focuses: IFocusGroup ) { - builder.addRecipeArrow(recipe).setPosition(getPosition(1.25), getPosition(0.5)) - builder.addRecipePlus(getPosition(5), getPosition(0.5)) + builder.addRecipeArrow(recipe).setPosition(getPosition(1.25), getPosition(0)) + builder.addRecipePlus(getPosition(5)) } } diff --git a/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/HTRecipeBuilder.kt b/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/HTRecipeBuilder.kt index 875c7ecef..014f54714 100644 --- a/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/HTRecipeBuilder.kt +++ b/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/HTRecipeBuilder.kt @@ -107,8 +107,15 @@ abstract class HTRecipeBuilder>(private val prefix: Strin fun buildSynthetic(): HTRecipeHolder = build("/$prefix/") - private fun build(prefix: String): HTRecipeHolder = HTRecipeHolder( - recipeId.defaultId().withPrefix(prefix).let(::RecipeKey), + private fun build(prefix: String): HTRecipeHolder = build(prefix, ::HTRecipeHolder) + + /** + * @since 26.1.9 + */ + fun buildSynthetic(factory: (Identifier, RECIPE) -> R): R = build("/$prefix/", factory) + + private inline fun build(prefix: String, factory: (Identifier, RECIPE) -> R): R = factory( + recipeId.defaultId().withPrefix(prefix), createRecipe() ) diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/HTRecipeHolder.kt b/src/lib/kotlin/hiiragi283/lib/recipe/HTRecipeHolder.kt index cc9047f80..d750c0239 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/HTRecipeHolder.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/HTRecipeHolder.kt @@ -1,9 +1,5 @@ package hiiragi283.lib.recipe -import com.mojang.serialization.Codec -import com.mojang.serialization.MapCodec -import hiiragi283.lib.HTConstants -import hiiragi283.lib.serialization.codec.HTCodecs import net.minecraft.resources.Identifier import net.minecraft.world.item.crafting.Recipe import net.minecraft.world.item.crafting.RecipeHolder @@ -16,23 +12,8 @@ import net.minecraft.world.item.crafting.RecipeHolder */ @JvmRecord data class HTRecipeHolder(val key: RecipeKey, val recipe: RECIPE) { - companion object { - @JvmStatic - fun codec(recipeCodec: MapCodec): Codec> = - HTCodecs.record { instance -> - instance.group( - Recipe.KEY_CODEC.fieldOf(HTConstants.ID).forGetter(HTRecipeHolder::key), - recipeCodec.forGetter(HTRecipeHolder::recipe) - ).apply(instance, ::HTRecipeHolder) - } - } - constructor(id: Identifier, recipe: RECIPE) : this(RecipeKey(id), recipe) - constructor(entry: Map.Entry) : this(entry.key, entry.value) - - constructor(pair: Pair) : this(pair.first, pair.second) - val id: Identifier get() = key.identifier() inline fun map(transform: (RECIPE) -> U): HTRecipeHolder = @@ -41,8 +22,6 @@ data class HTRecipeHolder(val key: RecipeKey, val recipe: RECI inline fun mapNotNull(transform: (RECIPE) -> U?): HTRecipeHolder? = transform(this.recipe)?.let { HTRecipeHolder(this.key, it) } - - inline fun castAs(): HTRecipeHolder? = mapNotNull { it as? U } } // Extensions // diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/lookup/HTCompoundRecipeLookup.kt b/src/lib/kotlin/hiiragi283/lib/recipe/lookup/HTCompoundRecipeLookup.kt index 25ca57b51..703cfdbfa 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/lookup/HTCompoundRecipeLookup.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/lookup/HTCompoundRecipeLookup.kt @@ -55,15 +55,8 @@ class HTCompoundRecipeLookup private constructor(private val i /** * レシピの一覧を追加します。 */ - fun addRecipes(vararg recipes: Pair) { - addSubLookup { recipes.asSequence().map(::HTRecipeHolder) } - } - - /** - * レシピの一覧を追加します。 - */ - fun addRecipes(recipes: Map) { - addSubLookup { recipes.asSequence().map(::HTRecipeHolder) } + fun addRecipes(recipes: Map) { + addSubLookup { recipes.asSequence().map { (id: Identifier, recipe: RECIPE) -> HTRecipeHolder(id, recipe) } } } /** diff --git a/src/lib/kotlin/hiiragi283/ragium/api/data/recipe/builder/RTCentrifugingRecipeBuilder.kt b/src/lib/kotlin/hiiragi283/ragium/api/data/recipe/builder/RTCentrifugingRecipeBuilder.kt index 2b3dc1c1d..8e10cdace 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/data/recipe/builder/RTCentrifugingRecipeBuilder.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/data/recipe/builder/RTCentrifugingRecipeBuilder.kt @@ -29,7 +29,7 @@ class RTCentrifugingRecipeBuilder : HTProgressRecipeBuilder { @JvmRecord - data class Output(val items: List, val fluid: FluidStack) + data class Output(val firstItem: ItemStack, val secondItem: ItemStack, val fluid: FluidStack) { + constructor(item: ItemStack, fluid: FluidStack) : this(item, ItemStack.EMPTY, fluid) + } @JvmRecord data class Result(val items: Nel, val fluid: Optional) { @@ -42,7 +44,7 @@ interface RTCentrifugingRecipe : val CODEC: Codec = HTCodecs.record { instance -> instance.group( HTItemResult.CODEC - .compactNelFieldOf(HTConstants.ITEM, HTConstants.ITEMS, 4) + .compactNelFieldOf(HTConstants.ITEM, HTConstants.ITEMS, 2) .forGetter(Result::items), HTFluidResult.CODEC.optionalFieldOf(HTConstants.FLUID).forGetter(Result::fluid) ).apply(instance, ::Result) @@ -58,7 +60,11 @@ interface RTCentrifugingRecipe : ) } - fun create(): Output = Output(items.map(HTItemResult::create), fluid.createOrEmpty()) + fun create(): Output = Output( + items.head.create(), + items.getOrNull(1).createOrEmpty(), + fluid.createOrEmpty() + ) } @JvmRecord diff --git a/src/libClient/kotlin/hiiragi283/lib/integration/jei/HTJeiRecipeHelper.kt b/src/libClient/kotlin/hiiragi283/lib/integration/jei/HTJeiRecipeHelper.kt index bf2bbc85f..282b61c1d 100644 --- a/src/libClient/kotlin/hiiragi283/lib/integration/jei/HTJeiRecipeHelper.kt +++ b/src/libClient/kotlin/hiiragi283/lib/integration/jei/HTJeiRecipeHelper.kt @@ -2,7 +2,6 @@ package hiiragi283.lib.integration.jei import hiiragi283.lib.HTPhysicalSideHelper import hiiragi283.lib.item.toTemplateOrNull -import hiiragi283.lib.recipe.HTRecipeHolder import hiiragi283.lib.recipe.display.SlotDisplay import hiiragi283.lib.recipe.ingredient.HTFluidIngredient import hiiragi283.lib.recipe.ingredient.HTItemIngredient @@ -134,10 +133,10 @@ data object HTJeiRecipeHelper { @JvmStatic inline fun addRecipes( registration: IRecipeRegistration, - recipeType: IRecipeType>, + recipeType: IRecipeType>, lookup: HTRecipeLookup ) { - val recipes: List> = getRecipes(lookup) + val recipes: List> = getRecipes(lookup) if (recipes.isEmpty()) return registration.addRecipes(recipeType, recipes) } @@ -147,11 +146,12 @@ data object HTJeiRecipeHelper { * @param RECIPE_A [lookup]が提供するレシピのクラス * @param RECIPE_B 変換後のレシピのクラス * @param lookup レシピの提供元 - * @return [RECIPE_B]に対する[HTRecipeHolder]の一覧 + * @return [RECIPE_B]に対する[HTJeiRecipeHolder]の一覧 */ @JvmStatic inline fun getRecipes( lookup: HTRecipeLookup - ): List> = lookup.getAllRecipes(HTPhysicalSideHelper.createLookupContext()) - .mapNotNull { holder: HTRecipeHolder -> holder.castAs() }.toList() + ): List> = lookup.getAllRecipes(HTPhysicalSideHelper.createLookupContext()) + .map(::HTJeiRecipeHolder) + .mapNotNull { holder: HTJeiRecipeHolder -> holder.castAs() }.toList() } diff --git a/src/libClient/kotlin/hiiragi283/lib/integration/jei/HTJeiRecipeHolder.kt b/src/libClient/kotlin/hiiragi283/lib/integration/jei/HTJeiRecipeHolder.kt new file mode 100644 index 000000000..e4c2cb986 --- /dev/null +++ b/src/libClient/kotlin/hiiragi283/lib/integration/jei/HTJeiRecipeHolder.kt @@ -0,0 +1,47 @@ +package hiiragi283.lib.integration.jei + +import com.mojang.serialization.Codec +import com.mojang.serialization.MapCodec +import hiiragi283.lib.HTConstants +import hiiragi283.lib.recipe.HTRecipeHolder +import hiiragi283.lib.serialization.codec.HTCodecs +import net.minecraft.resources.Identifier +import net.minecraft.world.item.crafting.RecipeHolder +import java.util.Optional +import kotlin.jvm.optionals.getOrNull + +/** + * [RecipeHolder]を任意のクラスに使えるようにするためのクラスです。 + * @param RECIPE 保持するレシピのクラス + * @see hiiragi283.lib.recipe.HTRecipeHolder + * @author Hiiragi Tsubasa + * @since 26.1.9 + */ +@JvmRecord +data class HTJeiRecipeHolder(val id: Identifier?, val recipe: RECIPE) { + companion object { + @JvmStatic + fun codec(recipeCodec: MapCodec): Codec> = + HTCodecs.record { instance -> + instance.group( + Identifier.CODEC.optionalFieldOf(HTConstants.ID).forGetter { Optional.ofNullable(it.id) }, + recipeCodec.forGetter(HTJeiRecipeHolder::recipe) + ).apply(instance, ::HTJeiRecipeHolder) + } + } + + constructor(id: Optional, recipe: RECIPE) : this(id.getOrNull(), recipe) + + constructor(recipe: RECIPE) : this(null, recipe) + + constructor(parent: HTRecipeHolder) : this(parent.id, parent.recipe) + + inline fun map(transform: (RECIPE) -> U): HTJeiRecipeHolder = + HTJeiRecipeHolder(this.id, transform(this.recipe)) + + inline fun mapNotNull(transform: (RECIPE) -> U?): HTJeiRecipeHolder? = transform(this.recipe)?.let { + HTJeiRecipeHolder(this.id, it) + } + + inline fun castAs(): HTJeiRecipeHolder? = mapNotNull { it as? U } +} diff --git a/src/libClient/kotlin/hiiragi283/lib/integration/jei/JeiExtensions.kt b/src/libClient/kotlin/hiiragi283/lib/integration/jei/JeiExtensions.kt index 66633ba72..b2759aa80 100644 --- a/src/libClient/kotlin/hiiragi283/lib/integration/jei/JeiExtensions.kt +++ b/src/libClient/kotlin/hiiragi283/lib/integration/jei/JeiExtensions.kt @@ -1,6 +1,5 @@ package hiiragi283.lib.integration.jei -import hiiragi283.lib.recipe.HTRecipeHolder import hiiragi283.lib.recipe.ingredient.HTStackPreview import hiiragi283.lib.recipe.result.HTFluidResult import hiiragi283.lib.recipe.result.HTItemResult @@ -18,7 +17,7 @@ import net.neoforged.neoforge.fluids.FluidStack * @author Hiiragi Tsubasa * @since 26.1.8 */ -typealias HTRecipeHolderType = IRecipeType> +typealias HTRecipeHolderType = IRecipeType> /** * 新しい[IRecipeType]のインスタンスを作成します。 diff --git a/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTHolderRecipeCategory.kt b/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTHolderRecipeCategory.kt index 1cde0dd9c..1cd0cef08 100644 --- a/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTHolderRecipeCategory.kt +++ b/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTHolderRecipeCategory.kt @@ -2,8 +2,8 @@ package hiiragi283.lib.integration.jei.category import com.mojang.serialization.Codec import com.mojang.serialization.MapCodec +import hiiragi283.lib.integration.jei.HTJeiRecipeHolder import hiiragi283.lib.integration.jei.HTRecipeHolderType -import hiiragi283.lib.recipe.HTRecipeHolder import mezz.jei.api.gui.builder.IRecipeLayoutBuilder import mezz.jei.api.gui.drawable.IDrawable import mezz.jei.api.gui.widgets.IRecipeExtrasBuilder @@ -14,7 +14,7 @@ import net.minecraft.resources.Identifier import net.minecraft.world.item.crafting.RecipeType /** - * [HTRecipeHolder]に基づいた[HTBasicRecipeCategory]の拡張クラスです。 + * [HTJeiRecipeHolder]に基づいた[HTBasicRecipeCategory]の拡張クラスです。 * @author Hiiragi Tsubasa * @since 26.1.0 */ @@ -24,8 +24,8 @@ abstract class HTHolderRecipeCategory( icon: IDrawable, width: Int, height: Int, - private val codec: Codec> -) : HTBasicRecipeCategory>(recipeType, recipeType1, icon, width, height) { + private val codec: Codec> +) : HTBasicRecipeCategory>(recipeType, recipeType1, icon, width, height) { constructor( recipeType: HTRecipeHolderType, recipeType1: RecipeType<*>, @@ -39,10 +39,14 @@ abstract class HTHolderRecipeCategory( icon, width, height, - HTRecipeHolder.codec(codec) + HTJeiRecipeHolder.codec(codec) ) - final override fun setRecipe(builder: IRecipeLayoutBuilder, recipe: HTRecipeHolder, focuses: IFocusGroup) { + final override fun setRecipe( + builder: IRecipeLayoutBuilder, + recipe: HTJeiRecipeHolder, + focuses: IFocusGroup + ) { setupRecipe(builder, recipe.recipe, focuses) } @@ -50,7 +54,7 @@ abstract class HTHolderRecipeCategory( final override fun createRecipeExtras( builder: IRecipeExtrasBuilder, - recipe: HTRecipeHolder, + recipe: HTJeiRecipeHolder, focuses: IFocusGroup ) { setupRecipeExtras(builder, recipe.recipe, focuses) @@ -58,10 +62,10 @@ abstract class HTHolderRecipeCategory( protected open fun setupRecipeExtras(builder: IRecipeExtrasBuilder, recipe: RECIPE, focuses: IFocusGroup) {} - final override fun getIdentifier(recipe: HTRecipeHolder): Identifier = recipe.id + final override fun getIdentifier(recipe: HTJeiRecipeHolder): Identifier? = recipe.id final override fun getCodec( codecHelper: ICodecHelper, recipeManager: IRecipeManager - ): Codec> = codec + ): Codec> = codec } diff --git a/src/main/kotlin/hiiragi283/ragium/common/RagiumCommon.kt b/src/main/kotlin/hiiragi283/ragium/common/RagiumCommon.kt index bbc9ce6ca..2889958cc 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/RagiumCommon.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/RagiumCommon.kt @@ -6,7 +6,6 @@ import hiiragi283.lib.collection.buildTable import hiiragi283.lib.collection.getOrPut import hiiragi283.lib.color.VanillaColoredCollections import hiiragi283.lib.item.alchemy.HTBottleType -import hiiragi283.lib.recipe.RecipeKey import hiiragi283.lib.recipe.ingredient.HTPotionFluidIngredient import hiiragi283.lib.recipe.lookup.fromRecipeType import hiiragi283.lib.registry.HTFluidContent @@ -25,6 +24,7 @@ import hiiragi283.ragium.api.data.recipe.builder.RagiumRecipeBuilders import hiiragi283.ragium.api.recipe.RagiumRecipeLookups import hiiragi283.ragium.api.recipe.RagiumRecipeTypes import hiiragi283.ragium.common.fluid.RagiumFluids +import hiiragi283.ragium.common.recipe.RTBucketCentrifugingRecipe import hiiragi283.ragium.common.recipe.RTPotionBottleCentrifugingRecipe import hiiragi283.ragium.common.recipe.RTPotionBottleFillingRecipe import it.unimi.dsi.fastutil.objects.ObjectArrayList @@ -143,19 +143,18 @@ internal data object RagiumCommon { RagiumRecipeLookups.PLANTING.fromRecipeType(RagiumRecipeTypes.PLANTING, identity()) // runtime recipes RagiumRecipeLookups.CENTRIFUGING.addRecipes( - HTBottleType.entries.associate { bottleType: HTBottleType -> - Pair( - RecipeKey( - RagiumAPI.id("/${RagiumConstants.CENTRIFUGING}/potion_bottle/${bottleType.serializedName}") - ), - RTPotionBottleCentrifugingRecipe(bottleType) - ) + buildMap { + HTBottleType.entries.forEach { bottleType: HTBottleType -> + this[RagiumAPI.id("/${RagiumConstants.CENTRIFUGING}/potion_bottle/${bottleType.serializedName}")] = + RTPotionBottleCentrifugingRecipe(bottleType) + } + this[RagiumAPI.id("/${RagiumConstants.CENTRIFUGING}/filled_bucket")] = RTBucketCentrifugingRecipe } ) RagiumRecipeLookups.FILLING.addRecipes( HTBottleType.entries.associate { bottleType: HTBottleType -> Pair( - RecipeKey(RagiumAPI.id("/${RagiumConstants.FILLING}/potion_bottle/${bottleType.serializedName}")), + RagiumAPI.id("/${RagiumConstants.FILLING}/potion_bottle/${bottleType.serializedName}"), RTPotionBottleFillingRecipe(bottleType) ) } diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/RTBucketCentrifugingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/RTBucketCentrifugingRecipe.kt new file mode 100644 index 000000000..522c5ad1f --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/RTBucketCentrifugingRecipe.kt @@ -0,0 +1,34 @@ +package hiiragi283.ragium.common.recipe + +import hiiragi283.lib.capability.HTFluidCapabilities +import hiiragi283.lib.item.createOrEmpty +import hiiragi283.lib.recipe.base.HTProgressData +import hiiragi283.lib.recipe.base.HTProgressRecipe +import hiiragi283.lib.recipe.ingredient.HTIngredientHelper +import hiiragi283.ragium.api.recipe.RTCentrifugingRecipe +import net.minecraft.world.item.ItemInstance +import net.minecraft.world.item.ItemStack +import net.minecraft.world.item.crafting.SingleRecipeInput +import net.neoforged.neoforge.common.Tags +import net.neoforged.neoforge.transfer.fluid.FluidUtil + +data object RTBucketCentrifugingRecipe : RTCentrifugingRecipe, HTProgressRecipe.Simple { + override val progressData: HTProgressData = HTProgressData.time(60) + + override fun test(input: ItemInstance): Boolean = when { + input.craftingRemainder?.`is`(Tags.Items.BUCKETS_EMPTY) ?: false -> + HTIngredientHelper.unwrap(input).let(HTFluidCapabilities::getCapability)?.size() == 1 + + else -> false + } + + override fun apply(input: ItemInstance): RTCentrifugingRecipe.Output = RTCentrifugingRecipe.Output( + input.craftingRemainder.createOrEmpty(), + HTIngredientHelper.unwrap(input).let(FluidUtil::getFirstStackContained) + ) + + override fun getMatchingStack(input: ItemInstance): ItemInstance = when { + test(input) -> HTIngredientHelper.copyWithCount(input, 1) + else -> ItemStack.EMPTY + } +} diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/RTPotionBottleCentrifugingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/RTPotionBottleCentrifugingRecipe.kt index 0965308cb..c86ec5dd1 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/recipe/RTPotionBottleCentrifugingRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/RTPotionBottleCentrifugingRecipe.kt @@ -27,7 +27,7 @@ data class RTPotionBottleCentrifugingRecipe(val bottleType: HTBottleType, overri bottleType.filledItem.isOf(input) && HTPotionHelper.hasAnyEffect(input) override fun apply(input: ItemInstance): RTCentrifugingRecipe.Output = RTCentrifugingRecipe.Output( - bottleType.emptyItem.asStack().fold(::listOf) { listOf() }, + bottleType.emptyItem.asStackOrEmpty(), HTPotionHelper.createFluid(input, HTPotionHelper.BOTTLE_AMOUNT) .fold(FluidStackTemplate::create) { FluidStack.EMPTY } ) From 055c4f2f29c7aa35d5b0a7f57b6a3d6ee765e681 Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Mon, 12 Oct 2026 21:57:05 +0900 Subject: [PATCH 17/25] =?UTF-8?q?chore:=20=E4=BE=9D=E5=AD=98=E5=AF=BE?= =?UTF-8?q?=E8=B1=A1=E3=81=AEmod=E3=81=AB=20JEI=20=E3=81=A8=20Jade=20?= =?UTF-8?q?=E3=82=92=E8=BF=BD=E8=A8=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/templates/META-INF/neoforge.mods.toml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/main/templates/META-INF/neoforge.mods.toml b/src/main/templates/META-INF/neoforge.mods.toml index 8adf8dd52..2b0914298 100644 --- a/src/main/templates/META-INF/neoforge.mods.toml +++ b/src/main/templates/META-INF/neoforge.mods.toml @@ -87,6 +87,18 @@ config="${mod_id}.mixins.json" ordering="NONE" side="BOTH" +[[dependencies.${mod_id}]] + modId="jei" + type="optional" + ordering="NONE" + side="CLIENT" + +[[dependencies.${mod_id}]] + modId="jade" + type="optional" + ordering="NONE" + side="CLIENT" + # Features are specific properties of the game environment, that you may want to declare you require. This example declares # that your mod requires GL version 3.2 or higher. Other features will be added. They are side aware so declaring this won't # stop your mod loading on the server for example. From a66fd1b8dd1dadb317dbc0d33b51f6ee89c26db9 Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Mon, 12 Oct 2026 22:08:27 +0900 Subject: [PATCH 18/25] =?UTF-8?q?feat:=20=E3=83=90=E3=82=B1=E3=83=84?= =?UTF-8?q?=E3=81=AB=E6=B6=B2=E4=BD=93=E3=82=92=E6=90=AC=E5=85=A5=E3=81=99?= =?UTF-8?q?=E3=82=8B=E3=83=AC=E3=82=B7=E3=83=94=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/integration/jei/RagiumJeiPlugin.kt | 4 ++ .../hiiragi283/ragium/common/RagiumCommon.kt | 14 ++++--- .../recipe/RTBucketCentrifugingRecipe.kt | 4 +- .../common/recipe/RTBucketFillingRecipe.kt | 40 +++++++++++++++++++ 4 files changed, 54 insertions(+), 8 deletions(-) create mode 100644 src/main/kotlin/hiiragi283/ragium/common/recipe/RTBucketFillingRecipe.kt diff --git a/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiPlugin.kt b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiPlugin.kt index 4fea43216..d87a07eac 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiPlugin.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiPlugin.kt @@ -37,6 +37,8 @@ import hiiragi283.ragium.client.integration.jei.category.RTResourceExtractingRec import hiiragi283.ragium.client.integration.jei.category.RTWashingRecipeCategory import hiiragi283.ragium.common.block.RagiumBlocks import hiiragi283.ragium.common.fluid.RagiumFluids +import hiiragi283.ragium.common.recipe.RTBucketCentrifugingRecipe +import hiiragi283.ragium.common.recipe.RTBucketFillingRecipe import hiiragi283.ragium.common.recipe.RTPotionBottleCentrifugingRecipe import hiiragi283.ragium.common.recipe.RTPotionBottleFillingRecipe import mezz.jei.api.JeiPlugin @@ -274,6 +276,7 @@ class RagiumJeiPlugin : HTJeiPlugin(RagiumAPI.MOD_ID) { ingredient = HTJeiRecipeHelper.fakeItem(filledBucket) +remainder fluidResult { from(fluid) } + progressData = RTBucketCentrifugingRecipe.progressData }.buildSynthetic { id: Identifier, recipe: RTCentrifugingRecipe.Basic -> // 液体ポーションなどのバリエーションを持つ液体はIDなしで登録する if (fluidHelper.getUid(fluid, UidContext.Recipe) is List<*>) { @@ -320,6 +323,7 @@ class RagiumJeiPlugin : HTJeiPlugin(RagiumAPI.MOD_ID) { itemIngredient = HTJeiRecipeHelper.fakeItem(remainder) fluidIngredient = HTJeiRecipeHelper.fakeFluid(fluid) result { from(filledBucket) } + progressData = RTBucketFillingRecipe.progressData }.buildSynthetic { id: Identifier, recipe: RTFillingRecipe -> // 液体ポーションなどのバリエーションを持つ液体はIDなしで登録する if (fluidHelper.getUid(fluid, UidContext.Recipe) is List<*>) { diff --git a/src/main/kotlin/hiiragi283/ragium/common/RagiumCommon.kt b/src/main/kotlin/hiiragi283/ragium/common/RagiumCommon.kt index 2889958cc..2779caff9 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/RagiumCommon.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/RagiumCommon.kt @@ -25,6 +25,7 @@ import hiiragi283.ragium.api.recipe.RagiumRecipeLookups import hiiragi283.ragium.api.recipe.RagiumRecipeTypes import hiiragi283.ragium.common.fluid.RagiumFluids import hiiragi283.ragium.common.recipe.RTBucketCentrifugingRecipe +import hiiragi283.ragium.common.recipe.RTBucketFillingRecipe import hiiragi283.ragium.common.recipe.RTPotionBottleCentrifugingRecipe import hiiragi283.ragium.common.recipe.RTPotionBottleFillingRecipe import it.unimi.dsi.fastutil.objects.ObjectArrayList @@ -148,15 +149,16 @@ internal data object RagiumCommon { this[RagiumAPI.id("/${RagiumConstants.CENTRIFUGING}/potion_bottle/${bottleType.serializedName}")] = RTPotionBottleCentrifugingRecipe(bottleType) } - this[RagiumAPI.id("/${RagiumConstants.CENTRIFUGING}/filled_bucket")] = RTBucketCentrifugingRecipe + this[RagiumAPI.id("/${RagiumConstants.CENTRIFUGING}/bucket")] = RTBucketCentrifugingRecipe } ) RagiumRecipeLookups.FILLING.addRecipes( - HTBottleType.entries.associate { bottleType: HTBottleType -> - Pair( - RagiumAPI.id("/${RagiumConstants.FILLING}/potion_bottle/${bottleType.serializedName}"), - RTPotionBottleFillingRecipe(bottleType) - ) + buildMap { + HTBottleType.entries.forEach { bottleType: HTBottleType -> + this[RagiumAPI.id("/${RagiumConstants.FILLING}/potion_bottle/${bottleType.serializedName}")] = + RTPotionBottleFillingRecipe(bottleType) + } + this[RagiumAPI.id("/${RagiumConstants.FILLING}/bucket")] = RTBucketFillingRecipe } ) diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/RTBucketCentrifugingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/RTBucketCentrifugingRecipe.kt index 522c5ad1f..b935c2125 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/recipe/RTBucketCentrifugingRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/RTBucketCentrifugingRecipe.kt @@ -13,8 +13,6 @@ import net.neoforged.neoforge.common.Tags import net.neoforged.neoforge.transfer.fluid.FluidUtil data object RTBucketCentrifugingRecipe : RTCentrifugingRecipe, HTProgressRecipe.Simple { - override val progressData: HTProgressData = HTProgressData.time(60) - override fun test(input: ItemInstance): Boolean = when { input.craftingRemainder?.`is`(Tags.Items.BUCKETS_EMPTY) ?: false -> HTIngredientHelper.unwrap(input).let(HTFluidCapabilities::getCapability)?.size() == 1 @@ -31,4 +29,6 @@ data object RTBucketCentrifugingRecipe : RTCentrifugingRecipe, HTProgressRecipe. test(input) -> HTIngredientHelper.copyWithCount(input, 1) else -> ItemStack.EMPTY } + + override val progressData: HTProgressData = HTProgressData.time(60) } diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/RTBucketFillingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/RTBucketFillingRecipe.kt new file mode 100644 index 000000000..cbe1106cf --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/RTBucketFillingRecipe.kt @@ -0,0 +1,40 @@ +package hiiragi283.ragium.common.recipe + +import hiiragi283.lib.recipe.base.HTItemAndFluidToItemRecipe +import hiiragi283.lib.recipe.base.HTProgressData +import hiiragi283.lib.recipe.base.HTProgressRecipe +import hiiragi283.lib.recipe.ingredient.HTIngredientHelper +import hiiragi283.lib.recipe.input.HTItemAndFluidRecipeInput +import net.minecraft.world.item.ItemInstance +import net.minecraft.world.item.ItemStack +import net.neoforged.neoforge.fluids.FluidInstance +import net.neoforged.neoforge.fluids.FluidStack +import net.neoforged.neoforge.fluids.FluidType + +data object RTBucketFillingRecipe : HTItemAndFluidToItemRecipe, HTProgressRecipe.Simple { + private fun getBucket(instance: FluidInstance): ItemStack = + HTIngredientHelper.unwrap(instance).let(instance.fluidType::getBucket) + + override fun test(first: ItemInstance, second: FluidInstance): Boolean { + val filled: ItemStack = getBucket(second) + return when { + filled.isEmpty -> false + ItemStack.isSameItemSameComponents(HTIngredientHelper.unwrap(first), filled.craftingRemainder) -> false + else -> second.amount() >= FluidType.BUCKET_VOLUME + } + } + + override fun apply(first: ItemInstance, second: FluidInstance): ItemStack = getBucket(second) + + override fun getMatchingStack(first: ItemInstance, second: FluidInstance): Pair = + when { + test(first, second) -> Pair( + HTIngredientHelper.copyWithCount(first, 1), + HTIngredientHelper.copyWithAmount(second, FluidType.BUCKET_VOLUME) + ) + + else -> ItemStack.EMPTY to FluidStack.EMPTY + } + + override val progressData: HTProgressData = HTProgressData.time(60) +} From 4861382347a5e5ab3d9ae7ff72c6876ce7d9519d Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Mon, 12 Oct 2026 23:14:23 +0900 Subject: [PATCH 19/25] =?UTF-8?q?refactor!:=20RecipeInput=20=E3=82=92=20HT?= =?UTF-8?q?RecipeInput=20=E3=81=AB=E7=B5=B1=E5=90=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lib/recipe/base/HTBasicSingleRecipe.kt | 11 +-- .../recipe/base/HTDoubleItemToItemRecipe.kt | 6 +- .../lib/recipe/base/HTFluidToRecipe.kt | 10 +- .../lib/recipe/base/HTItemAndFluidToRecipe.kt | 6 +- .../recipe/base/HTItemToDoubleItemRecipe.kt | 8 +- .../lib/recipe/base/HTItemToRecipe.kt | 10 +- .../lib/recipe/base/HTRecipeFactories.kt | 97 +++++++------------ .../lib/recipe/base/HTRecipePredicates.kt | 66 +++++-------- .../recipe/base/HTTripleItemToItemRecipe.kt | 27 +++--- .../recipe/input/HTFluidListRecipeInput.kt | 24 ----- .../recipe/input/HTItemAndFluidRecipeInput.kt | 25 ----- .../lib/recipe/input/HTItemListRecipeInput.kt | 23 ----- .../lib/recipe/input/HTRecipeInput.kt | 65 +++++++++++++ .../recipe/input/HTSingleFluidRecipeInput.kt | 27 ------ .../ragium/api/recipe/RTAlloyingRecipe.kt | 4 +- .../ragium/api/recipe/RTAssemblingRecipe.kt | 4 +- .../ragium/api/recipe/RTBathingRecipe.kt | 4 +- .../ragium/api/recipe/RTCentrifugingRecipe.kt | 8 +- .../ragium/api/recipe/RTCompressingRecipe.kt | 4 +- .../ragium/api/recipe/RTCrushingRecipe.kt | 4 +- .../ragium/api/recipe/RTCuttingRecipe.kt | 4 +- .../api/recipe/RTElectrolyzingRecipe.kt | 12 +-- .../ragium/api/recipe/RTEnchantingRecipe.kt | 6 +- .../ragium/api/recipe/RTExchangingRecipe.kt | 4 +- .../ragium/api/recipe/RTFillingRecipe.kt | 4 +- .../ragium/api/recipe/RTFreezingRecipe.kt | 6 +- .../ragium/api/recipe/RTMeltingRecipe.kt | 4 +- .../ragium/api/recipe/RTMixingRecipe.kt | 83 ++++------------ .../ragium/api/recipe/RTPlantingRecipe.kt | 4 +- .../ragium/api/recipe/RTPyrolyzingRecipe.kt | 4 +- .../ragium/api/recipe/RTReactingRecipe.kt | 6 +- .../ragium/api/recipe/RTRefiningRecipe.kt | 4 +- .../api/recipe/RTResourceExtractingRecipe.kt | 15 +-- .../ragium/api/recipe/RTWashingRecipe.kt | 6 +- .../jei/category/HTSingleRecipeCategory.kt | 2 +- .../HTSingleToItemAndFluidRecipeCategory.kt | 2 +- .../block/entity/HTBaseMachineBlockEntity.kt | 12 +++ .../entity/machine/HTBlenderBlockEntity.kt | 23 +++-- .../machine/HTElectrolyzerBlockEntity.kt | 20 ++-- .../entity/machine/HTFreezerBlockEntity.kt | 31 +++--- .../entity/machine/HTMelterBlockEntity.kt | 29 +++--- .../entity/machine/HTPyrolyzerBlockEntity.kt | 18 ++-- .../entity/machine/HTRefineryBlockEntity.kt | 14 +-- .../entity/machine/HTSmelterBlockEntity.kt | 17 ++-- .../base/HTDoubleItemToItemBlockEntity.kt | 24 +++-- .../base/HTItemAndFluidToFluidBlockEntity.kt | 24 ++--- .../base/HTItemAndFluidToItemBlockEntity.kt | 20 ++-- .../base/HTItemToDoubleItemBlockEntity.kt | 14 +-- .../machine/base/HTItemToItemBlockEntity.kt | 14 +-- .../base/HTTripleItemToItemBlockEntity.kt | 29 +++--- .../recipe/RTBucketCentrifugingRecipe.kt | 4 +- .../common/recipe/RTBucketFillingRecipe.kt | 4 +- .../RTPotionBottleCentrifugingRecipe.kt | 4 +- .../recipe/RTPotionBottleFillingRecipe.kt | 4 +- 54 files changed, 395 insertions(+), 509 deletions(-) delete mode 100644 src/lib/kotlin/hiiragi283/lib/recipe/input/HTFluidListRecipeInput.kt delete mode 100644 src/lib/kotlin/hiiragi283/lib/recipe/input/HTItemAndFluidRecipeInput.kt delete mode 100644 src/lib/kotlin/hiiragi283/lib/recipe/input/HTItemListRecipeInput.kt create mode 100644 src/lib/kotlin/hiiragi283/lib/recipe/input/HTRecipeInput.kt delete mode 100644 src/lib/kotlin/hiiragi283/lib/recipe/input/HTSingleFluidRecipeInput.kt diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTBasicSingleRecipe.kt b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTBasicSingleRecipe.kt index 8163d9da3..b241b56b9 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTBasicSingleRecipe.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTBasicSingleRecipe.kt @@ -4,28 +4,27 @@ import com.mojang.serialization.Codec import com.mojang.serialization.MapCodec import hiiragi283.lib.HTConstants import hiiragi283.lib.recipe.ingredient.HTIngredient +import hiiragi283.lib.recipe.input.HTRecipeInput import hiiragi283.lib.recipe.result.HTRecipeResult import hiiragi283.lib.serialization.codec.HTCodecs import net.minecraft.network.RegistryFriendlyByteBuf import net.minecraft.network.codec.StreamCodec -import net.minecraft.world.item.crafting.RecipeInput /** * 1種類の材料から1種類の完成品を作成するレシピを表す抽象クラスです。 - * @param INPUT レシピの入力となるクラス * @param ING レシピの材料を判定するクラス * @param RES レシピの完成品を提供するクラス * @author Hiiragi Tsubasa * @since 26.1.8 */ -open class HTBasicSingleRecipe, RES : HTRecipeResult<*>>( +open class HTBasicSingleRecipe, RES : HTRecipeResult<*>>( val ingredient: ING, val result: RES, override val progressData: HTProgressData -) : HTProgressRecipe.Simple { +) : HTProgressRecipe.Simple { companion object { @JvmStatic - fun , RES : HTRecipeResult<*>, RECIPE : HTBasicSingleRecipe<*, ING, RES>> codec( + fun , RES : HTRecipeResult<*>, RECIPE : HTBasicSingleRecipe> codec( ingredient: Codec, result: Codec, factory: Factory @@ -38,7 +37,7 @@ open class HTBasicSingleRecipe, RE } @JvmStatic - fun , RES : HTRecipeResult<*>, RECIPE : HTBasicSingleRecipe<*, ING, RES>> streamCodec( + fun , RES : HTRecipeResult<*>, RECIPE : HTBasicSingleRecipe> streamCodec( ingredient: StreamCodec, result: StreamCodec, factory: Factory diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTDoubleItemToItemRecipe.kt b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTDoubleItemToItemRecipe.kt index ee05be90c..91fcec3da 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTDoubleItemToItemRecipe.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTDoubleItemToItemRecipe.kt @@ -4,13 +4,13 @@ import com.mojang.serialization.MapCodec import hiiragi283.lib.HTConstants import hiiragi283.lib.data.recipe.builder.HTDoubleItemToItemRecipeBuilder import hiiragi283.lib.recipe.ingredient.HTItemIngredient +import hiiragi283.lib.recipe.input.HTRecipeInput import hiiragi283.lib.recipe.result.HTItemResult import hiiragi283.lib.serialization.codec.HTCodecs import net.minecraft.network.RegistryFriendlyByteBuf import net.minecraft.network.codec.StreamCodec import net.minecraft.world.item.ItemInstance import net.minecraft.world.item.ItemStack -import net.minecraft.world.item.crafting.RecipeInput /** * 2種類のアイテムから1種類のアイテムを作成するレシピを表すインターフェースです。 @@ -20,7 +20,7 @@ import net.minecraft.world.item.crafting.RecipeInput interface HTDoubleItemToItemRecipe : HTRecipePredicates.DoubleItem, HTRecipeFactories.DoubleItem, - HTProgressRecipe { + HTProgressRecipe { /** * @author Hiiragi Tsubasa @@ -32,7 +32,7 @@ interface HTDoubleItemToItemRecipe : val result: HTItemResult, override val progressData: HTProgressData ) : HTDoubleItemToItemRecipe, - HTProgressRecipe.Simple { + HTProgressRecipe.Simple { companion object { @JvmStatic fun codec(factory: HTDoubleItemToItemRecipeBuilder.Factory): MapCodec = diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTFluidToRecipe.kt b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTFluidToRecipe.kt index f577b4699..2222991b1 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTFluidToRecipe.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTFluidToRecipe.kt @@ -2,7 +2,7 @@ package hiiragi283.lib.recipe.base import com.mojang.serialization.MapCodec import hiiragi283.lib.recipe.ingredient.HTFluidIngredient -import hiiragi283.lib.recipe.input.HTSingleFluidRecipeInput +import hiiragi283.lib.recipe.input.HTRecipeInput import hiiragi283.lib.recipe.result.HTFluidResult import hiiragi283.lib.recipe.result.HTItemAndFluidStack import hiiragi283.lib.recipe.result.HTItemOrFluidResult @@ -42,14 +42,14 @@ typealias HTFluidToItemAndFluidRecipe = HTFluidToRecipe interface HTFluidToRecipe : HTRecipePredicates.SingleFluid, HTRecipeFactories.SingleFluidTo, - HTProgressRecipe { + HTProgressRecipe { /** * @author Hiiragi Tsubasa * @since 26.1.5 */ open class BasicItem(ingredient: HTFluidIngredient, result: HTItemResult, progressData: HTProgressData) : - HTBasicSingleRecipe( + HTBasicSingleRecipe( ingredient, result, progressData @@ -83,7 +83,7 @@ interface HTFluidToRecipe : * @since 26.1.5 */ open class BasicFluid(ingredient: HTFluidIngredient, result: HTFluidResult, progressData: HTProgressData) : - HTBasicSingleRecipe( + HTBasicSingleRecipe( ingredient, result, progressData @@ -120,7 +120,7 @@ interface HTFluidToRecipe : ingredient: HTFluidIngredient, result: HTItemOrFluidResult, progressData: HTProgressData - ) : HTBasicSingleRecipe( + ) : HTBasicSingleRecipe( ingredient, result, progressData diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTItemAndFluidToRecipe.kt b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTItemAndFluidToRecipe.kt index 6f7fcc755..97cc82b69 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTItemAndFluidToRecipe.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTItemAndFluidToRecipe.kt @@ -6,7 +6,7 @@ import hiiragi283.lib.HTConstants import hiiragi283.lib.data.recipe.builder.HTItemAndFluidToRecipeBuilder import hiiragi283.lib.recipe.ingredient.HTFluidIngredient import hiiragi283.lib.recipe.ingredient.HTItemIngredient -import hiiragi283.lib.recipe.input.HTItemAndFluidRecipeInput +import hiiragi283.lib.recipe.input.HTRecipeInput import hiiragi283.lib.recipe.result.HTFluidResult import hiiragi283.lib.recipe.result.HTItemAndFluidStack import hiiragi283.lib.recipe.result.HTItemOrFluidResult @@ -49,7 +49,7 @@ typealias HTItemOrFluidRecipe = HTItemAndFluidToRecipe interface HTItemAndFluidToRecipe : HTRecipePredicates.ItemAndFluid, HTRecipeFactories.ItemAndFluid, - HTProgressRecipe { + HTProgressRecipe { /** * @author Hiiragi Tsubasa @@ -61,7 +61,7 @@ interface HTItemAndFluidToRecipe : val result: RESULT, override val progressData: HTProgressData ) : HTItemAndFluidToRecipe, - HTProgressRecipe.Simple { + HTProgressRecipe.Simple { companion object { @JvmStatic fun , RECIPE : Basic> codec( diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTItemToDoubleItemRecipe.kt b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTItemToDoubleItemRecipe.kt index 5fb24a418..64a0b6923 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTItemToDoubleItemRecipe.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTItemToDoubleItemRecipe.kt @@ -5,6 +5,7 @@ import hiiragi283.lib.HTConstants import hiiragi283.lib.collection.Nel import hiiragi283.lib.data.recipe.builder.HTItemToDoubleItemRecipeBuilder import hiiragi283.lib.recipe.ingredient.HTItemIngredient +import hiiragi283.lib.recipe.input.HTRecipeInput import hiiragi283.lib.recipe.result.HTItemResult import hiiragi283.lib.recipe.result.createOrEmpty import hiiragi283.lib.serialization.codec.HTCodecs @@ -14,7 +15,6 @@ import net.minecraft.network.RegistryFriendlyByteBuf import net.minecraft.network.codec.StreamCodec import net.minecraft.world.item.ItemInstance import net.minecraft.world.item.ItemStack -import net.minecraft.world.item.crafting.SingleRecipeInput /** * 1種類のアイテムから2種類のアイテムを作成するレシピを表すインターフェースです。 @@ -24,7 +24,7 @@ import net.minecraft.world.item.crafting.SingleRecipeInput interface HTItemToDoubleItemRecipe : HTRecipePredicates.SingleItem, HTRecipeFactories.SingleItemTo>, - HTProgressRecipe { + HTProgressRecipe { fun asSingleOutput(): HTItemToItemRecipe = object : HTItemToItemRecipe { override fun test(input: ItemInstance): Boolean = this@HTItemToDoubleItemRecipe.test(input) @@ -34,7 +34,7 @@ interface HTItemToDoubleItemRecipe : override fun apply(input: ItemInstance): ItemStack = this@HTItemToDoubleItemRecipe.apply(input).first - override fun getProgressData(input: SingleRecipeInput): HTProgressData = + override fun getProgressData(input: HTRecipeInput): HTProgressData = this@HTItemToDoubleItemRecipe.getProgressData(input) } @@ -47,7 +47,7 @@ interface HTItemToDoubleItemRecipe : val results: Nel, override val progressData: HTProgressData ) : HTItemToDoubleItemRecipe, - HTProgressRecipe.Simple { + HTProgressRecipe.Simple { companion object { @JvmStatic fun codec(factory: HTItemToDoubleItemRecipeBuilder.Factory): MapCodec = diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTItemToRecipe.kt b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTItemToRecipe.kt index 56a3913d0..1e35842c2 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTItemToRecipe.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTItemToRecipe.kt @@ -2,6 +2,7 @@ package hiiragi283.lib.recipe.base import com.mojang.serialization.MapCodec import hiiragi283.lib.recipe.ingredient.HTItemIngredient +import hiiragi283.lib.recipe.input.HTRecipeInput import hiiragi283.lib.recipe.result.HTFluidResult import hiiragi283.lib.recipe.result.HTItemAndFluidStack import hiiragi283.lib.recipe.result.HTItemOrFluidResult @@ -10,7 +11,6 @@ import net.minecraft.network.RegistryFriendlyByteBuf import net.minecraft.network.codec.StreamCodec import net.minecraft.world.item.ItemInstance import net.minecraft.world.item.ItemStack -import net.minecraft.world.item.crafting.SingleRecipeInput import net.neoforged.neoforge.fluids.FluidStack /** @@ -42,14 +42,14 @@ typealias HTItemToItemAndFluidRecipe = HTItemToRecipe interface HTItemToRecipe : HTRecipePredicates.SingleItem, HTRecipeFactories.SingleItemTo, - HTProgressRecipe { + HTProgressRecipe { /** * @author Hiiragi Tsubasa * @since 26.1.5 */ open class BasicItem(ingredient: HTItemIngredient, result: HTItemResult, progressData: HTProgressData) : - HTBasicSingleRecipe(ingredient, result, progressData), + HTBasicSingleRecipe(ingredient, result, progressData), HTItemToRecipe { companion object { @JvmStatic @@ -78,7 +78,7 @@ interface HTItemToRecipe : * @since 26.1.5 */ open class BasicFluid(ingredient: HTItemIngredient, result: HTFluidResult, progressData: HTProgressData) : - HTBasicSingleRecipe( + HTBasicSingleRecipe( ingredient, result, progressData @@ -115,7 +115,7 @@ interface HTItemToRecipe : ingredient: HTItemIngredient, result: HTItemOrFluidResult, progressData: HTProgressData - ) : HTBasicSingleRecipe(ingredient, result, progressData), + ) : HTBasicSingleRecipe(ingredient, result, progressData), HTItemToRecipe { companion object { @JvmStatic diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTRecipeFactories.kt b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTRecipeFactories.kt index fdadad2c6..72b5ae903 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTRecipeFactories.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTRecipeFactories.kt @@ -2,15 +2,9 @@ package hiiragi283.lib.recipe.base import com.mojang.datafixers.util.Function3 import hiiragi283.lib.recipe.HTRecipeFactory -import hiiragi283.lib.recipe.input.HTFluidRecipeInput -import hiiragi283.lib.recipe.input.HTItemAndFluidRecipeInput -import hiiragi283.lib.recipe.input.HTLocationRecipeInput -import hiiragi283.lib.recipe.input.HTSingleFluidRecipeInput +import hiiragi283.lib.recipe.input.HTRecipeInput import hiiragi283.lib.recipe.input.getItemOrEmpty import net.minecraft.world.item.ItemInstance -import net.minecraft.world.item.crafting.RecipeInput -import net.minecraft.world.item.crafting.SingleRecipeInput -import net.minecraft.world.level.block.state.pattern.BlockInWorld import net.neoforged.neoforge.fluids.FluidInstance import java.util.function.BiFunction import java.util.function.Function @@ -23,8 +17,8 @@ import java.util.function.Function data object HTRecipeFactories { // Single Input // - interface SingleInput : - HTRecipeFactory, + interface SingleInput : + HTRecipeFactory, Function { override fun apply(input: INPUT_A): OUTPUT @@ -33,52 +27,34 @@ data object HTRecipeFactories { */ fun getMatchingStack(input: INPUT_A): INPUT_A - /** - * @since 26.1.9 - */ - fun unwrapInput(input: INPUT): INPUT_A - - /** - * @since 26.1.9 - */ - override fun produce(input: INPUT): OUTPUT = unwrapInput(input).let(::apply) - /** * 消費される入力を取得します。 - * @since 26.1.9 */ - fun getMatchingStack(input: INPUT): INPUT_A = unwrapInput(input).let(::getMatchingStack) + fun getMatchingStack(input: HTRecipeInput): INPUT_A } /** * 1種類の液体から完成品を作る[SingleInput]の拡張インターフェースです。 */ - interface SingleFluidTo : SingleInput { - override fun unwrapInput(input: HTSingleFluidRecipeInput): FluidInstance = input.fluid - } + interface SingleFluidTo : SingleInput { + override fun produce(input: HTRecipeInput): OUTPUT = apply(input.getFluidOrEmpty(0)) - /** - * 1種類のアイテムから完成品を作る[SingleInput]の拡張インターフェースです。 - */ - interface SingleItemTo : SingleInput { - override fun unwrapInput(input: SingleRecipeInput): ItemInstance = input.item() + override fun getMatchingStack(input: HTRecipeInput): FluidInstance = getMatchingStack(input.getFluidOrEmpty(0)) } /** - * @since 26.1.8 + * 1種類のアイテムから完成品を作る[SingleInput]の拡張インターフェースです。 */ - interface Located : SingleInput { - override fun unwrapInput(input: HTLocationRecipeInput): BlockInWorld = input.blockInWorld + interface SingleItemTo : SingleInput { + override fun produce(input: HTRecipeInput): OUTPUT = apply(input.getItemOrEmpty(0)) - @Suppress("DeprecatedCallableAddReplaceWith") - @Deprecated("Not used", level = DeprecationLevel.ERROR) - override fun getMatchingStack(input: BlockInWorld): BlockInWorld = input + override fun getMatchingStack(input: HTRecipeInput): ItemInstance = getMatchingStack(input.getItemOrEmpty(0)) } // Double Input // - interface DoubleInput : - HTRecipeFactory, + interface DoubleInput : + HTRecipeFactory, BiFunction { override fun apply(first: INPUT_A, second: INPUT_B): OUTPUT @@ -91,26 +67,26 @@ data object HTRecipeFactories { * 消費される入力を取得します。 * @since 26.1.9 */ - fun getMatchingStack(input: INPUT): Pair + fun getMatchingStack(input: HTRecipeInput): Pair } /** * 1種類のアイテムと液体から完成品を作る[DoubleInput]の拡張インターフェースです。 */ - interface ItemAndFluid : DoubleInput { - override fun produce(input: HTItemAndFluidRecipeInput): OUTPUT = apply(input.item, input.fluid) + interface ItemAndFluid : DoubleInput { + override fun produce(input: HTRecipeInput): OUTPUT = apply(input.getItemOrEmpty(0), input.getFluidOrEmpty(0)) - override fun getMatchingStack(input: HTItemAndFluidRecipeInput): Pair = - getMatchingStack(input.item, input.fluid) + override fun getMatchingStack(input: HTRecipeInput): Pair = + getMatchingStack(input.getItemOrEmpty(0), input.getFluidOrEmpty(0)) } /** * 2種類のアイテムから完成品を作る[DoubleInput]の拡張インターフェースです。 */ - interface DoubleItem : DoubleInput { - override fun produce(input: RecipeInput): OUTPUT = apply(input.getItemOrEmpty(0), input.getItemOrEmpty(1)) + interface DoubleItem : DoubleInput { + override fun produce(input: HTRecipeInput): OUTPUT = apply(input.getItemOrEmpty(0), input.getItemOrEmpty(1)) - override fun getMatchingStack(input: RecipeInput): Pair = + override fun getMatchingStack(input: HTRecipeInput): Pair = getMatchingStack(input.getItemOrEmpty(0), input.getItemOrEmpty(1)) } @@ -118,18 +94,17 @@ data object HTRecipeFactories { * 2種類の液体から完成品を作る[DoubleInput]の拡張インターフェースです。 * @since 26.1.5 */ - interface DoubleFluid : DoubleInput { - override fun produce(input: HTFluidRecipeInput): OUTPUT = - apply(input.getFluidOrEmpty(0), input.getFluidOrEmpty(1)) + interface DoubleFluid : DoubleInput { + override fun produce(input: HTRecipeInput): OUTPUT = apply(input.getFluidOrEmpty(0), input.getFluidOrEmpty(1)) - override fun getMatchingStack(input: HTFluidRecipeInput): Pair = + override fun getMatchingStack(input: HTRecipeInput): Pair = getMatchingStack(input.getFluidOrEmpty(0), input.getFluidOrEmpty(1)) } // Triple Input // - interface TripleInput : - HTRecipeFactory, + interface TripleInput : + HTRecipeFactory, Function3 { override fun apply(first: INPUT_A, second: INPUT_B, third: INPUT_C): OUTPUT @@ -142,7 +117,7 @@ data object HTRecipeFactories { * 消費される入力を取得します。 * @since 26.1.9 */ - fun getMatchingStack(input: INPUT): Triple + fun getMatchingStack(input: HTRecipeInput): Triple } /** @@ -150,11 +125,11 @@ data object HTRecipeFactories { * @since 26.1.8 */ interface DoubleItemAndFluid : - TripleInput { - override fun produce(input: HTFluidRecipeInput): OUTPUT = + TripleInput { + override fun produce(input: HTRecipeInput): OUTPUT = apply(input.getItemOrEmpty(0), input.getItemOrEmpty(1), input.getFluidOrEmpty(0)) - override fun getMatchingStack(input: HTFluidRecipeInput): Triple = + override fun getMatchingStack(input: HTRecipeInput): Triple = getMatchingStack(input.getItemOrEmpty(0), input.getItemOrEmpty(1), input.getFluidOrEmpty(0)) } @@ -163,22 +138,22 @@ data object HTRecipeFactories { * @since 26.1.9 */ interface ItemAndDoubleFluid : - TripleInput { - override fun produce(input: HTFluidRecipeInput): OUTPUT = + TripleInput { + override fun produce(input: HTRecipeInput): OUTPUT = apply(input.getItemOrEmpty(0), input.getFluidOrEmpty(0), input.getFluidOrEmpty(1)) - override fun getMatchingStack(input: HTFluidRecipeInput): Triple = + override fun getMatchingStack(input: HTRecipeInput): Triple = getMatchingStack(input.getItemOrEmpty(0), input.getFluidOrEmpty(0), input.getFluidOrEmpty(1)) } /** * 3種類のアイテムから完成品を作る[TripleInput]の拡張インターフェースです。 */ - interface TripleItem : TripleInput { - override fun produce(input: RecipeInput): OUTPUT = + interface TripleItem : TripleInput { + override fun produce(input: HTRecipeInput): OUTPUT = apply(input.getItemOrEmpty(0), input.getItemOrEmpty(1), input.getItemOrEmpty(2)) - override fun getMatchingStack(input: RecipeInput): Triple = + override fun getMatchingStack(input: HTRecipeInput): Triple = getMatchingStack(input.getItemOrEmpty(0), input.getItemOrEmpty(1), input.getItemOrEmpty(2)) } } diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTRecipePredicates.kt b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTRecipePredicates.kt index 05a75fff8..29b1903c3 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTRecipePredicates.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTRecipePredicates.kt @@ -1,15 +1,9 @@ package hiiragi283.lib.recipe.base import hiiragi283.lib.recipe.HTRecipePredicate -import hiiragi283.lib.recipe.input.HTFluidRecipeInput -import hiiragi283.lib.recipe.input.HTItemAndFluidRecipeInput -import hiiragi283.lib.recipe.input.HTLocationRecipeInput -import hiiragi283.lib.recipe.input.HTSingleFluidRecipeInput +import hiiragi283.lib.recipe.input.HTRecipeInput import hiiragi283.lib.recipe.input.getItemOrEmpty import net.minecraft.world.item.ItemInstance -import net.minecraft.world.item.crafting.RecipeInput -import net.minecraft.world.item.crafting.SingleRecipeInput -import net.minecraft.world.level.block.state.pattern.BlockInWorld import net.neoforged.neoforge.common.util.TriPredicate import net.neoforged.neoforge.fluids.FluidInstance import java.util.function.BiPredicate @@ -25,11 +19,10 @@ data object HTRecipePredicates { /** * 1種類の入力を判定する[HTRecipePredicate]の拡張インターフェースです。 - * @param INPUT [RecipeInput]を継承したクラス * @param INPUT_A 入力を判定するクラス */ - interface SingleInput : - HTRecipePredicate, + interface SingleInput : + HTRecipePredicate, Predicate { override fun test(input: INPUT_A): Boolean } @@ -37,34 +30,26 @@ data object HTRecipePredicates { /** * 1種類の液体を判定する[SingleInput]の拡張インターフェースです。 */ - fun interface SingleFluid : SingleInput { - override fun matches(input: HTSingleFluidRecipeInput): Boolean = test(input.fluid) + fun interface SingleFluid : SingleInput { + override fun matches(input: HTRecipeInput): Boolean = test(input.getFluidOrEmpty(0)) } /** * 1種類のアイテムを判定する[SingleInput]の拡張インターフェースです。 */ - fun interface SingleItem : SingleInput { - override fun matches(input: SingleRecipeInput): Boolean = test(input.item()) - } - - /** - * @since 26.1.8 - */ - fun interface Located : SingleInput { - override fun matches(input: HTLocationRecipeInput): Boolean = test(input.blockInWorld) + fun interface SingleItem : SingleInput { + override fun matches(input: HTRecipeInput): Boolean = test(input.getItemOrEmpty(0)) } // Double Input // /** * 2種類の入力を判定する[HTRecipePredicate]の拡張インターフェースです。 - * @param INPUT [RecipeInput]を継承したクラス * @param INPUT_A 1番目の入力を判定するクラス * @param INPUT_B 2番目の入力を判定するクラス */ - interface DoubleInput : - HTRecipePredicate, + interface DoubleInput : + HTRecipePredicate, BiPredicate { override fun test(first: INPUT_A, second: INPUT_B): Boolean } @@ -72,40 +57,35 @@ data object HTRecipePredicates { /** * 1種類のアイテムと液体を判定する[DoubleInput]の拡張インターフェースです。 */ - fun interface ItemAndFluid : DoubleInput { - override fun matches(input: HTItemAndFluidRecipeInput): Boolean { - val (item: ItemInstance, fluid: FluidInstance) = input - return test(item, fluid) - } + fun interface ItemAndFluid : DoubleInput { + override fun matches(input: HTRecipeInput): Boolean = test(input.getItemOrEmpty(0), input.getFluidOrEmpty(0)) } /** * 2種類のアイテムを判定する[DoubleInput]の拡張インターフェースです。 */ - fun interface DoubleItem : DoubleInput { - override fun matches(input: RecipeInput): Boolean = test(input.getItemOrEmpty(0), input.getItemOrEmpty(1)) + fun interface DoubleItem : DoubleInput { + override fun matches(input: HTRecipeInput): Boolean = test(input.getItemOrEmpty(0), input.getItemOrEmpty(1)) } /** * 2種類の液体を判定する[DoubleInput]の拡張インターフェースです。 * @since 26.1.5 */ - fun interface DoubleFluid : DoubleInput { - override fun matches(input: HTFluidRecipeInput): Boolean = - test(input.getFluidOrEmpty(0), input.getFluidOrEmpty(1)) + fun interface DoubleFluid : DoubleInput { + override fun matches(input: HTRecipeInput): Boolean = test(input.getFluidOrEmpty(0), input.getFluidOrEmpty(1)) } // Triple Input // /** * 3種類の入力を判定する[HTRecipePredicate]の拡張インターフェースです。 - * @param INPUT [RecipeInput]を継承したクラス * @param INPUT_A 1番目の入力を判定するクラス * @param INPUT_B 2番目の入力を判定するクラス * @param INPUT_C 3番目の入力を判定するクラス */ - interface TripleInput : - HTRecipePredicate, + interface TripleInput : + HTRecipePredicate, TriPredicate { override fun test(first: INPUT_A, second: INPUT_B, third: INPUT_C): Boolean } @@ -114,8 +94,8 @@ data object HTRecipePredicates { * 2種類のアイテムと1種類の液体を判定する[TripleInput]の拡張インターフェースです。 * @since 26.1.8 */ - fun interface DoubleItemAndFluid : TripleInput { - override fun matches(input: HTFluidRecipeInput): Boolean = + fun interface DoubleItemAndFluid : TripleInput { + override fun matches(input: HTRecipeInput): Boolean = test(input.getItemOrEmpty(0), input.getItemOrEmpty(1), input.getFluidOrEmpty(0)) } @@ -123,16 +103,16 @@ data object HTRecipePredicates { * 1種類のアイテムと2種類の液体を判定する[TripleInput]の拡張インターフェースです。 * @since 26.1.9 */ - fun interface ItemAndDoubleFluid : TripleInput { - override fun matches(input: HTFluidRecipeInput): Boolean = + fun interface ItemAndDoubleFluid : TripleInput { + override fun matches(input: HTRecipeInput): Boolean = test(input.getItemOrEmpty(0), input.getFluidOrEmpty(0), input.getFluidOrEmpty(1)) } /** * 3種類のアイテムを判定する[TripleInput]の拡張インターフェースです。 */ - fun interface TripleItem : TripleInput { - override fun matches(input: RecipeInput): Boolean = + fun interface TripleItem : TripleInput { + override fun matches(input: HTRecipeInput): Boolean = test(input.getItemOrEmpty(0), input.getItemOrEmpty(1), input.getItemOrEmpty(2)) } } diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTTripleItemToItemRecipe.kt b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTTripleItemToItemRecipe.kt index 1e8da1016..0742b0e41 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTTripleItemToItemRecipe.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTTripleItemToItemRecipe.kt @@ -5,6 +5,7 @@ import hiiragi283.lib.HTConstants import hiiragi283.lib.collection.Nel import hiiragi283.lib.data.recipe.builder.HTTripleItemToItemRecipeBuilder import hiiragi283.lib.recipe.ingredient.HTItemIngredient +import hiiragi283.lib.recipe.input.HTRecipeInput import hiiragi283.lib.recipe.result.HTItemResult import hiiragi283.lib.serialization.codec.HTCodecs import hiiragi283.lib.serialization.codec.compactNelFieldOf @@ -13,7 +14,6 @@ import net.minecraft.network.RegistryFriendlyByteBuf import net.minecraft.network.codec.StreamCodec import net.minecraft.world.item.ItemInstance import net.minecraft.world.item.ItemStack -import net.minecraft.world.item.crafting.RecipeInput /** * 2種類または3種類のアイテムから1種類のアイテムを作成するレシピを表すインターフェースです。 @@ -23,7 +23,7 @@ import net.minecraft.world.item.crafting.RecipeInput interface HTTripleItemToItemRecipe : HTRecipePredicates.TripleItem, HTRecipeFactories.TripleItem, - HTProgressRecipe { + HTProgressRecipe { fun asDoubleInput(): HTDoubleItemToItemRecipe? = null @@ -37,7 +37,7 @@ interface HTTripleItemToItemRecipe : val result: HTItemResult, override val progressData: HTProgressData ) : HTTripleItemToItemRecipe, - HTProgressRecipe.Simple { + HTProgressRecipe.Simple { companion object { @JvmStatic fun codec(factory: HTTripleItemToItemRecipeBuilder.Factory): MapCodec = @@ -72,20 +72,15 @@ interface HTTripleItemToItemRecipe : val secondary: HTItemIngredient get() = extras.head val tertiary: HTItemIngredient? get() = extras.getOrNull(1) - override fun asDoubleInput(): HTDoubleItemToItemRecipe? { - if (tertiary != null) return null - return object : HTDoubleItemToItemRecipe, HTProgressRecipe.Simple by this { - override fun test(first: ItemInstance, second: ItemInstance): Boolean = - ingredient.test(first) && secondary.test(second) + override fun asDoubleInput(): HTDoubleItemToItemRecipe.Basic? = when { + tertiary != null -> null - override fun apply(first: ItemInstance, second: ItemInstance): ItemStack = result.create() - - override fun getMatchingStack( - first: ItemInstance, - second: ItemInstance - ): Pair = - ingredient.getMatchingStack(first) to secondary.getMatchingStack(second) - } + else -> HTDoubleItemToItemRecipe.Basic( + this.ingredient, + this.secondary, + this.result, + this.progressData + ) } override fun test(first: ItemInstance, second: ItemInstance, third: ItemInstance): Boolean = diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/input/HTFluidListRecipeInput.kt b/src/lib/kotlin/hiiragi283/lib/recipe/input/HTFluidListRecipeInput.kt deleted file mode 100644 index 640059f58..000000000 --- a/src/lib/kotlin/hiiragi283/lib/recipe/input/HTFluidListRecipeInput.kt +++ /dev/null @@ -1,24 +0,0 @@ -package hiiragi283.lib.recipe.input - -import net.minecraft.world.item.ItemStack -import net.neoforged.neoforge.fluids.FluidStack - -/** - * 複数の液体を保持する[HTFluidRecipeInput]の実装クラスです。 - * @author Hiiragi Tsubasa - * @since 26.1.5 - */ -@JvmRecord -data class HTFluidListRecipeInput(val fluids: List) : HTFluidRecipeInput { - constructor(vararg fluids: FluidStack) : this(fluids.toList()) - - override val fluidSize: Int get() = fluids.size - - override fun getFluid(index: Int): FluidStack = fluids[index] - - override fun getItem(index: Int): ItemStack = error("No item for index: $index") - - override fun size(): Int = 0 - - override fun isEmpty(): Boolean = fluids.isEmpty() || fluids.all(FluidStack::isEmpty) -} diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/input/HTItemAndFluidRecipeInput.kt b/src/lib/kotlin/hiiragi283/lib/recipe/input/HTItemAndFluidRecipeInput.kt deleted file mode 100644 index 3db183823..000000000 --- a/src/lib/kotlin/hiiragi283/lib/recipe/input/HTItemAndFluidRecipeInput.kt +++ /dev/null @@ -1,25 +0,0 @@ -package hiiragi283.lib.recipe.input - -import net.minecraft.world.item.ItemStack -import net.neoforged.neoforge.fluids.FluidStack - -/** - * 一種類のアイテムと液体を保持する[HTFluidRecipeInput]の実装クラスです。 - * @author Hiiragi Tsubasa - * @since 26.1.0 - */ -@JvmRecord -data class HTItemAndFluidRecipeInput(val item: ItemStack, val fluid: FluidStack) : HTFluidRecipeInput { - override val fluidSize: Int get() = 1 - - override fun getFluid(index: Int): FluidStack = fluid - - override val isFluidEmpty: Boolean - get() = fluid.isEmpty - - override fun asFluidList(): List = listOf(fluid) - - override fun getItem(index: Int): ItemStack = item - - override fun size(): Int = 1 -} diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/input/HTItemListRecipeInput.kt b/src/lib/kotlin/hiiragi283/lib/recipe/input/HTItemListRecipeInput.kt deleted file mode 100644 index ccf0ea093..000000000 --- a/src/lib/kotlin/hiiragi283/lib/recipe/input/HTItemListRecipeInput.kt +++ /dev/null @@ -1,23 +0,0 @@ -package hiiragi283.lib.recipe.input - -import net.minecraft.world.item.ItemStack -import net.minecraft.world.item.crafting.RecipeInput - -/** - * 複数のアイテムを保持する[RecipeInput]の実装クラスです。 - * @author Hiiragi Tsubasa - * @since 26.1.0 - */ -@JvmRecord -data class HTItemListRecipeInput(val items: List) : RecipeInput { - /** - * @since 26.1.4 - */ - constructor(vararg items: ItemStack) : this(items.toList()) - - override fun getItem(index: Int): ItemStack = items[index] - - override fun size(): Int = items.size - - override fun isEmpty(): Boolean = items.isEmpty() || items.all(ItemStack::isEmpty) -} diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/input/HTRecipeInput.kt b/src/lib/kotlin/hiiragi283/lib/recipe/input/HTRecipeInput.kt new file mode 100644 index 000000000..986966f0e --- /dev/null +++ b/src/lib/kotlin/hiiragi283/lib/recipe/input/HTRecipeInput.kt @@ -0,0 +1,65 @@ +package hiiragi283.lib.recipe.input + +import net.minecraft.world.item.ItemStack +import net.neoforged.neoforge.fluids.FluidStack + +/** + * Hiiragi Seriesで使用される[HTFluidRecipeInput]の実装クラスです。 + * @author Hiiragi Tsubasa + * @since 26.1.9 + */ +@JvmRecord +data class HTRecipeInput(val items: List, val fluids: List, val customKeys: Set) : + HTFluidRecipeInput { + constructor( + item: ItemStack, + customKeys: Set + ) : this(item, listOf(), customKeys) + + constructor( + item: ItemStack, + fluids: List = listOf(), + customKeys: Set + ) : this(listOf(item), fluids, customKeys) + + constructor( + fluid: FluidStack, + customKeys: Set + ) : this( + fluid, + listOf(), + customKeys + ) + + constructor( + fluid: FluidStack, + items: List = listOf(), + customKeys: Set + ) : this( + items, + listOf(fluid), + customKeys + ) + + constructor( + item: ItemStack, + fluid: FluidStack, + customKeys: Set + ) : this( + listOf(item), + listOf(fluid), + customKeys + ) + + override val fluidSize: Int get() = fluids.size + + override fun getFluid(index: Int): FluidStack = fluids[index] + + override fun asFluidList(): List = fluids + + override fun getItem(index: Int): ItemStack = items[index] + + override fun size(): Int = items.size + + override fun isEmpty(): Boolean = super.isEmpty() && customKeys.isEmpty() +} diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/input/HTSingleFluidRecipeInput.kt b/src/lib/kotlin/hiiragi283/lib/recipe/input/HTSingleFluidRecipeInput.kt deleted file mode 100644 index d1b489739..000000000 --- a/src/lib/kotlin/hiiragi283/lib/recipe/input/HTSingleFluidRecipeInput.kt +++ /dev/null @@ -1,27 +0,0 @@ -package hiiragi283.lib.recipe.input - -import net.minecraft.world.item.ItemStack -import net.neoforged.neoforge.fluids.FluidStack - -/** - * 一種類のアイテムと液体を保持する[HTFluidRecipeInput]の実装クラスです。 - * - * 参照 : [Mekanism - SingleFluidRecipeInput](https://github.com/mekanism/Mekanism/blob/26.1/src/api/java/mekanism/api/recipes/vanilla_input/SingleFluidRecipeInput.java) - * @author Hiiragi Tsubasa - * @since 26.1.0 - */ -@JvmRecord -data class HTSingleFluidRecipeInput(val fluid: FluidStack) : HTFluidRecipeInput { - override val fluidSize: Int get() = 1 - - override fun getFluid(index: Int): FluidStack = fluid - - override fun getItem(index: Int): ItemStack = ItemStack.EMPTY - - override fun size(): Int = 0 - - override val isFluidEmpty: Boolean - get() = fluid.isEmpty - - override fun asFluidList(): List = listOf(fluid) -} diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTAlloyingRecipe.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTAlloyingRecipe.kt index 5a83b52f8..f65dc1297 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTAlloyingRecipe.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTAlloyingRecipe.kt @@ -5,8 +5,8 @@ import hiiragi283.lib.recipe.HTSerializableRecipe import hiiragi283.lib.recipe.base.HTProgressData import hiiragi283.lib.recipe.base.HTTripleItemToItemRecipe import hiiragi283.lib.recipe.ingredient.HTItemIngredient +import hiiragi283.lib.recipe.input.HTRecipeInput import hiiragi283.lib.recipe.result.HTItemResult -import net.minecraft.world.item.crafting.RecipeInput import net.minecraft.world.item.crafting.RecipeSerializer import net.minecraft.world.item.crafting.RecipeType @@ -16,7 +16,7 @@ class RTAlloyingRecipe( result: HTItemResult, progressData: HTProgressData ) : HTTripleItemToItemRecipe.Basic(ingredient, extras, result, progressData), - HTSerializableRecipe { + HTSerializableRecipe { companion object { @JvmField val SERIALIZER: RecipeSerializer = diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTAssemblingRecipe.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTAssemblingRecipe.kt index 0a15fe49f..177ee0983 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTAssemblingRecipe.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTAssemblingRecipe.kt @@ -5,8 +5,8 @@ import hiiragi283.lib.recipe.HTSerializableRecipe import hiiragi283.lib.recipe.base.HTProgressData import hiiragi283.lib.recipe.base.HTTripleItemToItemRecipe import hiiragi283.lib.recipe.ingredient.HTItemIngredient +import hiiragi283.lib.recipe.input.HTRecipeInput import hiiragi283.lib.recipe.result.HTItemResult -import net.minecraft.world.item.crafting.RecipeInput import net.minecraft.world.item.crafting.RecipeSerializer import net.minecraft.world.item.crafting.RecipeType @@ -16,7 +16,7 @@ class RTAssemblingRecipe( result: HTItemResult, progressData: HTProgressData ) : HTTripleItemToItemRecipe.Basic(ingredient, extras, result, progressData), - HTSerializableRecipe { + HTSerializableRecipe { companion object { @JvmField val SERIALIZER: RecipeSerializer = diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTBathingRecipe.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTBathingRecipe.kt index 195f5c10d..33f6b590c 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTBathingRecipe.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTBathingRecipe.kt @@ -5,7 +5,7 @@ import hiiragi283.lib.recipe.base.HTItemAndFluidToRecipe import hiiragi283.lib.recipe.base.HTProgressData import hiiragi283.lib.recipe.ingredient.HTFluidIngredient import hiiragi283.lib.recipe.ingredient.HTItemIngredient -import hiiragi283.lib.recipe.input.HTItemAndFluidRecipeInput +import hiiragi283.lib.recipe.input.HTRecipeInput import hiiragi283.lib.recipe.result.HTItemResult import net.minecraft.world.item.crafting.RecipeSerializer import net.minecraft.world.item.crafting.RecipeType @@ -16,7 +16,7 @@ class RTBathingRecipe( result: HTItemResult, progressData: HTProgressData ) : HTItemAndFluidToRecipe.BasicItem(itemIngredient, fluidIngredient, result, progressData), - HTSerializableRecipe { + HTSerializableRecipe { companion object { @JvmField val SERIALIZER: RecipeSerializer = diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTCentrifugingRecipe.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTCentrifugingRecipe.kt index 105e2b9f9..8450ea893 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTCentrifugingRecipe.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTCentrifugingRecipe.kt @@ -10,6 +10,7 @@ import hiiragi283.lib.recipe.base.HTProgressRecipe import hiiragi283.lib.recipe.base.HTRecipeFactories import hiiragi283.lib.recipe.base.HTRecipePredicates import hiiragi283.lib.recipe.ingredient.HTItemIngredient +import hiiragi283.lib.recipe.input.HTRecipeInput import hiiragi283.lib.recipe.result.HTFluidResult import hiiragi283.lib.recipe.result.HTItemResult import hiiragi283.lib.recipe.result.createOrEmpty @@ -23,14 +24,13 @@ import net.minecraft.world.item.ItemInstance import net.minecraft.world.item.ItemStack import net.minecraft.world.item.crafting.RecipeSerializer import net.minecraft.world.item.crafting.RecipeType -import net.minecraft.world.item.crafting.SingleRecipeInput import net.neoforged.neoforge.fluids.FluidStack import java.util.Optional interface RTCentrifugingRecipe : HTRecipePredicates.SingleItem, HTRecipeFactories.SingleItemTo, - HTProgressRecipe { + HTProgressRecipe { @JvmRecord data class Output(val firstItem: ItemStack, val secondItem: ItemStack, val fluid: FluidStack) { @@ -70,8 +70,8 @@ interface RTCentrifugingRecipe : @JvmRecord data class Basic(val ingredient: HTItemIngredient, val result: Result, override val progressData: HTProgressData) : RTCentrifugingRecipe, - HTProgressRecipe.Simple, - HTSerializableRecipe { + HTProgressRecipe.Simple, + HTSerializableRecipe { companion object { @JvmField val CODEC: MapCodec = HTCodecs.recordMap { instance -> diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTCompressingRecipe.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTCompressingRecipe.kt index 98e81857b..b1b3ddee5 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTCompressingRecipe.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTCompressingRecipe.kt @@ -4,14 +4,14 @@ import hiiragi283.lib.recipe.HTSerializableRecipe import hiiragi283.lib.recipe.base.HTItemToRecipe import hiiragi283.lib.recipe.base.HTProgressData import hiiragi283.lib.recipe.ingredient.HTItemIngredient +import hiiragi283.lib.recipe.input.HTRecipeInput import hiiragi283.lib.recipe.result.HTItemResult import net.minecraft.world.item.crafting.RecipeSerializer import net.minecraft.world.item.crafting.RecipeType -import net.minecraft.world.item.crafting.SingleRecipeInput class RTCompressingRecipe(ingredient: HTItemIngredient, result: HTItemResult, progressData: HTProgressData) : HTItemToRecipe.BasicItem(ingredient, result, progressData), - HTSerializableRecipe { + HTSerializableRecipe { companion object { @JvmField val SERIALIZER: RecipeSerializer = diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTCrushingRecipe.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTCrushingRecipe.kt index 1d1f33ad3..8daad3af3 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTCrushingRecipe.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTCrushingRecipe.kt @@ -5,14 +5,14 @@ import hiiragi283.lib.recipe.HTSerializableRecipe import hiiragi283.lib.recipe.base.HTItemToDoubleItemRecipe import hiiragi283.lib.recipe.base.HTProgressData import hiiragi283.lib.recipe.ingredient.HTItemIngredient +import hiiragi283.lib.recipe.input.HTRecipeInput import hiiragi283.lib.recipe.result.HTItemResult import net.minecraft.world.item.crafting.RecipeSerializer import net.minecraft.world.item.crafting.RecipeType -import net.minecraft.world.item.crafting.SingleRecipeInput class RTCrushingRecipe(ingredient: HTItemIngredient, result: Nel, progressData: HTProgressData) : HTItemToDoubleItemRecipe.Basic(ingredient, result, progressData), - HTSerializableRecipe { + HTSerializableRecipe { companion object { @JvmField val SERIALIZER: RecipeSerializer = diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTCuttingRecipe.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTCuttingRecipe.kt index 5358c9080..51fa04ec6 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTCuttingRecipe.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTCuttingRecipe.kt @@ -5,14 +5,14 @@ import hiiragi283.lib.recipe.HTSerializableRecipe import hiiragi283.lib.recipe.base.HTItemToDoubleItemRecipe import hiiragi283.lib.recipe.base.HTProgressData import hiiragi283.lib.recipe.ingredient.HTItemIngredient +import hiiragi283.lib.recipe.input.HTRecipeInput import hiiragi283.lib.recipe.result.HTItemResult import net.minecraft.world.item.crafting.RecipeSerializer import net.minecraft.world.item.crafting.RecipeType -import net.minecraft.world.item.crafting.SingleRecipeInput class RTCuttingRecipe(ingredient: HTItemIngredient, result: Nel, progressData: HTProgressData) : HTItemToDoubleItemRecipe.Basic(ingredient, result, progressData), - HTSerializableRecipe { + HTSerializableRecipe { companion object { @JvmField val SERIALIZER: RecipeSerializer = diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTElectrolyzingRecipe.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTElectrolyzingRecipe.kt index bd574513b..39ae5b141 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTElectrolyzingRecipe.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTElectrolyzingRecipe.kt @@ -9,7 +9,7 @@ import hiiragi283.lib.recipe.base.HTProgressRecipe import hiiragi283.lib.recipe.base.HTRecipeFactories import hiiragi283.lib.recipe.base.HTRecipePredicates import hiiragi283.lib.recipe.ingredient.HTFluidIngredient -import hiiragi283.lib.recipe.input.HTSingleFluidRecipeInput +import hiiragi283.lib.recipe.input.HTRecipeInput import hiiragi283.lib.recipe.result.HTFluidResult import hiiragi283.lib.recipe.result.createOrEmpty import hiiragi283.lib.serialization.codec.HTCodecs @@ -28,9 +28,9 @@ data class RTElectrolyzingRecipe( val results: Nel, override val progressData: HTProgressData ) : HTRecipePredicates.SingleFluid, - HTRecipeFactories.SingleFluidTo, - HTProgressRecipe.Simple, - HTSerializableRecipe { + HTRecipeFactories.SingleFluidTo, + HTProgressRecipe.Simple, + HTSerializableRecipe { companion object { @JvmField val CODEC: MapCodec = HTCodecs.recordMap { instance -> @@ -64,7 +64,7 @@ data class RTElectrolyzingRecipe( override fun getMatchingStack(input: FluidInstance): FluidInstance = ingredient.getMatchingStack(input) - override fun apply(input: FluidInstance): ElectrolyzedResult = ElectrolyzedResult( + override fun apply(input: FluidInstance): Result = Result( results.head.create(), results.getOrNull(1).createOrEmpty(), results.getOrNull(2).createOrEmpty() @@ -75,5 +75,5 @@ data class RTElectrolyzingRecipe( override fun getType(): RecipeType = RagiumRecipeTypes.ELECTROLYZING @JvmRecord - data class ElectrolyzedResult(val right: FluidStack, val left: FluidStack, val main: FluidStack) + data class Result(val right: FluidStack, val left: FluidStack, val main: FluidStack) } diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTEnchantingRecipe.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTEnchantingRecipe.kt index 7a7c29631..efcafff78 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTEnchantingRecipe.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTEnchantingRecipe.kt @@ -7,6 +7,7 @@ import hiiragi283.lib.recipe.base.HTDoubleItemToItemRecipe import hiiragi283.lib.recipe.base.HTProgressData import hiiragi283.lib.recipe.base.HTProgressRecipe import hiiragi283.lib.recipe.ingredient.HTItemIngredient +import hiiragi283.lib.recipe.input.HTRecipeInput import hiiragi283.lib.recipe.result.HTItemResult import hiiragi283.lib.serialization.codec.HTCodecs import net.minecraft.network.RegistryFriendlyByteBuf @@ -15,7 +16,6 @@ import net.minecraft.world.item.ItemInstance import net.minecraft.world.item.ItemStack import net.minecraft.world.item.Items import net.minecraft.world.item.crafting.Ingredient -import net.minecraft.world.item.crafting.RecipeInput import net.minecraft.world.item.crafting.RecipeSerializer import net.minecraft.world.item.crafting.RecipeType @@ -25,8 +25,8 @@ data class RTEnchantingRecipe( val result: HTItemResult, override val progressData: HTProgressData ) : HTDoubleItemToItemRecipe, - HTProgressRecipe.Simple, - HTSerializableRecipe { + HTProgressRecipe.Simple, + HTSerializableRecipe { companion object { @JvmField val BOOK_INGREDIENT = HTItemIngredient(Ingredient.of(Items.BOOK), 1) diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTExchangingRecipe.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTExchangingRecipe.kt index f9771cceb..5252db6d7 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTExchangingRecipe.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTExchangingRecipe.kt @@ -5,7 +5,7 @@ import hiiragi283.lib.recipe.base.HTItemAndFluidToRecipe import hiiragi283.lib.recipe.base.HTProgressData import hiiragi283.lib.recipe.ingredient.HTFluidIngredient import hiiragi283.lib.recipe.ingredient.HTItemIngredient -import hiiragi283.lib.recipe.input.HTItemAndFluidRecipeInput +import hiiragi283.lib.recipe.input.HTRecipeInput import hiiragi283.lib.recipe.result.HTItemOrFluidResult import net.minecraft.world.item.crafting.RecipeSerializer import net.minecraft.world.item.crafting.RecipeType @@ -16,7 +16,7 @@ class RTExchangingRecipe( result: HTItemOrFluidResult, progressData: HTProgressData ) : HTItemAndFluidToRecipe.BasicItemAndFluid(itemIngredient, fluidIngredient, result, progressData), - HTSerializableRecipe { + HTSerializableRecipe { companion object { @JvmField val SERIALIZER: RecipeSerializer = diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTFillingRecipe.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTFillingRecipe.kt index 1125a54a6..df25f0d2d 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTFillingRecipe.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTFillingRecipe.kt @@ -5,7 +5,7 @@ import hiiragi283.lib.recipe.base.HTItemAndFluidToRecipe import hiiragi283.lib.recipe.base.HTProgressData import hiiragi283.lib.recipe.ingredient.HTFluidIngredient import hiiragi283.lib.recipe.ingredient.HTItemIngredient -import hiiragi283.lib.recipe.input.HTItemAndFluidRecipeInput +import hiiragi283.lib.recipe.input.HTRecipeInput import hiiragi283.lib.recipe.result.HTItemResult import net.minecraft.world.item.crafting.RecipeSerializer import net.minecraft.world.item.crafting.RecipeType @@ -16,7 +16,7 @@ class RTFillingRecipe( result: HTItemResult, progressData: HTProgressData ) : HTItemAndFluidToRecipe.BasicItem(itemIngredient, fluidIngredient, result, progressData), - HTSerializableRecipe { + HTSerializableRecipe { companion object { @JvmField val SERIALIZER: RecipeSerializer = diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTFreezingRecipe.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTFreezingRecipe.kt index 25db1728d..21949100b 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTFreezingRecipe.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTFreezingRecipe.kt @@ -8,7 +8,7 @@ import hiiragi283.lib.recipe.base.HTProgressData import hiiragi283.lib.recipe.base.HTProgressRecipe import hiiragi283.lib.recipe.ingredient.HTFluidIngredient import hiiragi283.lib.recipe.ingredient.HTItemCatalyst -import hiiragi283.lib.recipe.input.HTItemAndFluidRecipeInput +import hiiragi283.lib.recipe.input.HTRecipeInput import hiiragi283.lib.recipe.result.HTItemResult import hiiragi283.lib.serialization.codec.HTCodecs import net.minecraft.network.RegistryFriendlyByteBuf @@ -26,8 +26,8 @@ data class RTFreezingRecipe( val result: HTItemResult, override val progressData: HTProgressData ) : HTItemAndFluidToItemRecipe, - HTProgressRecipe.Simple, - HTSerializableRecipe { + HTProgressRecipe.Simple, + HTSerializableRecipe { companion object { @JvmField val CODEC: MapCodec = HTCodecs.recordMap { instance -> diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTMeltingRecipe.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTMeltingRecipe.kt index af526cb5b..ce00e514d 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTMeltingRecipe.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTMeltingRecipe.kt @@ -4,14 +4,14 @@ import hiiragi283.lib.recipe.HTSerializableRecipe import hiiragi283.lib.recipe.base.HTItemToRecipe import hiiragi283.lib.recipe.base.HTProgressData import hiiragi283.lib.recipe.ingredient.HTItemIngredient +import hiiragi283.lib.recipe.input.HTRecipeInput import hiiragi283.lib.recipe.result.HTFluidResult import net.minecraft.world.item.crafting.RecipeSerializer import net.minecraft.world.item.crafting.RecipeType -import net.minecraft.world.item.crafting.SingleRecipeInput class RTMeltingRecipe(ingredient: HTItemIngredient, result: HTFluidResult, progressData: HTProgressData) : HTItemToRecipe.BasicFluid(ingredient, result, progressData), - HTSerializableRecipe { + HTSerializableRecipe { companion object { @JvmField val SERIALIZER: RecipeSerializer = diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTMixingRecipe.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTMixingRecipe.kt index c442b171d..0f453b512 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTMixingRecipe.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTMixingRecipe.kt @@ -4,8 +4,7 @@ import com.mojang.serialization.MapCodec import hiiragi283.lib.HTConstants import hiiragi283.lib.collection.Nel import hiiragi283.lib.recipe.HTSerializableRecipe -import hiiragi283.lib.recipe.base.HTItemAndFluidToFluidRecipe -import hiiragi283.lib.recipe.base.HTItemAndFluidToItemRecipe +import hiiragi283.lib.recipe.base.HTItemAndFluidToRecipe import hiiragi283.lib.recipe.base.HTProgressData import hiiragi283.lib.recipe.base.HTProgressRecipe import hiiragi283.lib.recipe.base.HTRecipeFactories @@ -13,8 +12,7 @@ import hiiragi283.lib.recipe.base.HTRecipePredicates import hiiragi283.lib.recipe.ingredient.HTFluidIngredient import hiiragi283.lib.recipe.ingredient.HTItemIngredient import hiiragi283.lib.recipe.ingredient.testOrEmpty -import hiiragi283.lib.recipe.input.HTFluidRecipeInput -import hiiragi283.lib.recipe.input.HTItemAndFluidRecipeInput +import hiiragi283.lib.recipe.input.HTRecipeInput import hiiragi283.lib.recipe.result.HTItemAndFluidStack import hiiragi283.lib.recipe.result.HTItemOrFluidResult import hiiragi283.lib.serialization.codec.HTCodecs @@ -27,7 +25,6 @@ import net.minecraft.world.item.ItemStack import net.minecraft.world.item.crafting.RecipeSerializer import net.minecraft.world.item.crafting.RecipeType import net.neoforged.neoforge.fluids.FluidInstance -import net.neoforged.neoforge.fluids.FluidStack @JvmRecord data class RTMixingRecipe( @@ -37,8 +34,8 @@ data class RTMixingRecipe( override val progressData: HTProgressData ) : HTRecipePredicates.DoubleItemAndFluid, HTRecipeFactories.DoubleItemAndFluid, - HTProgressRecipe.Simple, - HTSerializableRecipe { + HTProgressRecipe.Simple, + HTSerializableRecipe { companion object { @JvmField val CODEC: MapCodec = HTCodecs.recordMap { instance -> @@ -80,45 +77,29 @@ data class RTMixingRecipe( progressData ) - fun toItemAndFluidToFluid(): HTItemAndFluidToFluidRecipe? = when { + fun toItemAndFluidToFluid(): HTItemAndFluidToRecipe.BasicFluid? = when { itemIngredients.size > 1 -> null - !result.content.isRight() -> null - - else -> object : HTItemAndFluidToFluidRecipe { - override fun test(first: ItemInstance, second: FluidInstance): Boolean = - itemIngredients.head.test(first) && fluidIngredient.test(second) - - override fun apply(first: ItemInstance, second: FluidInstance): FluidStack = result.create().fluid - - override fun getMatchingStack( - first: ItemInstance, - second: FluidInstance - ): Pair = - itemIngredients.head.getMatchingStack(first) to fluidIngredient.getMatchingStack(second) - - override fun getProgressData(input: HTItemAndFluidRecipeInput): HTProgressData = progressData + else -> this.result.content.getRight()?.let { + HTItemAndFluidToRecipe.BasicFluid( + this.itemIngredients.head, + this.fluidIngredient, + it, + this.progressData + ) } } - fun toItemAndFluidToItem(): HTItemAndFluidToItemRecipe? = when { + fun toItemAndFluidToItem(): HTItemAndFluidToRecipe.BasicItem? = when { itemIngredients.size > 1 -> null - !result.content.isLeft() -> null - - else -> object : HTItemAndFluidToItemRecipe { - override fun test(first: ItemInstance, second: FluidInstance): Boolean = - itemIngredients.head.test(first) && fluidIngredient.test(second) - - override fun apply(first: ItemInstance, second: FluidInstance): ItemStack = result.create().item - - override fun getMatchingStack( - first: ItemInstance, - second: FluidInstance - ): Pair = - itemIngredients.head.getMatchingStack(first) to fluidIngredient.getMatchingStack(second) - - override fun getProgressData(input: HTItemAndFluidRecipeInput): HTProgressData = progressData + else -> this.result.content.getLeft()?.let { + HTItemAndFluidToRecipe.BasicItem( + this.itemIngredients.head, + this.fluidIngredient, + it, + this.progressData + ) } } @@ -143,28 +124,4 @@ data class RTMixingRecipe( override fun getSerializer(): RecipeSerializer = RagiumRecipeSerializers.MIXING override fun getType(): RecipeType = RagiumRecipeTypes.MIXING - - @JvmRecord - data class Input(val firstItem: ItemStack, val secondItem: ItemStack, val fluid: FluidStack) : HTFluidRecipeInput { - override val fluidSize: Int - get() = 1 - - override fun getFluid(index: Int): FluidStack = when (index) { - 0 -> fluid - else -> error("No fluid for index: $index") - } - - override val isFluidEmpty: Boolean - get() = fluid.isEmpty - - override fun asFluidList(): List = listOf(fluid) - - override fun getItem(index: Int): ItemStack = when (index) { - 0 -> firstItem - 1 -> secondItem - else -> error("No item for index: $index") - } - - override fun size(): Int = 2 - } } diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTPlantingRecipe.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTPlantingRecipe.kt index b440b19ad..8421ecd66 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTPlantingRecipe.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTPlantingRecipe.kt @@ -5,14 +5,14 @@ import hiiragi283.lib.recipe.HTSerializableRecipe import hiiragi283.lib.recipe.base.HTItemToDoubleItemRecipe import hiiragi283.lib.recipe.base.HTProgressData import hiiragi283.lib.recipe.ingredient.HTItemIngredient +import hiiragi283.lib.recipe.input.HTRecipeInput import hiiragi283.lib.recipe.result.HTItemResult import net.minecraft.world.item.crafting.RecipeSerializer import net.minecraft.world.item.crafting.RecipeType -import net.minecraft.world.item.crafting.SingleRecipeInput class RTPlantingRecipe(ingredient: HTItemIngredient, result: Nel, progressData: HTProgressData) : HTItemToDoubleItemRecipe.Basic(ingredient, result, progressData), - HTSerializableRecipe { + HTSerializableRecipe { companion object { @JvmField val SERIALIZER: RecipeSerializer = diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTPyrolyzingRecipe.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTPyrolyzingRecipe.kt index 1f5dab5f4..c9067654c 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTPyrolyzingRecipe.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTPyrolyzingRecipe.kt @@ -4,14 +4,14 @@ import hiiragi283.lib.recipe.HTSerializableRecipe import hiiragi283.lib.recipe.base.HTItemToRecipe import hiiragi283.lib.recipe.base.HTProgressData import hiiragi283.lib.recipe.ingredient.HTItemIngredient +import hiiragi283.lib.recipe.input.HTRecipeInput import hiiragi283.lib.recipe.result.HTItemOrFluidResult import net.minecraft.world.item.crafting.RecipeSerializer import net.minecraft.world.item.crafting.RecipeType -import net.minecraft.world.item.crafting.SingleRecipeInput class RTPyrolyzingRecipe(ingredient: HTItemIngredient, result: HTItemOrFluidResult, progressData: HTProgressData) : HTItemToRecipe.BasicItemAndFluid(ingredient, result, progressData), - HTSerializableRecipe { + HTSerializableRecipe { companion object { @JvmField val SERIALIZER: RecipeSerializer = diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTReactingRecipe.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTReactingRecipe.kt index 5033e9f78..70d208095 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTReactingRecipe.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTReactingRecipe.kt @@ -11,7 +11,7 @@ import hiiragi283.lib.recipe.base.HTRecipePredicates import hiiragi283.lib.recipe.ingredient.HTFluidIngredient import hiiragi283.lib.recipe.ingredient.HTItemCatalyst import hiiragi283.lib.recipe.ingredient.testOrEmpty -import hiiragi283.lib.recipe.input.HTFluidRecipeInput +import hiiragi283.lib.recipe.input.HTRecipeInput import hiiragi283.lib.recipe.result.HTItemAndFluidStack import hiiragi283.lib.recipe.result.HTItemOrFluidResult import hiiragi283.lib.serialization.codec.HTCodecs @@ -32,8 +32,8 @@ data class RTReactingRecipe( override val progressData: HTProgressData ) : HTRecipePredicates.ItemAndDoubleFluid, HTRecipeFactories.ItemAndDoubleFluid, - HTProgressRecipe.Simple, - HTSerializableRecipe { + HTProgressRecipe.Simple, + HTSerializableRecipe { companion object { @JvmField val CODEC: MapCodec = HTCodecs.recordMap { instance -> diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTRefiningRecipe.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTRefiningRecipe.kt index 36c7e51bc..9b128667c 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTRefiningRecipe.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTRefiningRecipe.kt @@ -4,14 +4,14 @@ import hiiragi283.lib.recipe.HTSerializableRecipe import hiiragi283.lib.recipe.base.HTFluidToRecipe import hiiragi283.lib.recipe.base.HTProgressData import hiiragi283.lib.recipe.ingredient.HTFluidIngredient -import hiiragi283.lib.recipe.input.HTSingleFluidRecipeInput +import hiiragi283.lib.recipe.input.HTRecipeInput import hiiragi283.lib.recipe.result.HTItemOrFluidResult import net.minecraft.world.item.crafting.RecipeSerializer import net.minecraft.world.item.crafting.RecipeType class RTRefiningRecipe(ingredient: HTFluidIngredient, result: HTItemOrFluidResult, progressData: HTProgressData) : HTFluidToRecipe.BasicItemAndFluid(ingredient, result, progressData), - HTSerializableRecipe { + HTSerializableRecipe { companion object { @JvmField val SERIALIZER: RecipeSerializer = diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTResourceExtractingRecipe.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTResourceExtractingRecipe.kt index abe204113..cc599519a 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTResourceExtractingRecipe.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTResourceExtractingRecipe.kt @@ -2,11 +2,11 @@ package hiiragi283.ragium.api.recipe import com.mojang.serialization.MapCodec import hiiragi283.lib.HTConstants +import hiiragi283.lib.recipe.HTRecipeFactory +import hiiragi283.lib.recipe.HTRecipePredicate import hiiragi283.lib.recipe.HTSerializableRecipe import hiiragi283.lib.recipe.base.HTProgressData import hiiragi283.lib.recipe.base.HTProgressRecipe -import hiiragi283.lib.recipe.base.HTRecipeFactories -import hiiragi283.lib.recipe.base.HTRecipePredicates import hiiragi283.lib.recipe.ingredient.HTBiomeCondition import hiiragi283.lib.recipe.input.HTLocationRecipeInput import hiiragi283.lib.recipe.result.HTFluidResult @@ -22,8 +22,8 @@ class RTResourceExtractingRecipe( val condition: HTBiomeCondition, val result: HTFluidResult, override val progressData: HTProgressData -) : HTRecipePredicates.Located, - HTRecipeFactories.Located, +) : HTRecipePredicate, + HTRecipeFactory, HTProgressRecipe.Simple, HTSerializableRecipe { companion object { @@ -51,9 +51,12 @@ class RTResourceExtractingRecipe( val SERIALIZER: RecipeSerializer = RecipeSerializer(CODEC, STREAM_CODEC) } - override fun test(input: BlockInWorld): Boolean = condition.test(input.level.getBiome(input.pos)) + override fun matches(input: HTLocationRecipeInput): Boolean { + val blockInWorld: BlockInWorld = input.blockInWorld + return condition.test(blockInWorld.level.getBiome(blockInWorld.pos)) + } - override fun apply(input: BlockInWorld): FluidStack = result.create() + override fun produce(input: HTLocationRecipeInput): FluidStack = result.create() override fun getSerializer(): RecipeSerializer = RagiumRecipeSerializers.RESOURCE_EXTRACTING diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTWashingRecipe.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTWashingRecipe.kt index 3af204ec3..04f86b7db 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTWashingRecipe.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTWashingRecipe.kt @@ -9,7 +9,7 @@ import hiiragi283.lib.recipe.base.HTProgressData import hiiragi283.lib.recipe.base.HTProgressRecipe import hiiragi283.lib.recipe.ingredient.HTFluidIngredient import hiiragi283.lib.recipe.ingredient.HTItemIngredient -import hiiragi283.lib.recipe.input.HTItemAndFluidRecipeInput +import hiiragi283.lib.recipe.input.HTRecipeInput import hiiragi283.lib.recipe.result.HTItemResult import hiiragi283.lib.recipe.result.createOrEmpty import hiiragi283.lib.serialization.codec.HTCodecs @@ -30,8 +30,8 @@ data class RTWashingRecipe( val results: Nel, override val progressData: HTProgressData ) : HTItemAndFluidToRecipe>, - HTProgressRecipe.Simple, - HTSerializableRecipe { + HTProgressRecipe.Simple, + HTSerializableRecipe { companion object { @JvmField val CODEC: MapCodec = HTCodecs.recordMap { instance -> diff --git a/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTSingleRecipeCategory.kt b/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTSingleRecipeCategory.kt index f043dfc21..f6485a8e5 100644 --- a/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTSingleRecipeCategory.kt +++ b/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTSingleRecipeCategory.kt @@ -18,7 +18,7 @@ import net.minecraft.world.item.crafting.RecipeType * @author Hiiragi Tsubasa * @since 26.1.6 */ -abstract class HTSingleRecipeCategory>( +abstract class HTSingleRecipeCategory>( recipeType: HTRecipeHolderType, recipeType1: RecipeType<*>, icon: IDrawable, diff --git a/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTSingleToItemAndFluidRecipeCategory.kt b/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTSingleToItemAndFluidRecipeCategory.kt index 9faea0bf2..e76495f6a 100644 --- a/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTSingleToItemAndFluidRecipeCategory.kt +++ b/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTSingleToItemAndFluidRecipeCategory.kt @@ -19,7 +19,7 @@ import net.minecraft.world.item.crafting.RecipeType * @author Hiiragi Tsubasa * @since 26.1.8 */ -abstract class HTSingleToItemAndFluidRecipeCategory>( +abstract class HTSingleToItemAndFluidRecipeCategory>( recipeType: HTRecipeHolderType, recipeType1: RecipeType<*>, icon: IDrawable, diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTBaseMachineBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTBaseMachineBlockEntity.kt index bd16fbb14..c8891b20f 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTBaseMachineBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTBaseMachineBlockEntity.kt @@ -2,6 +2,8 @@ package hiiragi283.ragium.common.block.entity import hiiragi283.lib.gui.widget.HTWidgetHolder import hiiragi283.ragium.api.RagiumConfig +import hiiragi283.ragium.api.machine.HTMachineUpgrade +import hiiragi283.ragium.api.machine.HTMachineUpgradeHelper import hiiragi283.ragium.common.block.HTHorizontalEntityBlock import hiiragi283.ragium.common.block.HTMachineBlock import net.minecraft.core.BlockPos @@ -24,6 +26,16 @@ abstract class HTBaseMachineBlockEntity(type: BlockEntityType<*>, pos: BlockPos, override fun setupMenu(widgetHolder: HTWidgetHolder) {} + /** + * @since 26.1.9 + */ + val combinedUpgrade: HTMachineUpgrade get() = HTMachineUpgradeHelper.getCombinedUpgrade(this.components()) + + /** + * @since 26.1.9 + */ + val customKeys: Set = combinedUpgrade.customKeys + // Ticking // final override fun onUpdateServer(level: ServerLevel, pos: BlockPos, state: BlockState): Boolean { diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTBlenderBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTBlenderBlockEntity.kt index 2de8a56cd..47f996cd6 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTBlenderBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTBlenderBlockEntity.kt @@ -8,7 +8,7 @@ import hiiragi283.lib.recipe.handler.HTFluidInputTank import hiiragi283.lib.recipe.handler.HTItemInputSlot import hiiragi283.lib.recipe.handler.HTOutputSlot import hiiragi283.lib.recipe.handler.HTOutputSlotHelper -import hiiragi283.lib.recipe.input.HTFluidRecipeInput +import hiiragi283.lib.recipe.input.HTRecipeInput import hiiragi283.lib.recipe.lookup.HTRecipeCache import hiiragi283.lib.recipe.result.HTItemAndFluidStack import hiiragi283.lib.transfer.item.HTBasicItemSlot @@ -39,7 +39,7 @@ import net.neoforged.neoforge.transfer.transaction.Transaction class HTBlenderBlockEntity(pos: BlockPos, state: BlockState) : HTProcessorBlockEntity.Energized(RagiumBlockEntityTypes.BLENDER.get(), pos, state) { - private val cache: HTRecipeCache = + private val cache: HTRecipeCache = HTRecipeCache(RagiumRecipeLookups.MIXING) override fun writeValue(output: ValueOutput) { @@ -54,7 +54,7 @@ class HTBlenderBlockEntity(pos: BlockPos, state: BlockState) : override fun initializeVariables(listener: Runnable) { super.initializeVariables(listener) - recipeHandler = object : EnergizedHandler() { + recipeHandler = object : EnergizedHandler() { private val topInputSlot: HTItemInputSlot by lazy { HTItemInputSlot(this@HTBlenderBlockEntity.topInputSlot) } @@ -71,18 +71,21 @@ class HTBlenderBlockEntity(pos: BlockPos, state: BlockState) : HTOutputSlotHelper.forFluid(this@HTBlenderBlockEntity.outputTank) } - override fun createInput(): HTFluidRecipeInput = RTMixingRecipe.Input( - topInputSlot.getStoredInput(), - downInputSlot.getStoredInput(), - inputTank.getStoredInput() + override fun createInput(): HTRecipeInput = HTRecipeInput( + inputTank.getStoredInput(), + listOf( + topInputSlot.getStoredInput(), + downInputSlot.getStoredInput() + ), + customKeys ) - override fun findRecipe(level: ServerLevel, input: HTFluidRecipeInput): RTMixingRecipe? = + override fun findRecipe(level: ServerLevel, input: HTRecipeInput): RTMixingRecipe? = cache.findFirstRecipe(input, level) override fun canComplete( recipe: RTMixingRecipe, - input: HTFluidRecipeInput, + input: HTRecipeInput, output: HTItemAndFluidStack ): Boolean = useTransaction { transaction: Transaction -> val (first: ItemInstance, second: ItemInstance, third: FluidInstance) = recipe.getMatchingStack(input) @@ -96,7 +99,7 @@ class HTBlenderBlockEntity(pos: BlockPos, state: BlockState) : } } - override fun onComplete(recipe: RTMixingRecipe, input: HTFluidRecipeInput, output: HTItemAndFluidStack) { + override fun onComplete(recipe: RTMixingRecipe, input: HTRecipeInput, output: HTItemAndFluidStack) { useTransaction { transaction: Transaction -> val (first: ItemInstance, second: ItemInstance, third: FluidInstance) = recipe.getMatchingStack( input diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTElectrolyzerBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTElectrolyzerBlockEntity.kt index d5a663d99..8170d2808 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTElectrolyzerBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTElectrolyzerBlockEntity.kt @@ -7,7 +7,7 @@ import hiiragi283.lib.gui.widget.HTWidgetHolder import hiiragi283.lib.recipe.handler.HTFluidInputTank import hiiragi283.lib.recipe.handler.HTOutputSlot import hiiragi283.lib.recipe.handler.HTOutputSlotHelper -import hiiragi283.lib.recipe.input.HTSingleFluidRecipeInput +import hiiragi283.lib.recipe.input.HTRecipeInput import hiiragi283.lib.recipe.lookup.HTRecipeCache import hiiragi283.lib.transfer.fluid.HTBasicFluidTank import hiiragi283.lib.transfer.useTransaction @@ -35,7 +35,7 @@ import net.neoforged.neoforge.transfer.transaction.Transaction class HTElectrolyzerBlockEntity(pos: BlockPos, state: BlockState) : HTProcessorBlockEntity.Energized(RagiumBlockEntityTypes.ELECTROLYZER.get(), pos, state) { - private val cache: HTRecipeCache = + private val cache: HTRecipeCache = HTRecipeCache(RagiumRecipeLookups.ELECTROLYZING) override fun writeValue(output: ValueOutput) { @@ -51,8 +51,8 @@ class HTElectrolyzerBlockEntity(pos: BlockPos, state: BlockState) : override fun initializeVariables(listener: Runnable) { super.initializeVariables(listener) recipeHandler = object : EnergizedHandler< - HTSingleFluidRecipeInput, - RTElectrolyzingRecipe.ElectrolyzedResult, + HTRecipeInput, + RTElectrolyzingRecipe.Result, RTElectrolyzingRecipe >() { private val machine: HTElectrolyzerBlockEntity = this@HTElectrolyzerBlockEntity @@ -69,15 +69,15 @@ class HTElectrolyzerBlockEntity(pos: BlockPos, state: BlockState) : ?.tank ?.let(HTOutputSlotHelper::forFluid) - override fun createInput(): HTSingleFluidRecipeInput = HTSingleFluidRecipeInput(inputTank.getStoredInput()) + override fun createInput(): HTRecipeInput = HTRecipeInput(inputTank.getStoredInput(), customKeys) - override fun findRecipe(level: ServerLevel, input: HTSingleFluidRecipeInput): RTElectrolyzingRecipe? = + override fun findRecipe(level: ServerLevel, input: HTRecipeInput): RTElectrolyzingRecipe? = cache.findFirstRecipe(input, level) override fun canComplete( recipe: RTElectrolyzingRecipe, - input: HTSingleFluidRecipeInput, - output: RTElectrolyzingRecipe.ElectrolyzedResult + input: HTRecipeInput, + output: RTElectrolyzingRecipe.Result ): Boolean = rightOutputTank != null && leftOutputTank != null && useTransaction { transaction: Transaction -> val inputConsume: FluidInstance = recipe.getMatchingStack(input) @@ -97,8 +97,8 @@ class HTElectrolyzerBlockEntity(pos: BlockPos, state: BlockState) : override fun onComplete( recipe: RTElectrolyzingRecipe, - input: HTSingleFluidRecipeInput, - output: RTElectrolyzingRecipe.ElectrolyzedResult + input: HTRecipeInput, + output: RTElectrolyzingRecipe.Result ) { useTransaction { transaction: Transaction -> val inputConsume: FluidInstance = recipe.getMatchingStack(input) diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTFreezerBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTFreezerBlockEntity.kt index 2d08bc826..bb0e768f8 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTFreezerBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTFreezerBlockEntity.kt @@ -8,7 +8,7 @@ import hiiragi283.lib.recipe.handler.HTFluidInputTank import hiiragi283.lib.recipe.handler.HTItemInputSlot import hiiragi283.lib.recipe.handler.HTOutputSlot import hiiragi283.lib.recipe.handler.HTOutputSlotHelper -import hiiragi283.lib.recipe.input.HTItemAndFluidRecipeInput +import hiiragi283.lib.recipe.input.HTRecipeInput import hiiragi283.lib.recipe.lookup.HTRecipeCache import hiiragi283.lib.transfer.item.HTBasicItemSlot import hiiragi283.lib.transfer.useTransaction @@ -35,7 +35,7 @@ import net.neoforged.neoforge.transfer.transaction.Transaction class HTFreezerBlockEntity(pos: BlockPos, state: BlockState) : HTProcessorBlockEntity.Energized(RagiumBlockEntityTypes.FREEZER.get(), pos, state) { - private val cache: HTRecipeCache = + private val cache: HTRecipeCache = HTRecipeCache(RagiumRecipeLookups.FREEZING) override fun writeValue(output: ValueOutput) { @@ -50,7 +50,7 @@ class HTFreezerBlockEntity(pos: BlockPos, state: BlockState) : override fun initializeVariables(listener: Runnable) { super.initializeVariables(listener) - recipeHandler = object : EnergizedHandler() { + recipeHandler = object : EnergizedHandler() { private val inputTank: HTFluidInputTank by lazy { HTFluidInputTank(this@HTFreezerBlockEntity.inputTank) } private val catalystSlot: HTItemInputSlot by lazy { HTItemInputSlot(this@HTFreezerBlockEntity.catalystSlot) @@ -59,25 +59,22 @@ class HTFreezerBlockEntity(pos: BlockPos, state: BlockState) : HTOutputSlotHelper.forItem(this@HTFreezerBlockEntity.outputSlot) } - override fun createInput(): HTItemAndFluidRecipeInput = - HTItemAndFluidRecipeInput(catalystSlot.getStoredInput(), inputTank.getStoredInput()) + override fun createInput(): HTRecipeInput = + HTRecipeInput(catalystSlot.getStoredInput(), inputTank.getStoredInput(), customKeys) - override fun findRecipe(level: ServerLevel, input: HTItemAndFluidRecipeInput): RTFreezingRecipe? = + override fun findRecipe(level: ServerLevel, input: HTRecipeInput): RTFreezingRecipe? = cache.findFirstRecipe(input, level) - override fun canComplete( - recipe: RTFreezingRecipe, - input: HTItemAndFluidRecipeInput, - output: ItemStack - ): Boolean = useTransaction { transaction: Transaction -> - val (_, inputConsume: FluidInstance) = recipe.getMatchingStack(input) - when { - inputTank.use(inputConsume, transaction).failed -> false - else -> outputSlot.take(output, transaction) == HTOutputSlot.TakeResult.FULL + override fun canComplete(recipe: RTFreezingRecipe, input: HTRecipeInput, output: ItemStack): Boolean = + useTransaction { transaction: Transaction -> + val (_, inputConsume: FluidInstance) = recipe.getMatchingStack(input) + when { + inputTank.use(inputConsume, transaction).failed -> false + else -> outputSlot.take(output, transaction) == HTOutputSlot.TakeResult.FULL + } } - } - override fun onComplete(recipe: RTFreezingRecipe, input: HTItemAndFluidRecipeInput, output: ItemStack) { + override fun onComplete(recipe: RTFreezingRecipe, input: HTRecipeInput, output: ItemStack) { useTransaction { transaction: Transaction -> val (_, fluidInput: FluidInstance) = recipe.getMatchingStack(input) inputTank.use(fluidInput, transaction) diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTMelterBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTMelterBlockEntity.kt index 4ada9e081..fb51e8585 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTMelterBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTMelterBlockEntity.kt @@ -8,6 +8,7 @@ import hiiragi283.lib.recipe.base.HTItemToFluidRecipe import hiiragi283.lib.recipe.handler.HTItemInputSlot import hiiragi283.lib.recipe.handler.HTOutputSlot import hiiragi283.lib.recipe.handler.HTOutputSlotHelper +import hiiragi283.lib.recipe.input.HTRecipeInput import hiiragi283.lib.recipe.lookup.HTRecipeCache import hiiragi283.lib.transfer.item.HTBasicItemSlot import hiiragi283.lib.transfer.useTransaction @@ -25,7 +26,6 @@ import net.minecraft.core.BlockPos import net.minecraft.server.level.ServerLevel import net.minecraft.sounds.SoundEvents import net.minecraft.world.item.ItemInstance -import net.minecraft.world.item.crafting.SingleRecipeInput import net.minecraft.world.level.block.state.BlockState import net.minecraft.world.level.storage.ValueInput import net.minecraft.world.level.storage.ValueOutput @@ -34,7 +34,7 @@ import net.neoforged.neoforge.transfer.transaction.Transaction class HTMelterBlockEntity(pos: BlockPos, state: BlockState) : HTProcessorBlockEntity.Energized(RagiumBlockEntityTypes.MELTER.get(), pos, state) { - private val cache: HTRecipeCache = + private val cache: HTRecipeCache = HTRecipeCache(RagiumRecipeLookups.MELTING) override fun writeValue(output: ValueOutput) { @@ -49,30 +49,27 @@ class HTMelterBlockEntity(pos: BlockPos, state: BlockState) : override fun initializeVariables(listener: Runnable) { super.initializeVariables(listener) - recipeHandler = object : EnergizedHandler() { + recipeHandler = object : EnergizedHandler() { private val inputSlot: HTItemInputSlot by lazy { HTItemInputSlot(this@HTMelterBlockEntity.inputSlot) } private val outputSlot: HTOutputSlot by lazy { HTOutputSlotHelper.forFluid(this@HTMelterBlockEntity.outputTank) } - override fun createInput(): SingleRecipeInput = SingleRecipeInput(inputSlot.getStoredInput()) + override fun createInput(): HTRecipeInput = HTRecipeInput(inputSlot.getStoredInput(), customKeys) - override fun findRecipe(level: ServerLevel, input: SingleRecipeInput): HTItemToFluidRecipe? = + override fun findRecipe(level: ServerLevel, input: HTRecipeInput): HTItemToFluidRecipe? = cache.findFirstRecipe(input, level) - override fun canComplete( - recipe: HTItemToFluidRecipe, - input: SingleRecipeInput, - output: FluidStack - ): Boolean = useTransaction { transaction: Transaction -> - val inputConsume: ItemInstance = recipe.getMatchingStack(input) - when { - inputSlot.use(inputConsume, transaction).failed -> false - else -> outputSlot.take(output, transaction) == HTOutputSlot.TakeResult.FULL + override fun canComplete(recipe: HTItemToFluidRecipe, input: HTRecipeInput, output: FluidStack): Boolean = + useTransaction { transaction: Transaction -> + val inputConsume: ItemInstance = recipe.getMatchingStack(input) + when { + inputSlot.use(inputConsume, transaction).failed -> false + else -> outputSlot.take(output, transaction) == HTOutputSlot.TakeResult.FULL + } } - } - override fun onComplete(recipe: HTItemToFluidRecipe, input: SingleRecipeInput, output: FluidStack) { + override fun onComplete(recipe: HTItemToFluidRecipe, input: HTRecipeInput, output: FluidStack) { useTransaction { transaction: Transaction -> inputSlot.use(recipe.getMatchingStack(input), transaction) outputSlot.take(output, transaction) diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTPyrolyzerBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTPyrolyzerBlockEntity.kt index 2cf940634..70bea5c6a 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTPyrolyzerBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTPyrolyzerBlockEntity.kt @@ -8,6 +8,7 @@ import hiiragi283.lib.recipe.base.HTItemToItemAndFluidRecipe import hiiragi283.lib.recipe.handler.HTItemInputSlot import hiiragi283.lib.recipe.handler.HTOutputSlot import hiiragi283.lib.recipe.handler.HTOutputSlotHelper +import hiiragi283.lib.recipe.input.HTRecipeInput import hiiragi283.lib.recipe.lookup.HTRecipeCache import hiiragi283.lib.recipe.result.HTItemAndFluidStack import hiiragi283.lib.transfer.item.HTBasicItemSlot @@ -27,7 +28,6 @@ import net.minecraft.server.level.ServerLevel import net.minecraft.sounds.SoundEvents import net.minecraft.world.item.ItemInstance import net.minecraft.world.item.ItemStack -import net.minecraft.world.item.crafting.SingleRecipeInput import net.minecraft.world.level.block.state.BlockState import net.minecraft.world.level.storage.ValueInput import net.minecraft.world.level.storage.ValueOutput @@ -36,7 +36,7 @@ import net.neoforged.neoforge.transfer.transaction.Transaction class HTPyrolyzerBlockEntity(pos: BlockPos, state: BlockState) : HTProcessorBlockEntity.Energized(RagiumBlockEntityTypes.PYROLYZER.get(), pos, state) { - private val cache: HTRecipeCache = + private val cache: HTRecipeCache = HTRecipeCache(RagiumRecipeLookups.PYROLYZING) override fun writeValue(output: ValueOutput) { @@ -51,11 +51,7 @@ class HTPyrolyzerBlockEntity(pos: BlockPos, state: BlockState) : override fun initializeVariables(listener: Runnable) { super.initializeVariables(listener) - recipeHandler = object : EnergizedHandler< - SingleRecipeInput, - HTItemAndFluidStack, - HTItemToItemAndFluidRecipe - >() { + recipeHandler = object : EnergizedHandler() { private val inputSlot: HTItemInputSlot by lazy { HTItemInputSlot(this@HTPyrolyzerBlockEntity.inputSlot) } private val outputSlot: HTOutputSlot by lazy { HTOutputSlotHelper.forItem(this@HTPyrolyzerBlockEntity.outputSlot) @@ -64,14 +60,14 @@ class HTPyrolyzerBlockEntity(pos: BlockPos, state: BlockState) : HTOutputSlotHelper.forFluid(this@HTPyrolyzerBlockEntity.outputTank) } - override fun createInput(): SingleRecipeInput = SingleRecipeInput(inputSlot.getStoredInput()) + override fun createInput(): HTRecipeInput = HTRecipeInput(inputSlot.getStoredInput(), customKeys) - override fun findRecipe(level: ServerLevel, input: SingleRecipeInput): HTItemToItemAndFluidRecipe? = + override fun findRecipe(level: ServerLevel, input: HTRecipeInput): HTItemToItemAndFluidRecipe? = cache.findFirstRecipe(input, level) override fun canComplete( recipe: HTItemToItemAndFluidRecipe, - input: SingleRecipeInput, + input: HTRecipeInput, output: HTItemAndFluidStack ): Boolean = useTransaction { transaction: Transaction -> val inputConsume: ItemInstance = recipe.getMatchingStack(input) @@ -85,7 +81,7 @@ class HTPyrolyzerBlockEntity(pos: BlockPos, state: BlockState) : override fun onComplete( recipe: HTItemToItemAndFluidRecipe, - input: SingleRecipeInput, + input: HTRecipeInput, output: HTItemAndFluidStack ) { useTransaction { transaction: Transaction -> diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTRefineryBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTRefineryBlockEntity.kt index 9f91faaf8..4bea8932f 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTRefineryBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTRefineryBlockEntity.kt @@ -8,7 +8,7 @@ import hiiragi283.lib.recipe.base.HTFluidToItemAndFluidRecipe import hiiragi283.lib.recipe.handler.HTFluidInputTank import hiiragi283.lib.recipe.handler.HTOutputSlot import hiiragi283.lib.recipe.handler.HTOutputSlotHelper -import hiiragi283.lib.recipe.input.HTSingleFluidRecipeInput +import hiiragi283.lib.recipe.input.HTRecipeInput import hiiragi283.lib.recipe.lookup.HTRecipeCache import hiiragi283.lib.recipe.result.HTItemAndFluidStack import hiiragi283.lib.transfer.item.HTBasicItemSlot @@ -36,7 +36,7 @@ import net.neoforged.neoforge.transfer.transaction.Transaction class HTRefineryBlockEntity(pos: BlockPos, state: BlockState) : HTProcessorBlockEntity.Energized(RagiumBlockEntityTypes.REFINERY.get(), pos, state) { - private val cache: HTRecipeCache = + private val cache: HTRecipeCache = HTRecipeCache(RagiumRecipeLookups.REFINING) override fun writeValue(output: ValueOutput) { @@ -52,7 +52,7 @@ class HTRefineryBlockEntity(pos: BlockPos, state: BlockState) : override fun initializeVariables(listener: Runnable) { super.initializeVariables(listener) recipeHandler = object : EnergizedHandler< - HTSingleFluidRecipeInput, + HTRecipeInput, HTItemAndFluidStack, HTFluidToItemAndFluidRecipe >() { @@ -64,14 +64,14 @@ class HTRefineryBlockEntity(pos: BlockPos, state: BlockState) : HTOutputSlotHelper.forFluid(this@HTRefineryBlockEntity.outputTank) } - override fun createInput(): HTSingleFluidRecipeInput = HTSingleFluidRecipeInput(inputTank.getStoredInput()) + override fun createInput(): HTRecipeInput = HTRecipeInput(inputTank.getStoredInput(), customKeys) - override fun findRecipe(level: ServerLevel, input: HTSingleFluidRecipeInput): HTFluidToItemAndFluidRecipe? = + override fun findRecipe(level: ServerLevel, input: HTRecipeInput): HTFluidToItemAndFluidRecipe? = cache.findFirstRecipe(input, level) override fun canComplete( recipe: HTFluidToItemAndFluidRecipe, - input: HTSingleFluidRecipeInput, + input: HTRecipeInput, output: HTItemAndFluidStack ): Boolean = useTransaction { transaction: Transaction -> val inputConsume: FluidInstance = recipe.getMatchingStack(input) @@ -85,7 +85,7 @@ class HTRefineryBlockEntity(pos: BlockPos, state: BlockState) : override fun onComplete( recipe: HTFluidToItemAndFluidRecipe, - input: HTSingleFluidRecipeInput, + input: HTRecipeInput, output: HTItemAndFluidStack ) { useTransaction { transaction: Transaction -> diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTSmelterBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTSmelterBlockEntity.kt index af41c6305..3233d714c 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTSmelterBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTSmelterBlockEntity.kt @@ -11,6 +11,8 @@ import hiiragi283.lib.recipe.handler.HTOutputSlot import hiiragi283.lib.recipe.handler.HTOutputSlotHelper import hiiragi283.lib.recipe.ingredient.HTIngredientHelper import hiiragi283.lib.recipe.ingredient.HTItemIngredient +import hiiragi283.lib.recipe.input.HTRecipeInput +import hiiragi283.lib.recipe.input.getItemOrNull import hiiragi283.lib.recipe.lookup.HTVanillaRecipeCache import hiiragi283.lib.transfer.item.HTBasicItemSlot import hiiragi283.lib.transfer.useTransaction @@ -62,22 +64,23 @@ class HTSmelterBlockEntity(pos: BlockPos, state: BlockState) : override fun initializeVariables(listener: Runnable) { super.initializeVariables(listener) - recipeHandler = object : EnergizedHandler() { + recipeHandler = object : EnergizedHandler() { private val inputSlot: HTItemInputSlot by lazy { HTItemInputSlot(this@HTSmelterBlockEntity.inputSlot) } private val outputSlot: HTOutputSlot by lazy { HTOutputSlotHelper.forItem(this@HTSmelterBlockEntity.outputSlot) } - override fun createInput(): SingleRecipeInput = SingleRecipeInput(inputSlot.getStoredInput()) + override fun createInput(): HTRecipeInput = HTRecipeInput(inputSlot.getStoredInput(), customKeys) - override fun findRecipe(level: ServerLevel, input: SingleRecipeInput): HTItemToItemRecipe? { + override fun findRecipe(level: ServerLevel, input: HTRecipeInput): HTItemToItemRecipe? { val stackIn: ItemStack = typeSlot.getStackCopy() val cache: HTVanillaRecipeCache = when { stackIn.`is`(Items.BLAST_FURNACE) -> blastingCache stackIn.`is`(Items.SMOKER) -> smokingCache else -> smeltingCache } - return cache.findFirstHolder(input, level)?.value()?.let(::wrapRecipe) + val input1: SingleRecipeInput = input.getItemOrNull(0)?.let(::SingleRecipeInput) ?: return null + return cache.findFirstHolder(input1, level)?.value()?.let(::wrapRecipe) } private fun wrapRecipe(recipe: AbstractCookingRecipe): HTItemToItemRecipe = object : HTItemToItemRecipe { @@ -90,11 +93,11 @@ class HTSmelterBlockEntity(pos: BlockPos, state: BlockState) : override fun getMatchingStack(input: ItemInstance): ItemInstance = ingredient.getMatchingStack(input) - override fun getProgressData(input: SingleRecipeInput): HTProgressData = + override fun getProgressData(input: HTRecipeInput): HTProgressData = HTProgressData.time(recipe.cookingTime()) } - override fun canComplete(recipe: HTItemToItemRecipe, input: SingleRecipeInput, output: ItemStack): Boolean = + override fun canComplete(recipe: HTItemToItemRecipe, input: HTRecipeInput, output: ItemStack): Boolean = useTransaction { transaction: Transaction -> val inputConsume: ItemInstance = recipe.getMatchingStack(input) when { @@ -103,7 +106,7 @@ class HTSmelterBlockEntity(pos: BlockPos, state: BlockState) : } } - override fun onComplete(recipe: HTItemToItemRecipe, input: SingleRecipeInput, output: ItemStack) { + override fun onComplete(recipe: HTItemToItemRecipe, input: HTRecipeInput, output: ItemStack) { useTransaction { transaction: Transaction -> inputSlot.use(recipe.getMatchingStack(input), transaction) outputSlot.take(output, transaction) diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTDoubleItemToItemBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTDoubleItemToItemBlockEntity.kt index 430844698..6918ab6c6 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTDoubleItemToItemBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTDoubleItemToItemBlockEntity.kt @@ -8,7 +8,7 @@ import hiiragi283.lib.recipe.base.HTDoubleItemToItemRecipe import hiiragi283.lib.recipe.handler.HTItemInputSlot import hiiragi283.lib.recipe.handler.HTOutputSlot import hiiragi283.lib.recipe.handler.HTOutputSlotHelper -import hiiragi283.lib.recipe.input.HTItemListRecipeInput +import hiiragi283.lib.recipe.input.HTRecipeInput import hiiragi283.lib.recipe.lookup.HTRecipeCache import hiiragi283.lib.recipe.lookup.HTRecipeLookup import hiiragi283.lib.sounds.HTSoundInstance @@ -22,7 +22,6 @@ import net.minecraft.core.BlockPos import net.minecraft.server.level.ServerLevel import net.minecraft.world.item.ItemInstance import net.minecraft.world.item.ItemStack -import net.minecraft.world.item.crafting.RecipeInput import net.minecraft.world.level.block.entity.BlockEntityType import net.minecraft.world.level.block.state.BlockState import net.minecraft.world.level.storage.ValueInput @@ -31,7 +30,7 @@ import net.neoforged.neoforge.transfer.transaction.Transaction abstract class HTDoubleItemToItemBlockEntity( type: BlockEntityType<*>, - private val cache: HTRecipeCache, + private val cache: HTRecipeCache, pos: BlockPos, state: BlockState ) : HTProcessorBlockEntity.Energized(type, pos, state) { @@ -54,7 +53,7 @@ abstract class HTDoubleItemToItemBlockEntity( override fun initializeVariables(listener: Runnable) { super.initializeVariables(listener) - recipeHandler = object : EnergizedHandler() { + recipeHandler = object : EnergizedHandler() { private val primarySlot: HTItemInputSlot by lazy { HTItemInputSlot(this@HTDoubleItemToItemBlockEntity.primarySlot) } @@ -65,13 +64,20 @@ abstract class HTDoubleItemToItemBlockEntity( HTOutputSlotHelper.forItem(this@HTDoubleItemToItemBlockEntity.outputSlot) } - override fun createInput(): RecipeInput = - HTItemListRecipeInput(primarySlot.getStoredInput(), secondarySlot.getStoredInput()) + override fun createInput(): HTRecipeInput = HTRecipeInput( + listOf(primarySlot.getStoredInput(), secondarySlot.getStoredInput()), + listOf(), + customKeys + ) - override fun findRecipe(level: ServerLevel, input: RecipeInput): HTDoubleItemToItemRecipe? = + override fun findRecipe(level: ServerLevel, input: HTRecipeInput): HTDoubleItemToItemRecipe? = cache.findFirstRecipe(input, level) - override fun canComplete(recipe: HTDoubleItemToItemRecipe, input: RecipeInput, output: ItemStack): Boolean { + override fun canComplete( + recipe: HTDoubleItemToItemRecipe, + input: HTRecipeInput, + output: ItemStack + ): Boolean { val (firstConsume: ItemInstance, secondConsume: ItemInstance) = recipe.getMatchingStack(input) return useTransaction { transaction: Transaction -> when { @@ -82,7 +88,7 @@ abstract class HTDoubleItemToItemBlockEntity( } } - override fun onComplete(recipe: HTDoubleItemToItemRecipe, input: RecipeInput, output: ItemStack) { + override fun onComplete(recipe: HTDoubleItemToItemRecipe, input: HTRecipeInput, output: ItemStack) { val (firstConsume: ItemInstance, secondConsume: ItemInstance) = recipe.getMatchingStack(input) useTransaction { transaction: Transaction -> primarySlot.use(firstConsume, transaction) diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemAndFluidToFluidBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemAndFluidToFluidBlockEntity.kt index 801929805..485737159 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemAndFluidToFluidBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemAndFluidToFluidBlockEntity.kt @@ -9,7 +9,7 @@ import hiiragi283.lib.recipe.handler.HTFluidInputTank import hiiragi283.lib.recipe.handler.HTItemInputSlot import hiiragi283.lib.recipe.handler.HTOutputSlot import hiiragi283.lib.recipe.handler.HTOutputSlotHelper -import hiiragi283.lib.recipe.input.HTItemAndFluidRecipeInput +import hiiragi283.lib.recipe.input.HTRecipeInput import hiiragi283.lib.recipe.lookup.HTRecipeCache import hiiragi283.lib.recipe.lookup.HTRecipeLookup import hiiragi283.lib.sounds.HTSoundInstance @@ -35,7 +35,7 @@ import net.neoforged.neoforge.transfer.transaction.Transaction abstract class HTItemAndFluidToFluidBlockEntity( type: BlockEntityType<*>, - private val cache: HTRecipeCache, + private val cache: HTRecipeCache, pos: BlockPos, state: BlockState ) : HTProcessorBlockEntity.Energized(type, pos, state) { @@ -59,7 +59,7 @@ abstract class HTItemAndFluidToFluidBlockEntity( override fun initializeVariables(listener: Runnable) { super.initializeVariables(listener) recipeHandler = - object : EnergizedHandler() { + object : EnergizedHandler() { private val inputTank: HTFluidInputTank by lazy { HTFluidInputTank(this@HTItemAndFluidToFluidBlockEntity.inputTank) } @@ -70,17 +70,15 @@ abstract class HTItemAndFluidToFluidBlockEntity( HTOutputSlotHelper.forFluid(this@HTItemAndFluidToFluidBlockEntity.outputTank) } - override fun createInput(): HTItemAndFluidRecipeInput = - HTItemAndFluidRecipeInput(inputSlot.getStoredInput(), inputTank.getStoredInput()) + override fun createInput(): HTRecipeInput = + HTRecipeInput(inputSlot.getStoredInput(), inputTank.getStoredInput(), customKeys) - override fun findRecipe( - level: ServerLevel, - input: HTItemAndFluidRecipeInput - ): HTItemAndFluidToFluidRecipe? = cache.findFirstRecipe(input, level) + override fun findRecipe(level: ServerLevel, input: HTRecipeInput): HTItemAndFluidToFluidRecipe? = + cache.findFirstRecipe(input, level) override fun canComplete( recipe: HTItemAndFluidToFluidRecipe, - input: HTItemAndFluidRecipeInput, + input: HTRecipeInput, output: FluidStack ): Boolean = useTransaction { transaction: Transaction -> val (itemInput: ItemInstance, fluidInput: FluidInstance) = recipe.getMatchingStack(input) @@ -91,11 +89,7 @@ abstract class HTItemAndFluidToFluidBlockEntity( } } - override fun onComplete( - recipe: HTItemAndFluidToFluidRecipe, - input: HTItemAndFluidRecipeInput, - output: FluidStack - ) { + override fun onComplete(recipe: HTItemAndFluidToFluidRecipe, input: HTRecipeInput, output: FluidStack) { useTransaction { transaction: Transaction -> val (itemInput: ItemInstance, fluidInput: FluidInstance) = recipe.getMatchingStack(input) inputSlot.use(itemInput, transaction) diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemAndFluidToItemBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemAndFluidToItemBlockEntity.kt index 361b34d33..5472ef965 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemAndFluidToItemBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemAndFluidToItemBlockEntity.kt @@ -9,7 +9,7 @@ import hiiragi283.lib.recipe.handler.HTFluidInputTank import hiiragi283.lib.recipe.handler.HTItemInputSlot import hiiragi283.lib.recipe.handler.HTOutputSlot import hiiragi283.lib.recipe.handler.HTOutputSlotHelper -import hiiragi283.lib.recipe.input.HTItemAndFluidRecipeInput +import hiiragi283.lib.recipe.input.HTRecipeInput import hiiragi283.lib.recipe.lookup.HTRecipeCache import hiiragi283.lib.recipe.lookup.HTRecipeLookup import hiiragi283.lib.sounds.HTSoundInstance @@ -35,7 +35,7 @@ import net.neoforged.neoforge.transfer.transaction.Transaction abstract class HTItemAndFluidToItemBlockEntity( type: BlockEntityType<*>, - private val cache: HTRecipeCache, + private val cache: HTRecipeCache, pos: BlockPos, state: BlockState ) : HTProcessorBlockEntity.Energized(type, pos, state) { @@ -58,7 +58,7 @@ abstract class HTItemAndFluidToItemBlockEntity( override fun initializeVariables(listener: Runnable) { super.initializeVariables(listener) - recipeHandler = object : EnergizedHandler() { + recipeHandler = object : EnergizedHandler() { private val inputTank: HTFluidInputTank by lazy { HTFluidInputTank(this@HTItemAndFluidToItemBlockEntity.inputTank) } @@ -69,15 +69,15 @@ abstract class HTItemAndFluidToItemBlockEntity( HTOutputSlotHelper.forItem(this@HTItemAndFluidToItemBlockEntity.outputSlot) } - override fun createInput(): HTItemAndFluidRecipeInput = - HTItemAndFluidRecipeInput(inputSlot.getStoredInput(), inputTank.getStoredInput()) + override fun createInput(): HTRecipeInput = + HTRecipeInput(inputSlot.getStoredInput(), inputTank.getStoredInput(), customKeys) - override fun findRecipe(level: ServerLevel, input: HTItemAndFluidRecipeInput): HTItemAndFluidToItemRecipe? = + override fun findRecipe(level: ServerLevel, input: HTRecipeInput): HTItemAndFluidToItemRecipe? = cache.findFirstRecipe(input, level) override fun canComplete( recipe: HTItemAndFluidToItemRecipe, - input: HTItemAndFluidRecipeInput, + input: HTRecipeInput, output: ItemStack ): Boolean = useTransaction { transaction: Transaction -> val (itemInput: ItemInstance, fluidInput: FluidInstance) = recipe.getMatchingStack(input) @@ -88,11 +88,7 @@ abstract class HTItemAndFluidToItemBlockEntity( } } - override fun onComplete( - recipe: HTItemAndFluidToItemRecipe, - input: HTItemAndFluidRecipeInput, - output: ItemStack - ) { + override fun onComplete(recipe: HTItemAndFluidToItemRecipe, input: HTRecipeInput, output: ItemStack) { useTransaction { transaction: Transaction -> val (itemInput: ItemInstance, fluidInput: FluidInstance) = recipe.getMatchingStack(input) inputSlot.use(itemInput, transaction) diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemToDoubleItemBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemToDoubleItemBlockEntity.kt index f1567babe..02828d441 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemToDoubleItemBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemToDoubleItemBlockEntity.kt @@ -8,6 +8,7 @@ import hiiragi283.lib.recipe.base.HTItemToDoubleItemRecipe import hiiragi283.lib.recipe.handler.HTItemInputSlot import hiiragi283.lib.recipe.handler.HTOutputSlot import hiiragi283.lib.recipe.handler.HTOutputSlotHelper +import hiiragi283.lib.recipe.input.HTRecipeInput import hiiragi283.lib.recipe.lookup.HTRecipeCache import hiiragi283.lib.recipe.lookup.HTRecipeLookup import hiiragi283.lib.sounds.HTSoundInstance @@ -21,7 +22,6 @@ import net.minecraft.core.BlockPos import net.minecraft.server.level.ServerLevel import net.minecraft.world.item.ItemInstance import net.minecraft.world.item.ItemStack -import net.minecraft.world.item.crafting.SingleRecipeInput import net.minecraft.world.level.block.entity.BlockEntityType import net.minecraft.world.level.block.state.BlockState import net.minecraft.world.level.storage.ValueInput @@ -30,7 +30,7 @@ import net.neoforged.neoforge.transfer.transaction.Transaction abstract class HTItemToDoubleItemBlockEntity( type: BlockEntityType<*>, - private val cache: HTRecipeCache, + private val cache: HTRecipeCache, pos: BlockPos, state: BlockState ) : HTProcessorBlockEntity.Energized(type, pos, state) { @@ -54,7 +54,7 @@ abstract class HTItemToDoubleItemBlockEntity( override fun initializeVariables(listener: Runnable) { super.initializeVariables(listener) recipeHandler = - object : EnergizedHandler, HTItemToDoubleItemRecipe>() { + object : EnergizedHandler, HTItemToDoubleItemRecipe>() { private val inputSlot: HTItemInputSlot by lazy { HTItemInputSlot(this@HTItemToDoubleItemBlockEntity.inputSlot) } @@ -65,14 +65,14 @@ abstract class HTItemToDoubleItemBlockEntity( HTOutputSlotHelper.forItem(this@HTItemToDoubleItemBlockEntity.secondarySlot) } - override fun createInput(): SingleRecipeInput = SingleRecipeInput(inputSlot.getStoredInput()) + override fun createInput(): HTRecipeInput = HTRecipeInput(inputSlot.getStoredInput(), customKeys) - override fun findRecipe(level: ServerLevel, input: SingleRecipeInput): HTItemToDoubleItemRecipe? = + override fun findRecipe(level: ServerLevel, input: HTRecipeInput): HTItemToDoubleItemRecipe? = cache.findFirstRecipe(input, level) override fun canComplete( recipe: HTItemToDoubleItemRecipe, - input: SingleRecipeInput, + input: HTRecipeInput, output: Pair ): Boolean = useTransaction { transaction: Transaction -> val inputConsume: ItemInstance = recipe.getMatchingStack(input) @@ -85,7 +85,7 @@ abstract class HTItemToDoubleItemBlockEntity( override fun onComplete( recipe: HTItemToDoubleItemRecipe, - input: SingleRecipeInput, + input: HTRecipeInput, output: Pair ) { useTransaction { transaction: Transaction -> diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemToItemBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemToItemBlockEntity.kt index 3046f931f..cd11962ce 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemToItemBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemToItemBlockEntity.kt @@ -8,6 +8,7 @@ import hiiragi283.lib.recipe.base.HTItemToItemRecipe import hiiragi283.lib.recipe.handler.HTItemInputSlot import hiiragi283.lib.recipe.handler.HTOutputSlot import hiiragi283.lib.recipe.handler.HTOutputSlotHelper +import hiiragi283.lib.recipe.input.HTRecipeInput import hiiragi283.lib.recipe.lookup.HTRecipeCache import hiiragi283.lib.recipe.lookup.HTRecipeLookup import hiiragi283.lib.sounds.HTSoundInstance @@ -21,7 +22,6 @@ import net.minecraft.core.BlockPos import net.minecraft.server.level.ServerLevel import net.minecraft.world.item.ItemInstance import net.minecraft.world.item.ItemStack -import net.minecraft.world.item.crafting.SingleRecipeInput import net.minecraft.world.level.block.entity.BlockEntityType import net.minecraft.world.level.block.state.BlockState import net.minecraft.world.level.storage.ValueInput @@ -30,7 +30,7 @@ import net.neoforged.neoforge.transfer.transaction.Transaction abstract class HTItemToItemBlockEntity( type: BlockEntityType<*>, - private val cache: HTRecipeCache, + private val cache: HTRecipeCache, pos: BlockPos, state: BlockState ) : HTProcessorBlockEntity.Energized(type, pos, state) { @@ -53,18 +53,18 @@ abstract class HTItemToItemBlockEntity( override fun initializeVariables(listener: Runnable) { super.initializeVariables(listener) - recipeHandler = object : EnergizedHandler() { + recipeHandler = object : EnergizedHandler() { private val inputSlot: HTItemInputSlot by lazy { HTItemInputSlot(this@HTItemToItemBlockEntity.inputSlot) } private val outputSlot: HTOutputSlot by lazy { HTOutputSlotHelper.forItem(this@HTItemToItemBlockEntity.outputSlot) } - override fun createInput(): SingleRecipeInput = SingleRecipeInput(inputSlot.getStoredInput()) + override fun createInput(): HTRecipeInput = HTRecipeInput(inputSlot.getStoredInput(), customKeys) - override fun findRecipe(level: ServerLevel, input: SingleRecipeInput): HTItemToItemRecipe? = + override fun findRecipe(level: ServerLevel, input: HTRecipeInput): HTItemToItemRecipe? = cache.findFirstRecipe(input, level) - override fun canComplete(recipe: HTItemToItemRecipe, input: SingleRecipeInput, output: ItemStack): Boolean = + override fun canComplete(recipe: HTItemToItemRecipe, input: HTRecipeInput, output: ItemStack): Boolean = useTransaction { transaction: Transaction -> val inputConsume: ItemInstance = recipe.getMatchingStack(input) when { @@ -73,7 +73,7 @@ abstract class HTItemToItemBlockEntity( } } - override fun onComplete(recipe: HTItemToItemRecipe, input: SingleRecipeInput, output: ItemStack) { + override fun onComplete(recipe: HTItemToItemRecipe, input: HTRecipeInput, output: ItemStack) { useTransaction { transaction: Transaction -> inputSlot.use(recipe.getMatchingStack(input), transaction) outputSlot.take(output, transaction) diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTTripleItemToItemBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTTripleItemToItemBlockEntity.kt index 0cb1a7597..52c67255e 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTTripleItemToItemBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTTripleItemToItemBlockEntity.kt @@ -8,7 +8,7 @@ import hiiragi283.lib.recipe.base.HTTripleItemToItemRecipe import hiiragi283.lib.recipe.handler.HTItemInputSlot import hiiragi283.lib.recipe.handler.HTOutputSlot import hiiragi283.lib.recipe.handler.HTOutputSlotHelper -import hiiragi283.lib.recipe.input.HTItemListRecipeInput +import hiiragi283.lib.recipe.input.HTRecipeInput import hiiragi283.lib.recipe.lookup.HTRecipeCache import hiiragi283.lib.recipe.lookup.HTRecipeLookup import hiiragi283.lib.sounds.HTSoundInstance @@ -22,7 +22,6 @@ import net.minecraft.core.BlockPos import net.minecraft.server.level.ServerLevel import net.minecraft.world.item.ItemInstance import net.minecraft.world.item.ItemStack -import net.minecraft.world.item.crafting.RecipeInput import net.minecraft.world.level.block.entity.BlockEntityType import net.minecraft.world.level.block.state.BlockState import net.minecraft.world.level.storage.ValueInput @@ -32,7 +31,7 @@ import net.neoforged.neoforge.transfer.transaction.Transaction abstract class HTTripleItemToItemBlockEntity( type: BlockEntityType<*>, - private val cache: HTRecipeCache, + private val cache: HTRecipeCache, pos: BlockPos, state: BlockState ) : HTProcessorBlockEntity.Energized(type, pos, state) { @@ -55,7 +54,7 @@ abstract class HTTripleItemToItemBlockEntity( override fun initializeVariables(listener: Runnable) { super.initializeVariables(listener) - recipeHandler = object : EnergizedHandler() { + recipeHandler = object : EnergizedHandler() { private val primarySlot: HTItemInputSlot by lazy { HTItemInputSlot(this@HTTripleItemToItemBlockEntity.primarySlot) } @@ -69,16 +68,24 @@ abstract class HTTripleItemToItemBlockEntity( HTOutputSlotHelper.forItem(this@HTTripleItemToItemBlockEntity.outputSlot) } - override fun createInput(): RecipeInput = HTItemListRecipeInput( - primarySlot.getStoredInput(), - secondarySlot.getStoredInput(), - tertiarySlot.getStoredInput() + override fun createInput(): HTRecipeInput = HTRecipeInput( + listOf( + primarySlot.getStoredInput(), + secondarySlot.getStoredInput(), + tertiarySlot.getStoredInput() + ), + listOf(), + customKeys ) - override fun findRecipe(level: ServerLevel, input: RecipeInput): HTTripleItemToItemRecipe? = + override fun findRecipe(level: ServerLevel, input: HTRecipeInput): HTTripleItemToItemRecipe? = cache.findFirstRecipe(input, level) - override fun canComplete(recipe: HTTripleItemToItemRecipe, input: RecipeInput, output: ItemStack): Boolean { + override fun canComplete( + recipe: HTTripleItemToItemRecipe, + input: HTRecipeInput, + output: ItemStack + ): Boolean { val (firstInput: ItemInstance, secondInput: ItemInstance, thirdInput: ItemInstance) = recipe.getMatchingStack(input) return useTransaction { transaction: Transaction -> @@ -91,7 +98,7 @@ abstract class HTTripleItemToItemBlockEntity( } } - override fun onComplete(recipe: HTTripleItemToItemRecipe, input: RecipeInput, output: ItemStack) { + override fun onComplete(recipe: HTTripleItemToItemRecipe, input: HTRecipeInput, output: ItemStack) { val (firstInput: ItemInstance, secondInput: ItemInstance, thirdInput: ItemInstance) = recipe.getMatchingStack(input) useTransaction { transaction: Transaction -> diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/RTBucketCentrifugingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/RTBucketCentrifugingRecipe.kt index b935c2125..692fc4eb2 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/recipe/RTBucketCentrifugingRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/RTBucketCentrifugingRecipe.kt @@ -5,14 +5,14 @@ import hiiragi283.lib.item.createOrEmpty import hiiragi283.lib.recipe.base.HTProgressData import hiiragi283.lib.recipe.base.HTProgressRecipe import hiiragi283.lib.recipe.ingredient.HTIngredientHelper +import hiiragi283.lib.recipe.input.HTRecipeInput import hiiragi283.ragium.api.recipe.RTCentrifugingRecipe import net.minecraft.world.item.ItemInstance import net.minecraft.world.item.ItemStack -import net.minecraft.world.item.crafting.SingleRecipeInput import net.neoforged.neoforge.common.Tags import net.neoforged.neoforge.transfer.fluid.FluidUtil -data object RTBucketCentrifugingRecipe : RTCentrifugingRecipe, HTProgressRecipe.Simple { +data object RTBucketCentrifugingRecipe : RTCentrifugingRecipe, HTProgressRecipe.Simple { override fun test(input: ItemInstance): Boolean = when { input.craftingRemainder?.`is`(Tags.Items.BUCKETS_EMPTY) ?: false -> HTIngredientHelper.unwrap(input).let(HTFluidCapabilities::getCapability)?.size() == 1 diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/RTBucketFillingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/RTBucketFillingRecipe.kt index cbe1106cf..62573005f 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/recipe/RTBucketFillingRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/RTBucketFillingRecipe.kt @@ -4,14 +4,14 @@ import hiiragi283.lib.recipe.base.HTItemAndFluidToItemRecipe import hiiragi283.lib.recipe.base.HTProgressData import hiiragi283.lib.recipe.base.HTProgressRecipe import hiiragi283.lib.recipe.ingredient.HTIngredientHelper -import hiiragi283.lib.recipe.input.HTItemAndFluidRecipeInput +import hiiragi283.lib.recipe.input.HTRecipeInput import net.minecraft.world.item.ItemInstance import net.minecraft.world.item.ItemStack import net.neoforged.neoforge.fluids.FluidInstance import net.neoforged.neoforge.fluids.FluidStack import net.neoforged.neoforge.fluids.FluidType -data object RTBucketFillingRecipe : HTItemAndFluidToItemRecipe, HTProgressRecipe.Simple { +data object RTBucketFillingRecipe : HTItemAndFluidToItemRecipe, HTProgressRecipe.Simple { private fun getBucket(instance: FluidInstance): ItemStack = HTIngredientHelper.unwrap(instance).let(instance.fluidType::getBucket) diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/RTPotionBottleCentrifugingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/RTPotionBottleCentrifugingRecipe.kt index c86ec5dd1..71d550590 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/recipe/RTPotionBottleCentrifugingRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/RTPotionBottleCentrifugingRecipe.kt @@ -5,17 +5,17 @@ import hiiragi283.lib.item.alchemy.HTPotionHelper import hiiragi283.lib.recipe.base.HTProgressData import hiiragi283.lib.recipe.base.HTProgressRecipe import hiiragi283.lib.recipe.ingredient.HTIngredientHelper +import hiiragi283.lib.recipe.input.HTRecipeInput import hiiragi283.ragium.api.recipe.RTCentrifugingRecipe import net.minecraft.world.item.ItemInstance import net.minecraft.world.item.ItemStack -import net.minecraft.world.item.crafting.SingleRecipeInput import net.neoforged.neoforge.fluids.FluidStack import net.neoforged.neoforge.fluids.FluidStackTemplate @JvmRecord data class RTPotionBottleCentrifugingRecipe(val bottleType: HTBottleType, override val progressData: HTProgressData) : RTCentrifugingRecipe, - HTProgressRecipe.Simple { + HTProgressRecipe.Simple { companion object { @JvmField val PROGRESS_DATA: HTProgressData = HTProgressData.time(60) diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/RTPotionBottleFillingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/RTPotionBottleFillingRecipe.kt index b72cb3c9c..c4407a063 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/recipe/RTPotionBottleFillingRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/RTPotionBottleFillingRecipe.kt @@ -6,7 +6,7 @@ import hiiragi283.lib.recipe.base.HTItemAndFluidToItemRecipe import hiiragi283.lib.recipe.base.HTProgressData import hiiragi283.lib.recipe.base.HTProgressRecipe import hiiragi283.lib.recipe.ingredient.HTIngredientHelper -import hiiragi283.lib.recipe.input.HTItemAndFluidRecipeInput +import hiiragi283.lib.recipe.input.HTRecipeInput import net.minecraft.world.item.ItemInstance import net.minecraft.world.item.ItemStack import net.neoforged.neoforge.fluids.FluidInstance @@ -14,7 +14,7 @@ import net.neoforged.neoforge.fluids.FluidInstance @JvmRecord data class RTPotionBottleFillingRecipe(val bottleType: HTBottleType, override val progressData: HTProgressData) : HTItemAndFluidToItemRecipe, - HTProgressRecipe.Simple { + HTProgressRecipe.Simple { companion object { @JvmField val PROGRESS_DATA: HTProgressData = HTProgressData.time(60) From ffcb298f0ff5a2b8ad8d0a2f4fd923ff1c993173 Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Tue, 13 Oct 2026 00:16:38 +0900 Subject: [PATCH 20/25] =?UTF-8?q?refactor:=20=E6=A9=9F=E6=A2=B0=E3=81=AE?= =?UTF-8?q?=E3=82=A2=E3=83=83=E3=83=97=E3=82=B0=E3=83=AC=E3=83=BC=E3=83=89?= =?UTF-8?q?=E5=89=B2=E3=82=8A=E5=BD=93=E3=81=A6=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/machine/HTMachineUpgradeHelper.kt | 25 ++++++++++++------ .../misc/HTUpgradeStationBlockEntity.kt | 26 ++++++++++++++----- 2 files changed, 36 insertions(+), 15 deletions(-) diff --git a/src/lib/kotlin/hiiragi283/ragium/api/machine/HTMachineUpgradeHelper.kt b/src/lib/kotlin/hiiragi283/ragium/api/machine/HTMachineUpgradeHelper.kt index 2f38e3033..620f357d8 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/machine/HTMachineUpgradeHelper.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/machine/HTMachineUpgradeHelper.kt @@ -24,18 +24,27 @@ data object HTMachineUpgradeHelper { } @JvmStatic - fun modifySpeed(getter: DataComponentGetter, base: Int): Int = - Ints.saturatedCast(base * (100L + getCombinedUpgrade(getter).speed) / 100) + fun modifySpeed(getter: DataComponentGetter, base: Int): Int { + val multiplier: Long = minOf(1, 100L + getCombinedUpgrade(getter).speed) + return Ints.saturatedCast(base * multiplier / 100) + } @JvmStatic - fun modifyTime(getter: DataComponentGetter, base: Int): Int = - Ints.saturatedCast(base * 100 / (100L + getCombinedUpgrade(getter).speed)) + fun modifyTime(getter: DataComponentGetter, base: Int): Int { + val multiplier: Long = minOf(1, 100L + getCombinedUpgrade(getter).speed) + return Ints.saturatedCast(base * 100 / multiplier) + } @JvmStatic - fun modifyEfficiency(getter: DataComponentGetter, base: Int): Int = - Ints.saturatedCast(base * (100L + getCombinedUpgrade(getter).efficiency) / 100) + fun modifyEfficiency(getter: DataComponentGetter, base: Int): Int { + val multiplier: Long = minOf(1, 100L + getCombinedUpgrade(getter).speed) + val multiplier1: Long = minOf(1, 100L + getCombinedUpgrade(getter).efficiency) + return Ints.saturatedCast(base * multiplier / multiplier1) + } @JvmStatic - fun modifyCapacity(getter: DataComponentGetter, base: Int): Int = - Ints.saturatedCast(base * (100L + getCombinedUpgrade(getter).capacity) / 100) + fun modifyCapacity(getter: DataComponentGetter, base: Int): Int { + val multiplier: Long = minOf(1, 100L + getCombinedUpgrade(getter).capacity) + return Ints.saturatedCast(base * multiplier / 100) + } } diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/misc/HTUpgradeStationBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/misc/HTUpgradeStationBlockEntity.kt index 1a891dede..2f25649b6 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/misc/HTUpgradeStationBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/misc/HTUpgradeStationBlockEntity.kt @@ -86,12 +86,11 @@ class HTUpgradeStationBlockEntity(worldPosition: BlockPos, blockState: BlockStat } /*override fun onUpdateServer(level: ServerLevel, pos: BlockPos, state: BlockState): Boolean = - !toolSlot.isEmpty && useTransaction { transaction: Transaction -> - val toolStackIn: ItemStack = toolSlot.getStackCopy() + useTransaction { transaction: Transaction -> // 液体の搬入 - val fluidMoved: Int = ResourceHandlerUtil.move( + val fluidMoved: Int = ResourceHandlerUtil.moveStacking( getFluidHandler(null), - HTFluidCapabilities.getCapability(toolStackIn), + HTFluidCapabilities.getCapability(itemAccess), HTTransferPredicates.alwaysTrue(), Int.MAX_VALUE, // TODO, transaction @@ -99,17 +98,30 @@ class HTUpgradeStationBlockEntity(worldPosition: BlockPos, blockState: BlockStat // 充電 val energyMoved: Int = EnergyHandlerUtil.move( this.energyHandler.asForge(), - HTEnergyCapabilities.getCapability(toolStackIn), + HTEnergyCapabilities.getCapability(itemAccess), Int.MAX_VALUE, // TODO, transaction ) val moved: Boolean = fluidMoved > 0 || energyMoved > 0 if (moved) { - toolSlot.setStack(toolStackIn) transaction.commit() } moved - }*/ + } + + private val itemAccess = ToolItemAccess() + + private inner class ToolItemAccess : ItemAccess { + override fun getResource(): ItemResource = toolSlot.resource + + override fun getAmount(): Int = toolSlot.amount + + override fun insert(resource: ItemResource, amount: Int, transaction: TransactionContext): Int = + toolSlot.insert(resource, amount, transaction, HTTransferAccess.INTERNAL) + + override fun extract(resource: ItemResource, amount: Int, transaction: TransactionContext): Int = + toolSlot.extract(resource, amount, transaction, HTTransferAccess.INTERNAL) + }*/ override fun onUpdateServer(level: ServerLevel, pos: BlockPos, state: BlockState): Boolean = false From a0c5a213841c4abd157ab076e9f671679d3250ba Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Tue, 13 Oct 2026 01:53:29 +0900 Subject: [PATCH 21/25] =?UTF-8?q?feat:=20=E5=BC=B7=E5=8C=96=E3=82=B9?= =?UTF-8?q?=E3=83=86=E3=83=BC=E3=82=B7=E3=83=A7=E3=83=B3=E3=81=AB=E3=83=AA?= =?UTF-8?q?=E3=82=BD=E3=83=BC=E3=82=B9=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../advancement/RagiumAdvancementProvider.kt | 18 ++++++++-- .../data/lang/RagiumEnglishLangProvider.kt | 1 + .../data/lang/RagiumJapaneseLangProvider.kt | 1 + .../recipe/RagiumVanillaRecipeProvider.kt | 9 +++++ .../resources/assets/ragium/lang/en_us.json | 2 ++ .../resources/assets/ragium/lang/ja_jp.json | 2 ++ .../ragium/advancement/upgrade_station.json | 32 ++++++++++++++++++ .../ragium/recipe/shaped/upgrade_station.json | 17 ++++++++++ .../advancment/RagiumAdvancementKeys.kt | 3 ++ .../textures/block/upgrade_station_bottom.png | Bin 0 -> 205 bytes .../textures/block/upgrade_station_side.png | Bin 0 -> 254 bytes .../textures/block/upgrade_station_top.png | Bin 0 -> 360 bytes 12 files changed, 83 insertions(+), 2 deletions(-) create mode 100644 src/generated/resources/data/ragium/advancement/upgrade_station.json create mode 100644 src/generated/resources/data/ragium/recipe/shaped/upgrade_station.json create mode 100644 src/main/resources/assets/ragium/textures/block/upgrade_station_bottom.png create mode 100644 src/main/resources/assets/ragium/textures/block/upgrade_station_side.png create mode 100644 src/main/resources/assets/ragium/textures/block/upgrade_station_top.png diff --git a/src/data/kotlin/hiiragi283/ragium/data/advancement/RagiumAdvancementProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/advancement/RagiumAdvancementProvider.kt index 7b7e92918..48294c7fe 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/advancement/RagiumAdvancementProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/advancement/RagiumAdvancementProvider.kt @@ -39,10 +39,18 @@ class RagiumAdvancementProvider(packOutput: PackOutput, future: CompletableFutur }.save(exporter) } - private fun createSimple(key: AdvancementKey, parentKey: AdvancementKey, item: HTSimpleDeferredBlockAndItem) { + private fun createSimple( + key: AdvancementKey, + parentKey: AdvancementKey, + item: HTSimpleDeferredBlockAndItem, + type: AdvancementType = AdvancementType.GOAL + ) { HTAdvancementBuilder.create(key) { +parentKey - display { +item } + display { + +item + this.type = type + } inventory(getHasName(item)) { predicate { items { +item } } } }.save(exporter) } @@ -97,6 +105,12 @@ class RagiumAdvancementProvider(packOutput: PackOutput, future: CompletableFutur RagiumAdvancementKeys.MECHANICAL_MACHINE_PARTS, RagiumBlocks.CRUSHER ) + createSimple( + RagiumAdvancementKeys.UPGRADE_STATION, + RagiumAdvancementKeys.SOOTY_IRON, + RagiumBlocks.UPGRADE_STATION, + AdvancementType.GOAL + ) // Heat createSimple( RagiumAdvancementKeys.HEAT_MACHINE_PARTS, diff --git a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt index 7a3174af0..752cce8d7 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt @@ -35,6 +35,7 @@ class RagiumEnglishLangProvider(output: PackOutput) : ) addAdvancement(RagiumAdvancementKeys.ASSEMBLER, "Rava(n)gers, assemble!", "Acquire Assembler") addAdvancement(RagiumAdvancementKeys.CRUSHER, "Macerator, Pulverizer, or Crusher?", "Acquire Crusher") + addAdvancement(RagiumAdvancementKeys.UPGRADE_STATION, "Build Up", "Acquire Upgrade Station") addAdvancement(RagiumAdvancementKeys.HEAT_MACHINE_PARTS, "Heat And Cool", "Craft a Machine Casing (Heat)") addAdvancement(RagiumAdvancementKeys.BLACK_STEEL, "Black Roaring", "Craft a Black Steel Ingot") diff --git a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt index 6bf183d48..d9331a868 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt @@ -31,6 +31,7 @@ class RagiumJapaneseLangProvider(output: PackOutput) : addAdvancement(RagiumAdvancementKeys.MECHANICAL_MACHINE_PARTS, "機械・加工・機械", "マシンケーシング(機械加工)を作る") addAdvancement(RagiumAdvancementKeys.ASSEMBLER, "ラヴェ(ン)ジャーズ,アッセンブル!", "組立機を手に入れる") addAdvancement(RagiumAdvancementKeys.CRUSHER, "Macerator, Pulverizer, or Crusher?", "粉砕機を手に入れる") + addAdvancement(RagiumAdvancementKeys.UPGRADE_STATION, "ビルドアップ", "強化ステーションを手に入れる") addAdvancement(RagiumAdvancementKeys.HEAT_MACHINE_PARTS, "Heat And Cool", "マシンケーシング(熱)を作る") addAdvancement(RagiumAdvancementKeys.BLACK_STEEL, "黒い咆哮", "黒鋼をつくる") diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt index d6326ad21..2bf2125cd 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt @@ -560,6 +560,15 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut // Upgrade // private fun upgrade() { + // Upgrade Station + VanillaRecipeBuilders.shaped { + cross8() + define('A') { +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Alloy.SOOTY_IRON) } + define('B') { +holderSet(CommonTagPrefixes.GEAR, RagiumMaterial.Metal.IRON) } + define('C') { +holderSet(Tags.Items.PLAYER_WORKSTATIONS_CRAFTING_TABLES) } + result { +RagiumBlocks.UPGRADE_STATION } + }.save(exporter) + // Basic VanillaRecipeBuilders.shaped { crossLayered() diff --git a/src/generated/resources/assets/ragium/lang/en_us.json b/src/generated/resources/assets/ragium/lang/en_us.json index 53cd4b49f..e8991276b 100644 --- a/src/generated/resources/assets/ragium/lang/en_us.json +++ b/src/generated/resources/assets/ragium/lang/en_us.json @@ -17,6 +17,8 @@ "advancement.ragium.root.title": "Ragium", "advancement.ragium.sooty_iron.desc": "Craft a Sooty Iron Ingot", "advancement.ragium.sooty_iron.title": "Acquire Blackware", + "advancement.ragium.upgrade_station.desc": "Acquire Upgrade Station", + "advancement.ragium.upgrade_station.title": "Build Up", "block.ragium.alcohol": "Alcohol", "block.ragium.aldehyde": "Aldehyde", "block.ragium.alloy_smelter": "Alloy Smelter", diff --git a/src/generated/resources/assets/ragium/lang/ja_jp.json b/src/generated/resources/assets/ragium/lang/ja_jp.json index b2e537f5e..66ca8457e 100644 --- a/src/generated/resources/assets/ragium/lang/ja_jp.json +++ b/src/generated/resources/assets/ragium/lang/ja_jp.json @@ -17,6 +17,8 @@ "advancement.ragium.root.title": "ラギウム", "advancement.ragium.sooty_iron.desc": "煤鉄をつくる", "advancement.ragium.sooty_iron.title": "黒鉄(くろがね)を手に入れる", + "advancement.ragium.upgrade_station.desc": "強化ステーションを手に入れる", + "advancement.ragium.upgrade_station.title": "ビルドアップ", "block.ragium.alcohol": "アルコール", "block.ragium.aldehyde": "アルデヒド", "block.ragium.alloy_smelter": "合金炉", diff --git a/src/generated/resources/data/ragium/advancement/upgrade_station.json b/src/generated/resources/data/ragium/advancement/upgrade_station.json new file mode 100644 index 000000000..f020b3592 --- /dev/null +++ b/src/generated/resources/data/ragium/advancement/upgrade_station.json @@ -0,0 +1,32 @@ +{ + "parent": "ragium:sooty_iron", + "criteria": { + "has_upgrade_station": { + "conditions": { + "items": [ + { + "items": "ragium:upgrade_station" + } + ] + }, + "trigger": "minecraft:inventory_changed" + } + }, + "display": { + "description": { + "translate": "advancement.ragium.upgrade_station.desc" + }, + "icon": { + "id": "ragium:upgrade_station" + }, + "title": { + "translate": "advancement.ragium.upgrade_station.title" + } + }, + "requirements": [ + [ + "has_upgrade_station" + ] + ], + "sends_telemetry_event": true +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/shaped/upgrade_station.json b/src/generated/resources/data/ragium/recipe/shaped/upgrade_station.json new file mode 100644 index 000000000..f2c8dd0fe --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/shaped/upgrade_station.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "A": "#c:ingots/sooty_iron", + "B": "#c:gears/iron", + "C": "#c:player_workstations/crafting_tables" + }, + "pattern": [ + "ABA", + "BCB", + "ABA" + ], + "result": { + "id": "ragium:upgrade_station" + } +} \ No newline at end of file diff --git a/src/main/kotlin/hiiragi283/ragium/common/advancment/RagiumAdvancementKeys.kt b/src/main/kotlin/hiiragi283/ragium/common/advancment/RagiumAdvancementKeys.kt index 7af490649..72feaaca0 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/advancment/RagiumAdvancementKeys.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/advancment/RagiumAdvancementKeys.kt @@ -27,6 +27,9 @@ data object RagiumAdvancementKeys { @JvmField val CRUSHER: AdvancementKey = create(RagiumConstants.CRUSHER) + @JvmField + val UPGRADE_STATION: AdvancementKey = create("upgrade_station") + // Heat @JvmField val HEAT_MACHINE_PARTS: AdvancementKey = create("heat_machine_parts") diff --git a/src/main/resources/assets/ragium/textures/block/upgrade_station_bottom.png b/src/main/resources/assets/ragium/textures/block/upgrade_station_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..6e7f78c1903a5815db7f59d05e429a6f004298c3 GIT binary patch literal 205 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`O`a}}Ar*{of))7=DDdp@QM_Qo z;Cx8_$AA6_HVnN7Hg4mNHVU0^n&Wzi$@OPdwn1LW;)*SW4RPlrmrhZ=5_K`ESwJHB z!QSx0QQXgEwjOg;kYr7}+F%{Lvu38lrn4V}_iWp+`0;d?6!uMrO}3|Ln;{G1aIU$qQJ8yXsO3s z#*7IWGa4!-8YDGtv`1=4Hq2`3JKlG~x$D3GZ>~pcCg+|zF~e0ebp3~W;n{ClzQlgE zcwXAL&51)G*=FHZHqF#-8EMO3$L35CdNQYxxMed@;B06n(6W@*lV{Pul#?c zRUp4HuJTXj{-Ql6xfvM#|F>_}p8#||8_4<03{Bb_b!)ZjgMlIpp00i_>zopr0JiRC A-T(jq literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ragium/textures/block/upgrade_station_top.png b/src/main/resources/assets/ragium/textures/block/upgrade_station_top.png new file mode 100644 index 0000000000000000000000000000000000000000..6c9828bb24e9b5c617e4cfa515928913add08263 GIT binary patch literal 360 zcmV-u0hj)XP)nd6sourD+5#SG%qg3J8pT)T2)+$&?=0S#IX=D_d}<2V)w8l=o0000 Date: Tue, 13 Oct 2026 11:09:09 +0900 Subject: [PATCH 22/25] =?UTF-8?q?refactor:=20Mekanism=20=E3=81=AE=E5=BC=95?= =?UTF-8?q?=E7=94=A8=E5=85=83URL=E3=82=92=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lib/block/entity/HTAbstractBlockEntity.kt | 2 +- .../block/entity/HTSoundPlayerBlockEntity.kt | 2 +- .../lib/recipe/HTSerializableRecipe.kt | 2 +- .../recipe/ingredient/HTFluidIngredient.kt | 2 +- .../lib/recipe/ingredient/HTIngredient.kt | 2 +- .../lib/recipe/ingredient/HTItemIngredient.kt | 2 +- .../lib/recipe/input/HTFluidRecipeInput.kt | 2 +- .../lib/recipe/lookup/HTRecipeLookup.kt | 2 +- .../lib/text/HTCommonTranslation.kt | 4 +- .../kotlin/hiiragi283/lib/text/HTHasText.kt | 2 +- .../lib/text/HTHasTranslationKey.kt | 2 +- .../kotlin/hiiragi283/lib/text/HTTextUtil.kt | 4 +- .../hiiragi283/lib/text/HTTranslation.kt | 2 +- .../hiiragi283/lib/transfer/HTResourceSlot.kt | 27 +++++++++++++ .../hiiragi283/lib/transfer/HTResourceView.kt | 38 +++++++++++++++++++ .../lib/transfer/HTStackResourceSlot.kt | 28 ++++++++++++++ .../lib/transfer/HTTransferAccess.kt | 2 +- .../lib/transfer/HTTransferPredicates.kt | 2 +- .../transfer/access/HTItemSlotItemAccess.kt | 27 +++++++++++++ .../lib/transfer/fluid/HTBasicFluidTank.kt | 7 ++++ .../lib/transfer/holder/HTCapabilityHolder.kt | 2 +- .../transfer/holder/HTResourceSlotHolder.kt | 2 +- .../lib/transfer/item/HTBasicItemSlot.kt | 13 +++++++ .../lib/transfer/proxy/HTProxyHandler.kt | 2 +- .../transfer/proxy/HTProxyResourceHandler.kt | 2 +- .../transfer/resolver/HTCapabilityManager.kt | 4 +- .../resolver/HTCapabilityManagerImpl.kt | 4 +- .../resolver/HTResourceCapabilityManager.kt | 2 +- .../lib/integration/jei/HTJeiPlugin.kt | 2 +- .../common/block/entity/HTBlockEntity.kt | 2 +- .../block/entity/HTConfigurableBlockEntity.kt | 2 +- .../block/entity/HTExtendedBlockEntity.kt | 2 +- .../common/transfer/HTCapabilityCodec.kt | 2 +- .../transfer/energy/HTMachineEnergyHandler.kt | 2 +- .../holder/HTSlottedCapabilityHolder.kt | 2 +- 35 files changed, 173 insertions(+), 33 deletions(-) create mode 100644 src/lib/kotlin/hiiragi283/lib/transfer/access/HTItemSlotItemAccess.kt diff --git a/src/lib/kotlin/hiiragi283/lib/block/entity/HTAbstractBlockEntity.kt b/src/lib/kotlin/hiiragi283/lib/block/entity/HTAbstractBlockEntity.kt index 9098ff9a4..f11b5cdd2 100644 --- a/src/lib/kotlin/hiiragi283/lib/block/entity/HTAbstractBlockEntity.kt +++ b/src/lib/kotlin/hiiragi283/lib/block/entity/HTAbstractBlockEntity.kt @@ -9,7 +9,7 @@ import net.minecraft.world.level.block.entity.BlockEntity /** * [BlockEntity]に実装されるインターフェースです。 * - * 参考 : [Mekanism - ITileWrapper](https://github.com/mekanism/Mekanism/blob/26.1/src/main/java/mekanism/common/tile/interfaces/ITileWrapper.java) + * 参考 : [Mekanism - ITileWrapper](https://github.com/mekanism/Mekanism/blob/26.3/src/main/java/mekanism/common/tile/interfaces/ITileWrapper.java) * @author Hiiragi Tsubasa * @since 26.1.0 */ diff --git a/src/lib/kotlin/hiiragi283/lib/block/entity/HTSoundPlayerBlockEntity.kt b/src/lib/kotlin/hiiragi283/lib/block/entity/HTSoundPlayerBlockEntity.kt index d2a3f184f..977005dfa 100644 --- a/src/lib/kotlin/hiiragi283/lib/block/entity/HTSoundPlayerBlockEntity.kt +++ b/src/lib/kotlin/hiiragi283/lib/block/entity/HTSoundPlayerBlockEntity.kt @@ -10,7 +10,7 @@ import net.minecraft.world.level.block.entity.BlockEntity /** * [SE][SoundEvent]を再生可能な[BlockEntity]に実装するインターフェースです。 * - * 参考 : [Mekanism - ITileSound](https://github.com/mekanism/Mekanism/blob/26.1/src/main/java/mekanism/common/tile/interfaces/ITileSound.java) + * 参考 : [Mekanism - ITileSound](https://github.com/mekanism/Mekanism/blob/26.3/src/main/java/mekanism/common/tile/interfaces/ITileSound.java) * @author Hiiragi Tsubasa * @since 26.1.0 */ diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/HTSerializableRecipe.kt b/src/lib/kotlin/hiiragi283/lib/recipe/HTSerializableRecipe.kt index 55561c411..9b04aa052 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/HTSerializableRecipe.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/HTSerializableRecipe.kt @@ -11,7 +11,7 @@ import net.minecraft.world.level.Level /** * シリアライズ可能なレシピを表す,[Recipe]の拡張インターフェースです。 * - * 参照 : [Mekanism - MekanismRecipe](https://github.com/mekanism/Mekanism/blob/26.1/src/api/java/mekanism/api/recipes/MekanismRecipe.java) + * 参照 : [Mekanism - MekanismRecipe](https://github.com/mekanism/Mekanism/blob/26.3/src/api/java/mekanism/api/recipes/MekanismRecipe.java) * @param INPUT レシピの入力となるクラス * @author Hiiragi Tsubasa * @since 26.1.0 diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTFluidIngredient.kt b/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTFluidIngredient.kt index be159a946..69da77157 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTFluidIngredient.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTFluidIngredient.kt @@ -20,7 +20,7 @@ import kotlin.jvm.optionals.getOrNull /** * [Fluid]向けの[HTIngredient]の実装クラスです。 * - * 参照 : [Mekanism - FluidStackIngredient](https://github.com/mekanism/Mekanism/blob/26.1/src/api/java/mekanism/api/recipes/ingredients/FluidStackIngredient.java) + * 参照 : [Mekanism - FluidStackIngredient](https://github.com/mekanism/Mekanism/blob/26.3/src/api/java/mekanism/api/recipes/ingredients/FluidStackIngredient.java) * @author Hiiragi Tsubasa * @since 26.1.0 */ diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTIngredient.kt b/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTIngredient.kt index 21c188692..dbb70ce7f 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTIngredient.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTIngredient.kt @@ -6,7 +6,7 @@ import java.util.function.Predicate /** * Hiiragi Seriesで使用される,レシピの材料を判定するインターフェースです。 * - * 参照 : [Mekanism - InputIngredient](https://github.com/mekanism/Mekanism/blob/26.1/src/api/java/mekanism/api/recipes/ingredients/InputIngredient.java) + * 参照 : [Mekanism - InputIngredient](https://github.com/mekanism/Mekanism/blob/26.3/src/api/java/mekanism/api/recipes/ingredients/InputIngredient.java) * @param TYPE 材料の種類のクラス * @param INSTANCE 材料の種類を保持するインスタンスのクラス * @author Hiiragi Tsubasa diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTItemIngredient.kt b/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTItemIngredient.kt index 6cc4ecba4..d5893801f 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTItemIngredient.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTItemIngredient.kt @@ -19,7 +19,7 @@ import kotlin.jvm.optionals.getOrNull /** * [Item]向けの[HTIngredient]の実装クラスです。 * - * 参照 : [Mekanism - ItemStackIngredient](https://github.com/mekanism/Mekanism/blob/26.1/src/api/java/mekanism/api/recipes/ingredients/ItemStackIngredient.java) + * 参照 : [Mekanism - ItemStackIngredient](https://github.com/mekanism/Mekanism/blob/26.3/src/api/java/mekanism/api/recipes/ingredients/ItemStackIngredient.java) * @author Hiiragi Tsubasa * @since 26.1.0 */ diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/input/HTFluidRecipeInput.kt b/src/lib/kotlin/hiiragi283/lib/recipe/input/HTFluidRecipeInput.kt index e91fcd82f..14d873431 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/input/HTFluidRecipeInput.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/input/HTFluidRecipeInput.kt @@ -6,7 +6,7 @@ import net.neoforged.neoforge.fluids.FluidStack /** * 液体に対応した[RecipeInput]の拡張インターフェースです。 * - * 参照 : [Mekanism - FluidRecipeInput](https://github.com/mekanism/Mekanism/blob/26.1/src/api/java/mekanism/api/recipes/vanilla_input/FluidRecipeInput.java) + * 参照 : [Mekanism - FluidRecipeInput](https://github.com/mekanism/Mekanism/blob/26.3/src/api/java/mekanism/api/recipes/vanilla_input/FluidRecipeInput.java) * @author Hiiragi Tsubasa * @since 26.1.0 */ diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/lookup/HTRecipeLookup.kt b/src/lib/kotlin/hiiragi283/lib/recipe/lookup/HTRecipeLookup.kt index 042fb2fb0..592a4edea 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/lookup/HTRecipeLookup.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/lookup/HTRecipeLookup.kt @@ -12,7 +12,7 @@ import net.minecraft.world.item.crafting.RecipeType /** * レシピの一覧を提供するインターフェースです。 * - * 参照 : [Mekanism - IMekanismRecipeTypeProvider](https://github.com/mekanism/Mekanism/blob/26.1/src/main/java/mekanism/common/recipe/IMekanismRecipeTypeProvider.java) + * 参照 : [Mekanism - IMekanismRecipeTypeProvider](https://github.com/mekanism/Mekanism/blob/26.3/src/main/java/mekanism/common/recipe/IMekanismRecipeTypeProvider.java) * @param RECIPE レシピのクラス * @author Hiiragi Tsubasa * @since 26.1.0 diff --git a/src/lib/kotlin/hiiragi283/lib/text/HTCommonTranslation.kt b/src/lib/kotlin/hiiragi283/lib/text/HTCommonTranslation.kt index 9e7be15d2..6fec77c87 100644 --- a/src/lib/kotlin/hiiragi283/lib/text/HTCommonTranslation.kt +++ b/src/lib/kotlin/hiiragi283/lib/text/HTCommonTranslation.kt @@ -6,8 +6,8 @@ import hiiragi283.ragium.api.RagiumAPI /** * Hiiragi Seriesで使用される[翻訳][HTTranslation]を集めたクラスです。 * - * 参照 : [Mekanism - APILang](https://github.com/mekanism/Mekanism/blob/26.1/src/api/java/mekanism/api/text/APILang.java) - * [Mekanism - MekanismLang](https://github.com/mekanism/Mekanism/blob/26.1/src/main/java/mekanism/common/MekanismLang.java) + * 参照 : [Mekanism - APILang](https://github.com/mekanism/Mekanism/blob/26.3/src/api/java/mekanism/api/text/APILang.java) + * [Mekanism - MekanismLang](https://github.com/mekanism/Mekanism/blob/26.3/src/main/java/mekanism/common/MekanismLang.java) * @author Hiiragi Tsubasa * @since 26.1.0 */ diff --git a/src/lib/kotlin/hiiragi283/lib/text/HTHasText.kt b/src/lib/kotlin/hiiragi283/lib/text/HTHasText.kt index 529b7c8e5..32aa14794 100644 --- a/src/lib/kotlin/hiiragi283/lib/text/HTHasText.kt +++ b/src/lib/kotlin/hiiragi283/lib/text/HTHasText.kt @@ -3,7 +3,7 @@ package hiiragi283.lib.text /** * [テキスト][Text]を提供するインターフェースです。 * - * 参照 : [Mekanism - IHasTextComponent](https://github.com/mekanism/Mekanism/blob/26.1/src/api/java/mekanism/api/text/IHasTextComponent.java) + * 参照 : [Mekanism - IHasTextComponent](https://github.com/mekanism/Mekanism/blob/26.3/src/api/java/mekanism/api/text/IHasTextComponent.java) * @author Hiiragi Tsubasa * @since 26.1.0 */ diff --git a/src/lib/kotlin/hiiragi283/lib/text/HTHasTranslationKey.kt b/src/lib/kotlin/hiiragi283/lib/text/HTHasTranslationKey.kt index f38d0fa69..0ddef9520 100644 --- a/src/lib/kotlin/hiiragi283/lib/text/HTHasTranslationKey.kt +++ b/src/lib/kotlin/hiiragi283/lib/text/HTHasTranslationKey.kt @@ -3,7 +3,7 @@ package hiiragi283.lib.text /** * 翻訳キーを提供するインターフェースです。 * - * 参照 : [Mekanism - IHasTranslationKey](https://github.com/mekanism/Mekanism/blob/26.1/src/api/java/mekanism/api/text/IHasTranslationKey.java) + * 参照 : [Mekanism - IHasTranslationKey](https://github.com/mekanism/Mekanism/blob/26.3/src/api/java/mekanism/api/text/IHasTranslationKey.java) * @author Hiiragi Tsubasa * @since 26.1.0 */ diff --git a/src/lib/kotlin/hiiragi283/lib/text/HTTextUtil.kt b/src/lib/kotlin/hiiragi283/lib/text/HTTextUtil.kt index 541901f26..8dc624d8f 100644 --- a/src/lib/kotlin/hiiragi283/lib/text/HTTextUtil.kt +++ b/src/lib/kotlin/hiiragi283/lib/text/HTTextUtil.kt @@ -27,8 +27,8 @@ import java.text.NumberFormat /** * [テキスト][Text]に関するメソッドを集めたクラスです。 * - * 参照 : [Mekanism - TextComponentUtil](https://github.com/mekanism/Mekanism/blob/26.1/src/api/java/mekanism/api/text/TextComponentUtil.java) - * [Mekanism - TextUtils](https://github.com/mekanism/Mekanism/blob/26.1/src/main/java/mekanism/common/util/text/TextUtils.java) + * 参照 : [Mekanism - TextComponentUtil](https://github.com/mekanism/Mekanism/blob/26.3/src/api/java/mekanism/api/text/TextComponentUtil.java) + * [Mekanism - TextUtils](https://github.com/mekanism/Mekanism/blob/26.3/src/main/java/mekanism/common/util/text/TextUtils.java) * @author Hiiragi Tsubasa * @since 26.1.0 */ diff --git a/src/lib/kotlin/hiiragi283/lib/text/HTTranslation.kt b/src/lib/kotlin/hiiragi283/lib/text/HTTranslation.kt index a0e09285b..ce6be6567 100644 --- a/src/lib/kotlin/hiiragi283/lib/text/HTTranslation.kt +++ b/src/lib/kotlin/hiiragi283/lib/text/HTTranslation.kt @@ -5,7 +5,7 @@ import net.minecraft.ChatFormatting /** * 翻訳を保持するインターフェースです。 * - * 参照 : [Mekanism - ILangEntry](https://github.com/mekanism/Mekanism/blob/26.1/src/api/java/mekanism/api/text/ILangEntry.java) + * 参照 : [Mekanism - ILangEntry](https://github.com/mekanism/Mekanism/blob/26.3/src/api/java/mekanism/api/text/ILangEntry.java) * @author Hiiragi Tsubasa * @since 26.1.0 */ diff --git a/src/lib/kotlin/hiiragi283/lib/transfer/HTResourceSlot.kt b/src/lib/kotlin/hiiragi283/lib/transfer/HTResourceSlot.kt index 980ffb909..a2c0205de 100644 --- a/src/lib/kotlin/hiiragi283/lib/transfer/HTResourceSlot.kt +++ b/src/lib/kotlin/hiiragi283/lib/transfer/HTResourceSlot.kt @@ -4,13 +4,40 @@ import net.neoforged.neoforge.common.util.ValueIOSerializable import net.neoforged.neoforge.transfer.resource.Resource import net.neoforged.neoforge.transfer.transaction.TransactionContext +/** + * 外部との搬入/搬出が可能な[HTResourceView]の拡張インターフェースです。 + * + * 参照 : [Mekanism - IResourceContainer](https://github.com/mekanism/Mekanism/blob/26.3/src/api/java/mekanism/api/resource/IResourceContainer.java) + * @param T 保持するリソースのクラス + * @author Hiiragi Tsubasa + * @since 26.1.0 + */ interface HTResourceSlot : HTResourceView, ValueIOSerializable { + /** + * 指定したリソースを保持できるかどうか判定します。 + */ fun isValid(resource: T): Boolean + /** + * リソースを搬入します。 + * @param resource 搬入するリソース + * @param amount 搬入する数量 + * @param transaction 現在のトランザクション + * @param access このスロットに対するアクセスの種類 + * @return 搬入される数量 + */ fun insert(resource: T, amount: Int, transaction: TransactionContext, access: HTTransferAccess): Int + /** + * リソースを搬出します。 + * @param resource 搬出するリソース + * @param amount 搬出する数量 + * @param transaction 現在のトランザクション + * @param access このスロットに対するアクセスの種類 + * @return 搬出される数量 + */ fun extract(resource: T, amount: Int, transaction: TransactionContext, access: HTTransferAccess): Int fun extractSelf(amount: Int, transaction: TransactionContext, access: HTTransferAccess): Int { diff --git a/src/lib/kotlin/hiiragi283/lib/transfer/HTResourceView.kt b/src/lib/kotlin/hiiragi283/lib/transfer/HTResourceView.kt index 0b0b61aaa..8437e3f1a 100644 --- a/src/lib/kotlin/hiiragi283/lib/transfer/HTResourceView.kt +++ b/src/lib/kotlin/hiiragi283/lib/transfer/HTResourceView.kt @@ -3,19 +3,57 @@ package hiiragi283.lib.transfer import hiiragi283.lib.util.fixedFraction import net.neoforged.neoforge.transfer.resource.Resource +/** + * 1種類のリソースを保持するスロットを表すインターフェースです。 + * + * 参照 : [Mekanism - IResourceContainer](https://github.com/mekanism/Mekanism/blob/26.3/src/api/java/mekanism/api/resource/IResourceContainer.java) + * @param T 保持するリソースのクラス + * @author Hiiragi Tsubasa + * @since 26.1.0 + */ interface HTResourceView { + /** + * 保持しているリソース + */ val resource: T + + /** + * 保持しているリソースの数量 + */ val amount: Int + /** + * このビューが空かどうか判定します。 + */ val isEmpty: Boolean get() = resource.isEmpty || amount <= 0 + /** + * 指定したリソースに対する容量を取得します。 + */ fun getCapacity(resource: T): Int + /** + * 指定したリソースに対する空き容量を取得します。 + */ fun getNeeded(resource: T): Int = getCapacity(resource) - amount + /** + * 指定したリソースに対する占有率を取得します。 + */ fun getFilledLevel(resource: T): Float = fixedFraction(amount, getCapacity(resource)) + /** + * 保持しているリソースに対する容量を取得します。 + */ val currentCapacity: Int get() = getCapacity(this.resource) + + /** + * 保持しているリソースに対する空き容量を取得します。 + */ val currentNeeded: Int get() = getNeeded(this.resource) + + /** + * 保持しているリソースに対する占有率を取得します。 + */ val currentFilledLevel: Float get() = getFilledLevel(this.resource) } diff --git a/src/lib/kotlin/hiiragi283/lib/transfer/HTStackResourceSlot.kt b/src/lib/kotlin/hiiragi283/lib/transfer/HTStackResourceSlot.kt index 120aa918e..d1b1f3611 100644 --- a/src/lib/kotlin/hiiragi283/lib/transfer/HTStackResourceSlot.kt +++ b/src/lib/kotlin/hiiragi283/lib/transfer/HTStackResourceSlot.kt @@ -7,21 +7,49 @@ import net.neoforged.neoforge.transfer.transaction.TransactionContext import java.util.function.BiPredicate import java.util.function.Predicate +/** + * スタックに基づいた[HTResourceSlot]の抽象クラスです。 + * @param S リソースと量を束ねたクラス + * @param T 保持するリソースのクラス + * @author Hiiragi Tsubasa + * @since 26.1.0 + */ abstract class HTStackResourceSlot : SnapshotJournal(), HTResourceSlot { + /** + * 保持しているスタックのコピーを取得します。 + */ abstract fun getStackCopy(): S + /** + * 保持しているスタックを置き換えます。 + */ abstract fun setStack(stack: S) + /** + * 保持しているスタックを置き換えます。 + */ protected abstract fun setStackInternal(stack: S) + /** + * スタックをリソースに変換します。 + */ protected abstract fun getResourceFrom(stack: S): T + /** + * スタックから数量を取得します。 + */ protected abstract fun getAmountFrom(stack: S): Int + /** + * 指定したスタックとリソースが等しいかどうか判定します。 + */ protected abstract fun isSame(stack: S, resource: T): Boolean + /** + * リソースと数量からスタックを作成します。 + */ protected abstract fun createStack(resource: T, amount: Int): S /** diff --git a/src/lib/kotlin/hiiragi283/lib/transfer/HTTransferAccess.kt b/src/lib/kotlin/hiiragi283/lib/transfer/HTTransferAccess.kt index 43e9d270f..0e7317c12 100644 --- a/src/lib/kotlin/hiiragi283/lib/transfer/HTTransferAccess.kt +++ b/src/lib/kotlin/hiiragi283/lib/transfer/HTTransferAccess.kt @@ -5,7 +5,7 @@ import java.util.function.Predicate /** * スロットへのアクセスの種類を表すクラスです。 * - * 参照 : [Mekanism - AutomationType](https://github.com/mekanism/Mekanism/blob/26.1/src/api/java/mekanism/api/AutomationType.java) + * 参照 : [Mekanism - AutomationType](https://github.com/mekanism/Mekanism/blob/26.3/src/api/java/mekanism/api/AutomationType.java) * @author Hiiragi Tsubasa * @since 26.1.0 */ diff --git a/src/lib/kotlin/hiiragi283/lib/transfer/HTTransferPredicates.kt b/src/lib/kotlin/hiiragi283/lib/transfer/HTTransferPredicates.kt index 631133279..0472a4e8c 100644 --- a/src/lib/kotlin/hiiragi283/lib/transfer/HTTransferPredicates.kt +++ b/src/lib/kotlin/hiiragi283/lib/transfer/HTTransferPredicates.kt @@ -6,7 +6,7 @@ import java.util.function.Predicate /** * ストレージ周りで使用する条件をまとめたクラスです。 * - * 参照 : [Mekanism - AutomationType](https://github.com/mekanism/Mekanism/blob/26.1/src/api/java/mekanism/api/functions/ConstantPredicates.java) + * 参照 : [Mekanism - AutomationType](https://github.com/mekanism/Mekanism/blob/26.3/src/api/java/mekanism/api/functions/ConstantPredicates.java) * @author Hiiragi Tsubasa * @since 26.1.0 */ diff --git a/src/lib/kotlin/hiiragi283/lib/transfer/access/HTItemSlotItemAccess.kt b/src/lib/kotlin/hiiragi283/lib/transfer/access/HTItemSlotItemAccess.kt new file mode 100644 index 000000000..7ccc89b49 --- /dev/null +++ b/src/lib/kotlin/hiiragi283/lib/transfer/access/HTItemSlotItemAccess.kt @@ -0,0 +1,27 @@ +package hiiragi283.lib.transfer.access + +import hiiragi283.lib.transfer.HTTransferAccess +import hiiragi283.lib.transfer.item.HTItemSlot +import net.neoforged.neoforge.transfer.access.ItemAccess +import net.neoforged.neoforge.transfer.item.ItemResource +import net.neoforged.neoforge.transfer.transaction.TransactionContext + +/** + * [HTItemSlot]に対する[ItemAccess]の実装クラスです。 + * + * 参照 : [Mekanism - InventorySlotItemAccess](https://github.com/mekanism/Mekanism/blob/26.3/src/api/java/mekanism/api/inventory/access/InventorySlotItemAccess.java) + * @author Hiiragi Tsubasa + * @since 26.1.9 + */ +@JvmRecord +data class HTItemSlotItemAccess(val slot: HTItemSlot, val access: HTTransferAccess) : ItemAccess { + override fun getResource(): ItemResource = slot.resource + + override fun getAmount(): Int = slot.amount + + override fun insert(resource: ItemResource, amount: Int, transaction: TransactionContext): Int = + slot.insert(resource, amount, transaction, access) + + override fun extract(resource: ItemResource, amount: Int, transaction: TransactionContext): Int = + slot.extract(resource, amount, transaction, access) +} diff --git a/src/lib/kotlin/hiiragi283/lib/transfer/fluid/HTBasicFluidTank.kt b/src/lib/kotlin/hiiragi283/lib/transfer/fluid/HTBasicFluidTank.kt index 3b7276d93..c084f0542 100644 --- a/src/lib/kotlin/hiiragi283/lib/transfer/fluid/HTBasicFluidTank.kt +++ b/src/lib/kotlin/hiiragi283/lib/transfer/fluid/HTBasicFluidTank.kt @@ -12,6 +12,13 @@ import net.neoforged.neoforge.transfer.fluid.FluidResource import java.util.function.BiPredicate import java.util.function.Predicate +/** + * [液体][FluidResource]向けの[HTStackResourceSlot]の実装クラスです。 + * + * 参照 : [Mekanism - BasicFluidTank](https://github.com/mekanism/Mekanism/blob/26.3/src/main/java/mekanism/common/capabilities/fluid/BasicFluidTank.java) + * @author Hiiragi Tsubasa + * @since 26.1.0 + */ open class HTBasicFluidTank( capacity: Int, canExtract: BiPredicate, diff --git a/src/lib/kotlin/hiiragi283/lib/transfer/holder/HTCapabilityHolder.kt b/src/lib/kotlin/hiiragi283/lib/transfer/holder/HTCapabilityHolder.kt index 48e52108f..3df0c021d 100644 --- a/src/lib/kotlin/hiiragi283/lib/transfer/holder/HTCapabilityHolder.kt +++ b/src/lib/kotlin/hiiragi283/lib/transfer/holder/HTCapabilityHolder.kt @@ -5,7 +5,7 @@ import net.minecraft.core.Direction /** * 搬出入を制御するインターフェースです。 * - * 参照 : [Mekanism - IHolder](https://github.com/mekanism/Mekanism/blob/26.1/src/main/java/mekanism/common/capabilities/holder/IHolder.java) + * 参照 : [Mekanism - IHolder](https://github.com/mekanism/Mekanism/blob/26.3/src/main/java/mekanism/common/capabilities/holder/IHolder.java) * @author Hiiragi Tsubasa * @since 26.1.0 */ diff --git a/src/lib/kotlin/hiiragi283/lib/transfer/holder/HTResourceSlotHolder.kt b/src/lib/kotlin/hiiragi283/lib/transfer/holder/HTResourceSlotHolder.kt index cf19ef98b..1656ded25 100644 --- a/src/lib/kotlin/hiiragi283/lib/transfer/holder/HTResourceSlotHolder.kt +++ b/src/lib/kotlin/hiiragi283/lib/transfer/holder/HTResourceSlotHolder.kt @@ -6,7 +6,7 @@ import net.minecraft.core.Direction /** * [HTResourceSlot]向けの[HTCapabilityHolder]の拡張インターフェースです。 * - * 参照 : [Mekanism - IContainerHolder](https://github.com/mekanism/Mekanism/blob/26.1/src/main/java/mekanism/common/capabilities/holder/IContainerHolder.java) + * 参照 : [Mekanism - IContainerHolder](https://github.com/mekanism/Mekanism/blob/26.3/src/main/java/mekanism/common/capabilities/holder/IContainerHolder.java) * @author Hiiragi Tsubasa * @since 26.1.0 */ diff --git a/src/lib/kotlin/hiiragi283/lib/transfer/item/HTBasicItemSlot.kt b/src/lib/kotlin/hiiragi283/lib/transfer/item/HTBasicItemSlot.kt index fab2d7afa..677251d51 100644 --- a/src/lib/kotlin/hiiragi283/lib/transfer/item/HTBasicItemSlot.kt +++ b/src/lib/kotlin/hiiragi283/lib/transfer/item/HTBasicItemSlot.kt @@ -5,6 +5,7 @@ import hiiragi283.lib.transfer.HTStackResourceSlot import hiiragi283.lib.transfer.HTTransferAccess import hiiragi283.lib.transfer.HTTransferPredicates import hiiragi283.lib.transfer.HTTransferValidators +import hiiragi283.lib.transfer.access.HTItemSlotItemAccess import net.minecraft.world.item.Item import net.minecraft.world.item.ItemStack import net.minecraft.world.level.storage.ValueInput @@ -13,6 +14,13 @@ import net.neoforged.neoforge.transfer.item.ItemResource import java.util.function.BiPredicate import java.util.function.Predicate +/** + * [アイテム][ItemResource]向けの[HTStackResourceSlot]の実装クラスです。 + * + * 参照 : [Mekanism - BasicInventorySlot](https://github.com/mekanism/Mekanism/blob/26.3/src/main/java/mekanism/common/inventory/slot/BasicInventorySlot.java) + * @author Hiiragi Tsubasa + * @since 26.1.0 + */ open class HTBasicItemSlot( capacity: Int, canExtract: BiPredicate, @@ -88,6 +96,11 @@ open class HTBasicItemSlot( false -> minOf(resource.maxStackSize, capacity) } + /** + * @since 26.1.9 + */ + val itemAccess = HTItemSlotItemAccess(this, HTTransferAccess.INTERNAL) + // ValueIOSerializable // override fun serialize(output: ValueOutput) { diff --git a/src/lib/kotlin/hiiragi283/lib/transfer/proxy/HTProxyHandler.kt b/src/lib/kotlin/hiiragi283/lib/transfer/proxy/HTProxyHandler.kt index ff9b648cf..c9346b3a2 100644 --- a/src/lib/kotlin/hiiragi283/lib/transfer/proxy/HTProxyHandler.kt +++ b/src/lib/kotlin/hiiragi283/lib/transfer/proxy/HTProxyHandler.kt @@ -6,7 +6,7 @@ import net.minecraft.core.Direction /** * 任意のCapabilityのラッパーとなる抽象クラス * - * 参照 : [Mekanism - ProxyHandler](https://github.com/mekanism/Mekanism/blob/26.1/src/main/java/mekanism/common/capabilities/proxy/ProxyHandler.java) + * 参照 : [Mekanism - ProxyHandler](https://github.com/mekanism/Mekanism/blob/26.3/src/main/java/mekanism/common/capabilities/proxy/ProxyHandler.java) * @param side 現在の向き * @param holder 搬入出の制御 * @author Hiiragi Tsubasa diff --git a/src/lib/kotlin/hiiragi283/lib/transfer/proxy/HTProxyResourceHandler.kt b/src/lib/kotlin/hiiragi283/lib/transfer/proxy/HTProxyResourceHandler.kt index e58e495d7..994e031a1 100644 --- a/src/lib/kotlin/hiiragi283/lib/transfer/proxy/HTProxyResourceHandler.kt +++ b/src/lib/kotlin/hiiragi283/lib/transfer/proxy/HTProxyResourceHandler.kt @@ -10,7 +10,7 @@ import net.neoforged.neoforge.transfer.transaction.TransactionContext /** * [HTResourceSlot]向けの[HTProxyHandler]の拡張クラスです。 * - * 参照 : [Mekanism - ProxyResourceHandler](https://github.com/mekanism/Mekanism/blob/26.1/src/main/java/mekanism/common/capabilities/proxy/ProxyResourceHandler.java) + * 参照 : [Mekanism - ProxyResourceHandler](https://github.com/mekanism/Mekanism/blob/26.3/src/main/java/mekanism/common/capabilities/proxy/ProxyResourceHandler.java) * @param RESOURCE 保持するリソースのクラス * @param side 現在の向き * @param holder 搬入出の制御 diff --git a/src/lib/kotlin/hiiragi283/lib/transfer/resolver/HTCapabilityManager.kt b/src/lib/kotlin/hiiragi283/lib/transfer/resolver/HTCapabilityManager.kt index 4191bd44a..d6fc3dafb 100644 --- a/src/lib/kotlin/hiiragi283/lib/transfer/resolver/HTCapabilityManager.kt +++ b/src/lib/kotlin/hiiragi283/lib/transfer/resolver/HTCapabilityManager.kt @@ -5,8 +5,8 @@ import net.minecraft.core.Direction /** * 向きに応じたキャパビリティを取得するインターフェース * - * 参照 : [Mekanism - ICapabilityHandlerManager](https://github.com/mekanism/Mekanism/blob/26.1/src/main/java/mekanism/common/capabilities/resolver/manager/ICapabilityHandlerManager.java) - * [Mekanism - ICapabilityResolver](https://github.com/mekanism/Mekanism/blob/26.1/src/main/java/mekanism/common/capabilities/resolver/ICapabilityResolver.java) + * 参照 : [Mekanism - ICapabilityHandlerManager](https://github.com/mekanism/Mekanism/blob/26.3/src/main/java/mekanism/common/capabilities/resolver/manager/ICapabilityHandlerManager.java) + * [Mekanism - ICapabilityResolver](https://github.com/mekanism/Mekanism/blob/26.3/src/main/java/mekanism/common/capabilities/resolver/ICapabilityResolver.java) * @param SLOT 要素を保持するクラス * @author Hiiragi Tsubasa * @since 26.1.0 diff --git a/src/lib/kotlin/hiiragi283/lib/transfer/resolver/HTCapabilityManagerImpl.kt b/src/lib/kotlin/hiiragi283/lib/transfer/resolver/HTCapabilityManagerImpl.kt index 12f462a00..afe5addc4 100644 --- a/src/lib/kotlin/hiiragi283/lib/transfer/resolver/HTCapabilityManagerImpl.kt +++ b/src/lib/kotlin/hiiragi283/lib/transfer/resolver/HTCapabilityManagerImpl.kt @@ -7,8 +7,8 @@ import net.minecraft.core.Direction /** * [HTCapabilityManager]の実装クラスです。 * - * 参照 : [Mekanism - CapabilityHandlerManager](https://github.com/mekanism/Mekanism/blob/26.1/src/main/java/mekanism/common/capabilities/resolver/manager/CapabilityHandlerManager.java) - * [Mekanism - BasicCapabilityResolver](https://github.com/mekanism/Mekanism/blob/26.1/src/main/java/mekanism/common/capabilities/resolver/BasicCapabilityResolver.java) + * 参照 : [Mekanism - CapabilityHandlerManager](https://github.com/mekanism/Mekanism/blob/26.3/src/main/java/mekanism/common/capabilities/resolver/manager/CapabilityHandlerManager.java) + * [Mekanism - BasicCapabilityResolver](https://github.com/mekanism/Mekanism/blob/26.3/src/main/java/mekanism/common/capabilities/resolver/BasicCapabilityResolver.java) * @author Hiiragi Tsubasa * @since 26.1.0 */ diff --git a/src/lib/kotlin/hiiragi283/lib/transfer/resolver/HTResourceCapabilityManager.kt b/src/lib/kotlin/hiiragi283/lib/transfer/resolver/HTResourceCapabilityManager.kt index 6c726cb9b..364aabacc 100644 --- a/src/lib/kotlin/hiiragi283/lib/transfer/resolver/HTResourceCapabilityManager.kt +++ b/src/lib/kotlin/hiiragi283/lib/transfer/resolver/HTResourceCapabilityManager.kt @@ -11,7 +11,7 @@ import net.neoforged.neoforge.transfer.resource.Resource /** * [ResourceHandler]向けの[HTCapabilityManagerImpl]の実装クラスです。 * - * 参照 : [Mekanism - ResourceHandlerManager](https://github.com/mekanism/Mekanism/blob/26.1/src/main/java/mekanism/common/capabilities/resolver/manager/ResourceHandlerManager.java) + * 参照 : [Mekanism - ResourceHandlerManager](https://github.com/mekanism/Mekanism/blob/26.3/src/main/java/mekanism/common/capabilities/resolver/manager/ResourceHandlerManager.java) * @author Hiiragi Tsubasa * @since 26.1.0 **/ diff --git a/src/libClient/kotlin/hiiragi283/lib/integration/jei/HTJeiPlugin.kt b/src/libClient/kotlin/hiiragi283/lib/integration/jei/HTJeiPlugin.kt index a12137862..a99839636 100644 --- a/src/libClient/kotlin/hiiragi283/lib/integration/jei/HTJeiPlugin.kt +++ b/src/libClient/kotlin/hiiragi283/lib/integration/jei/HTJeiPlugin.kt @@ -7,7 +7,7 @@ import net.minecraft.resources.Identifier /** * Hiiragi Seriesで使用される[IModPlugin]の抽象クラスです。 * - * 参照 : [Mekanism - MekanismJEI](https://github.com/mekanism/Mekanism/blob/26.1/src/main/java/mekanism/client/recipe_viewer/jei/MekanismJEI.java) + * 参照 : [Mekanism - MekanismJEI](https://github.com/mekanism/Mekanism/blob/26.3/src/integration/jei/main/java/mekanism/client/recipe_viewer/jei/MekanismJEI.java) * @param modId 対象のMOD ID * @author Hiiragi Tsubasa * @since 26.1.0 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 1699b862a..86bfd3ed2 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTBlockEntity.kt @@ -35,7 +35,7 @@ import java.util.UUID /** * [HTExtendedBlockEntity]の拡張クラスです。 * - * 参考 : [Mekanism - TileEntityMekanism](https://github.com/mekanism/Mekanism/blob/26.1/src/main/java/mekanism/common/tile/base/TileEntityMekanism.java) + * 参考 : [Mekanism - TileEntityMekanism](https://github.com/mekanism/Mekanism/blob/26.3/src/main/java/mekanism/common/tile/base/TileEntityMekanism.java) * @author Hiiragi Tsubasa * @since 26.1.0 */ 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 6f5e6bb67..6a605d60a 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTConfigurableBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTConfigurableBlockEntity.kt @@ -15,7 +15,7 @@ import net.minecraft.world.level.storage.ValueOutput /** * 搬入出の面を制御可能な[HTBlockEntity]の拡張クラスです。 * - * 参考 : [Mekanism - TileEntityConfigurableMachine](https://github.com/mekanism/Mekanism/blob/26.1/src/main/java/mekanism/common/tile/prefab/TileEntityConfigurableMachine.java) + * 参考 : [Mekanism - TileEntityConfigurableMachine](https://github.com/mekanism/Mekanism/blob/26.3/src/main/java/mekanism/common/tile/prefab/TileEntityConfigurableMachine.java) */ abstract class HTConfigurableBlockEntity(type: BlockEntityType<*>, pos: BlockPos, state: BlockState) : HTBlockEntity(type, pos, state), diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTExtendedBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTExtendedBlockEntity.kt index 22b50755f..85c9d3e1b 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTExtendedBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTExtendedBlockEntity.kt @@ -26,7 +26,7 @@ import org.slf4j.Logger /** * Hiiragi Seriesで使用される[BlockEntity]の拡張クラスです。 * - * 参考 : [Mekanism - TileEntityUpdateable](https://github.com/mekanism/Mekanism/blob/26.1/src/main/java/mekanism/common/tile/base/TileEntityUpdateable.java) + * 参考 : [Mekanism - TileEntityUpdateable](https://github.com/mekanism/Mekanism/blob/26.3/src/main/java/mekanism/common/tile/base/TileEntityUpdateable.java) * @author Hiiragi Tsubasa * @since 26.1.0 */ diff --git a/src/main/kotlin/hiiragi283/ragium/common/transfer/HTCapabilityCodec.kt b/src/main/kotlin/hiiragi283/ragium/common/transfer/HTCapabilityCodec.kt index 65a1a2069..271d338cd 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/transfer/HTCapabilityCodec.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/transfer/HTCapabilityCodec.kt @@ -12,7 +12,7 @@ import net.neoforged.neoforge.common.util.ValueIOSerializable /** * [HTBlockEntity]に対して[CONTAINER]の一覧を読み書きするクラスです。 * - * 参照 : [Mekanism - IContainerType](https://github.com/mekanism/Mekanism/blob/26.1/src/main/java/mekanism/common/component/containers/type/IContainerType.java) + * 参照 : [Mekanism - IContainerType](https://github.com/mekanism/Mekanism/blob/26.3/src/main/java/mekanism/common/component/containers/type/IContainerType.java) * @param CONTAINER 保存の対象となるクラス * @author Hiiragi Tsubasa * @since 26.1.0 diff --git a/src/main/kotlin/hiiragi283/ragium/common/transfer/energy/HTMachineEnergyHandler.kt b/src/main/kotlin/hiiragi283/ragium/common/transfer/energy/HTMachineEnergyHandler.kt index 655625378..610d17aa5 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/transfer/energy/HTMachineEnergyHandler.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/transfer/energy/HTMachineEnergyHandler.kt @@ -10,7 +10,7 @@ import hiiragi283.ragium.common.block.entity.machine.HTProcessorBlockEntity import java.util.function.Predicate /** - * 参考 : [Mekanism - MachineEnergyContainer](https://github.com/mekanism/Mekanism/blob/26.1/src/main/java/mekanism/common/capabilities/energy/MachineEnergyContainer.java) + * 参考 : [Mekanism - MachineEnergyContainer](https://github.com/mekanism/Mekanism/blob/26.3/src/main/java/mekanism/common/capabilities/energy/MachineEnergyContainer.java) */ sealed class HTMachineEnergyHandler( capacity: Int, diff --git a/src/main/kotlin/hiiragi283/ragium/common/transfer/holder/HTSlottedCapabilityHolder.kt b/src/main/kotlin/hiiragi283/ragium/common/transfer/holder/HTSlottedCapabilityHolder.kt index de894196b..4679547e9 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/transfer/holder/HTSlottedCapabilityHolder.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/transfer/holder/HTSlottedCapabilityHolder.kt @@ -6,7 +6,7 @@ import it.unimi.dsi.fastutil.objects.ObjectArrayList import net.minecraft.core.Direction /** - * 参考 : [Mekanism - ConfigHolder](https://github.com/mekanism/Mekanism/blob/26.1/src/main/java/mekanism/common/capabilities/holder/ConfigHolder.java) + * 参考 : [Mekanism - ConfigHolder](https://github.com/mekanism/Mekanism/blob/26.3/src/main/java/mekanism/common/capabilities/holder/ConfigHolder.java) */ abstract class HTSlottedCapabilityHolder( configGetter: HTSlotInfoProvider?, From e960a6d651e1302edc0de7995c1e524e4fd3734f Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Tue, 13 Oct 2026 11:52:25 +0900 Subject: [PATCH 23/25] =?UTF-8?q?refactor:=20Energy=20=E5=91=A8=E3=82=8A?= =?UTF-8?q?=E3=81=AE=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gui/widget/HTEnergySlotWidgetRenderer.kt | 2 +- .../ragium/client/gui/widget/HTGuiWidget.kt | 2 +- .../advancement/RagiumAdvancementProvider.kt | 4 +- .../ragium/advancement/upgrade_station.json | 1 + .../resources/reports/ragium/registries.json | 3 +- .../lib/capability/HTEnergyCapabilities.kt | 12 +- .../lib/capability/HTMultiCapability.kt | 2 +- .../hiiragi283/lib/config/HTConfigValues.kt | 7 + .../kotlin/hiiragi283/lib/gui/HTGuiAccess.kt | 2 +- .../hiiragi283/lib/gui/sync/HTChangeType.kt | 2 +- .../lib/gui/sync/HTFluidSyncSlot.kt | 2 +- .../lib/gui/sync/HTIntSyncPayload.kt | 6 +- .../hiiragi283/lib/gui/sync/HTIntSyncSlot.kt | 2 +- .../hiiragi283/lib/gui/sync/HTItemSyncSlot.kt | 2 +- .../lib/gui/sync/HTLongSyncPayload.kt | 26 ++++ .../hiiragi283/lib/gui/sync/HTLongSyncSlot.kt | 56 ++++++++ .../lib/gui/sync/HTSyncablePayload.kt | 2 +- .../hiiragi283/lib/gui/sync/HTSyncableSlot.kt | 2 +- .../lib/gui/widget/HTWidgetHolder.kt | 2 +- .../lib/recipe/widget/HTGhostWidget.kt | 2 +- .../lib/recipe/widget/HTIngredientWidget.kt | 2 +- .../lib/transfer/ExtendedResourceHandler.kt | 8 ++ .../lib/transfer/HTTransferValidators.kt | 13 ++ .../transfer/energy/HTBasicEnergyHandler.kt | 40 +++--- .../lib/transfer/energy/HTEnergyHandler.kt | 46 ++++--- .../lib/transfer/item/HTEnergyItemSlot.kt | 126 ++++++++++++++++++ .../ragium/api/config/HTEnergyConfig.kt | 18 +-- .../ragium/api/util/HTStorageHelper.kt | 11 +- .../jei/category/HTBasicRecipeCategory.kt | 2 +- .../kotlin/hiiragi283/ragium/common/Ragium.kt | 2 + .../block/entity/HTBlockEntityWithMenu.kt | 4 +- .../block/entity/RagiumBlockEntityTypes.kt | 4 +- .../ragium/common/gui/menu/HTContainerMenu.kt | 2 +- .../common/gui/widget/HTEnergySlotWidget.kt | 9 +- .../transfer/energy/HTMachineEnergyHandler.kt | 2 +- 35 files changed, 341 insertions(+), 87 deletions(-) create mode 100644 src/lib/kotlin/hiiragi283/lib/gui/sync/HTLongSyncPayload.kt create mode 100644 src/lib/kotlin/hiiragi283/lib/gui/sync/HTLongSyncSlot.kt create mode 100644 src/lib/kotlin/hiiragi283/lib/transfer/item/HTEnergyItemSlot.kt diff --git a/src/client/kotlin/hiiragi283/ragium/client/gui/widget/HTEnergySlotWidgetRenderer.kt b/src/client/kotlin/hiiragi283/ragium/client/gui/widget/HTEnergySlotWidgetRenderer.kt index 103a32a28..64efe3937 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/gui/widget/HTEnergySlotWidgetRenderer.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/gui/widget/HTEnergySlotWidgetRenderer.kt @@ -34,7 +34,7 @@ class HTEnergySlotWidgetRenderer(gui: HTGuiAccess, widget: HTEnergySlotWidget) : override fun getSpriteAndColor(): Pair = getSprite(AtlasIds.BLOCKS, SPRITE) to -1 - override fun getLevel(): Float = widget.filledLevel + override fun getLevel(): Float = widget.filledLevelAsFloat override fun collectTooltips(consumer: Consumer, context: Item.TooltipContext, flag: TooltipFlag) { HTStorageHelper.addEnergyTooltip(widget, consumer, flag.isCreative) diff --git a/src/client/kotlin/hiiragi283/ragium/client/gui/widget/HTGuiWidget.kt b/src/client/kotlin/hiiragi283/ragium/client/gui/widget/HTGuiWidget.kt index 46d2ba027..06194b6e7 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/gui/widget/HTGuiWidget.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/gui/widget/HTGuiWidget.kt @@ -13,7 +13,7 @@ import net.minecraft.client.input.MouseButtonEvent import net.minecraft.world.item.ItemStack /** - * 参照 : [Mekanism - GuiElement](https://github.com/mekanism/Mekanism/blob/1.21.x/src/main/java/mekanism/client/gui/element/GuiElement.java) + * 参照 : [Mekanism - GuiElement](https://github.com/mekanism/Mekanism/blob/26.3/src/main/java/mekanism/client/gui/element/GuiElement.java) */ class HTGuiWidget(private val gui: HTGuiAccess, val widget: WIDGET) : AbstractWidget( diff --git a/src/data/kotlin/hiiragi283/ragium/data/advancement/RagiumAdvancementProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/advancement/RagiumAdvancementProvider.kt index 48294c7fe..e7b8ff679 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/advancement/RagiumAdvancementProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/advancement/RagiumAdvancementProvider.kt @@ -27,7 +27,7 @@ class RagiumAdvancementProvider(packOutput: PackOutput, future: CompletableFutur key: AdvancementKey, parentKey: AdvancementKey, item: HTSimpleDeferredItem, - type: AdvancementType = AdvancementType.GOAL + type: AdvancementType = AdvancementType.TASK ) { HTAdvancementBuilder.create(key) { +parentKey @@ -43,7 +43,7 @@ class RagiumAdvancementProvider(packOutput: PackOutput, future: CompletableFutur key: AdvancementKey, parentKey: AdvancementKey, item: HTSimpleDeferredBlockAndItem, - type: AdvancementType = AdvancementType.GOAL + type: AdvancementType = AdvancementType.TASK ) { HTAdvancementBuilder.create(key) { +parentKey diff --git a/src/generated/resources/data/ragium/advancement/upgrade_station.json b/src/generated/resources/data/ragium/advancement/upgrade_station.json index f020b3592..1afb89b98 100644 --- a/src/generated/resources/data/ragium/advancement/upgrade_station.json +++ b/src/generated/resources/data/ragium/advancement/upgrade_station.json @@ -16,6 +16,7 @@ "description": { "translate": "advancement.ragium.upgrade_station.desc" }, + "frame": "goal", "icon": { "id": "ragium:upgrade_station" }, diff --git a/src/generated/resources/reports/ragium/registries.json b/src/generated/resources/reports/ragium/registries.json index 7fa66916f..74aadec1f 100644 --- a/src/generated/resources/reports/ragium/registries.json +++ b/src/generated/resources/reports/ragium/registries.json @@ -620,7 +620,8 @@ "ragium:syncable_payload_type": [ "fluid", "integer", - "item" + "item", + "long" ], "ragium:widget_type": [ "energy", diff --git a/src/lib/kotlin/hiiragi283/lib/capability/HTEnergyCapabilities.kt b/src/lib/kotlin/hiiragi283/lib/capability/HTEnergyCapabilities.kt index abfc6e2e2..d1f54e88a 100644 --- a/src/lib/kotlin/hiiragi283/lib/capability/HTEnergyCapabilities.kt +++ b/src/lib/kotlin/hiiragi283/lib/capability/HTEnergyCapabilities.kt @@ -12,6 +12,7 @@ import net.neoforged.neoforge.capabilities.Capabilities import net.neoforged.neoforge.capabilities.EntityCapability import net.neoforged.neoforge.capabilities.ItemCapability import net.neoforged.neoforge.transfer.access.ItemAccess +import net.neoforged.neoforge.transfer.energy.DelegatingEnergyHandler import net.neoforged.neoforge.transfer.energy.EnergyHandler import net.neoforged.neoforge.transfer.transaction.TransactionContext @@ -31,15 +32,18 @@ data object HTEnergyCapabilities : HTMultiCapability { fun unwrap(handler: EnergyHandler): HTEnergyHandler = when (handler) { is HTEnergyHandler -> handler - else -> object : HTEnergyHandler { - override val amount: Int get() = handler.amountAsInt - override val capacity: Int get() = handler.capacityAsInt - + else -> object : DelegatingEnergyHandler(handler), HTEnergyHandler { override fun insert(amount: Int, transaction: TransactionContext, access: HTTransferAccess): Int = handler.insert(amount, transaction) override fun extract(amount: Int, transaction: TransactionContext, access: HTTransferAccess): Int = handler.extract(amount, transaction) + + override fun insert(amount: Int, transaction: TransactionContext): Int = + super.insert(amount, transaction) + + override fun extract(amount: Int, transaction: TransactionContext): Int = + super.extract(amount, transaction) } } diff --git a/src/lib/kotlin/hiiragi283/lib/capability/HTMultiCapability.kt b/src/lib/kotlin/hiiragi283/lib/capability/HTMultiCapability.kt index ddf19ac3b..1e6fd1921 100644 --- a/src/lib/kotlin/hiiragi283/lib/capability/HTMultiCapability.kt +++ b/src/lib/kotlin/hiiragi283/lib/capability/HTMultiCapability.kt @@ -17,7 +17,7 @@ import java.util.function.BooleanSupplier /** * 複数のキャパビリティを束ねるインターフェース * - * 参照 : [Mekanism - IMultiTypeCapability](https://github.com/mekanism/Mekanism/blob/1.21.x/src/main/java/mekanism/common/capabilities/IMultiTypeCapability.java) + * 参照 : [Mekanism - MultiTypeCapability](https://github.com/mekanism/Mekanism/blob/26.3/src/main/java/mekanism/common/capabilities/MultiTypeCapability.java) * @param HANDLER キャパビリティのインターフェース * @author Hiiragi Tsubasa * @since 26.1.0 diff --git a/src/lib/kotlin/hiiragi283/lib/config/HTConfigValues.kt b/src/lib/kotlin/hiiragi283/lib/config/HTConfigValues.kt index 7aec21865..6e622ccea 100644 --- a/src/lib/kotlin/hiiragi283/lib/config/HTConfigValues.kt +++ b/src/lib/kotlin/hiiragi283/lib/config/HTConfigValues.kt @@ -17,6 +17,13 @@ fun ModConfigSpec.Builder.translation(hasKey: HTHasTranslationKey): ModConfigSpe fun ModConfigSpec.Builder.definePositiveInt(path: String, defaultValue: Int, min: Int = 1): ModConfigSpec.IntValue = defineInRange(path, defaultValue, min, Int.MAX_VALUE) +/** + * @author Hiiragi Tsubasa + * @since 26.1.9 + */ +fun ModConfigSpec.Builder.definePositiveLong(path: String, defaultValue: Long, min: Long = 1): ModConfigSpec.LongValue = + defineInRange(path, defaultValue, min, Long.MAX_VALUE) + /** * @author Hiiragi Tsubasa * @since 26.1.0 diff --git a/src/lib/kotlin/hiiragi283/lib/gui/HTGuiAccess.kt b/src/lib/kotlin/hiiragi283/lib/gui/HTGuiAccess.kt index c5384d9a4..8dddf8bef 100644 --- a/src/lib/kotlin/hiiragi283/lib/gui/HTGuiAccess.kt +++ b/src/lib/kotlin/hiiragi283/lib/gui/HTGuiAccess.kt @@ -5,7 +5,7 @@ import net.minecraft.world.item.ItemStack /** * GUIを表すインターフェースです。 * - * 参照 : [Mekanism - IGuiWrapper](https://github.com/mekanism/Mekanism/blob/1.21.x/src/main/java/mekanism/client/gui/IGuiWrapper.java) + * 参照 : [Mekanism - IGuiWrapper](https://github.com/mekanism/Mekanism/blob/26.3/src/main/java/mekanism/client/gui/IGuiWrapper.java) * @author Hiiragi Tsubasa * @since 26.1.0 */ diff --git a/src/lib/kotlin/hiiragi283/lib/gui/sync/HTChangeType.kt b/src/lib/kotlin/hiiragi283/lib/gui/sync/HTChangeType.kt index 8a8619017..17c9e7cf3 100644 --- a/src/lib/kotlin/hiiragi283/lib/gui/sync/HTChangeType.kt +++ b/src/lib/kotlin/hiiragi283/lib/gui/sync/HTChangeType.kt @@ -3,7 +3,7 @@ package hiiragi283.lib.gui.sync /** * 同期のフラグを管理するクラスです。 * - * 参照 : [Mekanism - ISyncableData.DirtyType](https://github.com/mekanism/Mekanism/blob/1.21.x/src/main/java/mekanism/common/inventory/container/sync/ISyncableData.java) + * 参照 : [Mekanism - ISyncableData.DirtyType](https://github.com/mekanism/Mekanism/blob/26.3/src/main/java/mekanism/common/inventory/container/sync/ISyncableData.java) * @author Hiiragi Tsubasa * @since 26.1.0 */ diff --git a/src/lib/kotlin/hiiragi283/lib/gui/sync/HTFluidSyncSlot.kt b/src/lib/kotlin/hiiragi283/lib/gui/sync/HTFluidSyncSlot.kt index 0e08eea62..009771fa6 100644 --- a/src/lib/kotlin/hiiragi283/lib/gui/sync/HTFluidSyncSlot.kt +++ b/src/lib/kotlin/hiiragi283/lib/gui/sync/HTFluidSyncSlot.kt @@ -13,7 +13,7 @@ import kotlin.reflect.KProperty /** * [FluidStack]向けの[HTSyncableSlot]の拡張インターフェースです。 * - * 参照 : [Mekanism - SyncableFluidStack](https://github.com/mekanism/Mekanism/blob/1.21.x/src/main/java/mekanism/common/inventory/container/sync/SyncableFluidStack.java) + * 参照 : [Mekanism - SyncableFluidStack](https://github.com/mekanism/Mekanism/blob/26.3/src/main/java/mekanism/common/inventory/container/sync/SyncableFluidStack.java) * @author Hiiragi Tsubasa * @since 26.1.0 */ diff --git a/src/lib/kotlin/hiiragi283/lib/gui/sync/HTIntSyncPayload.kt b/src/lib/kotlin/hiiragi283/lib/gui/sync/HTIntSyncPayload.kt index 76ceb1fda..91b92ef36 100644 --- a/src/lib/kotlin/hiiragi283/lib/gui/sync/HTIntSyncPayload.kt +++ b/src/lib/kotlin/hiiragi283/lib/gui/sync/HTIntSyncPayload.kt @@ -8,10 +8,8 @@ import net.minecraft.network.codec.StreamCodec data class HTIntSyncPayload(val value: Int) : HTSyncablePayload { companion object { @JvmField - val STREAM_CODEC: StreamCodec = ByteBufCodecs.VAR_INT.map( - ::HTIntSyncPayload, - HTIntSyncPayload::value - ).cast() + val STREAM_CODEC: StreamCodec = + ByteBufCodecs.VAR_INT.map(::HTIntSyncPayload, HTIntSyncPayload::value).cast() @JvmField val TYPE: HTSyncablePayload.Type = HTSyncablePayload.Type(STREAM_CODEC) diff --git a/src/lib/kotlin/hiiragi283/lib/gui/sync/HTIntSyncSlot.kt b/src/lib/kotlin/hiiragi283/lib/gui/sync/HTIntSyncSlot.kt index 90d32ee43..d72d82ce5 100644 --- a/src/lib/kotlin/hiiragi283/lib/gui/sync/HTIntSyncSlot.kt +++ b/src/lib/kotlin/hiiragi283/lib/gui/sync/HTIntSyncSlot.kt @@ -8,7 +8,7 @@ import kotlin.reflect.KMutableProperty0 /** * [Int]向けの[HTSyncableSlot]の拡張インターフェースです。 * - * 参照 : [Mekanism - SyncableInt](https://github.com/mekanism/Mekanism/blob/1.21.x/src/main/java/mekanism/common/inventory/container/sync/SyncableInt.java) + * 参照 : [Mekanism - SyncableInt](https://github.com/mekanism/Mekanism/blob/26.3/src/main/java/mekanism/common/inventory/container/sync/SyncableInt.java) * @author Hiiragi Tsubasa * @since 26.1.0 */ diff --git a/src/lib/kotlin/hiiragi283/lib/gui/sync/HTItemSyncSlot.kt b/src/lib/kotlin/hiiragi283/lib/gui/sync/HTItemSyncSlot.kt index 0049d7c37..52cc0570c 100644 --- a/src/lib/kotlin/hiiragi283/lib/gui/sync/HTItemSyncSlot.kt +++ b/src/lib/kotlin/hiiragi283/lib/gui/sync/HTItemSyncSlot.kt @@ -13,7 +13,7 @@ import kotlin.reflect.KProperty /** * [ItemStack]向けの[HTSyncableSlot]の拡張インターフェースです。 * - * 参照 : [Mekanism - SyncableItemStack](https://github.com/mekanism/Mekanism/blob/1.21.x/src/main/java/mekanism/common/inventory/container/sync/SyncableItemStack.java) + * 参照 : [Mekanism - SyncableItemStack](https://github.com/mekanism/Mekanism/blob/26.3/src/main/java/mekanism/common/inventory/container/sync/SyncableItemStack.java) * @author Hiiragi Tsubasa * @since 26.1.0 */ diff --git a/src/lib/kotlin/hiiragi283/lib/gui/sync/HTLongSyncPayload.kt b/src/lib/kotlin/hiiragi283/lib/gui/sync/HTLongSyncPayload.kt new file mode 100644 index 000000000..18596b6d9 --- /dev/null +++ b/src/lib/kotlin/hiiragi283/lib/gui/sync/HTLongSyncPayload.kt @@ -0,0 +1,26 @@ +package hiiragi283.lib.gui.sync + +import net.minecraft.network.RegistryFriendlyByteBuf +import net.minecraft.network.codec.ByteBufCodecs +import net.minecraft.network.codec.StreamCodec + +@JvmRecord +data class HTLongSyncPayload(val value: Long) : HTSyncablePayload { + companion object { + @JvmField + val STREAM_CODEC: StreamCodec = + ByteBufCodecs.VAR_LONG.map(::HTLongSyncPayload, HTLongSyncPayload::value).cast() + + @JvmField + val TYPE: HTSyncablePayload.Type = HTSyncablePayload.Type(STREAM_CODEC) + } + + override fun type(): HTSyncablePayload.Type<*> = TYPE + + override fun setValue(menu: HTSyncableMenu, index: Int) { + val slot: HTSyncableSlot? = menu.getTrackedSlot(index) + if (slot is HTLongSyncSlot) { + slot.amountAsLong = this.value + } + } +} diff --git a/src/lib/kotlin/hiiragi283/lib/gui/sync/HTLongSyncSlot.kt b/src/lib/kotlin/hiiragi283/lib/gui/sync/HTLongSyncSlot.kt new file mode 100644 index 000000000..a463da2aa --- /dev/null +++ b/src/lib/kotlin/hiiragi283/lib/gui/sync/HTLongSyncSlot.kt @@ -0,0 +1,56 @@ +package hiiragi283.lib.gui.sync + +import net.minecraft.core.RegistryAccess +import java.util.function.LongConsumer +import java.util.function.LongSupplier +import kotlin.reflect.KMutableProperty0 + +/** + * [Long]向けの[HTSyncableSlot]の拡張インターフェースです。 + * + * 参照 : [Mekanism - SyncableLong](https://github.com/mekanism/Mekanism/blob/26.3/src/main/java/mekanism/common/inventory/container/sync/SyncableLong.java) + * @author Hiiragi Tsubasa + * @since 26.1.9 + */ +interface HTLongSyncSlot : HTSyncableSlot { + companion object { + @JvmStatic + fun create(array: LongArray, index: Int): HTLongSyncSlot = create({ array[index] }, { array[index] = it }) + + @JvmStatic + fun create(list: MutableList, index: Int): HTLongSyncSlot = create({ list[index] }, { list[index] = it }) + + @JvmStatic + fun create(property: KMutableProperty0): HTLongSyncSlot = create(property::get, property::set) + + @JvmStatic + fun create(getter: LongSupplier, setter: LongConsumer): HTLongSyncSlot = Impl(getter, setter) + } + + var amountAsLong: Long + + private class Impl(private val getter: LongSupplier, private val setter: LongConsumer) : HTLongSyncSlot { + private var lastValue: Long = 0 + + override var amountAsLong: Long + get() = this.getter.asLong + set(value) { + this.setter.accept(value) + } + + override fun getChange(): HTChangeType? { + val current: Long = this.amountAsLong + val last: Long = this.lastValue + this.lastValue = current + return when (current == last) { + true -> null + false -> HTChangeType.FULL + } + } + + override fun createPayload(access: RegistryAccess, changeType: HTChangeType): HTLongSyncPayload = + HTLongSyncPayload(this.amountAsLong) + + override fun toString(): String = "HTLongSyncSlot(amount=$amountAsLong)" + } +} diff --git a/src/lib/kotlin/hiiragi283/lib/gui/sync/HTSyncablePayload.kt b/src/lib/kotlin/hiiragi283/lib/gui/sync/HTSyncablePayload.kt index 71ae3fdfd..b9e029dff 100644 --- a/src/lib/kotlin/hiiragi283/lib/gui/sync/HTSyncablePayload.kt +++ b/src/lib/kotlin/hiiragi283/lib/gui/sync/HTSyncablePayload.kt @@ -8,7 +8,7 @@ import net.minecraft.network.codec.StreamCodec /** * [HTSyncableSlot]の同期に使用されるパケットを表すインターフェースです。 * - * 参照 : [Mekanism - PropertyData](https://github.com/mekanism/Mekanism/blob/1.21.x/src/main/java/mekanism/common/network/to_client/container/property/PropertyData.java) + * 参照 : [Mekanism - PropertyData](https://github.com/mekanism/Mekanism/blob/26.3/src/main/java/mekanism/common/network/to_client/container/property/PropertyData.java) * @author Hiiragi Tsubasa * @since 26.1.0 */ diff --git a/src/lib/kotlin/hiiragi283/lib/gui/sync/HTSyncableSlot.kt b/src/lib/kotlin/hiiragi283/lib/gui/sync/HTSyncableSlot.kt index ccff4cfb3..180c6e366 100644 --- a/src/lib/kotlin/hiiragi283/lib/gui/sync/HTSyncableSlot.kt +++ b/src/lib/kotlin/hiiragi283/lib/gui/sync/HTSyncableSlot.kt @@ -5,7 +5,7 @@ import net.minecraft.core.RegistryAccess /** * 任意の値をサーバーからクライアントへ同期可能なオブジェクトを表すインターフェースです。 * - * 参照 : [Mekanism - ISyncableData](https://github.com/mekanism/Mekanism/blob/1.21.x/src/main/java/mekanism/common/inventory/container/sync/ISyncableData.java) + * 参照 : [Mekanism - ISyncableData](https://github.com/mekanism/Mekanism/blob/26.3/src/main/java/mekanism/common/inventory/container/sync/ISyncableData.java) * @author Hiiragi Tsubasa * @since 26.1.0 */ diff --git a/src/lib/kotlin/hiiragi283/lib/gui/widget/HTWidgetHolder.kt b/src/lib/kotlin/hiiragi283/lib/gui/widget/HTWidgetHolder.kt index 0931265e3..53ba86d49 100644 --- a/src/lib/kotlin/hiiragi283/lib/gui/widget/HTWidgetHolder.kt +++ b/src/lib/kotlin/hiiragi283/lib/gui/widget/HTWidgetHolder.kt @@ -28,7 +28,7 @@ interface HTWidgetHolder : Iterable { /** * 指定した[slot]を追加します。 * - * 参照 : [Mekanism - MekanismContainer.track](https://github.com/mekanism/Mekanism/blob/1.21.x/src/main/java/mekanism/common/inventory/container/MekanismContainer.java) + * 参照 : [Mekanism - MekanismContainer.track](https://github.com/mekanism/Mekanism/blob/26.3/src/main/java/mekanism/common/inventory/container/MekanismContainer.java) * @param type 同期の方向 */ fun track(slot: HTSyncableSlot, type: HTSyncType) diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/widget/HTGhostWidget.kt b/src/lib/kotlin/hiiragi283/lib/recipe/widget/HTGhostWidget.kt index b89163048..3a7705b71 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/widget/HTGhostWidget.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/widget/HTGhostWidget.kt @@ -7,7 +7,7 @@ import java.util.function.Consumer /** * レシピビューワーからオブジェクトをドラッグ&ドロップ可能なウィジェットを表すインターフェースです。 * - * 参照 : [Mekanism - IRecipeViewerGhostTarget](https://github.com/mekanism/Mekanism/blob/1.21.x/src/main/java/mekanism/client/recipe_viewer/interfaces/IRecipeViewerGhostTarget.java) + * 参照 : [Mekanism - IRecipeViewerGhostTarget](https://github.com/mekanism/Mekanism/blob/26.3/src/main/java/mekanism/client/recipe_viewer/interfaces/IRecipeViewerGhostTarget.java) * @author Hiiragi Tsubasa * @since 26.1.0 */ diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/widget/HTIngredientWidget.kt b/src/lib/kotlin/hiiragi283/lib/recipe/widget/HTIngredientWidget.kt index b89696173..d7335a7e7 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/widget/HTIngredientWidget.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/widget/HTIngredientWidget.kt @@ -3,7 +3,7 @@ package hiiragi283.lib.recipe.widget /** * レシピビューワーに保持しているオブジェクトを提供可能なウィジェットを表すインターフェースです。 * - * 参照 : [Mekanism - IRecipeViewerGhostTarget](https://github.com/mekanism/Mekanism/blob/1.21.x/src/main/java/mekanism/client/recipe_viewer/interfaces/IRecipeViewerIngredientHelper.java) + * 参照 : [Mekanism - IRecipeViewerGhostTarget](https://github.com/mekanism/Mekanism/blob/26.3/src/main/java/mekanism/client/recipe_viewer/interfaces/IRecipeViewerIngredientHelper.java) * @author Hiiragi Tsubasa * @since 26.1.0 */ diff --git a/src/lib/kotlin/hiiragi283/lib/transfer/ExtendedResourceHandler.kt b/src/lib/kotlin/hiiragi283/lib/transfer/ExtendedResourceHandler.kt index e90060bc3..41bec22d7 100644 --- a/src/lib/kotlin/hiiragi283/lib/transfer/ExtendedResourceHandler.kt +++ b/src/lib/kotlin/hiiragi283/lib/transfer/ExtendedResourceHandler.kt @@ -12,11 +12,19 @@ import net.neoforged.neoforge.transfer.transaction.TransactionContext interface ExtendedResourceHandler : ResourceHandler { fun insert(index: Int, resource: T, amount: Int, transaction: TransactionContext, access: HTTransferAccess): Int + @Deprecated( + "Use 'insert(Int, T, Int, TransactionContext, HTTransferAccess)' instead", + ReplaceWith("this.insert(index, resource, amount, transaction, HTTransferAccess.EXTERNAL)") + ) override fun insert(index: Int, resource: T, amount: Int, transaction: TransactionContext): Int = insert(index, resource, amount, transaction, HTTransferAccess.EXTERNAL) fun extract(index: Int, resource: T, amount: Int, transaction: TransactionContext, access: HTTransferAccess): Int + @Deprecated( + "Use 'extract(Int, T, Int, TransactionContext, HTTransferAccess)' instead", + ReplaceWith("this.extract(index, resource, amount, transaction, HTTransferAccess.EXTERNAL)") + ) override fun extract(index: Int, resource: T, amount: Int, transaction: TransactionContext): Int = extract(index, resource, amount, transaction, HTTransferAccess.EXTERNAL) } diff --git a/src/lib/kotlin/hiiragi283/lib/transfer/HTTransferValidators.kt b/src/lib/kotlin/hiiragi283/lib/transfer/HTTransferValidators.kt index 168ade3b2..a95bc57e0 100644 --- a/src/lib/kotlin/hiiragi283/lib/transfer/HTTransferValidators.kt +++ b/src/lib/kotlin/hiiragi283/lib/transfer/HTTransferValidators.kt @@ -1,5 +1,9 @@ package hiiragi283.lib.transfer +/** + * @author Hiiragi Tsubasa + * @since 26.1.0 + */ data object HTTransferValidators { @JvmStatic fun validateCapacity(capacity: Int): Int { @@ -7,6 +11,15 @@ data object HTTransferValidators { return capacity } + /** + * @since 26.1.9 + */ + @JvmStatic + fun validateCapacity(capacity: Long): Long { + check(capacity >= 0) { "Capacity must be non negative" } + return capacity + } + @JvmStatic fun validateLimit(limit: Int): Int { check(limit >= 0) { "Limit must be non negative" } diff --git a/src/lib/kotlin/hiiragi283/lib/transfer/energy/HTBasicEnergyHandler.kt b/src/lib/kotlin/hiiragi283/lib/transfer/energy/HTBasicEnergyHandler.kt index db0c88388..070c79cb6 100644 --- a/src/lib/kotlin/hiiragi283/lib/transfer/energy/HTBasicEnergyHandler.kt +++ b/src/lib/kotlin/hiiragi283/lib/transfer/energy/HTBasicEnergyHandler.kt @@ -13,25 +13,25 @@ import net.neoforged.neoforge.transfer.transaction.TransactionContext import java.util.function.Predicate open class HTBasicEnergyHandler( - override val capacity: Int, + val capacity: Long, protected val canExtract: Predicate, protected val canInsert: Predicate, private val listener: Runnable? -) : SnapshotJournal(), +) : SnapshotJournal(), HTEnergyHandler, ValueIOSerializable { companion object { @JvmStatic - fun input(capacity: Int, listener: Runnable?): HTBasicEnergyHandler = + fun input(capacity: Long, listener: Runnable?): HTBasicEnergyHandler = create(capacity, listener, HTTransferAccess.NOT_EXTERNAL, HTTransferPredicates.alwaysTrue()) @JvmStatic - fun output(capacity: Int, listener: Runnable?): HTBasicEnergyHandler = + fun output(capacity: Long, listener: Runnable?): HTBasicEnergyHandler = create(capacity, listener, HTTransferPredicates.alwaysTrue(), HTTransferAccess.INTERNAL_ONLY) @JvmStatic fun create( - capacity: Int, + capacity: Long, listener: Runnable?, canExtract: Predicate = HTTransferPredicates.alwaysTrue(), canInsert: Predicate = HTTransferPredicates.alwaysTrue() @@ -39,21 +39,23 @@ open class HTBasicEnergyHandler( HTBasicEnergyHandler(HTTransferValidators.validateCapacity(capacity), canExtract, canInsert, listener) } - private var amountIn: Int = 0 + private var amountIn: Long = 0 - override val amount: Int get() = amountIn + override fun getAmountAsLong(): Long = amountIn - fun setAmount(amount: Int) { + override fun getCapacityAsLong(): Long = capacity + + fun setAmount(amount: Long) { setAmountUnchecked(amount, true) } - protected fun setAmountInternal(amount: Int) { + protected fun setAmountInternal(amount: Long) { setAmountUnchecked(amount, false) } - protected fun setAmountUnchecked(amount: Int, validate: Boolean) { - if (amount == 0) { - if (this.amountIn == 0) return + protected fun setAmountUnchecked(amount: Long, validate: Boolean) { + if (amount == 0L) { + if (this.amountIn == 0L) return this.amountIn = 0 } else if (!validate || amount > 0) { this.amountIn = amount.coerceIn(0, capacity) @@ -66,7 +68,7 @@ open class HTBasicEnergyHandler( override fun insert(amount: Int, transaction: TransactionContext, access: HTTransferAccess): Int { TransferPreconditions.checkNonNegative(amount) if (!this.canInsert.test(access)) return 0 - val inserted: Int = minOf(needed, amount) + val inserted: Int = minOf(neededAsInt, amount) if (inserted > 0) { this.updateSnapshots(transaction) amountIn += inserted @@ -78,7 +80,7 @@ open class HTBasicEnergyHandler( override fun extract(amount: Int, transaction: TransactionContext, access: HTTransferAccess): Int { TransferPreconditions.checkNonNegative(amount) if (!this.canExtract.test(access)) return 0 - val extracted: Int = minOf(this.amountIn, amount) + val extracted: Int = minOf(this.amountAsInt, amount) if (extracted > 0) { this.updateSnapshots(transaction) amountIn -= extracted @@ -90,22 +92,22 @@ open class HTBasicEnergyHandler( // ValueIOSerializable // override fun serialize(output: ValueOutput) { - output.putInt(HTConstants.AMOUNT, amountIn) + output.putLong(HTConstants.AMOUNT, amountIn) } override fun deserialize(input: ValueInput) { - input.getInt(HTConstants.AMOUNT).ifPresent(::setAmountInternal) + input.getLong(HTConstants.AMOUNT).ifPresent(::setAmountInternal) } // SnapshotJournal // - override fun createSnapshot(): Int = amountIn + override fun createSnapshot(): Long = amountIn - override fun revertToSnapshot(snapshot: Int) { + override fun revertToSnapshot(snapshot: Long) { this.amountIn = snapshot } - override fun onRootCommit(originalState: Int) { + override fun onRootCommit(originalState: Long) { listener?.run() } diff --git a/src/lib/kotlin/hiiragi283/lib/transfer/energy/HTEnergyHandler.kt b/src/lib/kotlin/hiiragi283/lib/transfer/energy/HTEnergyHandler.kt index f2a4865b4..025ecba78 100644 --- a/src/lib/kotlin/hiiragi283/lib/transfer/energy/HTEnergyHandler.kt +++ b/src/lib/kotlin/hiiragi283/lib/transfer/energy/HTEnergyHandler.kt @@ -5,33 +5,35 @@ import hiiragi283.lib.util.fixedFraction import net.neoforged.neoforge.transfer.energy.EnergyHandler import net.neoforged.neoforge.transfer.transaction.TransactionContext -interface HTEnergyHandler { - val amount: Int - val capacity: Int - - val isEmpty: Boolean get() = amount == 0 - - val needed: Int get() = capacity - amount - val filledLevel: Float get() = fixedFraction(amount, capacity) - +/** + * Hiiragi Seriesで使用される[EnergyHandler]の拡張インターフェースです。 + * @author Hiiragi Tsubasa + * @since 26.1.9 + */ +interface HTEnergyHandler : EnergyHandler { fun insert(amount: Int, transaction: TransactionContext, access: HTTransferAccess): Int - fun extract(amount: Int, transaction: TransactionContext, access: HTTransferAccess): Int - - @Suppress("NonExtendableApiUsage") - fun asForge(): EnergyHandler = object : EnergyHandler { - override fun getAmountAsLong(): Long = amountAsInt.toLong() + @Deprecated( + "Use 'insert(Int, TransactionContext, HTTransferAccess)' instead", + ReplaceWith("this.insert(amount, transaction, HTTransferAccess.EXTERNAL)") + ) + override fun insert(amount: Int, transaction: TransactionContext): Int = + insert(amount, transaction, HTTransferAccess.EXTERNAL) - override fun getAmountAsInt(): Int = this@HTEnergyHandler.amount + fun extract(amount: Int, transaction: TransactionContext, access: HTTransferAccess): Int - override fun getCapacityAsLong(): Long = capacityAsInt.toLong() + @Deprecated( + "Use 'extract(Int, TransactionContext, HTTransferAccess)' instead", + ReplaceWith("this.extract(amount, transaction, HTTransferAccess.EXTERNAL)") + ) + override fun extract(amount: Int, transaction: TransactionContext): Int = + extract(amount, transaction, HTTransferAccess.EXTERNAL) - override fun getCapacityAsInt(): Int = this@HTEnergyHandler.capacity + val isEmpty: Boolean get() = amountAsLong == 0L - override fun insert(amount: Int, transaction: TransactionContext): Int = - this@HTEnergyHandler.insert(amount, transaction, HTTransferAccess.EXTERNAL) + val neededAsLong: Long get() = capacityAsLong - capacityAsLong + val filledLevelAsDouble: Double get() = fixedFraction(capacityAsLong, capacityAsLong) - override fun extract(amount: Int, transaction: TransactionContext): Int = - this@HTEnergyHandler.extract(amount, transaction, HTTransferAccess.EXTERNAL) - } + val neededAsInt: Int get() = capacityAsInt - capacityAsInt + val filledLevelAsFloat: Float get() = fixedFraction(capacityAsInt, capacityAsInt) } diff --git a/src/lib/kotlin/hiiragi283/lib/transfer/item/HTEnergyItemSlot.kt b/src/lib/kotlin/hiiragi283/lib/transfer/item/HTEnergyItemSlot.kt new file mode 100644 index 000000000..67d35e7ba --- /dev/null +++ b/src/lib/kotlin/hiiragi283/lib/transfer/item/HTEnergyItemSlot.kt @@ -0,0 +1,126 @@ +package hiiragi283.lib.transfer.item + +import hiiragi283.lib.capability.HTEnergyCapabilities +import hiiragi283.lib.transfer.HTTransferAccess +import hiiragi283.lib.transfer.HTTransferPredicates +import hiiragi283.lib.transfer.energy.HTEnergyHandler +import hiiragi283.lib.transfer.useTransaction +import net.minecraft.world.item.Item +import net.neoforged.neoforge.transfer.access.ItemAccess +import net.neoforged.neoforge.transfer.energy.EnergyHandler +import net.neoforged.neoforge.transfer.energy.EnergyHandlerUtil +import net.neoforged.neoforge.transfer.item.ItemResource +import net.neoforged.neoforge.transfer.transaction.Transaction +import net.neoforged.neoforge.transfer.transaction.TransactionContext +import java.util.function.BiPredicate +import java.util.function.Predicate + +/** + * 保持しているアイテムに対して充放電が可能な[HTBasicItemSlot]の拡張クラスです。 + * + * 参照 : [Mekanism - EnergyInventorySlot](https://github.com/mekanism/Mekanism/blob/26.3/src/main/java/mekanism/common/inventory/slot/EnergyInventorySlot.java) + * @author Hiiragi Tsubasa + * @since 26.1.9 + */ +class HTEnergyItemSlot( + private val handler: HTEnergyHandler, + canExtract: BiPredicate, + canInsert: BiPredicate, + filter: Predicate, + listener: Runnable? +) : HTBasicItemSlot(Item.ABSOLUTE_MAX_STACK_SIZE, canExtract, canInsert, filter, listener) { + companion object { + @JvmStatic + fun fill(handler: HTEnergyHandler, listener: Runnable?): HTEnergyItemSlot = HTEnergyItemSlot( + handler, + HTTransferPredicates.notExternal().or { resource: ItemResource, _ -> !canFill(resource) }, + HTTransferPredicates.internalOnly().or { resource: ItemResource, _ -> canFill(resource) }, + HTTransferPredicates.alwaysTrue(), + listener + ) + + @JvmStatic + fun drain(handler: HTEnergyHandler, listener: Runnable?): HTEnergyItemSlot = HTEnergyItemSlot( + handler, + HTTransferPredicates.notExternal().or { resource: ItemResource, _ -> + !canDrain(handler, resource) + }, + HTTransferPredicates.internalOnly().or { resource: ItemResource, _ -> + canDrain(handler, resource) + }, + HTTransferPredicates.alwaysTrue(), + listener + ) + + @JvmStatic + fun canDrain(handler: EnergyHandler, resource: ItemResource): Boolean { + val handler1: EnergyHandler = + resource.toStack().let(ItemAccess::forStack).let(HTEnergyCapabilities::getCapability) ?: return false + return canDrain(handler, handler1) + } + + @JvmStatic + private fun canDrain(handler: EnergyHandler, handler1: EnergyHandler): Boolean { + if (handler.amountAsLong == 0L) { + return handler1.amountAsLong < handler1.capacityAsLong + } + val unwrapped: HTEnergyHandler = HTEnergyCapabilities.unwrap(handler) + return useTransaction { transaction: Transaction -> + handler1.insert(handler.capacityAsInt, transaction) > 0 + } + } + + @JvmStatic + fun canFill(resource: ItemResource): Boolean { + val handler1: EnergyHandler = + resource.toStack().let(ItemAccess::forStack).let(HTEnergyCapabilities::getCapability) ?: return false + return useTransaction { transaction: Transaction -> handler1.extract(Int.MAX_VALUE, transaction) > 0 } + } + } + + /** + * スロット内のアイテムからエネルギーを移動します + */ + fun fillContainerFromSlot(parent: TransactionContext?): Boolean { + if (this.isEmpty || EnergyHandlerUtil.isFull(this.handler)) { + return false + } + val handlerInItem: EnergyHandler = HTEnergyCapabilities.getCapability(this.itemAccess) ?: return false + var maxExtract: Int + useTransaction(parent) { transaction: Transaction -> + maxExtract = this.handler.insert(this.handler.neededAsInt, transaction, HTTransferAccess.INTERNAL) + if (maxExtract == 0) return false + } + useTransaction(parent) { transaction: Transaction -> + val extracted: Int = handlerInItem.extract(maxExtract, transaction) + if (extracted > 0 && this.handler.insert(extracted, transaction, HTTransferAccess.INTERNAL) == extracted) { + transaction.commit() + return true + } + } + return false + } + + /** + * スロット内のアイテムにエネルギーを移動します + */ + fun drainContainerToSlot(parent: TransactionContext?): Boolean { + if (this.isEmpty || this.handler.isEmpty) { + return false + } + val handlerInItem: EnergyHandler = HTEnergyCapabilities.getCapability(this.itemAccess) ?: return false + var maxInsert: Int + useTransaction(parent) { transaction: Transaction -> + maxInsert = this.handler.extract(this.handler.amountAsInt, transaction, HTTransferAccess.INTERNAL) + if (maxInsert == 0) return false + } + useTransaction(parent) { transaction: Transaction -> + val inserted: Int = handlerInItem.insert(maxInsert, transaction) + if (inserted > 0 && this.handler.extract(inserted, transaction, HTTransferAccess.INTERNAL) == inserted) { + transaction.commit() + return true + } + } + return false + } +} diff --git a/src/lib/kotlin/hiiragi283/ragium/api/config/HTEnergyConfig.kt b/src/lib/kotlin/hiiragi283/ragium/api/config/HTEnergyConfig.kt index 49de282e3..67f459fbd 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/config/HTEnergyConfig.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/config/HTEnergyConfig.kt @@ -2,11 +2,13 @@ package hiiragi283.ragium.api.config import hiiragi283.lib.HTConstants import hiiragi283.lib.config.definePositiveInt +import hiiragi283.lib.config.definePositiveLong import hiiragi283.lib.config.translation import hiiragi283.ragium.api.RagiumAPI import hiiragi283.ragium.api.text.RagiumTranslation import net.neoforged.neoforge.common.ModConfigSpec import java.util.function.IntSupplier +import java.util.function.LongSupplier /** * 機械のエネルギーに関するコンフィグを管理するクラスです。 @@ -16,16 +18,16 @@ import java.util.function.IntSupplier * @since 26.1.0 */ @JvmRecord -data class HTEnergyConfig(private val capacity: IntSupplier, private val rate: IntSupplier) { - fun getCapacity(): Int = capacity.asInt +data class HTEnergyConfig(private val capacity: LongSupplier, private val rate: IntSupplier) { + fun getCapacity(): Long = capacity.asLong fun getUsage(): Int = rate.asInt companion object { @JvmStatic - private fun energyCapacity(builder: ModConfigSpec.Builder, value: Int): ModConfigSpec.IntValue = builder + private fun energyCapacity(builder: ModConfigSpec.Builder, value: Long): ModConfigSpec.LongValue = builder .translation(RagiumTranslation.CONFIG_ENERGY_CAPACITY) - .definePositiveInt("energy_capacity", value) + .definePositiveLong("energy_capacity", value) @JvmStatic private fun energyRate(builder: ModConfigSpec.Builder, value: Int): ModConfigSpec.IntValue = builder @@ -37,15 +39,15 @@ data class HTEnergyConfig(private val capacity: IntSupplier, private val rate: I builder, name, rate, - rate * 20 * 10 * 10 + rate * 20 * 10 * 10L ) @JvmStatic - fun createBlock(builder: ModConfigSpec.Builder, name: String, usage: Int, capacity: Int): HTEnergyConfig = + fun createBlock(builder: ModConfigSpec.Builder, name: String, usage: Int, capacity: Long): HTEnergyConfig = create(builder, "${HTConstants.BLOCK}.${RagiumAPI.MOD_ID}.$name", name, usage, capacity) @JvmStatic - fun createItem(builder: ModConfigSpec.Builder, name: String, usage: Int, capacity: Int): HTEnergyConfig = + fun createItem(builder: ModConfigSpec.Builder, name: String, usage: Int, capacity: Long): HTEnergyConfig = create(builder, "${HTConstants.ITEM}.${RagiumAPI.MOD_ID}.$name", name, usage, capacity) @JvmStatic @@ -54,7 +56,7 @@ data class HTEnergyConfig(private val capacity: IntSupplier, private val rate: I translationKey: String, name: String, usage: Int, - capacity: Int + capacity: Long ): HTEnergyConfig { builder.translation(translationKey).push(name) val config = HTEnergyConfig(energyCapacity(builder, capacity), energyRate(builder, usage)) diff --git a/src/lib/kotlin/hiiragi283/ragium/api/util/HTStorageHelper.kt b/src/lib/kotlin/hiiragi283/ragium/api/util/HTStorageHelper.kt index a67d87847..6e3a6ef5f 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/util/HTStorageHelper.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/util/HTStorageHelper.kt @@ -28,7 +28,7 @@ import java.util.function.Consumer import kotlin.math.roundToInt /** - * 参照 : [Mekanism - StorageUtils](https://github.com/mekanism/Mekanism/blob/1.21.x/src/main/java/mekanism/common/util/StorageUtils.java) + * 参照 : [Mekanism - StorageUtils](https://github.com/mekanism/Mekanism/blob/26.3/src/main/java/mekanism/common/util/StorageUtils.java) * @author Hiiragi Tsubasa * @since 26.1.0 */ @@ -58,7 +58,7 @@ data object HTStorageHelper { } /** - * 参照 : [Mekanism - MekanismUtils.redstoneLevelFromContents](https://github.com/mekanism/Mekanism/blob/1.21.x/src/main/java/mekanism/common/util/MekanismUtils.java) + * 参照 : [Mekanism - MekanismUtils.redstoneLevelFromContents](https://github.com/mekanism/Mekanism/blob/26.3/src/main/java/mekanism/common/util/MekanismUtils.java) */ @JvmStatic fun calculateRedstoneLevel(amount: Int, capacity: Int): Int = @@ -70,7 +70,7 @@ data object HTStorageHelper { @JvmStatic fun calculateRedstoneLevel(handler: HTEnergyHandler): Int = - Mth.lerpDiscrete(handler.filledLevel, Redstone.SIGNAL_NONE, Redstone.SIGNAL_MAX) + Mth.lerpDiscrete(handler.filledLevelAsFloat, Redstone.SIGNAL_NONE, Redstone.SIGNAL_MAX) // Energy // @@ -118,7 +118,7 @@ data object HTStorageHelper { isCreative -> HTCommonTranslation.STORED_FE.translate(HTCommonTranslation.INFINITE) else -> HTCommonTranslation.STORED_FE.translate( - HTCommonTranslation.FRACTION.translate(handler.amount, handler.capacity) + HTCommonTranslation.FRACTION.translate(handler.amountAsInt, handler.amountAsLong) ) }.let(consumer::accept) } @@ -132,8 +132,7 @@ data object HTStorageHelper { @JvmStatic private fun getEnergyDurability(container: ItemStack): Double { val handler: HTEnergyHandler = HTEnergyCapabilities.getHandler(ItemAccess.forStack(container)) ?: return 1.0 - val bestRatio: Double = handler.filledLevel.toDouble() - return 1 - bestRatio + return 1 - handler.filledLevelAsDouble } // Fluid // diff --git a/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTBasicRecipeCategory.kt b/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTBasicRecipeCategory.kt index 3f3efbe7c..98e6830fd 100644 --- a/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTBasicRecipeCategory.kt +++ b/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTBasicRecipeCategory.kt @@ -28,7 +28,7 @@ import net.minecraft.world.item.crafting.RecipeType /** * Hiiragi Seriesで使用される[IRecipeCategory]の拡張クラスです。 * - * 参照 : [Mekanism - BaseRecipeCategory](https://github.com/mekanism/Mekanism/blob/1.21.x/src/main/java/mekanism/client/recipe_viewer/jei/BaseRecipeCategory.java) + * 参照 : [Mekanism - BaseRecipeCategory](https://github.com/mekanism/Mekanism/blob/26.3/src/integration/jei/main/java/mekanism/client/recipe_viewer/jei/BaseRecipeCategory.java) * @author Hiiragi Tsubasa * @since 26.1.0 */ diff --git a/src/main/kotlin/hiiragi283/ragium/common/Ragium.kt b/src/main/kotlin/hiiragi283/ragium/common/Ragium.kt index b250b836d..b527dad59 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/Ragium.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/Ragium.kt @@ -5,6 +5,7 @@ import hiiragi283.lib.data.loot.predicates.HTBlockSetLootCondition import hiiragi283.lib.gui.sync.HTFluidSyncPayload import hiiragi283.lib.gui.sync.HTIntSyncPayload import hiiragi283.lib.gui.sync.HTItemSyncPayload +import hiiragi283.lib.gui.sync.HTLongSyncPayload import hiiragi283.lib.item.HTCreativeModeTabHelper import hiiragi283.lib.mod.HTCommonMod import hiiragi283.lib.network.HTPayloadHandlers @@ -141,6 +142,7 @@ data object Ragium : HTCommonMod() { } event.register(RagiumRegistries.Keys.SYNCABLE_SLOT_TYPE) { helper -> helper.register(RagiumAPI.id("integer"), HTIntSyncPayload.TYPE) + helper.register(RagiumAPI.id("long"), HTLongSyncPayload.TYPE) helper.register(RagiumAPI.id(HTConstants.ITEM), HTItemSyncPayload.TYPE) helper.register(RagiumAPI.id(HTConstants.FLUID), HTFluidSyncPayload.TYPE) } diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTBlockEntityWithMenu.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTBlockEntityWithMenu.kt index 63a3b591d..401a9010d 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTBlockEntityWithMenu.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTBlockEntityWithMenu.kt @@ -1,8 +1,8 @@ package hiiragi283.ragium.common.block.entity import hiiragi283.lib.gui.sync.HTFluidSyncSlot -import hiiragi283.lib.gui.sync.HTIntSyncSlot import hiiragi283.lib.gui.sync.HTItemSyncSlot +import hiiragi283.lib.gui.sync.HTLongSyncSlot import hiiragi283.lib.gui.sync.HTSyncType import hiiragi283.lib.gui.widget.HTWidgetHolder import hiiragi283.lib.transfer.energy.HTBasicEnergyHandler @@ -21,6 +21,6 @@ fun interface HTBlockEntityWithMenu { } fun HTWidgetHolder.track(handler: HTBasicEnergyHandler, syncType: HTSyncType = HTSyncType.S2C) { - this.track(HTIntSyncSlot.create(handler::amount, handler::setAmount), syncType) + this.track(HTLongSyncSlot.create(handler::getAmountAsLong, handler::setAmount), syncType) } } diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/RagiumBlockEntityTypes.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/RagiumBlockEntityTypes.kt index 7f3f05b42..fadc977a0 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/RagiumBlockEntityTypes.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/RagiumBlockEntityTypes.kt @@ -198,7 +198,7 @@ data object RagiumBlockEntityTypes { fun registerProcessor(type: BlockEntityType) { registerBlockEntity(type) event.registerBlockEntity(HTEnergyCapabilities.block, type) { processor: BE, _ -> - processor.handler.asForge() + processor.handler } } @@ -241,6 +241,6 @@ data object RagiumBlockEntityTypes { event.registerBlockEntity( HTEnergyCapabilities.block, UPGRADE_STATION.get() - ) { blockEntity, _ -> blockEntity.energyHandler.asForge() } + ) { blockEntity, _ -> blockEntity.energyHandler } } } diff --git a/src/main/kotlin/hiiragi283/ragium/common/gui/menu/HTContainerMenu.kt b/src/main/kotlin/hiiragi283/ragium/common/gui/menu/HTContainerMenu.kt index ba60921eb..20d61abf2 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/gui/menu/HTContainerMenu.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/gui/menu/HTContainerMenu.kt @@ -26,7 +26,7 @@ import net.neoforged.neoforge.world.inventory.StackCopySlot /** * Hiiragi Seriesで使用される[AbstractContainerMenu]の拡張クラスです。 * - * 参照 : [Mekanism - MekanismContainer](https://github.com/mekanism/Mekanism/blob/1.21.x/src/main/java/mekanism/common/inventory/container/MekanismContainer.java) + * 参照 : [Mekanism - MekanismContainer](https://github.com/mekanism/Mekanism/blob/26.3/src/main/java/mekanism/common/inventory/container/MekanismContainer.java) * @author Hiiragi Tsubasa * @since 26.1.0 */ diff --git a/src/main/kotlin/hiiragi283/ragium/common/gui/widget/HTEnergySlotWidget.kt b/src/main/kotlin/hiiragi283/ragium/common/gui/widget/HTEnergySlotWidget.kt index ff57885c4..371ee0de2 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/gui/widget/HTEnergySlotWidget.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/gui/widget/HTEnergySlotWidget.kt @@ -9,5 +9,12 @@ class HTEnergySlotWidget(handler: HTEnergyHandler, x: Int, y: Int) : HTEnergyHandler by handler { override fun getType(): HTWidgetType = RagiumWidgetTypes.ENERGY.get() - override fun toString(): String = "HTEnergySlotWidget(bounds=$bounds, amount=$amount, capacity=$capacity)" + override fun toString(): String = + "HTEnergySlotWidget(bounds=$bounds, amount=$amountAsLong, capacity=$capacityAsLong)" + + @Suppress("NonExtendableApiUsage") + override fun getAmountAsInt(): Int = super.getAmountAsInt() + + @Suppress("NonExtendableApiUsage") + override fun getCapacityAsInt(): Int = super.getCapacityAsInt() } diff --git a/src/main/kotlin/hiiragi283/ragium/common/transfer/energy/HTMachineEnergyHandler.kt b/src/main/kotlin/hiiragi283/ragium/common/transfer/energy/HTMachineEnergyHandler.kt index 610d17aa5..8598341ef 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/transfer/energy/HTMachineEnergyHandler.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/transfer/energy/HTMachineEnergyHandler.kt @@ -13,7 +13,7 @@ import java.util.function.Predicate * 参考 : [Mekanism - MachineEnergyContainer](https://github.com/mekanism/Mekanism/blob/26.3/src/main/java/mekanism/common/capabilities/energy/MachineEnergyContainer.java) */ sealed class HTMachineEnergyHandler( - capacity: Int, + capacity: Long, val baseEnergyPerTick: Int, val blockEntity: BE, canExtract: Predicate, From e7056c975aeaf1585f622f73ec1df16d3e933f50 Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Tue, 13 Oct 2026 12:13:05 +0900 Subject: [PATCH 24/25] =?UTF-8?q?feat!:=20Upgrade=20Station=20=E3=81=8B?= =?UTF-8?q?=E3=82=89=E6=B6=B2=E4=BD=93=E3=82=BF=E3=83=B3=E3=82=AF=E3=81=A8?= =?UTF-8?q?=E3=82=A8=E3=83=8D=E3=83=AB=E3=82=AE=E3=83=BC=E3=82=B9=E3=83=88?= =?UTF-8?q?=E3=83=AC=E3=83=BC=E3=82=B8=E3=82=92=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lib/transfer/item/HTEnergyItemSlot.kt | 16 +++- .../block/entity/RagiumBlockEntityTypes.kt | 4 - .../misc/HTUpgradeStationBlockEntity.kt | 95 +------------------ 3 files changed, 14 insertions(+), 101 deletions(-) diff --git a/src/lib/kotlin/hiiragi283/lib/transfer/item/HTEnergyItemSlot.kt b/src/lib/kotlin/hiiragi283/lib/transfer/item/HTEnergyItemSlot.kt index 67d35e7ba..47651fd09 100644 --- a/src/lib/kotlin/hiiragi283/lib/transfer/item/HTEnergyItemSlot.kt +++ b/src/lib/kotlin/hiiragi283/lib/transfer/item/HTEnergyItemSlot.kt @@ -31,16 +31,24 @@ class HTEnergyItemSlot( ) : HTBasicItemSlot(Item.ABSOLUTE_MAX_STACK_SIZE, canExtract, canInsert, filter, listener) { companion object { @JvmStatic - fun fill(handler: HTEnergyHandler, listener: Runnable?): HTEnergyItemSlot = HTEnergyItemSlot( + fun fill( + handler: HTEnergyHandler, + listener: Runnable?, + filter: Predicate = HTTransferPredicates.alwaysTrue() + ): HTEnergyItemSlot = HTEnergyItemSlot( handler, HTTransferPredicates.notExternal().or { resource: ItemResource, _ -> !canFill(resource) }, HTTransferPredicates.internalOnly().or { resource: ItemResource, _ -> canFill(resource) }, - HTTransferPredicates.alwaysTrue(), + filter, listener ) @JvmStatic - fun drain(handler: HTEnergyHandler, listener: Runnable?): HTEnergyItemSlot = HTEnergyItemSlot( + fun drain( + handler: HTEnergyHandler, + listener: Runnable?, + filter: Predicate = HTTransferPredicates.alwaysTrue() + ): HTEnergyItemSlot = HTEnergyItemSlot( handler, HTTransferPredicates.notExternal().or { resource: ItemResource, _ -> !canDrain(handler, resource) @@ -48,7 +56,7 @@ class HTEnergyItemSlot( HTTransferPredicates.internalOnly().or { resource: ItemResource, _ -> canDrain(handler, resource) }, - HTTransferPredicates.alwaysTrue(), + filter, listener ) diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/RagiumBlockEntityTypes.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/RagiumBlockEntityTypes.kt index fadc977a0..8f54a42e9 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/RagiumBlockEntityTypes.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/RagiumBlockEntityTypes.kt @@ -238,9 +238,5 @@ data object RagiumBlockEntityTypes { ) { _, _ -> InfiniteEnergyHandler.INSTANCE } // Misc registerBlockEntity(UPGRADE_STATION.get()) - event.registerBlockEntity( - HTEnergyCapabilities.block, - UPGRADE_STATION.get() - ) { blockEntity, _ -> blockEntity.energyHandler } } } diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/misc/HTUpgradeStationBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/misc/HTUpgradeStationBlockEntity.kt index 2f25649b6..055d0ddd6 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/misc/HTUpgradeStationBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/misc/HTUpgradeStationBlockEntity.kt @@ -1,12 +1,8 @@ package hiiragi283.ragium.common.block.entity.misc -import hiiragi283.lib.HTConstants import hiiragi283.lib.gui.HTBackgroundType import hiiragi283.lib.gui.HTSlotHelper import hiiragi283.lib.gui.widget.HTWidgetHolder -import hiiragi283.lib.transfer.energy.HTBasicEnergyHandler -import hiiragi283.lib.transfer.fluid.HTBasicFluidTank -import hiiragi283.lib.transfer.fluid.HTFluidTank import hiiragi283.lib.transfer.holder.HTResourceSlotHolder import hiiragi283.lib.transfer.item.HTBasicItemSlot import hiiragi283.lib.transfer.item.HTItemSlot @@ -18,17 +14,12 @@ import hiiragi283.ragium.common.block.entity.HTBlockEntity import hiiragi283.ragium.common.block.entity.HTBlockEntityWithMenu import hiiragi283.ragium.common.block.entity.RagiumBlockEntityTypes import hiiragi283.ragium.common.gui.HTWidgetSlot -import hiiragi283.ragium.common.gui.widget.HTEnergySlotWidget -import hiiragi283.ragium.common.gui.widget.HTFluidWidget import hiiragi283.ragium.common.gui.widget.HTItemWidget -import hiiragi283.ragium.common.transfer.fluid.HTVariableFluidTank import net.minecraft.core.BlockPos import net.minecraft.core.Direction import net.minecraft.server.level.ServerLevel import net.minecraft.world.item.ItemStack import net.minecraft.world.level.block.state.BlockState -import net.minecraft.world.level.storage.ValueInput -import net.minecraft.world.level.storage.ValueOutput import net.neoforged.neoforge.transfer.item.ItemResource import net.neoforged.neoforge.world.inventory.StackCopySlot @@ -36,28 +27,6 @@ class HTUpgradeStationBlockEntity(worldPosition: BlockPos, blockState: BlockStat HTBlockEntity(RagiumBlockEntityTypes.UPGRADE_STATION.get(), worldPosition, blockState), HTBlockEntityWithMenu { - lateinit var energyHandler: HTBasicEnergyHandler - private set - - override fun initializeVariables(listener: Runnable) { - super.initializeVariables(listener) - energyHandler = HTBasicEnergyHandler.input(8000, listener) // TODO - } - - lateinit var inputTank: HTBasicFluidTank - private set - - override fun createFluidHandler(listener: Runnable): HTResourceSlotHolder { - inputTank = HTVariableFluidTank.create({ 4000 }, listener) // TODO - return object : HTResourceSlotHolder { - override fun getSlots(side: Direction?): List = listOf(inputTank) - - override fun canInsert(side: Direction?): Boolean = true - - override fun canExtract(side: Direction?): Boolean = true - } - } - lateinit var toolSlot: HTBasicItemSlot override fun createItemHandler(listener: Runnable): HTResourceSlotHolder { @@ -75,75 +44,15 @@ class HTUpgradeStationBlockEntity(worldPosition: BlockPos, blockState: BlockStat } } - override fun writeValue(output: ValueOutput) { - super.writeValue(output) - output.putChild(HTConstants.ENERGY, energyHandler) - } - - override fun readValue(input: ValueInput) { - super.readValue(input) - input.readChild(HTConstants.ENERGY, energyHandler) - } - - /*override fun onUpdateServer(level: ServerLevel, pos: BlockPos, state: BlockState): Boolean = - useTransaction { transaction: Transaction -> - // 液体の搬入 - val fluidMoved: Int = ResourceHandlerUtil.moveStacking( - getFluidHandler(null), - HTFluidCapabilities.getCapability(itemAccess), - HTTransferPredicates.alwaysTrue(), - Int.MAX_VALUE, // TODO, - transaction - ) - // 充電 - val energyMoved: Int = EnergyHandlerUtil.move( - this.energyHandler.asForge(), - HTEnergyCapabilities.getCapability(itemAccess), - Int.MAX_VALUE, // TODO, - transaction - ) - val moved: Boolean = fluidMoved > 0 || energyMoved > 0 - if (moved) { - transaction.commit() - } - moved - } - - private val itemAccess = ToolItemAccess() - - private inner class ToolItemAccess : ItemAccess { - override fun getResource(): ItemResource = toolSlot.resource - - override fun getAmount(): Int = toolSlot.amount - - override fun insert(resource: ItemResource, amount: Int, transaction: TransactionContext): Int = - toolSlot.insert(resource, amount, transaction, HTTransferAccess.INTERNAL) - - override fun extract(resource: ItemResource, amount: Int, transaction: TransactionContext): Int = - toolSlot.extract(resource, amount, transaction, HTTransferAccess.INTERNAL) - }*/ - override fun onUpdateServer(level: ServerLevel, pos: BlockPos, state: BlockState): Boolean = false override fun setupMenu(widgetHolder: HTWidgetHolder) { - // Energy - widgetHolder += HTEnergySlotWidget(energyHandler, HTSlotHelper.getSlotPosX(2.5), HTSlotHelper.getSlotPosY(1.5)) - widgetHolder.track(energyHandler) - // Fluid - widgetHolder += HTFluidWidget.Tank( - inputTank, - HTSlotHelper.getSlotPosX(1), - HTSlotHelper.getSlotPosY(0), - HTBackgroundType.BOTH, - false - ) - widgetHolder.track(inputTank) // Tool widgetHolder += HTItemWidget.Container( toolSlot, 0, - HTSlotHelper.getSlotPosX(2.5), - HTSlotHelper.getSlotPosY(0.5), + HTSlotHelper.getSlotPosX(4), + HTSlotHelper.getSlotPosY(1), HTBackgroundType.NONE ) widgetHolder.track(toolSlot) From ab9fb6a596bd9894e534e70d2d9f9d8ef19c8267 Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Tue, 13 Oct 2026 15:53:04 +0900 Subject: [PATCH 25/25] =?UTF-8?q?chore:=20JEI=E3=82=92=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=20feat:=20=E6=B6=B2=E4=BD=93=E3=83=9D=E3=83=BC=E3=82=B7?= =?UTF-8?q?=E3=83=A7=E3=83=B3=E3=81=A8=E6=B6=B2=E4=BD=93=E5=85=A5=E3=82=8A?= =?UTF-8?q?=E3=83=90=E3=82=B1=E3=83=84=E3=81=AB=E9=96=A2=E3=81=99=E3=82=8B?= =?UTF-8?q?JEI=E3=83=AC=E3=82=B7=E3=83=94=E3=82=92=EF=BC=8C=E9=81=B8?= =?UTF-8?q?=E6=8A=9E=E4=B8=AD=E3=81=AE=E6=B6=B2=E4=BD=93=E3=81=AB=E5=BF=9C?= =?UTF-8?q?=E3=81=98=E3=81=A6=E8=87=AA=E5=8B=95=E7=94=9F=E6=88=90=E3=81=99?= =?UTF-8?q?=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gradle/libs.versions.toml | 2 +- .../client/integration/jei/RagiumJeiPlugin.kt | 53 +++------ .../jei/advanced/HTFluidBucketRecipePlugin.kt | 103 ++++++++++++++++++ .../jei/advanced/HTPotionFluidRecipePlugin.kt | 72 ++++++++++++ .../hiiragi283/lib/fluid/FluidStacks.kt | 8 ++ .../lib/integration/jei/JeiExtensions.kt | 7 ++ .../jei/category/HTBasicRecipeCategory.kt | 3 + .../HTItemAndFluidToFluidRecipeCategory.kt | 54 --------- .../HTItemAndFluidToItemRecipeCategory.kt | 54 --------- .../HTItemAndFluidToRecipeCategory.kt | 87 +++++++++++++++ .../category/HTItemOrFluidRecipeCategory.kt | 59 ---------- .../common/recipe/RTBucketFillingRecipe.kt | 4 +- .../item/HTCustomBucketItemHandler.kt | 3 +- 13 files changed, 302 insertions(+), 207 deletions(-) create mode 100644 src/client/kotlin/hiiragi283/ragium/client/integration/jei/advanced/HTFluidBucketRecipePlugin.kt create mode 100644 src/client/kotlin/hiiragi283/ragium/client/integration/jei/advanced/HTPotionFluidRecipePlugin.kt delete mode 100644 src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTItemAndFluidToFluidRecipeCategory.kt delete mode 100644 src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTItemAndFluidToItemRecipeCategory.kt create mode 100644 src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTItemAndFluidToRecipeCategory.kt delete mode 100644 src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTItemOrFluidRecipeCategory.kt diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index e5a66398d..3e4394f1a 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -16,7 +16,7 @@ mod-publish = "2.1.1" ae2 = "26.1.12-beta" curios = "15.0.0+26.1.2" jade = "26.1.10+neoforge" -jei = "29.43.0.106" +jei = "29.47.0.109" [libraries] diff --git a/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiPlugin.kt b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiPlugin.kt index d87a07eac..542cbe241 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiPlugin.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiPlugin.kt @@ -1,32 +1,25 @@ package hiiragi283.ragium.client.integration.jei import hiiragi283.lib.HTPhysicalSideHelper -import hiiragi283.lib.fluid.HTFlowingFluidHelper import hiiragi283.lib.integration.jei.HTJeiDrawables import hiiragi283.lib.integration.jei.HTJeiPlugin import hiiragi283.lib.integration.jei.HTJeiRecipeHelper -import hiiragi283.lib.integration.jei.HTJeiRecipeHolder -import hiiragi283.lib.integration.jei.category.HTItemAndFluidToItemRecipeCategory +import hiiragi283.lib.integration.jei.category.HTItemAndFluidToRecipeCategory import hiiragi283.lib.integration.jei.category.HTItemToDoubleItemRecipeCategory import hiiragi283.lib.integration.jei.category.HTSingleRecipeCategory import hiiragi283.lib.integration.jei.category.HTSingleToItemAndFluidRecipeCategory import hiiragi283.lib.integration.jei.category.HTTripleItemToRecipeCategory import hiiragi283.lib.integration.jei.ingredient.HTIngredientTypes import hiiragi283.lib.item.HTPotionBasedItem -import hiiragi283.lib.item.alchemy.HTBottleType import hiiragi283.lib.item.alchemy.HTPotionHelper -import hiiragi283.lib.recipe.ingredient.HTPotionFluidIngredient -import hiiragi283.lib.recipe.result.HTItemResult import hiiragi283.lib.registry.asHolderSequence -import hiiragi283.lib.registry.getKeyOrThrow import hiiragi283.ragium.api.RagiumAPI import hiiragi283.ragium.api.data.RagiumDataComponents -import hiiragi283.ragium.api.data.recipe.builder.RagiumRecipeBuilders -import hiiragi283.ragium.api.recipe.RTCentrifugingRecipe -import hiiragi283.ragium.api.recipe.RTFillingRecipe import hiiragi283.ragium.api.recipe.RagiumRecipeLookups import hiiragi283.ragium.api.recipe.RagiumRecipeTypes import hiiragi283.ragium.client.gui.screen.HTWidgetContainerScreen +import hiiragi283.ragium.client.integration.jei.advanced.HTFluidBucketRecipePlugin +import hiiragi283.ragium.client.integration.jei.advanced.HTPotionFluidRecipePlugin import hiiragi283.ragium.client.integration.jei.category.RTCentrifugingRecipeCategory import hiiragi283.ragium.client.integration.jei.category.RTElectrolyzingRecipeCategory import hiiragi283.ragium.client.integration.jei.category.RTEnchantingRecipeCategory @@ -37,18 +30,12 @@ import hiiragi283.ragium.client.integration.jei.category.RTResourceExtractingRec import hiiragi283.ragium.client.integration.jei.category.RTWashingRecipeCategory import hiiragi283.ragium.common.block.RagiumBlocks import hiiragi283.ragium.common.fluid.RagiumFluids -import hiiragi283.ragium.common.recipe.RTBucketCentrifugingRecipe -import hiiragi283.ragium.common.recipe.RTBucketFillingRecipe -import hiiragi283.ragium.common.recipe.RTPotionBottleCentrifugingRecipe -import hiiragi283.ragium.common.recipe.RTPotionBottleFillingRecipe import mezz.jei.api.JeiPlugin import mezz.jei.api.constants.RecipeTypes import mezz.jei.api.helpers.IGuiHelper -import mezz.jei.api.helpers.IJeiHelpers import mezz.jei.api.helpers.IPlatformFluidHelper -import mezz.jei.api.ingredients.IIngredientHelper -import mezz.jei.api.ingredients.subtypes.UidContext import mezz.jei.api.neoforge.NeoForgeTypes +import mezz.jei.api.registration.IAdvancedRegistration import mezz.jei.api.registration.IExtraIngredientRegistration import mezz.jei.api.registration.IGuiHandlerRegistration import mezz.jei.api.registration.IModIngredientRegistration @@ -59,30 +46,17 @@ import mezz.jei.api.registration.ISubtypeRegistration import net.minecraft.core.Holder import net.minecraft.core.component.DataComponents import net.minecraft.core.registries.BuiltInRegistries -import net.minecraft.resources.Identifier import net.minecraft.world.item.Item -import net.minecraft.world.item.ItemStack -import net.minecraft.world.item.alchemy.Potion import net.minecraft.world.item.alchemy.Potions import net.neoforged.neoforge.fluids.FluidStack @JeiPlugin class RagiumJeiPlugin : HTJeiPlugin(RagiumAPI.MOD_ID) { companion object { - @JvmStatic - private fun listFluidStacks(helper: IJeiHelpers): Iterable = helper.ingredientManager - .getAllIngredients(NeoForgeTypes.FLUID_STACK) - .filter(HTFlowingFluidHelper::isSource) - @JvmStatic private fun listItems(): Sequence> = HTPhysicalSideHelper .filteredLookup(BuiltInRegistries.ITEM) .asHolderSequence() - - @JvmStatic - private fun listPotions(): Sequence> = HTPhysicalSideHelper - .filteredLookup(BuiltInRegistries.POTION) - .asHolderSequence() } override fun registerItemSubtypes(registration: ISubtypeRegistration) { @@ -117,7 +91,9 @@ class RagiumJeiPlugin : HTJeiPlugin(RagiumAPI.MOD_ID) { override fun registerExtraIngredients(registration: IExtraIngredientRegistration) { registration.addExtraIngredients( NeoForgeTypes.FLUID_STACK, - listPotions() + HTPhysicalSideHelper + .filteredLookup(BuiltInRegistries.POTION) + .asHolderSequence() .filter { !it.`is`(Potions.WATER) } .mapNotNull { HTPotionHelper.createFluid(it).getOrNull()?.create() } .toList() @@ -151,7 +127,7 @@ class RagiumJeiPlugin : HTJeiPlugin(RagiumAPI.MOD_ID) { RagiumRecipeTypes.CUTTING, guiHelper.createDrawableItemLike(RagiumBlocks.CUTTING_MACHINE) ), - HTItemAndFluidToItemRecipeCategory( + HTItemAndFluidToRecipeCategory.ToItem( RagiumJeiRecipeTypes.FILLING, RagiumRecipeTypes.FILLING, guiHelper.createDrawableItemLike(RagiumBlocks.MACHINE_CASING) @@ -179,7 +155,7 @@ class RagiumJeiPlugin : HTJeiPlugin(RagiumAPI.MOD_ID) { guiHelper.createDrawableItemLike(RagiumBlocks.REFINERY) ), // Chemical - HTItemAndFluidToItemRecipeCategory( + HTItemAndFluidToRecipeCategory.ToItem( RagiumJeiRecipeTypes.BATHING, RagiumRecipeTypes.BATHING, guiHelper.createDrawableItemLike(RagiumBlocks.CHEMICAL_BATH) @@ -236,10 +212,10 @@ class RagiumJeiPlugin : HTJeiPlugin(RagiumAPI.MOD_ID) { // Arcane HTJeiRecipeHelper.addRecipes(registration, RagiumJeiRecipeTypes.ENCHANTING, RagiumRecipeLookups.ENCHANTING) - registerDynamicRecipes(registration) + // registerDynamicRecipes(registration) } - private fun registerDynamicRecipes(registration: IRecipeRegistration) { + /*private fun registerDynamicRecipes(registration: IRecipeRegistration) { val fluidHelper: IIngredientHelper = registration.ingredientManager.getIngredientHelper(NeoForgeTypes.FLUID_STACK) // Mechanical @@ -335,7 +311,7 @@ class RagiumJeiPlugin : HTJeiPlugin(RagiumAPI.MOD_ID) { } ) // Chemical - } + }*/ override fun registerRecipeCatalysts(registration: IRecipeCatalystRegistration) { // Mechanical @@ -370,4 +346,9 @@ class RagiumJeiPlugin : HTJeiPlugin(RagiumAPI.MOD_ID) { registration.addGuiContainerHandler(HTWidgetContainerScreen::class.java, HTWidgetContainerJeiHandler) registration.addGhostIngredientHandler(HTWidgetContainerScreen::class.java, HTWidgetContainerJeiHandler) } + + override fun registerAdvanced(registration: IAdvancedRegistration) { + registration.addRecipeManagerPlugin(HTFluidBucketRecipePlugin) + registration.addRecipeManagerPlugin(HTPotionFluidRecipePlugin) + } } diff --git a/src/client/kotlin/hiiragi283/ragium/client/integration/jei/advanced/HTFluidBucketRecipePlugin.kt b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/advanced/HTFluidBucketRecipePlugin.kt new file mode 100644 index 000000000..4c366f2ac --- /dev/null +++ b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/advanced/HTFluidBucketRecipePlugin.kt @@ -0,0 +1,103 @@ +package hiiragi283.ragium.client.integration.jei.advanced + +import hiiragi283.lib.fluid.createBucket +import hiiragi283.lib.integration.jei.HTJeiRecipeHelper +import hiiragi283.lib.integration.jei.HTJeiRecipeHolder +import hiiragi283.lib.integration.jei.getIngredient +import hiiragi283.ragium.api.data.recipe.builder.RagiumRecipeBuilders +import hiiragi283.ragium.client.integration.jei.RagiumJeiRecipeTypes +import hiiragi283.ragium.common.recipe.RTBucketCentrifugingRecipe +import hiiragi283.ragium.common.recipe.RTBucketFillingRecipe +import mezz.jei.api.constants.VanillaTypes +import mezz.jei.api.neoforge.NeoForgeTypes +import mezz.jei.api.recipe.IFocus +import mezz.jei.api.recipe.RecipeIngredientRole +import mezz.jei.api.recipe.advanced.IRecipeManagerPlugin +import mezz.jei.api.recipe.types.IRecipeType +import net.minecraft.world.item.BucketItem +import net.minecraft.world.item.ItemStack +import net.minecraft.world.item.ItemStackTemplate +import net.neoforged.neoforge.common.Tags +import net.neoforged.neoforge.fluids.FluidStack +import net.neoforged.neoforge.transfer.fluid.FluidUtil + +data object HTFluidBucketRecipePlugin : IRecipeManagerPlugin { + private fun isBucket(stack: ItemStack): Boolean = stack.item is BucketItem || stack.`is`(Tags.Items.BUCKETS) + + private fun isFilledBucket(stack: ItemStack): Boolean = isBucket(stack) && !stack.`is`(Tags.Items.BUCKETS_EMPTY) + + override fun getRecipeTypes(focus: IFocus): List> = when { + focus.getIngredient(VanillaTypes.ITEM_STACK)?.takeIf(::isFilledBucket) != null -> + when (focus.role) { + RecipeIngredientRole.INPUT -> listOf(RagiumJeiRecipeTypes.CENTRIFUGING) + RecipeIngredientRole.OUTPUT -> listOf(RagiumJeiRecipeTypes.FILLING) + else -> listOf() + } + + focus.getIngredient(NeoForgeTypes.FLUID_STACK)?.takeIf { !it.createBucket().isEmpty } != null -> + when (focus.role) { + RecipeIngredientRole.INPUT -> listOf(RagiumJeiRecipeTypes.FILLING) + RecipeIngredientRole.OUTPUT -> listOf(RagiumJeiRecipeTypes.CENTRIFUGING) + else -> listOf() + } + + else -> listOf() + } + + override fun getRecipes(recipeType: IRecipeType, focus: IFocus): List { + // 液体入りバケツを選択中の場合 + val filledBucket: ItemStack? = focus.getIngredient(VanillaTypes.ITEM_STACK)?.takeIf(::isFilledBucket) + if (filledBucket != null) { + val fluidIn: FluidStack = FluidUtil.getFirstStackContained(filledBucket) + val remainder: ItemStackTemplate? = filledBucket.craftingRemainder + if (!fluidIn.isEmpty && remainder != null) { + return when (focus.role) { + // Filled Bucket -> Empty Bucket + Fluid + RecipeIngredientRole.INPUT if recipeType == RagiumJeiRecipeTypes.CENTRIFUGING -> + RagiumRecipeBuilders.centrifuging { + ingredient = HTJeiRecipeHelper.fakeItem(filledBucket) + itemResult { from(remainder) } + fluidResult { from(fluidIn) } + progressData = RTBucketCentrifugingRecipe.progressData + }.buildSynthetic(::HTJeiRecipeHolder) + + // Empty Bucket + Fluid -> Filled Bucket + RecipeIngredientRole.OUTPUT if recipeType == RagiumJeiRecipeTypes.FILLING -> + RagiumRecipeBuilders.filling { + itemIngredient = HTJeiRecipeHelper.fakeItem(remainder) + fluidIngredient = HTJeiRecipeHelper.fakeFluid(fluidIn) + result { from(filledBucket) } + progressData = RTBucketFillingRecipe.progressData + }.buildSynthetic(::HTJeiRecipeHolder) + + else -> null + }.let(::listOfNotNull).filterIsInstance(recipeType.recipeClass) + } + } + // 液体を選択中の場合 + val fluid: FluidStack = focus.getIngredient(NeoForgeTypes.FLUID_STACK) ?: return listOf() + val bucket: ItemStack = fluid.createBucket() + val remainder: ItemStackTemplate = bucket.craftingRemainder ?: return listOf() + return when (focus.role) { + RecipeIngredientRole.INPUT if recipeType == RagiumJeiRecipeTypes.FILLING -> + RagiumRecipeBuilders.filling { + itemIngredient = HTJeiRecipeHelper.fakeItem(remainder) + fluidIngredient = HTJeiRecipeHelper.fakeFluid(fluid) + result { from(bucket) } + progressData = RTBucketFillingRecipe.progressData + }.buildSynthetic(::HTJeiRecipeHolder) + + RecipeIngredientRole.OUTPUT if recipeType == RagiumJeiRecipeTypes.CENTRIFUGING -> + RagiumRecipeBuilders.centrifuging { + ingredient = HTJeiRecipeHelper.fakeItem(bucket) + itemResult { from(remainder) } + fluidResult { from(fluid) } + progressData = RTBucketCentrifugingRecipe.progressData + }.buildSynthetic(::HTJeiRecipeHolder) + + else -> null + }.let(::listOfNotNull).filterIsInstance(recipeType.recipeClass) + } + + override fun getRecipes(recipeType: IRecipeType): List = listOf() +} diff --git a/src/client/kotlin/hiiragi283/ragium/client/integration/jei/advanced/HTPotionFluidRecipePlugin.kt b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/advanced/HTPotionFluidRecipePlugin.kt new file mode 100644 index 000000000..dd9edb4f1 --- /dev/null +++ b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/advanced/HTPotionFluidRecipePlugin.kt @@ -0,0 +1,72 @@ +package hiiragi283.ragium.client.integration.jei.advanced + +import hiiragi283.lib.integration.jei.HTJeiRecipeHelper +import hiiragi283.lib.integration.jei.HTJeiRecipeHolder +import hiiragi283.lib.integration.jei.getIngredient +import hiiragi283.lib.item.alchemy.HTBottleType +import hiiragi283.lib.item.alchemy.HTPotionHelper +import hiiragi283.ragium.api.data.recipe.builder.RagiumRecipeBuilders +import hiiragi283.ragium.client.integration.jei.RagiumJeiRecipeTypes +import hiiragi283.ragium.common.recipe.RTPotionBottleCentrifugingRecipe +import hiiragi283.ragium.common.recipe.RTPotionBottleFillingRecipe +import mezz.jei.api.neoforge.NeoForgeTypes +import mezz.jei.api.recipe.IFocus +import mezz.jei.api.recipe.RecipeIngredientRole +import mezz.jei.api.recipe.advanced.IRecipeManagerPlugin +import mezz.jei.api.recipe.types.IRecipeType +import net.minecraft.core.component.DataComponentPatch +import net.neoforged.neoforge.fluids.FluidStack + +data object HTPotionFluidRecipePlugin : IRecipeManagerPlugin { + private fun getPotionFluid(focus: IFocus<*>): FluidStack? = focus + .getIngredient(NeoForgeTypes.FLUID_STACK) + ?.takeIf(HTPotionHelper::hasAnyEffect) + + override fun getRecipeTypes(focus: IFocus): List> = when { + getPotionFluid(focus) == null -> listOf() + + else -> when (focus.role) { + RecipeIngredientRole.INPUT -> listOf(RagiumJeiRecipeTypes.FILLING) + RecipeIngredientRole.OUTPUT -> listOf(RagiumJeiRecipeTypes.CENTRIFUGING) + else -> listOf() + } + } + + override fun getRecipes(recipeType: IRecipeType, focus: IFocus): List { + val stackFocused: FluidStack = + getPotionFluid(focus)?.copyWithAmount(HTPotionHelper.BOTTLE_AMOUNT) ?: return listOf() + val potionPatch: DataComponentPatch = HTPotionHelper.createPotionPatch(stackFocused) + return when (focus.role) { + // 液体ポーションをポーション瓶に入れる + RecipeIngredientRole.INPUT if recipeType == RagiumJeiRecipeTypes.FILLING -> + HTBottleType.entries.map { bottleType: HTBottleType -> + RagiumRecipeBuilders.filling { + itemIngredient { items { +bottleType.emptyItem } } + fluidIngredient = HTJeiRecipeHelper.fakeFluid(stackFocused) + result { + bottleType.filledItem + .asTemplate(patch = potionPatch) + .getOrThrow() + .let(::from) + } + progressData = RTPotionBottleFillingRecipe.PROGRESS_DATA + }.buildSynthetic { _, recipe -> HTJeiRecipeHolder(recipe) } + } + + // ポーション瓶から液体ポーションを取り出す + RecipeIngredientRole.OUTPUT if recipeType == RagiumJeiRecipeTypes.CENTRIFUGING -> + HTBottleType.entries.map { bottleType: HTBottleType -> + RagiumRecipeBuilders.centrifuging { + +HTJeiRecipeHelper.fakeItem(bottleType.filledItem.asStackOrEmpty(patch = potionPatch)) + itemResult { +bottleType.emptyItem } + fluidResult { from(stackFocused) } + progressData = RTPotionBottleCentrifugingRecipe.PROGRESS_DATA + }.buildSynthetic { _, recipe -> HTJeiRecipeHolder(recipe) } + } + + else -> listOf() + }.filterIsInstance(recipeType.recipeClass) + } + + override fun getRecipes(recipeType: IRecipeType): List = listOf() +} diff --git a/src/lib/kotlin/hiiragi283/lib/fluid/FluidStacks.kt b/src/lib/kotlin/hiiragi283/lib/fluid/FluidStacks.kt index 648fabc3a..a894520ce 100644 --- a/src/lib/kotlin/hiiragi283/lib/fluid/FluidStacks.kt +++ b/src/lib/kotlin/hiiragi283/lib/fluid/FluidStacks.kt @@ -2,6 +2,7 @@ package hiiragi283.lib.fluid import net.minecraft.core.Holder import net.minecraft.core.component.DataComponentPatch +import net.minecraft.world.item.ItemStack import net.minecraft.world.level.material.Fluid import net.minecraft.world.level.material.Fluids import net.neoforged.neoforge.fluids.FluidStack @@ -77,3 +78,10 @@ fun FluidStack.transmuteCopy(newFluid: Fluid, newAmount: Int = this.amount()): F newFluid == Fluids.EMPTY -> FluidStack.EMPTY else -> FluidStack(newFluid, newAmount, this.componentsPatch) } + +/** + * この[FluidStack][this]から液体入りバケツの[ItemStack]を作成します。 + * @author Hiiragi Tsubasa + * @since 26.1.9 + */ +fun FluidStack.createBucket(): ItemStack = this.fluidType.getBucket(this) diff --git a/src/libClient/kotlin/hiiragi283/lib/integration/jei/JeiExtensions.kt b/src/libClient/kotlin/hiiragi283/lib/integration/jei/JeiExtensions.kt index b2759aa80..cb637f8c8 100644 --- a/src/libClient/kotlin/hiiragi283/lib/integration/jei/JeiExtensions.kt +++ b/src/libClient/kotlin/hiiragi283/lib/integration/jei/JeiExtensions.kt @@ -4,11 +4,14 @@ import hiiragi283.lib.recipe.ingredient.HTStackPreview import hiiragi283.lib.recipe.result.HTFluidResult import hiiragi283.lib.recipe.result.HTItemResult import mezz.jei.api.gui.builder.IRecipeSlotBuilder +import mezz.jei.api.ingredients.IIngredientType import mezz.jei.api.neoforge.NeoForgeTypes +import mezz.jei.api.recipe.IFocus import mezz.jei.api.recipe.types.IRecipeType import net.minecraft.resources.Identifier import net.minecraft.world.item.ItemStack import net.neoforged.neoforge.fluids.FluidStack +import kotlin.jvm.optionals.getOrNull // IRecipeType // @@ -85,3 +88,7 @@ fun IRecipeSlotBuilder.add(ingredient: HTStackPreview): IRecipeSlotBu * @since 26.1.0 */ fun IRecipeSlotBuilder.add(result: HTItemResult): IRecipeSlotBuilder = this.add(result.create()) + +// IFocus // + +fun IFocus<*>.getIngredient(type: IIngredientType): T? = this.typedValue.getIngredient(type).getOrNull() diff --git a/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTBasicRecipeCategory.kt b/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTBasicRecipeCategory.kt index 98e6830fd..576908891 100644 --- a/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTBasicRecipeCategory.kt +++ b/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTBasicRecipeCategory.kt @@ -69,6 +69,9 @@ abstract class HTBasicRecipeCategory( abstract override fun getIdentifier(recipe: RECIPE): Identifier? + override fun getSourceRecipeIds(recipe: RECIPE): List = + getIdentifier(recipe)?.takeUnless { it.path.startsWith("/") }.let(::listOfNotNull) + abstract override fun getCodec(codecHelper: ICodecHelper, recipeManager: IRecipeManager): Codec // Extensions // diff --git a/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTItemAndFluidToFluidRecipeCategory.kt b/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTItemAndFluidToFluidRecipeCategory.kt deleted file mode 100644 index aa69a4c13..000000000 --- a/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTItemAndFluidToFluidRecipeCategory.kt +++ /dev/null @@ -1,54 +0,0 @@ -package hiiragi283.lib.integration.jei.category - -import hiiragi283.lib.gui.HTBackgroundType -import hiiragi283.lib.integration.jei.HTRecipeHolderType -import hiiragi283.lib.integration.jei.add -import hiiragi283.lib.recipe.base.HTItemAndFluidToRecipe -import mezz.jei.api.gui.builder.IRecipeLayoutBuilder -import mezz.jei.api.gui.drawable.IDrawable -import mezz.jei.api.gui.widgets.IRecipeExtrasBuilder -import mezz.jei.api.recipe.IFocusGroup -import net.minecraft.world.item.crafting.RecipeType - -class HTItemAndFluidToFluidRecipeCategory( - recipeType: HTRecipeHolderType, - recipeType1: RecipeType<*>, - icon: IDrawable -) : HTHolderRecipeCategory( - recipeType, - recipeType1, - icon, - 18 * 6, - 18 * 1, - HTItemAndFluidToRecipe.BasicFluid.SIMPLE_CODEC -) { - override fun setupRecipe( - builder: IRecipeLayoutBuilder, - recipe: HTItemAndFluidToRecipe.BasicFluid, - focuses: IFocusGroup - ) { - // input - builder - .addInputSlot(getPosition(0), getPosition(0)) - .add(recipe.fluidIngredient) - .setSlotBackground(HTBackgroundType.INPUT) - builder - .addInputSlot(getPosition(2), getPosition(0)) - .add(recipe.itemIngredient) - .setSlotBackground(HTBackgroundType.INPUT) - // output - builder - .addOutputSlot(getPosition(5), getPosition(0)) - .add(recipe.result) - .setSlotBackground(HTBackgroundType.OUTPUT) - } - - override fun setupRecipeExtras( - builder: IRecipeExtrasBuilder, - recipe: HTItemAndFluidToRecipe.BasicFluid, - focuses: IFocusGroup - ) { - builder.addRecipePlus(getPosition(1)) - builder.addRecipeArrow(recipe).setPosition(getPosition(3.25), getPosition(0)) - } -} diff --git a/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTItemAndFluidToItemRecipeCategory.kt b/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTItemAndFluidToItemRecipeCategory.kt deleted file mode 100644 index 524845291..000000000 --- a/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTItemAndFluidToItemRecipeCategory.kt +++ /dev/null @@ -1,54 +0,0 @@ -package hiiragi283.lib.integration.jei.category - -import hiiragi283.lib.gui.HTBackgroundType -import hiiragi283.lib.integration.jei.HTRecipeHolderType -import hiiragi283.lib.integration.jei.add -import hiiragi283.lib.recipe.base.HTItemAndFluidToRecipe -import mezz.jei.api.gui.builder.IRecipeLayoutBuilder -import mezz.jei.api.gui.drawable.IDrawable -import mezz.jei.api.gui.widgets.IRecipeExtrasBuilder -import mezz.jei.api.recipe.IFocusGroup -import net.minecraft.world.item.crafting.RecipeType - -class HTItemAndFluidToItemRecipeCategory( - recipeType: HTRecipeHolderType, - recipeType1: RecipeType<*>, - icon: IDrawable -) : HTHolderRecipeCategory( - recipeType, - recipeType1, - icon, - 18 * 6, - 18 * 1, - HTItemAndFluidToRecipe.BasicItem.SIMPLE_CODEC -) { - override fun setupRecipe( - builder: IRecipeLayoutBuilder, - recipe: HTItemAndFluidToRecipe.BasicItem, - focuses: IFocusGroup - ) { - // inputs - builder - .addInputSlot(getPosition(0), getPosition(0)) - .add(recipe.fluidIngredient) - .setSlotBackground(HTBackgroundType.INPUT) - builder - .addInputSlot(getPosition(2), getPosition(0)) - .add(recipe.itemIngredient) - .setSlotBackground(HTBackgroundType.INPUT) - // output - builder - .addOutputSlot(getPosition(5), getPosition(0)) - .add(recipe.result) - .setSlotBackground(HTBackgroundType.OUTPUT) - } - - override fun setupRecipeExtras( - builder: IRecipeExtrasBuilder, - recipe: HTItemAndFluidToRecipe.BasicItem, - focuses: IFocusGroup - ) { - builder.addRecipePlus(getPosition(1)) - builder.addRecipeArrow(recipe).setPosition(getPosition(3.25), getPosition(0)) - } -} diff --git a/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTItemAndFluidToRecipeCategory.kt b/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTItemAndFluidToRecipeCategory.kt new file mode 100644 index 000000000..3968183cc --- /dev/null +++ b/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTItemAndFluidToRecipeCategory.kt @@ -0,0 +1,87 @@ +package hiiragi283.lib.integration.jei.category + +import com.mojang.serialization.MapCodec +import hiiragi283.lib.gui.HTBackgroundType +import hiiragi283.lib.integration.jei.HTRecipeHolderType +import hiiragi283.lib.integration.jei.add +import hiiragi283.lib.recipe.base.HTItemAndFluidToRecipe +import mezz.jei.api.gui.builder.IRecipeLayoutBuilder +import mezz.jei.api.gui.builder.IRecipeSlotBuilder +import mezz.jei.api.gui.drawable.IDrawable +import mezz.jei.api.gui.widgets.IRecipeExtrasBuilder +import mezz.jei.api.recipe.IFocusGroup +import net.minecraft.world.item.crafting.RecipeType + +abstract class HTItemAndFluidToRecipeCategory>( + recipeType: HTRecipeHolderType, + recipeType1: RecipeType<*>, + icon: IDrawable, + codec: MapCodec +) : HTHolderRecipeCategory( + recipeType, + recipeType1, + icon, + 18 * 6, + 18 * 1, + codec +) { + override fun setupRecipe(builder: IRecipeLayoutBuilder, recipe: RECIPE, focuses: IFocusGroup) { + // inputs + builder + .addInputSlot(getPosition(0), getPosition(0)) + .add(recipe.fluidIngredient) + .setSlotBackground(HTBackgroundType.INPUT) + builder + .addInputSlot(getPosition(2), getPosition(0)) + .add(recipe.itemIngredient) + .setSlotBackground(HTBackgroundType.INPUT) + // output + setOutput( + builder + .addOutputSlot(getPosition(5), getPosition(0)) + .setSlotBackground(HTBackgroundType.OUTPUT), + recipe + ) + } + + protected abstract fun setOutput(builder: IRecipeSlotBuilder, recipe: RECIPE) + + override fun setupRecipeExtras(builder: IRecipeExtrasBuilder, recipe: RECIPE, focuses: IFocusGroup) { + builder.addRecipePlus(getPosition(1)) + builder.addRecipeArrow(recipe).setPosition(getPosition(3.25), getPosition(0)) + } + + // ToFluid // + + class ToFluid( + recipeType: HTRecipeHolderType, + recipeType1: RecipeType<*>, + icon: IDrawable + ) : HTItemAndFluidToRecipeCategory( + recipeType, + recipeType1, + icon, + HTItemAndFluidToRecipe.BasicFluid.SIMPLE_CODEC + ) { + override fun setOutput(builder: IRecipeSlotBuilder, recipe: HTItemAndFluidToRecipe.BasicFluid) { + builder.add(recipe.result) + } + } + + // ToItem // + + class ToItem( + recipeType: HTRecipeHolderType, + recipeType1: RecipeType<*>, + icon: IDrawable + ) : HTItemAndFluidToRecipeCategory( + recipeType, + recipeType1, + icon, + HTItemAndFluidToRecipe.BasicItem.SIMPLE_CODEC + ) { + override fun setOutput(builder: IRecipeSlotBuilder, recipe: HTItemAndFluidToRecipe.BasicItem) { + builder.add(recipe.result) + } + } +} diff --git a/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTItemOrFluidRecipeCategory.kt b/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTItemOrFluidRecipeCategory.kt deleted file mode 100644 index 19bb9f973..000000000 --- a/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTItemOrFluidRecipeCategory.kt +++ /dev/null @@ -1,59 +0,0 @@ -package hiiragi283.lib.integration.jei.category - -import hiiragi283.lib.gui.HTBackgroundType -import hiiragi283.lib.integration.jei.HTRecipeHolderType -import hiiragi283.lib.integration.jei.add -import hiiragi283.lib.recipe.base.HTItemAndFluidToRecipe -import mezz.jei.api.gui.builder.IRecipeLayoutBuilder -import mezz.jei.api.gui.builder.IRecipeSlotBuilder -import mezz.jei.api.gui.drawable.IDrawable -import mezz.jei.api.gui.widgets.IRecipeExtrasBuilder -import mezz.jei.api.recipe.IFocusGroup -import net.minecraft.world.item.crafting.RecipeType - -class HTItemOrFluidRecipeCategory( - recipeType: HTRecipeHolderType, - recipeType1: RecipeType<*>, - icon: IDrawable -) : HTHolderRecipeCategory( - recipeType, - recipeType1, - icon, - 18 * 8, - 18 * 1, - HTItemAndFluidToRecipe.BasicItemAndFluid.SIMPLE_CODEC -) { - override fun setupRecipe( - builder: IRecipeLayoutBuilder, - recipe: HTItemAndFluidToRecipe.BasicItemAndFluid, - focuses: IFocusGroup - ) { - // inputs - builder - .addInputSlot(getPosition(0), getPosition(0)) - .add(recipe.fluidIngredient) - .setSlotBackground(HTBackgroundType.INPUT) - builder - .addInputSlot(getPosition(2), getPosition(0)) - .add(recipe.itemIngredient) - .setSlotBackground(HTBackgroundType.INPUT) - // outputs - val itemOutput: IRecipeSlotBuilder = builder - .addOutputSlot(getPosition(5), getPosition(0)) - .setSlotBackground(HTBackgroundType.OUTPUT) - val fluidOutput: IRecipeSlotBuilder = builder - .addOutputSlot(getPosition(7), getPosition(0)) - .setSlotBackground(HTBackgroundType.OUTPUT) - recipe.result.content.mapLeft(itemOutput::add).mapRight(fluidOutput::add) - } - - override fun setupRecipeExtras( - builder: IRecipeExtrasBuilder, - recipe: HTItemAndFluidToRecipe.BasicItemAndFluid, - focuses: IFocusGroup - ) { - builder.addRecipePlus(getPosition(1)) - builder.addRecipeArrow(recipe).setPosition(getPosition(3.25), getPosition(0)) - builder.addRecipePlus(getPosition(6)) - } -} diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/RTBucketFillingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/RTBucketFillingRecipe.kt index 62573005f..68925009b 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/recipe/RTBucketFillingRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/RTBucketFillingRecipe.kt @@ -1,5 +1,6 @@ package hiiragi283.ragium.common.recipe +import hiiragi283.lib.fluid.createBucket import hiiragi283.lib.recipe.base.HTItemAndFluidToItemRecipe import hiiragi283.lib.recipe.base.HTProgressData import hiiragi283.lib.recipe.base.HTProgressRecipe @@ -12,8 +13,7 @@ import net.neoforged.neoforge.fluids.FluidStack import net.neoforged.neoforge.fluids.FluidType data object RTBucketFillingRecipe : HTItemAndFluidToItemRecipe, HTProgressRecipe.Simple { - private fun getBucket(instance: FluidInstance): ItemStack = - HTIngredientHelper.unwrap(instance).let(instance.fluidType::getBucket) + private fun getBucket(instance: FluidInstance): ItemStack = HTIngredientHelper.unwrap(instance).createBucket() override fun test(first: ItemInstance, second: FluidInstance): Boolean { val filled: ItemStack = getBucket(second) diff --git a/src/main/kotlin/hiiragi283/ragium/common/transfer/item/HTCustomBucketItemHandler.kt b/src/main/kotlin/hiiragi283/ragium/common/transfer/item/HTCustomBucketItemHandler.kt index f5016c56d..0c83c4ee8 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/transfer/item/HTCustomBucketItemHandler.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/transfer/item/HTCustomBucketItemHandler.kt @@ -1,5 +1,6 @@ package hiiragi283.ragium.common.transfer.item +import hiiragi283.lib.fluid.createBucket import net.minecraft.world.item.Items import net.neoforged.neoforge.fluids.FluidStack import net.neoforged.neoforge.fluids.FluidType @@ -34,7 +35,7 @@ abstract class HTCustomBucketItemHandler(itemAccess: ItemAccess) : } protected open fun update(accessResource: ItemResource, newStack: FluidStack): ItemResource = - ItemResource.of(newStack.fluidType.getBucket(newStack)) + ItemResource.of(newStack.createBucket()) override fun getCapacity(index: Int, resource: FluidResource): Int { Objects.checkIndex(index, size)