diff --git a/build.gradle.kts b/build.gradle.kts index 928b3328f7..059627b935 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 486941050d..3e4394f1aa 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] @@ -37,7 +37,6 @@ common-compile = [] common-runtime = [ "ae2", "curios", - "jade", ] [plugins] diff --git a/src/client/kotlin/hiiragi283/ragium/client/RagiumClient.kt b/src/client/kotlin/hiiragi283/ragium/client/RagiumClient.kt index de06d0cc7e..b04b295c3a 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/client/kotlin/hiiragi283/ragium/client/event/RagiumClientEventHandler.kt b/src/client/kotlin/hiiragi283/ragium/client/event/RagiumClientEventHandler.kt index 80671de5a9..b106110853 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/gui/widget/HTEnergySlotWidgetRenderer.kt b/src/client/kotlin/hiiragi283/ragium/client/gui/widget/HTEnergySlotWidgetRenderer.kt index 103a32a285..64efe3937a 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 46d2ba027d..06194b6e74 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/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 0000000000..5317ff198d --- /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 0000000000..4640c2f4b1 --- /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 0000000000..344ac52ca3 --- /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/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiPlugin.kt b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiPlugin.kt index e3d3ded450..542cbe241e 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiPlugin.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiPlugin.kt @@ -4,25 +4,23 @@ 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.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.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.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 import hiiragi283.ragium.client.integration.jei.category.RTFreezingRecipeCategory @@ -32,13 +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.RTPotionBottleDrainingRecipe -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.IPlatformFluidHelper 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 @@ -50,7 +47,6 @@ import net.minecraft.core.Holder import net.minecraft.core.component.DataComponents import net.minecraft.core.registries.BuiltInRegistries import net.minecraft.world.item.Item -import net.minecraft.world.item.alchemy.Potion import net.minecraft.world.item.alchemy.Potions import net.neoforged.neoforge.fluids.FluidStack @@ -61,11 +57,6 @@ class RagiumJeiPlugin : HTJeiPlugin(RagiumAPI.MOD_ID) { private fun listItems(): Sequence> = HTPhysicalSideHelper .filteredLookup(BuiltInRegistries.ITEM) .asHolderSequence() - - @JvmStatic - private fun listPotions(): Sequence> = HTPhysicalSideHelper - .filteredLookup(BuiltInRegistries.POTION) - .asHolderSequence() } override fun registerItemSubtypes(registration: ISubtypeRegistration) { @@ -100,9 +91,11 @@ 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) } - .map(HTPotionHelper::createFluid) + .mapNotNull { HTPotionHelper.createFluid(it).getOrNull()?.create() } .toList() ) } @@ -118,6 +111,7 @@ class RagiumJeiPlugin : HTJeiPlugin(RagiumAPI.MOD_ID) { RagiumRecipeTypes.ASSEMBLING, guiHelper.createDrawableItemLike(RagiumBlocks.ASSEMBLER) ), + RTCentrifugingRecipeCategory(guiHelper), HTSingleRecipeCategory.ItemToItem( RagiumJeiRecipeTypes.COMPRESSING, RagiumRecipeTypes.COMPRESSING, @@ -133,12 +127,7 @@ 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( + HTItemAndFluidToRecipeCategory.ToItem( RagiumJeiRecipeTypes.FILLING, RagiumRecipeTypes.FILLING, guiHelper.createDrawableItemLike(RagiumBlocks.MACHINE_CASING) @@ -166,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) @@ -175,12 +164,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, @@ -196,10 +180,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) @@ -212,8 +196,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( @@ -229,29 +212,56 @@ 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 registration.addRecipes( - RagiumJeiRecipeTypes.DRAINING, + RagiumJeiRecipeTypes.CENTRIFUGING, listPotions() .flatMap { potion: Holder.Reference -> HTBottleType.entries.map { bottleType: HTBottleType -> - RagiumRecipeBuilders.draining { + RagiumRecipeBuilders.centrifuging { +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)) } - progressData = RTPotionBottleDrainingRecipe.PROGRESS_DATA + fluidResult { + from(HTPotionHelper.createFluid(potion, HTPotionHelper.BOTTLE_AMOUNT).getOrThrow()) + } + progressData = RTPotionBottleCentrifugingRecipe.PROGRESS_DATA recipeId replace potion.getKeyOrThrow() .identifier() .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) } + progressData = RTBucketCentrifugingRecipe.progressData + }.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, @@ -265,7 +275,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() @@ -273,10 +286,32 @@ 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) } + progressData = RTBucketFillingRecipe.progressData + }.buildSynthetic { id: Identifier, recipe: RTFillingRecipe -> + // 液体ポーションなどのバリエーションを持つ液体はIDなしで登録する + if (fluidHelper.getUid(fluid, UidContext.Recipe) is List<*>) { + HTJeiRecipeHolder(recipe) + } else { + HTJeiRecipeHolder(id, recipe) + } + } + } ) // Chemical - } + }*/ override fun registerRecipeCatalysts(registration: IRecipeCatalystRegistration) { // Mechanical @@ -297,8 +332,8 @@ 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) + registration.addCraftingStation(RagiumJeiRecipeTypes.MIXING, RagiumBlocks.BLENDER) + // Resource registration.addCraftingStation(RagiumJeiRecipeTypes.PLANTING, RagiumBlocks.PLANTER) // Electronics registration.addCraftingStation(RagiumJeiRecipeTypes.ELECTROLYZING, RagiumBlocks.ELECTROLYZER) @@ -311,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/RagiumJeiRecipeTypes.kt b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiRecipeTypes.kt index a620e7afe6..4dd35dc06a 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiRecipeTypes.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiRecipeTypes.kt @@ -1,9 +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.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 @@ -22,12 +22,15 @@ 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 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,22 +63,16 @@ data object RagiumJeiRecipeTypes { @JvmField val BATHING: HTRecipeHolderType = create(RagiumConstants.BATHING) - @JvmField - val CENTRIFUGING: HTRecipeHolderType = create(RagiumConstants.CENTRIFUGING) - @JvmField 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) - // Bio - @JvmField - val BREWING: HTRecipeHolderType = create(RagiumConstants.BREWING) - + // Resource @JvmField val PLANTING: HTRecipeHolderType = create(RagiumConstants.PLANTING) 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 0000000000..4c366f2aca --- /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 0000000000..dd9edb4f12 --- /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/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 0000000000..d7e98e94cc --- /dev/null +++ b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/category/RTCentrifugingRecipeCategory.kt @@ -0,0 +1,54 @@ +package hiiragi283.ragium.client.integration.jei.category + +import hiiragi283.lib.gui.HTBackgroundType +import hiiragi283.lib.integration.jei.add +import hiiragi283.lib.integration.jei.category.HTHolderRecipeCategory +import hiiragi283.ragium.api.recipe.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 * 1, + RTCentrifugingRecipe.Basic.CODEC + ) { + override fun setupRecipe(builder: IRecipeLayoutBuilder, recipe: RTCentrifugingRecipe.Basic, focuses: IFocusGroup) { + // input + builder + .addInputSlot(getPosition(0), getPosition(0)) + .add(recipe.ingredient) + .setSlotBackground(HTBackgroundType.INPUT) + // outputs + 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(0)) + .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)) + builder.addRecipePlus(getPosition(5)) + } +} 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 0bc7a5ad42..fadc85ac6c 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/data/kotlin/hiiragi283/ragium/data/RagiumDataGen.kt b/src/data/kotlin/hiiragi283/ragium/data/RagiumDataGen.kt index 410cca932d..e1864709bb 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/advancement/RagiumAdvancementProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/advancement/RagiumAdvancementProvider.kt index b040367e4e..e7b8ff679b 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 @@ -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 @@ -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.TASK + ) { 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 582812156f..752cce8d7c 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 @@ -33,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") @@ -58,9 +61,9 @@ class RagiumEnglishLangProvider(output: PackOutput) : add(RagiumBlocks.CHEMICAL_REACTOR, "Chemical Reactor") add(RagiumBlocks.MIXER, "Mixer") - add(RagiumBlocks.BREWERY, "Brewery") add(RagiumBlocks.PLANTER, "Planter") + add(RagiumBlocks.BLENDER, "Blender") add(RagiumBlocks.ELECTROLYZER, "Electrolyzer") add(RagiumBlocks.PRECISION_ASSEMBLER, "Precision Assembler") add(RagiumBlocks.SCANNER, "Laser Scanner") @@ -72,9 +75,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") @@ -151,6 +157,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") @@ -169,10 +180,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") @@ -182,12 +193,11 @@ 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") addRecipeType(RagiumRecipeTypes.WASHING, "Washing") - addRecipeType(RagiumRecipeTypes.BREWING, "Brewing") addRecipeType(RagiumRecipeTypes.PLANTING, "Planting") addRecipeType(RagiumRecipeTypes.ELECTROLYZING, "Electrolyzing") @@ -233,8 +243,15 @@ 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() + + // Jade Config + addJadeConfig(HTMachineOwnerProvider.ID, "機械の所有者") + addJadeConfig(HTMachineUpgradeProvider.ID, "機械のアップグレード") } private fun addDataTranslations() { @@ -254,6 +271,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 +295,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 +322,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 71662c8c1e..d9331a8689 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 @@ -29,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, "黒い咆哮", "黒鋼をつくる") @@ -54,9 +57,9 @@ class RagiumJapaneseLangProvider(output: PackOutput) : add(RagiumBlocks.CHEMICAL_REACTOR, "化学反応槽") add(RagiumBlocks.MIXER, "混合機") - add(RagiumBlocks.BREWERY, "醸造機") add(RagiumBlocks.PLANTER, "栽培機") + add(RagiumBlocks.BLENDER, "大型混合機") add(RagiumBlocks.ELECTROLYZER, "電解機") add(RagiumBlocks.PRECISION_ASSEMBLER, "精密組立機") add(RagiumBlocks.SCANNER, "レーザースキャナ") @@ -68,9 +71,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は化学火傷を負った") @@ -147,6 +153,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, "化学火傷") @@ -165,10 +176,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, "合金") @@ -178,12 +189,11 @@ class RagiumJapaneseLangProvider(output: PackOutput) : addRecipeType(RagiumRecipeTypes.REFINING, "蒸留") addRecipeType(RagiumRecipeTypes.BATHING, "化学洗浄") - addRecipeType(RagiumRecipeTypes.CENTRIFUGING, "遠心分離") + addRecipeType(RagiumRecipeTypes.EXCHANGING, "交換") addRecipeType(RagiumRecipeTypes.MIXING, "混合") addRecipeType(RagiumRecipeTypes.REACTING, "化学反応") addRecipeType(RagiumRecipeTypes.WASHING, "洗浄") - addRecipeType(RagiumRecipeTypes.BREWING, "醸造") addRecipeType(RagiumRecipeTypes.PLANTING, "栽培") addRecipeType(RagiumRecipeTypes.ELECTROLYZING, "電気分解") @@ -229,8 +239,15 @@ 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() + + // Jade Config + addJadeConfig(HTMachineOwnerProvider.ID, "Machine Owner") + addJadeConfig(HTMachineUpgradeProvider.ID, "Machine Upgrades") } private fun addDataTranslations() { @@ -250,6 +267,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 +291,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 +318,6 @@ class RagiumJapaneseLangProvider(output: PackOutput) : addFromKey(RagiumElements.COPPER, "銅") addFromKey(RagiumElements.GOLD, "金") + addFromKey(RagiumElements.MERCURY, "水銀") } } diff --git a/src/data/kotlin/hiiragi283/ragium/data/loot/RagiumBlockLootTableProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/loot/RagiumBlockLootTableProvider.kt index b53eb0c402..432390264b 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 = @@ -53,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 e5a14a8ae6..54d00c65ae 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 @@ -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) @@ -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( @@ -130,7 +132,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 +141,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/RagiumBioRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumBioRecipeProvider.kt index 86bc4e6c5f..b3c77b1955 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/RagiumColoringRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumColoringRecipeProvider.kt new file mode 100644 index 0000000000..6cf1804030 --- /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 cd6cf67850..418a2f0191 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt @@ -3,23 +3,21 @@ 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 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 @@ -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 @@ -236,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) } @@ -278,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) } @@ -286,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 { @@ -296,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 { @@ -313,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 @@ -324,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 { @@ -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) } @@ -588,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 { @@ -640,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 { @@ -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) } @@ -799,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 @@ -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/recipe/RagiumHeatRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumHeatRecipeProvider.kt index 4d4c04f5ee..ef66551d7f 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 ed365ae993..8335e9ab61 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 @@ -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/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt index a287df98d2..2bf2125cdc 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 @@ -325,7 +326,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 +334,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 +347,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 +365,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) } } @@ -401,10 +402,10 @@ 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.BLENDER) { items { +RagiumBlocks.MIXER } } electronics(RagiumBlocks.ELECTROLYZER) { +holderSet(ItemTags.LIGHTNING_RODS) } electronics(RagiumBlocks.PRECISION_ASSEMBLER) { items { +RagiumBlocks.ASSEMBLER } } // Arcane @@ -486,9 +487,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, @@ -522,7 +523,7 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut }.save(exporter) } - // Machine // + // Storage // private fun storage() { // Tank @@ -556,6 +557,52 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut }.save(exporter) } + // 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() + 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 +636,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) { @@ -674,7 +719,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/data/kotlin/hiiragi283/ragium/data/tag/RagiumBlockItemTagsProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumBlockItemTagsProvider.kt index e65b93a8e7..edb340c46b 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/RagiumBlockTagsProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumBlockTagsProvider.kt index c5ab7a0499..43890c67a6 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/data/kotlin/hiiragi283/ragium/data/tag/RagiumItemTagsProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumItemTagsProvider.kt index 71f7ce1e63..49ab510f72 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 @@ -11,6 +12,7 @@ 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.RagiumTags @@ -21,6 +23,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 +65,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")) @@ -85,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/assets/ragium/blockstates/bio_machine_casing.json b/src/generated/resources/assets/ragium/blockstates/bio_machine_casing.json deleted file mode 100644 index 5b39643aa9..0000000000 --- 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/blender.json similarity index 56% rename from src/generated/resources/assets/ragium/blockstates/brewery.json rename to src/generated/resources/assets/ragium/blockstates/blender.json index ec8a090976..d7924b1ef2 100644 --- a/src/generated/resources/assets/ragium/blockstates/brewery.json +++ b/src/generated/resources/assets/ragium/blockstates/blender.json @@ -1,33 +1,33 @@ { "variants": { "facing=east,is_active=false": { - "model": "ragium:block/machine/bio", + "model": "ragium:block/machine/electronics", "y": 90 }, "facing=east,is_active=true": { - "model": "ragium:block/brewery", + "model": "ragium:block/blender", "y": 90 }, "facing=north,is_active=false": { - "model": "ragium:block/machine/bio" + "model": "ragium:block/machine/electronics" }, "facing=north,is_active=true": { - "model": "ragium:block/brewery" + "model": "ragium:block/blender" }, "facing=south,is_active=false": { - "model": "ragium:block/machine/bio", + "model": "ragium:block/machine/electronics", "y": 180 }, "facing=south,is_active=true": { - "model": "ragium:block/brewery", + "model": "ragium:block/blender", "y": 180 }, "facing=west,is_active=false": { - "model": "ragium:block/machine/bio", + "model": "ragium:block/machine/electronics", "y": 270 }, "facing=west,is_active=true": { - "model": "ragium:block/brewery", + "model": "ragium:block/blender", "y": 270 } } diff --git a/src/generated/resources/assets/ragium/blockstates/planter.json b/src/generated/resources/assets/ragium/blockstates/planter.json index 0933e5ed3c..3a809f3e74 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 0000000000..f0bdbf1fde --- /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/blockstates/upgrade_station.json b/src/generated/resources/assets/ragium/blockstates/upgrade_station.json new file mode 100644 index 0000000000..818db80098 --- /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/bio_machine_parts.json b/src/generated/resources/assets/ragium/items/advanced_upgrade.json similarity index 53% rename from src/generated/resources/assets/ragium/items/bio_machine_parts.json rename to src/generated/resources/assets/ragium/items/advanced_upgrade.json index e296f13761..b119705104 100644 --- a/src/generated/resources/assets/ragium/items/bio_machine_parts.json +++ b/src/generated/resources/assets/ragium/items/advanced_upgrade.json @@ -1,6 +1,6 @@ { "model": { "type": "minecraft:model", - "model": "ragium:item/bio_machine_parts" + "model": "ragium:item/advanced_upgrade" } } \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/items/brewery.json b/src/generated/resources/assets/ragium/items/ash_dust.json similarity index 58% rename from src/generated/resources/assets/ragium/items/brewery.json rename to src/generated/resources/assets/ragium/items/ash_dust.json index ac50c40f6d..f99c7bf1ab 100644 --- a/src/generated/resources/assets/ragium/items/brewery.json +++ b/src/generated/resources/assets/ragium/items/ash_dust.json @@ -1,6 +1,6 @@ { "model": { "type": "minecraft:model", - "model": "ragium:block/brewery" + "model": "ragium:item/ash_dust" } } \ 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/basic_upgrade.json similarity index 52% rename from src/generated/resources/assets/ragium/items/bio_machine_casing.json rename to src/generated/resources/assets/ragium/items/basic_upgrade.json index 92a8923fe6..ed7966c413 100644 --- a/src/generated/resources/assets/ragium/items/bio_machine_casing.json +++ b/src/generated/resources/assets/ragium/items/basic_upgrade.json @@ -1,6 +1,6 @@ { "model": { "type": "minecraft:model", - "model": "ragium:block/bio_machine_casing" + "model": "ragium:item/basic_upgrade" } } \ 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 0000000000..90078a1b55 --- /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/items/elite_upgrade.json b/src/generated/resources/assets/ragium/items/elite_upgrade.json new file mode 100644 index 0000000000..f1d6462976 --- /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/resource_machine_casing.json b/src/generated/resources/assets/ragium/items/resource_machine_casing.json new file mode 100644 index 0000000000..70cd3c8553 --- /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/resource_machine_parts.json b/src/generated/resources/assets/ragium/items/resource_machine_parts.json new file mode 100644 index 0000000000..b52967ab2c --- /dev/null +++ b/src/generated/resources/assets/ragium/items/resource_machine_parts.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "ragium:item/resource_machine_parts" + } +} \ 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 0000000000..2d0646efd3 --- /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/items/upgrade_station.json b/src/generated/resources/assets/ragium/items/upgrade_station.json new file mode 100644 index 0000000000..cee21a48f8 --- /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 c212da5f46..e8991276b8 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", @@ -26,12 +28,11 @@ "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.blender": "Blender", "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 +105,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", @@ -115,11 +117,14 @@ "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", "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", @@ -191,6 +196,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", @@ -201,11 +207,12 @@ "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.basic_upgrade": "Basic Upgrade", "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", @@ -239,6 +246,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", @@ -300,6 +308,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", @@ -329,6 +338,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", @@ -357,10 +367,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 +395,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", @@ -391,14 +405,13 @@ "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", "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", "recipe_type.ragium.filling": "Filling", "recipe_type.ragium.freezing": "Freezing", "recipe_type.ragium.melting": "Melting", @@ -518,5 +531,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 04fdab9d9f..66ca8457e4 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": "合金炉", @@ -26,12 +28,11 @@ "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.blender": "大型混合機", "block.ragium.blue_dye": "青色の染料", - "block.ragium.brewery": "醸造機", "block.ragium.brown_dye": "茶色の染料", "block.ragium.charcoal_block": "木炭ブロック", "block.ragium.chemical_bath": "化学浴槽", @@ -104,6 +105,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": "製錬炉", @@ -115,11 +117,14 @@ "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": "白色の染料", "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": "空", @@ -191,6 +196,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": "アルミナの粉", @@ -201,11 +207,12 @@ "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.basic_upgrade": "基本アップグレード", "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": "黒鋼ナゲット", @@ -239,6 +246,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": "蛍石", @@ -300,6 +308,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": "シリコンチップ", @@ -329,6 +338,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": "白色の染料入りバケツ", @@ -357,10 +367,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 +395,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": "カリウム", @@ -391,14 +405,13 @@ "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": "粉砕", "recipe_type.ragium.cutting": "切断", - "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": "溶融", @@ -518,5 +531,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/block/brewery.json b/src/generated/resources/assets/ragium/models/block/blender.json similarity index 52% rename from src/generated/resources/assets/ragium/models/block/brewery.json rename to src/generated/resources/assets/ragium/models/block/blender.json index 7cc0e22b7f..27306bf0a3 100644 --- a/src/generated/resources/assets/ragium/models/block/brewery.json +++ b/src/generated/resources/assets/ragium/models/block/blender.json @@ -1,8 +1,8 @@ { "parent": "minecraft:block/orientable", "textures": { - "front": "ragium:block/brewery_front", - "side": "ragium:block/machine/bio_side", + "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/assets/ragium/models/block/machine/bio.json b/src/generated/resources/assets/ragium/models/block/machine/resource.json similarity index 50% rename from src/generated/resources/assets/ragium/models/block/machine/bio.json rename to src/generated/resources/assets/ragium/models/block/machine/resource.json index a1f708d0c6..e51e1a1ba7 100644 --- a/src/generated/resources/assets/ragium/models/block/machine/bio.json +++ b/src/generated/resources/assets/ragium/models/block/machine/resource.json @@ -1,8 +1,8 @@ { "parent": "minecraft:block/orientable", "textures": { - "front": "ragium:block/machine/bio_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 42eec88a17..7f964a40cf 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 3515a3ea66..9029cbd65b 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/block/upgrade_station.json b/src/generated/resources/assets/ragium/models/block/upgrade_station.json new file mode 100644 index 0000000000..c71c38d64c --- /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/assets/ragium/models/item/advanced_upgrade.json b/src/generated/resources/assets/ragium/models/item/advanced_upgrade.json new file mode 100644 index 0000000000..c4d540480e --- /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/bio_machine_parts.json b/src/generated/resources/assets/ragium/models/item/ash_dust.json similarity index 62% rename from src/generated/resources/assets/ragium/models/item/bio_machine_parts.json rename to src/generated/resources/assets/ragium/models/item/ash_dust.json index f8696956f4..8b3b1fcff3 100644 --- a/src/generated/resources/assets/ragium/models/item/bio_machine_parts.json +++ b/src/generated/resources/assets/ragium/models/item/ash_dust.json @@ -1,6 +1,6 @@ { "parent": "minecraft:item/generated", "textures": { - "layer0": "ragium:item/parts/bio" + "layer0": "ragium:item/ash_dust" } } \ 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 0000000000..48b4a9e269 --- /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 0000000000..8b209ed8fb --- /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/resource_machine_parts.json b/src/generated/resources/assets/ragium/models/item/resource_machine_parts.json new file mode 100644 index 0000000000..0723533145 --- /dev/null +++ b/src/generated/resources/assets/ragium/models/item/resource_machine_parts.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "ragium:item/parts/resource" + } +} \ 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 0000000000..0626c2f200 --- /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/c/tags/item/dusts.json b/src/generated/resources/data/c/tags/item/dusts.json index f3ef3685bd..ae70100caa 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 0000000000..03e8c9273d --- /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/c/tags/item/dyed/black.json b/src/generated/resources/data/c/tags/item/dyed/black.json new file mode 100644 index 0000000000..b582b05d10 --- /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 0000000000..f6e1500ac1 --- /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 0000000000..15785a6003 --- /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 0000000000..aefdc5e78e --- /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 0000000000..482e140c5f --- /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 0000000000..e0ebc09238 --- /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 0000000000..4567a2a297 --- /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 0000000000..df1eee6794 --- /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 0000000000..771fce9f98 --- /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 0000000000..24e1b9221b --- /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 0000000000..8d6d018983 --- /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 0000000000..0caeba5a17 --- /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 0000000000..c5ad3a035d --- /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 0000000000..3fc7882806 --- /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 0000000000..4e5070c665 --- /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 0000000000..c93810edf1 --- /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/minecraft/tags/block/mineable/pickaxe.json b/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json index 75f7766d12..ad0e4b8b7f 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,8 @@ "ragium:aluminum_block", "ragium:arcane_machine_casing", "ragium:assembler", - "ragium:bio_machine_casing", "ragium:black_steel_block", - "ragium:brewery", + "ragium:blender", "ragium:charcoal_block", "ragium:chemical_bath", "ragium:chemical_machine_casing", @@ -45,11 +44,13 @@ "ragium:quartz_glass", "ragium:quartz_glass_pane", "ragium:refinery", + "ragium:resource_machine_casing", "ragium:scanner", "ragium:smelter", "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/advancement/upgrade_station.json b/src/generated/resources/data/ragium/advancement/upgrade_station.json new file mode 100644 index 0000000000..1afb89b98b --- /dev/null +++ b/src/generated/resources/data/ragium/advancement/upgrade_station.json @@ -0,0 +1,33 @@ +{ + "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" + }, + "frame": "goal", + "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/loot_table/blocks/alloy_smelter.json b/src/generated/resources/data/ragium/loot_table/blocks/alloy_smelter.json index 1649a28f98..c827b449f0 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 9bdc1aa1f2..bd71c767d4 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/brewery.json b/src/generated/resources/data/ragium/loot_table/blocks/blender.json similarity index 78% rename from src/generated/resources/data/ragium/loot_table/blocks/brewery.json rename to src/generated/resources/data/ragium/loot_table/blocks/blender.json index 4508153ac7..e9b0631eba 100644 --- a/src/generated/resources/data/ragium/loot_table/blocks/brewery.json +++ b/src/generated/resources/data/ragium/loot_table/blocks/blender.json @@ -16,16 +16,17 @@ "function": "minecraft:copy_components", "include": [ "minecraft:custom_name", - "ragium:owner_id" + "ragium:owner_id", + "ragium:upgrades" ], "source": "block_entity" } ], - "name": "ragium:brewery" + "name": "ragium:blender" } ], "rolls": 1.0 } ], - "random_sequence": "ragium:blocks/brewery" + "random_sequence": "ragium:blocks/blender" } \ No newline at end of file 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 ec2e1ead6e..272d8b614e 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 e2ac729b23..4c33c4bd0c 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 364e2c9f9d..19906e9e76 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 23360595cf..d3d2e3ba60 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 5c46060f49..6a437bc458 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 76e2af19ff..4120217409 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 ffa2c69016..6f80aecf56 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 0189e8cc96..2d37584e95 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 689aeadd8d..d7b7db3dbe 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 89ca3ae9f8..83041de8f9 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 d486c42aa9..0cbd2cefaf 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 89ccafc1d7..e4c8e13bd1 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 b67a6e9287..8490c5bc0b 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 b7594c1937..d86457b39b 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 74545e4b7b..6f52a95652 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 780f546495..72cfbeb5c5 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 eb1f91ee73..39df7a0b31 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/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 906473fb8b..1fbf65dcd6 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/loot_table/blocks/scanner.json b/src/generated/resources/data/ragium/loot_table/blocks/scanner.json index 1d87bfab5f..2fc9fb9257 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 4d83b362e6..3e615198b1 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 21b5a4cd60..a92eff699f 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 new file mode 100644 index 0000000000..0fecdf117d --- /dev/null +++ b/src/generated/resources/data/ragium/loot_table/blocks/upgrade_station.json @@ -0,0 +1,32 @@ +{ + "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", + "ragium:upgrades" + ], + "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/data/ragium/ragium/chemical/mercury.json b/src/generated/resources/data/ragium/ragium/chemical/mercury.json new file mode 100644 index 0000000000..d8720c51e0 --- /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 0000000000..f316c1e356 --- /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 0000000000..b6b56a4b1d --- /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 0000000000..739bdb0414 --- /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/data/ragium/recipe/bathing/black/banner.json b/src/generated/resources/data/ragium/recipe/bathing/black/banner.json new file mode 100644 index 0000000000..ec0d502ed0 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/black/banner.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/black" + }, + "item": { + "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 0000000000..f00b50e6f8 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/black/bed.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/black" + }, + "item": { + "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 0000000000..7b53427296 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/black/harness.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/black" + }, + "item": { + "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 0000000000..ba1a2867ca --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/black/shulker_box.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/black" + }, + "item": { + "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 0000000000..25d2bdc308 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/black/wool.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/black" + }, + "item": { + "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 0000000000..065cc5e8a9 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/black/wool_carpet.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/black" + }, + "item": { + "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 fe4d136f77..0000000000 --- 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 879912fca8..0000000000 --- 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 f43955ed31..0000000000 --- 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 3ccbc19a18..0000000000 --- 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 a059b200d6..0000000000 --- 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 4fe6d4823d..0000000000 --- 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 212259408d..0000000000 --- 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 0000000000..50deeb23d8 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/blue/banner.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/blue" + }, + "item": { + "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 0000000000..ea9e6c4c73 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/blue/bed.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/blue" + }, + "item": { + "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 0000000000..f7b28a8e0d --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/blue/harness.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/blue" + }, + "item": { + "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 0000000000..53f0625ee6 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/blue/shulker_box.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/blue" + }, + "item": { + "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 0000000000..d8117c9152 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/blue/wool.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/blue" + }, + "item": { + "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 0000000000..69637099e0 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/blue/wool_carpet.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/blue" + }, + "item": { + "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 dd9f200bc0..0000000000 --- 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 0000000000..7d0239d989 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/brown/banner.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/brown" + }, + "item": { + "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 0000000000..523289870b --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/brown/bed.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/brown" + }, + "item": { + "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 0000000000..bdd451a098 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/brown/harness.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/brown" + }, + "item": { + "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 0000000000..803543debf --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/brown/shulker_box.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/brown" + }, + "item": { + "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 0000000000..44713fbda4 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/brown/wool.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/brown" + }, + "item": { + "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 0000000000..2dd2b4e39f --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/brown/wool_carpet.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/brown" + }, + "item": { + "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 1f0adf6daf..0000000000 --- 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/cfrp_plate.json b/src/generated/resources/data/ragium/recipe/bathing/cfrp_plate.json index 0f1f140f32..43098df32d 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 new file mode 100644 index 0000000000..ec1788e4cf --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/cyan/banner.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/cyan" + }, + "item": { + "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 0000000000..51e6d84129 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/cyan/bed.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/cyan" + }, + "item": { + "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 0000000000..213a9e8370 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/cyan/harness.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/cyan" + }, + "item": { + "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 0000000000..45fd6b2c3b --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/cyan/shulker_box.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/cyan" + }, + "item": { + "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 0000000000..a567cb080d --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/cyan/wool.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/cyan" + }, + "item": { + "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 0000000000..9ff87b377c --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/cyan/wool_carpet.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/cyan" + }, + "item": { + "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/fermented_spider_eye.json b/src/generated/resources/data/ragium/recipe/bathing/fermented_spider_eye.json index b3e7eee83e..58e54a667d 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 new file mode 100644 index 0000000000..972ec11d42 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/gray/banner.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/gray" + }, + "item": { + "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 0000000000..25a22869f7 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/gray/bed.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/gray" + }, + "item": { + "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 0000000000..ed86fc8fbf --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/gray/harness.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/gray" + }, + "item": { + "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 0000000000..7c71f39513 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/gray/shulker_box.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/gray" + }, + "item": { + "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 0000000000..2224fc24fc --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/gray/wool.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/gray" + }, + "item": { + "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 0000000000..9b290024ca --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/gray/wool_carpet.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/gray" + }, + "item": { + "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 0000000000..74c9e75268 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/green/banner.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/green" + }, + "item": { + "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 0000000000..ce24055a10 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/green/bed.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/green" + }, + "item": { + "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 0000000000..b0cb492b2d --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/green/harness.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/green" + }, + "item": { + "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 0000000000..c62e55b5ab --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/green/shulker_box.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/green" + }, + "item": { + "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 0000000000..8719e1c9e6 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/green/wool.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/green" + }, + "item": { + "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 0000000000..85c761f0d1 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/green/wool_carpet.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/green" + }, + "item": { + "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 0000000000..eb9a997b84 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/light_blue/banner.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/light_blue" + }, + "item": { + "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 0000000000..ab0e6c1eac --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/light_blue/bed.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/light_blue" + }, + "item": { + "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 0000000000..08c576afec --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/light_blue/harness.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/light_blue" + }, + "item": { + "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 0000000000..802301ead2 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/light_blue/shulker_box.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/light_blue" + }, + "item": { + "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 0000000000..1b89e5c325 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/light_blue/wool.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/light_blue" + }, + "item": { + "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 0000000000..f997cb1fd3 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/light_blue/wool_carpet.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/light_blue" + }, + "item": { + "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 0000000000..3c68db4692 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/light_gray/banner.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/light_gray" + }, + "item": { + "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 0000000000..aeeac01f3f --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/light_gray/bed.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/light_gray" + }, + "item": { + "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 0000000000..f18652f615 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/light_gray/harness.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/light_gray" + }, + "item": { + "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 0000000000..e6bac3f093 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/light_gray/shulker_box.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/light_gray" + }, + "item": { + "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 0000000000..1b283a5e64 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/light_gray/wool.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/light_gray" + }, + "item": { + "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 0000000000..38c53eb8a1 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/light_gray/wool_carpet.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/light_gray" + }, + "item": { + "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 0000000000..598e5dcd39 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/lime/banner.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/lime" + }, + "item": { + "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 0000000000..b550bbd078 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/lime/bed.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/lime" + }, + "item": { + "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 0000000000..ec7aa8714e --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/lime/harness.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/lime" + }, + "item": { + "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 0000000000..eb51566fc4 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/lime/shulker_box.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/lime" + }, + "item": { + "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 0000000000..ca3679a23d --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/lime/wool.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/lime" + }, + "item": { + "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 0000000000..b5115c9f3d --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/lime/wool_carpet.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/lime" + }, + "item": { + "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 0000000000..e3eefe5f00 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/magenta/banner.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/magenta" + }, + "item": { + "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 0000000000..fac1e46807 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/magenta/bed.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/magenta" + }, + "item": { + "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 0000000000..d38c8744f9 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/magenta/harness.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/magenta" + }, + "item": { + "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 0000000000..5997cb8444 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/magenta/shulker_box.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/magenta" + }, + "item": { + "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 0000000000..4bb4e08239 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/magenta/wool.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/magenta" + }, + "item": { + "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 0000000000..b7cac23491 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/magenta/wool_carpet.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/magenta" + }, + "item": { + "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/mortar.json b/src/generated/resources/data/ragium/recipe/bathing/mortar.json index f2e35bb8d5..4dfc576d1a 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 new file mode 100644 index 0000000000..9fab20512b --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/orange/banner.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/orange" + }, + "item": { + "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 0000000000..be0e29ee0e --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/orange/bed.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/orange" + }, + "item": { + "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 0000000000..0330956e78 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/orange/harness.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/orange" + }, + "item": { + "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 0000000000..0f180dbef5 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/orange/shulker_box.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/orange" + }, + "item": { + "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 0000000000..9acef38659 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/orange/wool.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/orange" + }, + "item": { + "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 0000000000..72143096fc --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/orange/wool_carpet.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/orange" + }, + "item": { + "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/paper_dust_from_wood.json b/src/generated/resources/data/ragium/recipe/bathing/paper_dust_from_wood.json index d27a65cd72..271efe7e2a 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 af28670e42..ebd728179a 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 717a98c830..20ea98bbc8 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 new file mode 100644 index 0000000000..0999b57ba9 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/pink/banner.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/pink" + }, + "item": { + "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 0000000000..10e1b54b3a --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/pink/bed.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/pink" + }, + "item": { + "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 0000000000..61ef7ddc39 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/pink/harness.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/pink" + }, + "item": { + "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 0000000000..6f17cc1588 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/pink/shulker_box.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/pink" + }, + "item": { + "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 0000000000..351a65dfe3 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/pink/wool.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/pink" + }, + "item": { + "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 0000000000..149f342070 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/pink/wool_carpet.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/pink" + }, + "item": { + "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/poisonous_potato.json b/src/generated/resources/data/ragium/recipe/bathing/poisonous_potato.json index cd3306af4c..c1d5ef3a5d 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 new file mode 100644 index 0000000000..9cf6bdfe89 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/purple/banner.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/purple" + }, + "item": { + "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 0000000000..0a80f761bb --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/purple/bed.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/purple" + }, + "item": { + "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 0000000000..4589bd4db7 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/purple/harness.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/purple" + }, + "item": { + "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 0000000000..92dcbefe16 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/purple/shulker_box.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/purple" + }, + "item": { + "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 0000000000..8524c3a6d4 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/purple/wool.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/purple" + }, + "item": { + "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 0000000000..25786ce7b5 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/purple/wool_carpet.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/purple" + }, + "item": { + "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 0000000000..cb215b8fe6 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/red/banner.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/red" + }, + "item": { + "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 0000000000..6fd62fa8d9 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/red/bed.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/red" + }, + "item": { + "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 0000000000..54bc5e7167 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/red/harness.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/red" + }, + "item": { + "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 0000000000..75b0bfc01a --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/red/shulker_box.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/red" + }, + "item": { + "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 0000000000..895ab58de8 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/red/wool.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/red" + }, + "item": { + "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 0000000000..8c871978b6 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/red/wool_carpet.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/red" + }, + "item": { + "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/silicon_dust.json b/src/generated/resources/data/ragium/recipe/bathing/silicon_dust.json index f11b25a586..3a0118ff58 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 14e0f73f05..a66e65c20d 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 40d6233518..fd96ade2b2 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 new file mode 100644 index 0000000000..af9b1b6fc7 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/white/banner.json @@ -0,0 +1,32 @@ +{ + "type": "ragium:bathing", + "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": { + "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 0000000000..42bd7b8784 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/white/bed.json @@ -0,0 +1,32 @@ +{ + "type": "ragium:bathing", + "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": { + "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 0000000000..fa8d8213b7 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/white/harness.json @@ -0,0 +1,32 @@ +{ + "type": "ragium:bathing", + "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": { + "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 0000000000..c6044eaad2 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/white/shulker_box.json @@ -0,0 +1,32 @@ +{ + "type": "ragium:bathing", + "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": { + "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 0000000000..3931129fcb --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/white/wool.json @@ -0,0 +1,32 @@ +{ + "type": "ragium:bathing", + "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": { + "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 0000000000..1daa8d0624 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/white/wool_carpet.json @@ -0,0 +1,32 @@ +{ + "type": "ragium:bathing", + "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": { + "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 0000000000..861b26817f --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/yellow/banner.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/yellow" + }, + "item": { + "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 0000000000..8948b64622 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/yellow/bed.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/yellow" + }, + "item": { + "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 0000000000..89a255896e --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/yellow/harness.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/yellow" + }, + "item": { + "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 0000000000..2c394aa311 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/yellow/shulker_box.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/yellow" + }, + "item": { + "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 0000000000..d364a80e33 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/yellow/wool.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/yellow" + }, + "item": { + "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 0000000000..3cbada0b2d --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/yellow/wool_carpet.json @@ -0,0 +1,24 @@ +{ + "type": "ragium:bathing", + "ingredient": { + "fluid": { + "amount": 125, + "fluids": "#c:dyes/yellow" + }, + "item": { + "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/brewing/potion/blindness.json b/src/generated/resources/data/ragium/recipe/brewing/potion/blindness.json index 78d43bdd0a..0c99b8ff76 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:brewing", - "fluid_ingredient": { - "amount": 1000, - "fluids": { - "neoforge:ingredient_type": "ragium:potion", - "potions": "minecraft:thick" + "type": "ragium:mixing", + "ingredient": { + "fluid": { + "amount": 1000, + "fluids": { + "neoforge:ingredient_type": "ragium:potion", + "potions": "minecraft:thick" + } + }, + "item": { + "count": 1, + "items": "#c:glass_blocks/tinted" } }, - "item_ingredient": { - "count": 1, - "items": "#c:glass_blocks/tinted" - }, "result": { - "type": "ragium:potion", - "amount": 1000, - "custom_effects": [ - { - "duration": 900, - "id": "minecraft:blindness", - "show_icon": true - } - ], - "custom_name": "blindness" + "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 dc71ceb5c3..b1b4871885 100644 --- a/src/generated/resources/data/ragium/recipe/brewing/potion/darkness.json +++ b/src/generated/resources/data/ragium/recipe/brewing/potion/darkness.json @@ -1,33 +1,37 @@ { - "type": "ragium:brewing", - "fluid_ingredient": { - "amount": 1000, - "fluids": { - "neoforge:ingredient_type": "ragium:potion", - "potions": "minecraft:thick" - } - }, - "item_ingredient": { - "count": 1, - "items": { - "neoforge:ingredient_type": "ragium:material_tags", - "tags": [ - "c:dusts/echo", - "c:gems/echo" - ] + "type": "ragium:mixing", + "ingredient": { + "fluid": { + "amount": 1000, + "fluids": { + "neoforge:ingredient_type": "ragium:potion", + "potions": "minecraft:thick" + } + }, + "item": { + "count": 1, + "items": { + "neoforge:ingredient_type": "ragium:material_tags", + "tags": [ + "c:dusts/echo", + "c:gems/echo" + ] + } } }, "result": { - "type": "ragium:potion", - "amount": 1000, - "custom_effects": [ - { - "duration": 900, - "id": "minecraft:darkness", - "show_icon": true - } - ], - "custom_name": "darkness" + "fluid": { + "type": "ragium:potion", + "amount": 1000, + "custom_effects": [ + { + "duration": 900, + "id": "minecraft:darkness", + "show_icon": true + } + ], + "custom_name": "darkness" + } }, "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 8811770758..ff6e267e60 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:brewing", - "fluid_ingredient": { - "amount": 1000, - "fluids": { - "neoforge:ingredient_type": "ragium:potion", - "potions": "minecraft:thick" + "type": "ragium:mixing", + "ingredient": { + "fluid": { + "amount": 1000, + "fluids": { + "neoforge:ingredient_type": "ragium:potion", + "potions": "minecraft:thick" + } + }, + "item": { + "count": 1, + "items": "minecraft:enchanted_golden_apple" } }, - "item_ingredient": { - "count": 1, - "items": "minecraft:enchanted_golden_apple" - }, "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 - } - ], - "custom_name": "enchanted_golden_apple" + "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 2e1f6ea7b4..6baa596189 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:brewing", - "fluid_ingredient": { - "amount": 1000, - "fluids": { - "neoforge:ingredient_type": "ragium:potion", - "potions": "minecraft:thick" + "type": "ragium:mixing", + "ingredient": { + "fluid": { + "amount": 1000, + "fluids": { + "neoforge:ingredient_type": "ragium:potion", + "potions": "minecraft:thick" + } + }, + "item": { + "count": 1, + "items": "minecraft:golden_apple" } }, - "item_ingredient": { - "count": 1, - "items": "minecraft:golden_apple" - }, "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 - } - ], - "custom_name": "golden_apple" + "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 b03938b262..659cbb94b3 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:brewing", - "fluid_ingredient": { - "amount": 1000, - "fluids": { - "neoforge:ingredient_type": "ragium:potion", - "potions": "minecraft:thick" + "type": "ragium:mixing", + "ingredient": { + "fluid": { + "amount": 1000, + "fluids": { + "neoforge:ingredient_type": "ragium:potion", + "potions": "minecraft:thick" + } + }, + "item": { + "count": 1, + "items": "minecraft:rotten_flesh" } }, - "item_ingredient": { - "count": 1, - "items": "minecraft:rotten_flesh" - }, "result": { - "type": "ragium:potion", - "amount": 1000, - "custom_effects": [ - { - "duration": 900, - "id": "minecraft:hunger", - "show_icon": true - } - ], - "custom_name": "hunger" + "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 b8c00efc6c..0fdf0b3980 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:brewing", - "fluid_ingredient": { - "amount": 1000, - "fluids": { - "neoforge:ingredient_type": "ragium:potion", - "potions": "minecraft:thick" + "type": "ragium:mixing", + "ingredient": { + "fluid": { + "amount": 1000, + "fluids": { + "neoforge:ingredient_type": "ragium:potion", + "potions": "minecraft:thick" + } + }, + "item": { + "count": 1, + "items": "minecraft:pufferfish" } }, - "item_ingredient": { - "count": 1, - "items": "minecraft:pufferfish" - }, "result": { - "type": "ragium:potion", - "amount": 1000, - "custom_effects": [ - { - "duration": 900, - "id": "minecraft:nausea", - "show_icon": true - } - ], - "custom_name": "nausea" + "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 e237554dd0..34fbe29f9a 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:brewing", - "fluid_ingredient": { - "amount": 1000, - "fluids": { - "neoforge:ingredient_type": "ragium:potion", - "potions": "minecraft:thick" + "type": "ragium:mixing", + "ingredient": { + "fluid": { + "amount": 1000, + "fluids": { + "neoforge:ingredient_type": "ragium:potion", + "potions": "minecraft:thick" + } + }, + "item": { + "count": 1, + "items": [ + "minecraft:wither_rose", + "minecraft:wither_skeleton_skull" + ] } }, - "item_ingredient": { - "count": 1, - "items": [ - "minecraft:wither_rose", - "minecraft:wither_skeleton_skull" - ] - }, "result": { - "type": "ragium:potion", - "amount": 1000, - "custom_effects": [ - { - "duration": 900, - "id": "minecraft:wither", - "show_icon": true - } - ], - "custom_name": "wither" + "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/centrifuging/crude_oil_from_soul_sand.json b/src/generated/resources/data/ragium/recipe/centrifuging/crude_oil_from_soul_sand.json new file mode 100644 index 0000000000..529d65a6bc --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/centrifuging/crude_oil_from_soul_sand.json @@ -0,0 +1,18 @@ +{ + "type": "ragium:centrifuging", + "ingredient": { + "count": 1, + "items": "minecraft:soul_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/centrifuging/crude_oil_from_soul_soil.json b/src/generated/resources/data/ragium/recipe/centrifuging/crude_oil_from_soul_soil.json new file mode 100644 index 0000000000..b3c3c08778 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/centrifuging/crude_oil_from_soul_soil.json @@ -0,0 +1,18 @@ +{ + "type": "ragium:centrifuging", + "ingredient": { + "count": 1, + "items": "minecraft:soul_soil" + }, + "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/centrifuging/honey_from_bottle.json b/src/generated/resources/data/ragium/recipe/centrifuging/honey_from_bottle.json new file mode 100644 index 0000000000..dc6766fe64 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/centrifuging/honey_from_bottle.json @@ -0,0 +1,18 @@ +{ + "type": "ragium:centrifuging", + "ingredient": { + "count": 1, + "items": "#c:drinks/honey" + }, + "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/centrifuging/honey_from_comb.json b/src/generated/resources/data/ragium/recipe/centrifuging/honey_from_comb.json new file mode 100644 index 0000000000..f294ba43bc --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/centrifuging/honey_from_comb.json @@ -0,0 +1,18 @@ +{ + "type": "ragium:centrifuging", + "ingredient": { + "count": 1, + "items": "minecraft:honeycomb" + }, + "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/centrifuging/sponge.json b/src/generated/resources/data/ragium/recipe/centrifuging/sponge.json new file mode 100644 index 0000000000..5be0f44a0b --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/centrifuging/sponge.json @@ -0,0 +1,18 @@ +{ + "type": "ragium:centrifuging", + "ingredient": { + "count": 1, + "items": "minecraft:wet_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/draining/honey_from_bottle.json b/src/generated/resources/data/ragium/recipe/draining/honey_from_bottle.json deleted file mode 100644 index 2778fe351e..0000000000 --- a/src/generated/resources/data/ragium/recipe/draining/honey_from_bottle.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "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" - }, - "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 deleted file mode 100644 index 9ad75d7d92..0000000000 --- a/src/generated/resources/data/ragium/recipe/draining/honey_from_comb.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "ragium:draining", - "fluid_result": { - "amount": 1000, - "id": "ragium:honey" - }, - "ingredient": { - "count": 1, - "items": "minecraft:honeycomb" - }, - "item_result": { - "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 deleted file mode 100644 index d53d10ecce..0000000000 --- a/src/generated/resources/data/ragium/recipe/draining/sponge.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "ragium:draining", - "fluid_result": { - "amount": 1000, - "id": "minecraft:water" - }, - "ingredient": { - "count": 1, - "items": "minecraft:wet_sponge" - }, - "item_result": { - "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 d9283b51f8..192e974a86 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 9b5d9716b9..0d79d8314c 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 159ee99858..38919d5d30 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 6e333099e8..ed71dbe112 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 25143ca3c2..e15facb3c9 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 2ec46ae10e..f6fba43803 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 4756d3c925..44802ea973 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 fb352bcd5e..c384194b0d 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 aa84f1feae..7269da6ad2 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 91b6dca3ca..67ec3345ba 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 a19f8ecb2d..fc683e4a29 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 772c681f50..c3eb8a03f8 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 903e5bfe52..99e0a65918 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 3acc56eeb8..2b56b076f0 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 d9bcc3dd6f..8d977b0221 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 c95f14b246..5ed24f88a9 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 cfabe73422..b30553930e 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 2f53c19f64..1f40af62f8 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/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/anti_rust_oil.json b/src/generated/resources/data/ragium/recipe/mixing/anti_rust_oil.json index a914920317..bc15ce1b6b 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 new file mode 100644 index 0000000000..0cfd6156a3 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/mixing/black/concrete.json @@ -0,0 +1,26 @@ +{ + "type": "ragium:mixing", + "ingredient": { + "fluid": { + "amount": 250, + "fluids": "#c:dyes/black" + }, + "items": [ + { + "count": 1, + "items": "#c:sands" + }, + { + "count": 1, + "items": "#c:gravels" + } + ] + }, + "result": { + "item": { + "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 new file mode 100644 index 0000000000..a0fb74178d --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/mixing/black/liquid_dye.json @@ -0,0 +1,20 @@ +{ + "type": "ragium:mixing", + "ingredient": { + "fluid": { + "amount": 250, + "fluids": "#c:water" + }, + "item": { + "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/black_concrete.json b/src/generated/resources/data/ragium/recipe/mixing/black_concrete.json deleted file mode 100644 index 2759e4a94f..0000000000 --- a/src/generated/resources/data/ragium/recipe/mixing/black_concrete.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 250, - "fluids": "#c:dyes/black" - }, - "item_ingredient": [ - { - "count": 1, - "items": "#c:sands" - }, - { - "count": 1, - "items": "#c:gravels" - } - ], - "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_dye.json b/src/generated/resources/data/ragium/recipe/mixing/black_dye.json deleted file mode 100644 index 3f168170c3..0000000000 --- a/src/generated/resources/data/ragium/recipe/mixing/black_dye.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 250, - "fluids": "#c:water" - }, - "fluid_result": { - "amount": 250, - "id": "ragium:black_dye" - }, - "item_ingredient": { - "count": 1, - "items": "#c:dyes/black" - }, - "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 new file mode 100644 index 0000000000..98de1e3f82 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/mixing/blue/concrete.json @@ -0,0 +1,26 @@ +{ + "type": "ragium:mixing", + "ingredient": { + "fluid": { + "amount": 250, + "fluids": "#c:dyes/blue" + }, + "items": [ + { + "count": 1, + "items": "#c:sands" + }, + { + "count": 1, + "items": "#c:gravels" + } + ] + }, + "result": { + "item": { + "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 new file mode 100644 index 0000000000..57913430c1 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/mixing/blue/liquid_dye.json @@ -0,0 +1,20 @@ +{ + "type": "ragium:mixing", + "ingredient": { + "fluid": { + "amount": 250, + "fluids": "#c:water" + }, + "item": { + "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/blue_concrete.json b/src/generated/resources/data/ragium/recipe/mixing/blue_concrete.json deleted file mode 100644 index 03c5e2248f..0000000000 --- a/src/generated/resources/data/ragium/recipe/mixing/blue_concrete.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 250, - "fluids": "#c:dyes/blue" - }, - "item_ingredient": [ - { - "count": 1, - "items": "#c:sands" - }, - { - "count": 1, - "items": "#c:gravels" - } - ], - "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_dye.json b/src/generated/resources/data/ragium/recipe/mixing/blue_dye.json deleted file mode 100644 index bb76e9d9c7..0000000000 --- a/src/generated/resources/data/ragium/recipe/mixing/blue_dye.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 250, - "fluids": "#c:water" - }, - "fluid_result": { - "amount": 250, - "id": "ragium:blue_dye" - }, - "item_ingredient": { - "count": 1, - "items": "#c:dyes/blue" - }, - "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 new file mode 100644 index 0000000000..86bae145d5 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/mixing/brown/concrete.json @@ -0,0 +1,26 @@ +{ + "type": "ragium:mixing", + "ingredient": { + "fluid": { + "amount": 250, + "fluids": "#c:dyes/brown" + }, + "items": [ + { + "count": 1, + "items": "#c:sands" + }, + { + "count": 1, + "items": "#c:gravels" + } + ] + }, + "result": { + "item": { + "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 new file mode 100644 index 0000000000..3ce4ed2abc --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/mixing/brown/liquid_dye.json @@ -0,0 +1,20 @@ +{ + "type": "ragium:mixing", + "ingredient": { + "fluid": { + "amount": 250, + "fluids": "#c:water" + }, + "item": { + "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/brown_concrete.json b/src/generated/resources/data/ragium/recipe/mixing/brown_concrete.json deleted file mode 100644 index 50dbe56688..0000000000 --- a/src/generated/resources/data/ragium/recipe/mixing/brown_concrete.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 250, - "fluids": "#c:dyes/brown" - }, - "item_ingredient": [ - { - "count": 1, - "items": "#c:sands" - }, - { - "count": 1, - "items": "#c:gravels" - } - ], - "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_dye.json b/src/generated/resources/data/ragium/recipe/mixing/brown_dye.json deleted file mode 100644 index d232fdfd8a..0000000000 --- a/src/generated/resources/data/ragium/recipe/mixing/brown_dye.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 250, - "fluids": "#c:water" - }, - "fluid_result": { - "amount": 250, - "id": "ragium:brown_dye" - }, - "item_ingredient": { - "count": 1, - "items": "#c:dyes/brown" - }, - "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 new file mode 100644 index 0000000000..72dd04993a --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/mixing/cyan/concrete.json @@ -0,0 +1,26 @@ +{ + "type": "ragium:mixing", + "ingredient": { + "fluid": { + "amount": 250, + "fluids": "#c:dyes/cyan" + }, + "items": [ + { + "count": 1, + "items": "#c:sands" + }, + { + "count": 1, + "items": "#c:gravels" + } + ] + }, + "result": { + "item": { + "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 new file mode 100644 index 0000000000..747528092a --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/mixing/cyan/liquid_dye.json @@ -0,0 +1,20 @@ +{ + "type": "ragium:mixing", + "ingredient": { + "fluid": { + "amount": 250, + "fluids": "#c:water" + }, + "item": { + "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/cyan_concrete.json b/src/generated/resources/data/ragium/recipe/mixing/cyan_concrete.json deleted file mode 100644 index d04f9ba48d..0000000000 --- a/src/generated/resources/data/ragium/recipe/mixing/cyan_concrete.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 250, - "fluids": "#c:dyes/cyan" - }, - "item_ingredient": [ - { - "count": 1, - "items": "#c:sands" - }, - { - "count": 1, - "items": "#c:gravels" - } - ], - "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_dye.json b/src/generated/resources/data/ragium/recipe/mixing/cyan_dye.json deleted file mode 100644 index 0a086fb486..0000000000 --- a/src/generated/resources/data/ragium/recipe/mixing/cyan_dye.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 250, - "fluids": "#c:water" - }, - "fluid_result": { - "amount": 250, - "id": "ragium:cyan_dye" - }, - "item_ingredient": { - "count": 1, - "items": "#c:dyes/cyan" - }, - "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 d002fe9075..d2e52d9696 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 new file mode 100644 index 0000000000..c2b42bc97b --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/mixing/gray/concrete.json @@ -0,0 +1,26 @@ +{ + "type": "ragium:mixing", + "ingredient": { + "fluid": { + "amount": 250, + "fluids": "#c:dyes/gray" + }, + "items": [ + { + "count": 1, + "items": "#c:sands" + }, + { + "count": 1, + "items": "#c:gravels" + } + ] + }, + "result": { + "item": { + "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 new file mode 100644 index 0000000000..110206982b --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/mixing/gray/liquid_dye.json @@ -0,0 +1,20 @@ +{ + "type": "ragium:mixing", + "ingredient": { + "fluid": { + "amount": 250, + "fluids": "#c:water" + }, + "item": { + "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/gray_concrete.json b/src/generated/resources/data/ragium/recipe/mixing/gray_concrete.json deleted file mode 100644 index 2a734f15dc..0000000000 --- a/src/generated/resources/data/ragium/recipe/mixing/gray_concrete.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 250, - "fluids": "#c:dyes/gray" - }, - "item_ingredient": [ - { - "count": 1, - "items": "#c:sands" - }, - { - "count": 1, - "items": "#c:gravels" - } - ], - "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_dye.json b/src/generated/resources/data/ragium/recipe/mixing/gray_dye.json deleted file mode 100644 index ffe8e23e71..0000000000 --- a/src/generated/resources/data/ragium/recipe/mixing/gray_dye.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 250, - "fluids": "#c:water" - }, - "fluid_result": { - "amount": 250, - "id": "ragium:gray_dye" - }, - "item_ingredient": { - "count": 1, - "items": "#c:dyes/gray" - }, - "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 new file mode 100644 index 0000000000..ffcd5ef8d6 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/mixing/green/concrete.json @@ -0,0 +1,26 @@ +{ + "type": "ragium:mixing", + "ingredient": { + "fluid": { + "amount": 250, + "fluids": "#c:dyes/green" + }, + "items": [ + { + "count": 1, + "items": "#c:sands" + }, + { + "count": 1, + "items": "#c:gravels" + } + ] + }, + "result": { + "item": { + "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 new file mode 100644 index 0000000000..39b92a30d9 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/mixing/green/liquid_dye.json @@ -0,0 +1,20 @@ +{ + "type": "ragium:mixing", + "ingredient": { + "fluid": { + "amount": 250, + "fluids": "#c:water" + }, + "item": { + "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/green_concrete.json b/src/generated/resources/data/ragium/recipe/mixing/green_concrete.json deleted file mode 100644 index d979fab0b3..0000000000 --- a/src/generated/resources/data/ragium/recipe/mixing/green_concrete.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 250, - "fluids": "#c:dyes/green" - }, - "item_ingredient": [ - { - "count": 1, - "items": "#c:sands" - }, - { - "count": 1, - "items": "#c:gravels" - } - ], - "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_dye.json b/src/generated/resources/data/ragium/recipe/mixing/green_dye.json deleted file mode 100644 index d9dbca08da..0000000000 --- a/src/generated/resources/data/ragium/recipe/mixing/green_dye.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 250, - "fluids": "#c:water" - }, - "fluid_result": { - "amount": 250, - "id": "ragium:green_dye" - }, - "item_ingredient": { - "count": 1, - "items": "#c:dyes/green" - }, - "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 80a32958d0..45a5406c40 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 39f9a4b8fb..d1976b06e5 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 new file mode 100644 index 0000000000..ce9e4ca8c8 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/mixing/light_blue/concrete.json @@ -0,0 +1,26 @@ +{ + "type": "ragium:mixing", + "ingredient": { + "fluid": { + "amount": 250, + "fluids": "#c:dyes/light_blue" + }, + "items": [ + { + "count": 1, + "items": "#c:sands" + }, + { + "count": 1, + "items": "#c:gravels" + } + ] + }, + "result": { + "item": { + "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 new file mode 100644 index 0000000000..c0fe75af26 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/mixing/light_blue/liquid_dye.json @@ -0,0 +1,20 @@ +{ + "type": "ragium:mixing", + "ingredient": { + "fluid": { + "amount": 250, + "fluids": "#c:water" + }, + "item": { + "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_blue_concrete.json b/src/generated/resources/data/ragium/recipe/mixing/light_blue_concrete.json deleted file mode 100644 index bf3587b3b0..0000000000 --- a/src/generated/resources/data/ragium/recipe/mixing/light_blue_concrete.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 250, - "fluids": "#c:dyes/light_blue" - }, - "item_ingredient": [ - { - "count": 1, - "items": "#c:sands" - }, - { - "count": 1, - "items": "#c:gravels" - } - ], - "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_dye.json b/src/generated/resources/data/ragium/recipe/mixing/light_blue_dye.json deleted file mode 100644 index 04d69f11c2..0000000000 --- a/src/generated/resources/data/ragium/recipe/mixing/light_blue_dye.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 250, - "fluids": "#c:water" - }, - "fluid_result": { - "amount": 250, - "id": "ragium:light_blue_dye" - }, - "item_ingredient": { - "count": 1, - "items": "#c:dyes/light_blue" - }, - "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 new file mode 100644 index 0000000000..744035bae3 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/mixing/light_gray/concrete.json @@ -0,0 +1,26 @@ +{ + "type": "ragium:mixing", + "ingredient": { + "fluid": { + "amount": 250, + "fluids": "#c:dyes/light_gray" + }, + "items": [ + { + "count": 1, + "items": "#c:sands" + }, + { + "count": 1, + "items": "#c:gravels" + } + ] + }, + "result": { + "item": { + "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 new file mode 100644 index 0000000000..5e1594b7b1 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/mixing/light_gray/liquid_dye.json @@ -0,0 +1,20 @@ +{ + "type": "ragium:mixing", + "ingredient": { + "fluid": { + "amount": 250, + "fluids": "#c:water" + }, + "item": { + "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/light_gray_concrete.json b/src/generated/resources/data/ragium/recipe/mixing/light_gray_concrete.json deleted file mode 100644 index 1fbab8c92e..0000000000 --- a/src/generated/resources/data/ragium/recipe/mixing/light_gray_concrete.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 250, - "fluids": "#c:dyes/light_gray" - }, - "item_ingredient": [ - { - "count": 1, - "items": "#c:sands" - }, - { - "count": 1, - "items": "#c:gravels" - } - ], - "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_dye.json b/src/generated/resources/data/ragium/recipe/mixing/light_gray_dye.json deleted file mode 100644 index 67aca08ba5..0000000000 --- a/src/generated/resources/data/ragium/recipe/mixing/light_gray_dye.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 250, - "fluids": "#c:water" - }, - "fluid_result": { - "amount": 250, - "id": "ragium:light_gray_dye" - }, - "item_ingredient": { - "count": 1, - "items": "#c:dyes/light_gray" - }, - "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 new file mode 100644 index 0000000000..a589c7ce67 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/mixing/lime/concrete.json @@ -0,0 +1,26 @@ +{ + "type": "ragium:mixing", + "ingredient": { + "fluid": { + "amount": 250, + "fluids": "#c:dyes/lime" + }, + "items": [ + { + "count": 1, + "items": "#c:sands" + }, + { + "count": 1, + "items": "#c:gravels" + } + ] + }, + "result": { + "item": { + "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 new file mode 100644 index 0000000000..9205ef13f6 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/mixing/lime/liquid_dye.json @@ -0,0 +1,20 @@ +{ + "type": "ragium:mixing", + "ingredient": { + "fluid": { + "amount": 250, + "fluids": "#c:water" + }, + "item": { + "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/lime_concrete.json b/src/generated/resources/data/ragium/recipe/mixing/lime_concrete.json deleted file mode 100644 index d812c16e98..0000000000 --- a/src/generated/resources/data/ragium/recipe/mixing/lime_concrete.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 250, - "fluids": "#c:dyes/lime" - }, - "item_ingredient": [ - { - "count": 1, - "items": "#c:sands" - }, - { - "count": 1, - "items": "#c:gravels" - } - ], - "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_dye.json b/src/generated/resources/data/ragium/recipe/mixing/lime_dye.json deleted file mode 100644 index 612d6442a6..0000000000 --- a/src/generated/resources/data/ragium/recipe/mixing/lime_dye.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 250, - "fluids": "#c:water" - }, - "fluid_result": { - "amount": 250, - "id": "ragium:lime_dye" - }, - "item_ingredient": { - "count": 1, - "items": "#c:dyes/lime" - }, - "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 new file mode 100644 index 0000000000..9651893335 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/mixing/magenta/concrete.json @@ -0,0 +1,26 @@ +{ + "type": "ragium:mixing", + "ingredient": { + "fluid": { + "amount": 250, + "fluids": "#c:dyes/magenta" + }, + "items": [ + { + "count": 1, + "items": "#c:sands" + }, + { + "count": 1, + "items": "#c:gravels" + } + ] + }, + "result": { + "item": { + "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 new file mode 100644 index 0000000000..f5ff9d6929 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/mixing/magenta/liquid_dye.json @@ -0,0 +1,20 @@ +{ + "type": "ragium:mixing", + "ingredient": { + "fluid": { + "amount": 250, + "fluids": "#c:water" + }, + "item": { + "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/magenta_concrete.json b/src/generated/resources/data/ragium/recipe/mixing/magenta_concrete.json deleted file mode 100644 index 4618ef3f90..0000000000 --- a/src/generated/resources/data/ragium/recipe/mixing/magenta_concrete.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 250, - "fluids": "#c:dyes/magenta" - }, - "item_ingredient": [ - { - "count": 1, - "items": "#c:sands" - }, - { - "count": 1, - "items": "#c:gravels" - } - ], - "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_dye.json b/src/generated/resources/data/ragium/recipe/mixing/magenta_dye.json deleted file mode 100644 index c046916a4d..0000000000 --- a/src/generated/resources/data/ragium/recipe/mixing/magenta_dye.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 250, - "fluids": "#c:water" - }, - "fluid_result": { - "amount": 250, - "id": "ragium:magenta_dye" - }, - "item_ingredient": { - "count": 1, - "items": "#c:dyes/magenta" - }, - "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 aa0bf64a95..a53557c122 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 new file mode 100644 index 0000000000..ce25f55c63 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/mixing/orange/concrete.json @@ -0,0 +1,26 @@ +{ + "type": "ragium:mixing", + "ingredient": { + "fluid": { + "amount": 250, + "fluids": "#c:dyes/orange" + }, + "items": [ + { + "count": 1, + "items": "#c:sands" + }, + { + "count": 1, + "items": "#c:gravels" + } + ] + }, + "result": { + "item": { + "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 new file mode 100644 index 0000000000..995eca55e5 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/mixing/orange/liquid_dye.json @@ -0,0 +1,20 @@ +{ + "type": "ragium:mixing", + "ingredient": { + "fluid": { + "amount": 250, + "fluids": "#c:water" + }, + "item": { + "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/orange_concrete.json b/src/generated/resources/data/ragium/recipe/mixing/orange_concrete.json deleted file mode 100644 index 8cdbbeaade..0000000000 --- a/src/generated/resources/data/ragium/recipe/mixing/orange_concrete.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 250, - "fluids": "#c:dyes/orange" - }, - "item_ingredient": [ - { - "count": 1, - "items": "#c:sands" - }, - { - "count": 1, - "items": "#c:gravels" - } - ], - "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_dye.json b/src/generated/resources/data/ragium/recipe/mixing/orange_dye.json deleted file mode 100644 index 6892a84b4a..0000000000 --- a/src/generated/resources/data/ragium/recipe/mixing/orange_dye.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 250, - "fluids": "#c:water" - }, - "fluid_result": { - "amount": 250, - "id": "ragium:orange_dye" - }, - "item_ingredient": { - "count": 1, - "items": "#c:dyes/orange" - }, - "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 new file mode 100644 index 0000000000..44641ece7e --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/mixing/pink/concrete.json @@ -0,0 +1,26 @@ +{ + "type": "ragium:mixing", + "ingredient": { + "fluid": { + "amount": 250, + "fluids": "#c:dyes/pink" + }, + "items": [ + { + "count": 1, + "items": "#c:sands" + }, + { + "count": 1, + "items": "#c:gravels" + } + ] + }, + "result": { + "item": { + "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 new file mode 100644 index 0000000000..cd35504cc4 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/mixing/pink/liquid_dye.json @@ -0,0 +1,20 @@ +{ + "type": "ragium:mixing", + "ingredient": { + "fluid": { + "amount": 250, + "fluids": "#c:water" + }, + "item": { + "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/pink_concrete.json b/src/generated/resources/data/ragium/recipe/mixing/pink_concrete.json deleted file mode 100644 index 2b250906ce..0000000000 --- a/src/generated/resources/data/ragium/recipe/mixing/pink_concrete.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 250, - "fluids": "#c:dyes/pink" - }, - "item_ingredient": [ - { - "count": 1, - "items": "#c:sands" - }, - { - "count": 1, - "items": "#c:gravels" - } - ], - "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_dye.json b/src/generated/resources/data/ragium/recipe/mixing/pink_dye.json deleted file mode 100644 index 89e0b6dde2..0000000000 --- a/src/generated/resources/data/ragium/recipe/mixing/pink_dye.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 250, - "fluids": "#c:water" - }, - "fluid_result": { - "amount": 250, - "id": "ragium:pink_dye" - }, - "item_ingredient": { - "count": 1, - "items": "#c:dyes/pink" - }, - "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 new file mode 100644 index 0000000000..d822791b59 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/mixing/purple/concrete.json @@ -0,0 +1,26 @@ +{ + "type": "ragium:mixing", + "ingredient": { + "fluid": { + "amount": 250, + "fluids": "#c:dyes/purple" + }, + "items": [ + { + "count": 1, + "items": "#c:sands" + }, + { + "count": 1, + "items": "#c:gravels" + } + ] + }, + "result": { + "item": { + "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 new file mode 100644 index 0000000000..a517733eed --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/mixing/purple/liquid_dye.json @@ -0,0 +1,20 @@ +{ + "type": "ragium:mixing", + "ingredient": { + "fluid": { + "amount": 250, + "fluids": "#c:water" + }, + "item": { + "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/purple_concrete.json b/src/generated/resources/data/ragium/recipe/mixing/purple_concrete.json deleted file mode 100644 index 667708c0f5..0000000000 --- a/src/generated/resources/data/ragium/recipe/mixing/purple_concrete.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 250, - "fluids": "#c:dyes/purple" - }, - "item_ingredient": [ - { - "count": 1, - "items": "#c:sands" - }, - { - "count": 1, - "items": "#c:gravels" - } - ], - "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_dye.json b/src/generated/resources/data/ragium/recipe/mixing/purple_dye.json deleted file mode 100644 index 50af063076..0000000000 --- a/src/generated/resources/data/ragium/recipe/mixing/purple_dye.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 250, - "fluids": "#c:water" - }, - "fluid_result": { - "amount": 250, - "id": "ragium:purple_dye" - }, - "item_ingredient": { - "count": 1, - "items": "#c:dyes/purple" - }, - "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 new file mode 100644 index 0000000000..94b8650e18 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/mixing/red/concrete.json @@ -0,0 +1,26 @@ +{ + "type": "ragium:mixing", + "ingredient": { + "fluid": { + "amount": 250, + "fluids": "#c:dyes/red" + }, + "items": [ + { + "count": 1, + "items": "#c:sands" + }, + { + "count": 1, + "items": "#c:gravels" + } + ] + }, + "result": { + "item": { + "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 new file mode 100644 index 0000000000..41125bb1e8 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/mixing/red/liquid_dye.json @@ -0,0 +1,20 @@ +{ + "type": "ragium:mixing", + "ingredient": { + "fluid": { + "amount": 250, + "fluids": "#c:water" + }, + "item": { + "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/red_concrete.json b/src/generated/resources/data/ragium/recipe/mixing/red_concrete.json deleted file mode 100644 index 33e826686c..0000000000 --- a/src/generated/resources/data/ragium/recipe/mixing/red_concrete.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 250, - "fluids": "#c:dyes/red" - }, - "item_ingredient": [ - { - "count": 1, - "items": "#c:sands" - }, - { - "count": 1, - "items": "#c:gravels" - } - ], - "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_dye.json b/src/generated/resources/data/ragium/recipe/mixing/red_dye.json deleted file mode 100644 index f622e4479e..0000000000 --- a/src/generated/resources/data/ragium/recipe/mixing/red_dye.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 250, - "fluids": "#c:water" - }, - "fluid_result": { - "amount": 250, - "id": "ragium:red_dye" - }, - "item_ingredient": { - "count": 1, - "items": "#c:dyes/red" - }, - "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 new file mode 100644 index 0000000000..ea6449bc3b --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/mixing/white/concrete.json @@ -0,0 +1,26 @@ +{ + "type": "ragium:mixing", + "ingredient": { + "fluid": { + "amount": 250, + "fluids": "#c:dyes/white" + }, + "items": [ + { + "count": 1, + "items": "#c:sands" + }, + { + "count": 1, + "items": "#c:gravels" + } + ] + }, + "result": { + "item": { + "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 new file mode 100644 index 0000000000..8cd9698cff --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/mixing/white/liquid_dye.json @@ -0,0 +1,20 @@ +{ + "type": "ragium:mixing", + "ingredient": { + "fluid": { + "amount": 250, + "fluids": "#c:water" + }, + "item": { + "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/white_concrete.json b/src/generated/resources/data/ragium/recipe/mixing/white_concrete.json deleted file mode 100644 index 941802095a..0000000000 --- a/src/generated/resources/data/ragium/recipe/mixing/white_concrete.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 250, - "fluids": "#c:dyes/white" - }, - "item_ingredient": [ - { - "count": 1, - "items": "#c:sands" - }, - { - "count": 1, - "items": "#c:gravels" - } - ], - "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_dye.json b/src/generated/resources/data/ragium/recipe/mixing/white_dye.json deleted file mode 100644 index c1dc0e268a..0000000000 --- a/src/generated/resources/data/ragium/recipe/mixing/white_dye.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 250, - "fluids": "#c:water" - }, - "fluid_result": { - "amount": 250, - "id": "ragium:white_dye" - }, - "item_ingredient": { - "count": 1, - "items": "#c:dyes/white" - }, - "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 new file mode 100644 index 0000000000..66e5438763 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/mixing/yellow/concrete.json @@ -0,0 +1,26 @@ +{ + "type": "ragium:mixing", + "ingredient": { + "fluid": { + "amount": 250, + "fluids": "#c:dyes/yellow" + }, + "items": [ + { + "count": 1, + "items": "#c:sands" + }, + { + "count": 1, + "items": "#c:gravels" + } + ] + }, + "result": { + "item": { + "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 new file mode 100644 index 0000000000..a8c91b7657 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/mixing/yellow/liquid_dye.json @@ -0,0 +1,20 @@ +{ + "type": "ragium:mixing", + "ingredient": { + "fluid": { + "amount": 250, + "fluids": "#c:water" + }, + "item": { + "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/mixing/yellow_concrete.json b/src/generated/resources/data/ragium/recipe/mixing/yellow_concrete.json deleted file mode 100644 index e4886cbd34..0000000000 --- a/src/generated/resources/data/ragium/recipe/mixing/yellow_concrete.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 250, - "fluids": "#c:dyes/yellow" - }, - "item_ingredient": [ - { - "count": 1, - "items": "#c:sands" - }, - { - "count": 1, - "items": "#c:gravels" - } - ], - "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_dye.json b/src/generated/resources/data/ragium/recipe/mixing/yellow_dye.json deleted file mode 100644 index 46eb467f6d..0000000000 --- a/src/generated/resources/data/ragium/recipe/mixing/yellow_dye.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 250, - "fluids": "#c:water" - }, - "fluid_result": { - "amount": 250, - "id": "ragium:yellow_dye" - }, - "item_ingredient": { - "count": 1, - "items": "#c:dyes/yellow" - }, - "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 27f9b0c3d3..60be5bcecb 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 455d442779..a8834588a1 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 83c1262d35..a946d349d7 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 c5066e21e6..879b8e5506 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 ca72edcb68..9b6e262d92 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 deleted file mode 100644 index fcd1922d9e..0000000000 --- a/src/generated/resources/data/ragium/recipe/pyrolyzing/crude_oil_from_soul_sand.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "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" - }, - "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 deleted file mode 100644 index 181d9a413e..0000000000 --- a/src/generated/resources/data/ragium/recipe/pyrolyzing/crude_oil_from_soul_soil.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "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" - }, - "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 a171060a47..2641c95b5e 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 8c2cada30f..880ccbfea7 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 eda6ca4efb..af155f743d 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 7a8efd59a8..2db2371d2a 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 380552a9d9..b5e03f0928 100644 --- a/src/generated/resources/data/ragium/recipe/reacting/hydrochloric_acid.json +++ b/src/generated/resources/data/ragium/recipe/reacting/hydrochloric_acid.json @@ -1,16 +1,20 @@ { "type": "ragium:reacting", - "fluid_result": { - "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" + } + ], + "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 a46959b10f..62951d67aa 100644 --- a/src/generated/resources/data/ragium/recipe/reacting/hydrofluoric_acid.json +++ b/src/generated/resources/data/ragium/recipe/reacting/hydrofluoric_acid.json @@ -1,16 +1,20 @@ { "type": "ragium:reacting", - "fluid_result": { - "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" + } + ], + "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 05ab983170..6e05aa71c6 100644 --- a/src/generated/resources/data/ragium/recipe/reacting/hydrogen_chloride.json +++ b/src/generated/resources/data/ragium/recipe/reacting/hydrogen_chloride.json @@ -1,16 +1,20 @@ { "type": "ragium:reacting", - "fluid_result": { - "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" + } + ], + "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 b179daa2a7..f96cef9df4 100644 --- a/src/generated/resources/data/ragium/recipe/reacting/liquid_explosive.json +++ b/src/generated/resources/data/ragium/recipe/reacting/liquid_explosive.json @@ -1,16 +1,20 @@ { "type": "ragium:reacting", - "fluid_result": { - "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" + } + ], + "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 73ceb2da57..ccefd3ae0c 100644 --- a/src/generated/resources/data/ragium/recipe/reacting/molten_plastic.json +++ b/src/generated/resources/data/ragium/recipe/reacting/molten_plastic.json @@ -1,16 +1,20 @@ { "type": "ragium:reacting", - "fluid_result": { - "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" + } + ], + "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 8d2257f093..f0d1b0abae 100644 --- a/src/generated/resources/data/ragium/recipe/reacting/sulfur_trioxide.json +++ b/src/generated/resources/data/ragium/recipe/reacting/sulfur_trioxide.json @@ -1,16 +1,20 @@ { "type": "ragium:reacting", - "fluid_result": { - "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" + } + ], + "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 efb0c71440..2436339bf7 100644 --- a/src/generated/resources/data/ragium/recipe/reacting/sulfuric_acid.json +++ b/src/generated/resources/data/ragium/recipe/reacting/sulfuric_acid.json @@ -1,16 +1,20 @@ { "type": "ragium:reacting", - "fluid_result": { - "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" + } + ], + "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 afe4003494..1a88f42147 100644 --- a/src/generated/resources/data/ragium/recipe/reacting/synthetic_resin.json +++ b/src/generated/resources/data/ragium/recipe/reacting/synthetic_resin.json @@ -1,16 +1,20 @@ { "type": "ragium:reacting", - "fluid_result": { - "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" + } + ], + "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 08c48c3d36..07c3852aa0 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 bbd9c348d7..ad3cb6c329 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 33908465ed..4eedc73aeb 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 bdeb5228a6..4087360263 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 82817b0d90..ab484caf06 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 2938d91f00..5a0c4ce6c5 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 6ae0890777..7bd4fbd1da 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/shaped/advanced_upgrade.json b/src/generated/resources/data/ragium/recipe/shaped/advanced_upgrade.json new file mode 100644 index 0000000000..32f02e13b8 --- /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 0000000000..5604446037 --- /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/brewery.json b/src/generated/resources/data/ragium/recipe/shaped/blender.json similarity index 59% rename from src/generated/resources/data/ragium/recipe/shaped/brewery.json rename to src/generated/resources/data/ragium/recipe/shaped/blender.json index abe46a1af9..5e032b1bd6 100644 --- a/src/generated/resources/data/ragium/recipe/shaped/brewery.json +++ b/src/generated/resources/data/ragium/recipe/shaped/blender.json @@ -3,9 +3,9 @@ "category": "misc", "key": { "A": "#c:nuggets/black_steel", - "B": "ragium:bio_machine_parts", - "C": "#c:gears/emerald", - "D": "minecraft:brewing_stand" + "B": "ragium:electronics_machine_parts", + "C": "#c:gears/diamond", + "D": "ragium:mixer" }, "pattern": [ "ABA", @@ -13,6 +13,6 @@ "ADA" ], "result": { - "id": "ragium:brewery" + "id": "ragium:blender" } } \ 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 0000000000..945f9cc586 --- /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/shaped/planter.json b/src/generated/resources/data/ragium/recipe/shaped/planter.json index 6b6cc84769..aadbcf8e9b 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/shaped/upgrade_station.json b/src/generated/resources/data/ragium/recipe/shaped/upgrade_station.json new file mode 100644 index 0000000000..f2c8dd0fea --- /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/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 0000000000..8918289c53 --- /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/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 6ae689f256..7041c32020 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/recipe/washing/alumina_dust_from_clay.json b/src/generated/resources/data/ragium/recipe/washing/alumina_dust_from_clay.json index 6623cdc76d..a573c5c1a9 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 e4f3919778..d2dad7fd56 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 efc2d1ba4b..44278efdfb 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 654c22b8aa..3ed2324805 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 ff7b409dc2..97fe803ed2 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/generated/resources/data/ragium/tags/block/machines.json b/src/generated/resources/data/ragium/tags/block/machines.json index 04e451f284..e5920255c1 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/electronics.json b/src/generated/resources/data/ragium/tags/block/machines/electronics.json index 2be2125c5e..5d45bf0b19 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/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 9d8ee3c406..b3ea54d597 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 04e451f284..e5920255c1 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/electronics.json b/src/generated/resources/data/ragium/tags/item/machines/electronics.json index 2be2125c5e..5d45bf0b19 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/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 9d8ee3c406..b3ea54d597 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/data/ragium/tags/item/support_upgrades.json b/src/generated/resources/data/ragium/tags/item/support_upgrades.json new file mode 100644 index 0000000000..957d699fa9 --- /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 5cd3e810bc..74aadec1f1 100644 --- a/src/generated/resources/reports/ragium/registries.json +++ b/src/generated/resources/reports/ragium/registries.json @@ -5,11 +5,10 @@ "arcane_machine_casing", "aromatic_compound", "assembler", - "bio_machine_casing", "black_dye", "black_steel_block", + "blender", "blue_dye", - "brewery", "brown_dye", "charcoal_block", "chemical_bath", @@ -69,6 +68,7 @@ "red_dye", "refinery", "resin", + "resource_machine_casing", "salt_water", "scanner", "smelter", @@ -77,6 +77,7 @@ "sulfur_ore", "sulfuric_acid", "tank", + "upgrade_station", "void_metal_block", "void_tank", "white_dye", @@ -85,7 +86,7 @@ "minecraft:block_entity_type": [ "alloy_smelter", "assembler", - "brewery", + "blender", "chemical_bath", "compressor", "creative_battery", @@ -101,8 +102,11 @@ "planter", "potion_tank", "precision_assembler", + "pyrolyzer", + "refinery", "smelter", - "tank" + "tank", + "upgrade_station" ], "minecraft:creative_mode_tab": [ "common" @@ -115,7 +119,9 @@ "energy", "fluid", "memory_disc_data", - "owner_id" + "owner_id", + "upgrade", + "upgrades" ], "minecraft:fluid": [ "alcohol", @@ -201,6 +207,7 @@ "yellow_dye" ], "minecraft:item": [ + "advanced_upgrade", "alcohol_bucket", "aldehyde_bucket", "alloy_smelter", @@ -214,23 +221,23 @@ "arcane_machine_casing", "arcane_machine_parts", "aromatic_compound_bucket", + "ash_dust", "assembler", "ball_mold", "bamboo_charcoal", + "basic_upgrade", "bauxite_dust", "beeswax", - "bio_machine_casing", - "bio_machine_parts", "black_dye_bucket", "black_steel_block", "black_steel_ingot", "black_steel_nugget", "blank_mold", "bleach_bucket", + "blender", "block_mold", "blue_dye_bucket", "borax_dust", - "brewery", "brown_dye_bucket", "carbon_dust", "carbon_fiber", @@ -271,6 +278,7 @@ "electrolyzer", "electronics_machine_casing", "electronics_machine_parts", + "elite_upgrade", "emerald_dust", "emerald_gear", "enchanter", @@ -355,6 +363,8 @@ "red_dye_bucket", "refinery", "resin_bucket", + "resource_machine_casing", + "resource_machine_parts", "salt_dust", "salt_water_bucket", "scanner", @@ -389,6 +399,8 @@ "tiny_coal", "tiny_coal_coke", "tiny_pitch_coke", + "ultimate_upgrade", + "upgrade_station", "void_metal_block", "void_metal_ingot", "void_metal_nugget", @@ -423,14 +435,13 @@ "alloying", "assembling", "bathing", - "brewing", "centrifuging", "compressing", "crushing", "cutting", - "draining", "electrolyzing", "enchanting", + "exchanging", "filling", "freezing", "melting", @@ -446,14 +457,13 @@ "alloying", "assembling", "bathing", - "brewing", "centrifuging", "compressing", "crushing", "cutting", - "draining", "electrolyzing", "enchanting", + "exchanging", "filling", "freezing", "melting", @@ -554,10 +564,13 @@ "hydrogen_fluoride", "hydroxide", "iron", + "mercury", + "mercury_sulfide", "nitrate", "nitric_acid", "nitrogen", "oxygen", + "potassium_carbonate", "potassium_nitrate", "silicon", "silicon_dioxide", @@ -586,6 +599,7 @@ "gold", "hydrogen", "iron", + "mercury", "nitrogen", "oxygen", "potassium", @@ -606,7 +620,8 @@ "ragium:syncable_payload_type": [ "fluid", "integer", - "item" + "item", + "long" ], "ragium:widget_type": [ "energy", diff --git a/src/lib/kotlin/hiiragi283/lib/HTConstants.kt b/src/lib/kotlin/hiiragi283/lib/HTConstants.kt index 311b5adaee..ec3ed666d3 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 // @@ -115,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/block/entity/HTAbstractBlockEntity.kt b/src/lib/kotlin/hiiragi283/lib/block/entity/HTAbstractBlockEntity.kt index 9098ff9a43..f11b5cdd25 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 d2a3f184f0..977005dfa8 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/capability/HTEnergyCapabilities.kt b/src/lib/kotlin/hiiragi283/lib/capability/HTEnergyCapabilities.kt index abfc6e2e26..d1f54e88a3 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 ddf19ac3bf..1e6fd19213 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/collection/HTCollections.kt b/src/lib/kotlin/hiiragi283/lib/collection/HTCollections.kt index 910498b0c7..14ed926189 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/color/VanillaColoredCollections.kt b/src/lib/kotlin/hiiragi283/lib/color/VanillaColoredCollections.kt index f259b7118f..0014b11bda 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/config/HTConfigValues.kt b/src/lib/kotlin/hiiragi283/lib/config/HTConfigValues.kt index 7aec218659..6e622cceab 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/data/ExporterDataProvider.kt b/src/lib/kotlin/hiiragi283/lib/data/ExporterDataProvider.kt index 90d79b38c8..eb839a8e14 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 4a95c4b0bd..0a4ea7f6f8 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/lang/HTLangProvider.kt b/src/lib/kotlin/hiiragi283/lib/data/lang/HTLangProvider.kt index afce749ac8..c7cfe60285 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/lib/data/loot/HTBlockLootTableProvider.kt b/src/lib/kotlin/hiiragi283/lib/data/loot/HTBlockLootTableProvider.kt index f8dc0c872e..a44b262e1f 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 58856d7866..c8f32220ae 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 e12cc7d583..2dd6714fc7 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/recipe/HTRecipeProvider.kt b/src/lib/kotlin/hiiragi283/lib/data/recipe/HTRecipeProvider.kt index 2330815c26..219f9adc24 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/data/recipe/builder/HTItemAndFluidToRecipeBuilder.kt b/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/HTItemAndFluidToRecipeBuilder.kt index b272bf8a5c..1591d136a8 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/data/recipe/builder/HTItemOrFluidRecipeBuilder.kt b/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/HTItemOrFluidRecipeBuilder.kt new file mode 100644 index 0000000000..81d90ccc6d --- /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/data/recipe/builder/HTRecipeBuilder.kt b/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/HTRecipeBuilder.kt index 875c7ecef5..014f547144 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/data/tag/HTTagBuilder.kt b/src/lib/kotlin/hiiragi283/lib/data/tag/HTTagBuilder.kt index c47ff1f7e1..c0c61bab1a 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/FluidStacks.kt b/src/lib/kotlin/hiiragi283/lib/fluid/FluidStacks.kt index 648fabc3a9..a894520ce9 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/lib/kotlin/hiiragi283/lib/fluid/HTFluidInstanceLike.kt b/src/lib/kotlin/hiiragi283/lib/fluid/HTFluidInstanceLike.kt index 0c734b1dc6..eabe108877 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/gui/HTGuiAccess.kt b/src/lib/kotlin/hiiragi283/lib/gui/HTGuiAccess.kt index c5384d9a45..8dddf8beff 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 8a8619017c..17c9e7cf37 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 0e08eea627..009771fa68 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 76ceb1fda5..91b92ef369 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 90d32ee43e..d72d82ce5c 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 0049d7c377..52cc0570c6 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 0000000000..18596b6d9a --- /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 0000000000..a463da2aa1 --- /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 71ae3fdfd7..b9e029dff9 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 ccff4cfb3a..180c6e3667 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 0931265e34..53ba86d496 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/item/HTItemInstanceLike.kt b/src/lib/kotlin/hiiragi283/lib/item/HTItemInstanceLike.kt index 4bf68c3169..ebc9e4211c 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 7058cdfa0d..90be6121c3 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/HTRecipeHolder.kt b/src/lib/kotlin/hiiragi283/lib/recipe/HTRecipeHolder.kt index cc9047f802..d750c02394 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/HTSerializableRecipe.kt b/src/lib/kotlin/hiiragi283/lib/recipe/HTSerializableRecipe.kt index 55561c4110..9b04aa052b 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/base/HTBasicSingleRecipe.kt b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTBasicSingleRecipe.kt index 3aa010a53f..b241b56b97 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,20 +37,7 @@ open class HTBasicSingleRecipe, RE } @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( + 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 b92de05855..91fcec3da5 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,14 +32,14 @@ interface HTDoubleItemToItemRecipe : val result: HTItemResult, override val progressData: HTProgressData ) : HTDoubleItemToItemRecipe, - HTProgressRecipe.Simple { + HTProgressRecipe.Simple { companion object { @JvmStatic 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/HTFluidToDoubleFluidRecipe.kt b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTFluidToDoubleFluidRecipe.kt deleted file mode 100644 index 37803ee601..0000000000 --- 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/lib/recipe/base/HTFluidToRecipe.kt b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTFluidToRecipe.kt index f577b4699f..2222991b14 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 0692e2a4a1..97cc82b691 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTItemAndFluidToRecipe.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTItemAndFluidToRecipe.kt @@ -6,8 +6,10 @@ 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 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 @@ -40,7 +49,7 @@ typealias HTItemAndFluidToItemRecipe = HTItemAndFluidToRecipe interface HTItemAndFluidToRecipe : HTRecipePredicates.ItemAndFluid, HTRecipeFactories.ItemAndFluid, - HTProgressRecipe { + HTProgressRecipe { /** * @author Hiiragi Tsubasa @@ -52,7 +61,7 @@ interface HTItemAndFluidToRecipe : val result: RESULT, override val progressData: HTProgressData ) : HTItemAndFluidToRecipe, - HTProgressRecipe.Simple { + HTProgressRecipe.Simple { companion object { @JvmStatic fun , RECIPE : Basic> codec( @@ -60,12 +69,10 @@ 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) @@ -148,4 +155,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/lib/recipe/base/HTItemToDoubleItemRecipe.kt b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTItemToDoubleItemRecipe.kt index 5fb24a418a..64a0b6923e 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 56a3913d06..1e35842c20 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 e96da6015d..72b5ae903b 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 @@ -32,37 +26,35 @@ data object HTRecipeFactories { * 消費される入力を取得します。 */ fun getMatchingStack(input: INPUT_A): INPUT_A + + /** + * 消費される入力を取得します。 + */ + fun getMatchingStack(input: HTRecipeInput): INPUT_A } /** * 1種類の液体から完成品を作る[SingleInput]の拡張インターフェースです。 */ - interface SingleFluidTo : SingleInput { - override fun produce(input: HTSingleFluidRecipeInput): OUTPUT = apply(input.fluid) - } + interface SingleFluidTo : SingleInput { + override fun produce(input: HTRecipeInput): OUTPUT = apply(input.getFluidOrEmpty(0)) - /** - * 1種類のアイテムから完成品を作る[SingleInput]の拡張インターフェースです。 - */ - interface SingleItemTo : SingleInput { - override fun produce(input: SingleRecipeInput): OUTPUT = apply(input.item()) + override fun getMatchingStack(input: HTRecipeInput): FluidInstance = getMatchingStack(input.getFluidOrEmpty(0)) } /** - * @since 26.1.8 + * 1種類のアイテムから完成品を作る[SingleInput]の拡張インターフェースです。 */ - interface Located : SingleInput { - override fun produce(input: HTLocationRecipeInput): OUTPUT = apply(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 @@ -70,35 +62,49 @@ data object HTRecipeFactories { * 消費される入力を取得します。 */ fun getMatchingStack(first: INPUT_A, second: INPUT_B): Pair + + /** + * 消費される入力を取得します。 + * @since 26.1.9 + */ + 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: 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: HTRecipeInput): Pair = + getMatchingStack(input.getItemOrEmpty(0), input.getItemOrEmpty(1)) } /** * 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: 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 @@ -106,6 +112,12 @@ data object HTRecipeFactories { * 消費される入力を取得します。 */ fun getMatchingStack(first: INPUT_A, second: INPUT_B, third: INPUT_C): Triple + + /** + * 消費される入力を取得します。 + * @since 26.1.9 + */ + fun getMatchingStack(input: HTRecipeInput): Triple } /** @@ -113,16 +125,35 @@ 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: HTRecipeInput): Triple = + getMatchingStack(input.getItemOrEmpty(0), input.getItemOrEmpty(1), input.getFluidOrEmpty(0)) + } + + /** + * 1種類のアイテムと2種類の液体から完成品を作る[TripleInput]の拡張インターフェースです。 + * @since 26.1.9 + */ + interface ItemAndDoubleFluid : + TripleInput { + override fun produce(input: HTRecipeInput): OUTPUT = + apply(input.getItemOrEmpty(0), input.getFluidOrEmpty(0), input.getFluidOrEmpty(1)) + + 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: 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 eb1b2d3db1..29b1903c37 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,16 +94,25 @@ 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)) } + /** + * 1種類のアイテムと2種類の液体を判定する[TripleInput]の拡張インターフェースです。 + * @since 26.1.9 + */ + 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 1e8da1016f..0742b0e41a 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/handler/HTOutputSlotHelper.kt b/src/lib/kotlin/hiiragi283/lib/recipe/handler/HTOutputSlotHelper.kt index 3822b384e7..afc57978b0 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/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTFluidIngredient.kt b/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTFluidIngredient.kt index 5361f52550..69da771571 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,11 +15,12 @@ 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]の実装クラスです。 * - * 参照 : [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 */ @@ -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/HTIngredient.kt b/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTIngredient.kt index 21c1886929..dbb70ce7f0 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 369c271854..d5893801f1 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,11 +14,12 @@ 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]の実装クラスです。 * - * 参照 : [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 */ @@ -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/lib/recipe/ingredient/HTPotionFluidIngredient.kt b/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTPotionFluidIngredient.kt index 432e94e7b8..3707de5f20 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/input/HTFluidListRecipeInput.kt b/src/lib/kotlin/hiiragi283/lib/recipe/input/HTFluidListRecipeInput.kt deleted file mode 100644 index 640059f58c..0000000000 --- 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/HTFluidRecipeInput.kt b/src/lib/kotlin/hiiragi283/lib/recipe/input/HTFluidRecipeInput.kt index e91fcd82fb..14d873431c 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/input/HTItemAndFluidRecipeInput.kt b/src/lib/kotlin/hiiragi283/lib/recipe/input/HTItemAndFluidRecipeInput.kt deleted file mode 100644 index 46c35c95c9..0000000000 --- a/src/lib/kotlin/hiiragi283/lib/recipe/input/HTItemAndFluidRecipeInput.kt +++ /dev/null @@ -1,20 +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 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 ccf0ea0935..0000000000 --- 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 0000000000..986966f0ed --- /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 5a6b434fe9..0000000000 --- a/src/lib/kotlin/hiiragi283/lib/recipe/input/HTSingleFluidRecipeInput.kt +++ /dev/null @@ -1,22 +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 -} diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/lookup/HTCompoundRecipeLookup.kt b/src/lib/kotlin/hiiragi283/lib/recipe/lookup/HTCompoundRecipeLookup.kt index 25ca57b512..703cfdbfaf 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/lib/recipe/lookup/HTRecipeCache.kt b/src/lib/kotlin/hiiragi283/lib/recipe/lookup/HTRecipeCache.kt index c97ec642c2..ffa6735cc7 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/lookup/HTRecipeCache.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/lookup/HTRecipeCache.kt @@ -1,11 +1,12 @@ 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 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 @@ -27,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 レシピの入力 @@ -65,7 +58,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 +72,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 +80,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/HTRecipeLookup.kt b/src/lib/kotlin/hiiragi283/lib/recipe/lookup/HTRecipeLookup.kt index 042fb2fb05..592a4edea5 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/recipe/lookup/HTVanillaRecipeCache.kt b/src/lib/kotlin/hiiragi283/lib/recipe/lookup/HTVanillaRecipeCache.kt index baec6483df..3e2d27c027 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 22a3bcfcc2..61a4350004 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/recipe/result/HTItemOrFluidResult.kt b/src/lib/kotlin/hiiragi283/lib/recipe/result/HTItemOrFluidResult.kt index 07d26b5fd9..b8b7821911 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/recipe/widget/HTGhostWidget.kt b/src/lib/kotlin/hiiragi283/lib/recipe/widget/HTGhostWidget.kt index b891630480..3a7705b717 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 b89696173c..d7335a7e7b 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/registry/HTDeferredHolder.kt b/src/lib/kotlin/hiiragi283/lib/registry/HTDeferredHolder.kt index fbca13f4fe..5d1db8b593 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 95098c44b3..e8b64b46a0 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 b58d04898a..f7fc121ca5 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 edec5195c7..956bf09090 100644 --- a/src/lib/kotlin/hiiragi283/lib/resource/HTValueWithKey.kt +++ b/src/lib/kotlin/hiiragi283/lib/resource/HTValueWithKey.kt @@ -21,34 +21,27 @@ 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 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/serialization/codec/HTCodecs.kt b/src/lib/kotlin/hiiragi283/lib/serialization/codec/HTCodecs.kt index 8bd980ac1a..5b9c84b2f3 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/lib/text/HTCommonTranslation.kt b/src/lib/kotlin/hiiragi283/lib/text/HTCommonTranslation.kt index 9e7be15d2c..6fec77c871 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 529b7c8e56..32aa147949 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 f38d0fa69c..0ddef95200 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 541901f26a..8dc624d8f0 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 a0e09285bd..ce6be6567a 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/ExtendedResourceHandler.kt b/src/lib/kotlin/hiiragi283/lib/transfer/ExtendedResourceHandler.kt index e90060bc3a..41bec22d74 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/HTResourceSlot.kt b/src/lib/kotlin/hiiragi283/lib/transfer/HTResourceSlot.kt index 980ffb9099..a2c0205de3 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 0b0b61aaa0..8437e3f1a0 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 120aa918ec..d1b1f3611b 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 43e9d270fe..0e7317c12a 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 631133279b..0472a4e8ca 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/HTTransferValidators.kt b/src/lib/kotlin/hiiragi283/lib/transfer/HTTransferValidators.kt index 168ade3b2b..a95bc57e00 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/access/HTItemSlotItemAccess.kt b/src/lib/kotlin/hiiragi283/lib/transfer/access/HTItemSlotItemAccess.kt new file mode 100644 index 0000000000..7ccc89b495 --- /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/energy/HTBasicEnergyHandler.kt b/src/lib/kotlin/hiiragi283/lib/transfer/energy/HTBasicEnergyHandler.kt index db0c883888..070c79cb68 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 f2a4865b4f..025ecba782 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/fluid/HTBasicFluidTank.kt b/src/lib/kotlin/hiiragi283/lib/transfer/fluid/HTBasicFluidTank.kt index 3b7276d938..c084f05428 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 48e52108f6..3df0c021dc 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 cf19ef98bc..1656ded254 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 fab2d7afa9..677251d513 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/item/HTEnergyItemSlot.kt b/src/lib/kotlin/hiiragi283/lib/transfer/item/HTEnergyItemSlot.kt new file mode 100644 index 0000000000..47651fd092 --- /dev/null +++ b/src/lib/kotlin/hiiragi283/lib/transfer/item/HTEnergyItemSlot.kt @@ -0,0 +1,134 @@ +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?, + filter: Predicate = HTTransferPredicates.alwaysTrue() + ): HTEnergyItemSlot = HTEnergyItemSlot( + handler, + HTTransferPredicates.notExternal().or { resource: ItemResource, _ -> !canFill(resource) }, + HTTransferPredicates.internalOnly().or { resource: ItemResource, _ -> canFill(resource) }, + filter, + listener + ) + + @JvmStatic + fun drain( + handler: HTEnergyHandler, + listener: Runnable?, + filter: Predicate = HTTransferPredicates.alwaysTrue() + ): HTEnergyItemSlot = HTEnergyItemSlot( + handler, + HTTransferPredicates.notExternal().or { resource: ItemResource, _ -> + !canDrain(handler, resource) + }, + HTTransferPredicates.internalOnly().or { resource: ItemResource, _ -> + canDrain(handler, resource) + }, + filter, + 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/lib/transfer/proxy/HTProxyHandler.kt b/src/lib/kotlin/hiiragi283/lib/transfer/proxy/HTProxyHandler.kt index ff9b648cff..c9346b3a2b 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 e58e495d71..994e031a16 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 4191bd44ad..d6fc3dafbd 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 12f462a000..afe5addc45 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 6c726cb9b8..364aabacce 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/lib/kotlin/hiiragi283/lib/util/Either.kt b/src/lib/kotlin/hiiragi283/lib/util/Either.kt index 9fb9ec2492..e50a78b703 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/lib/kotlin/hiiragi283/ragium/api/RagiumConfig.kt b/src/lib/kotlin/hiiragi283/ragium/api/RagiumConfig.kt index 2a19135956..02c7f6a019 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/RagiumConfig.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/RagiumConfig.kt @@ -141,16 +141,16 @@ 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) // 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 f094c63515..281ee245df 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,17 +24,16 @@ 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" const val WASHER = "washer" - // Bio - const val BREWERY = "brewery" + // Resource const val PLANTER = "planter" // Electronics + const val BLENDER = "blender" const val ELECTROLYZER = "electrolyzer" const val PRECISION_ASSEMBLER = "precision_assembler" const val SCANNER = "scanner" @@ -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,12 +62,12 @@ 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" - // Bio + // Resource const val BREWING = "brewing" const val PLANTING = "planting" diff --git a/src/lib/kotlin/hiiragi283/ragium/api/config/HTEnergyConfig.kt b/src/lib/kotlin/hiiragi283/ragium/api/config/HTEnergyConfig.kt index 49de282e37..67f459fbd2 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/data/RagiumDataComponents.kt b/src/lib/kotlin/hiiragi283/ragium/api/data/RagiumDataComponents.kt index daa07702d3..b7f6c9bcb9 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/data/RagiumDataComponents.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/data/RagiumDataComponents.kt @@ -4,6 +4,8 @@ import hiiragi283.lib.data.DataComponentType import hiiragi283.lib.serialization.codec.HTCodecs 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 @@ -50,4 +52,18 @@ data object RagiumDataComponents { @JvmField val OWNER_ID: DataComponentType = DataComponentType(HTCodecs.UUID, HTStreamCodecs.UUID) + + /** + * @since 26.1.9 + */ + @JvmField + 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/data/chemical/RagiumChemicals.kt b/src/lib/kotlin/hiiragi283/ragium/api/data/chemical/RagiumChemicals.kt index f4285773bc..94108980ce 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 2e07a21150..d4412e89d3 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/data/recipe/builder/RTCentrifugingRecipeBuilder.kt b/src/lib/kotlin/hiiragi283/ragium/api/data/recipe/builder/RTCentrifugingRecipeBuilder.kt new file mode 100644 index 0000000000..8e10cdace1 --- /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 + 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/RTMixingRecipeBuilder.kt b/src/lib/kotlin/hiiragi283/ragium/api/data/recipe/builder/RTMixingRecipeBuilder.kt index 85cfd2ec97..d433a3c91d 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/RTReactingRecipeBuilder.kt b/src/lib/kotlin/hiiragi283/ragium/api/data/recipe/builder/RTReactingRecipeBuilder.kt index 29c0b75ddf..ebbfa8f33c 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/data/recipe/builder/RagiumRecipeBuilders.kt b/src/lib/kotlin/hiiragi283/ragium/api/data/recipe/builder/RagiumRecipeBuilders.kt index 4dcc715204..841d85f1be 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,9 +2,9 @@ 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 @@ -15,13 +15,11 @@ 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 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 @@ -79,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,14 +155,13 @@ data object RagiumRecipeBuilders { } @JvmStatic - inline fun centrifuging( - builderAction: HTFluidToDoubleFluidRecipeBuilder.() -> Unit - ): HTFluidToDoubleFluidRecipeBuilder { + inline fun exchanging( + builderAction: HTItemOrFluidRecipeBuilder.() -> Unit + ): HTItemOrFluidRecipeBuilder { contract { callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) } - return HTFluidToDoubleFluidRecipeBuilder(RagiumConstants.CENTRIFUGING, ::RTCentrifugingRecipe) - .apply(builderAction) + return HTItemOrFluidRecipeBuilder(RagiumConstants.EXCHANGING, ::RTExchangingRecipe).apply(builderAction) } @JvmStatic @@ -174,36 +169,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/tag/HTMachineType.kt b/src/lib/kotlin/hiiragi283/ragium/api/machine/HTMachineType.kt similarity index 92% rename from src/lib/kotlin/hiiragi283/ragium/api/tag/HTMachineType.kt rename to src/lib/kotlin/hiiragi283/ragium/api/machine/HTMachineType.kt index d731110bf5..1c6cea864f 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 @@ -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/lib/kotlin/hiiragi283/ragium/api/machine/HTMachineUpgrade.kt b/src/lib/kotlin/hiiragi283/ragium/api/machine/HTMachineUpgrade.kt new file mode 100644 index 0000000000..14996158b1 --- /dev/null +++ b/src/lib/kotlin/hiiragi283/ragium/api/machine/HTMachineUpgrade.kt @@ -0,0 +1,88 @@ +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 + ) { + addToTooltip(consumer) + } + + fun addToTooltip(consumer: Consumer) { + 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 0000000000..620f357d83 --- /dev/null +++ b/src/lib/kotlin/hiiragi283/ragium/api/machine/HTMachineUpgradeHelper.kt @@ -0,0 +1,50 @@ +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 { + val multiplier: Long = minOf(1, 100L + getCombinedUpgrade(getter).speed) + return Ints.saturatedCast(base * multiplier / 100) + } + + @JvmStatic + 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 { + 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 { + val multiplier: Long = minOf(1, 100L + getCombinedUpgrade(getter).capacity) + return Ints.saturatedCast(base * multiplier / 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 0000000000..6a1095da1a --- /dev/null +++ b/src/lib/kotlin/hiiragi283/ragium/api/machine/HTMachineUpgradeList.kt @@ -0,0 +1,89 @@ +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) + } + + fun addToTooltip(consumer: Consumer) { + combinedUpgrade.addToTooltip(consumer) + } + + @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/material/RagiumMaterial.kt b/src/lib/kotlin/hiiragi283/ragium/api/material/RagiumMaterial.kt index 9d85042be1..5c647ee86e 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/lib/kotlin/hiiragi283/ragium/api/recipe/RTAlloyingRecipe.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTAlloyingRecipe.kt index 5a83b52f88..f65dc12970 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 0a15fe49f4..177ee09835 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 195f5c10d4..33f6b590cb 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/RTBrewingRecipe.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTBrewingRecipe.kt deleted file mode 100644 index 4a82b82f36..0000000000 --- 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/RTCentrifugingRecipe.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTCentrifugingRecipe.kt index 8783ef87d0..8450ea893b 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTCentrifugingRecipe.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTCentrifugingRecipe.kt @@ -1,25 +1,110 @@ 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.input.HTRecipeInput 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.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 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) { + companion object { + @JvmField + val CODEC: Codec = HTCodecs.record { instance -> + instance.group( + HTItemResult.CODEC + .compactNelFieldOf(HTConstants.ITEM, HTConstants.ITEMS, 2) + .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.head.create(), + items.getOrNull(1).createOrEmpty(), + 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 + ) - override fun getType(): RecipeType = RagiumRecipeTypes.CENTRIFUGING + @JvmField + val SERIALIZER: RecipeSerializer = RecipeSerializer(CODEC, STREAM_CODEC) + } + + 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/RTCompressingRecipe.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTCompressingRecipe.kt index 98e81857bf..b1b3ddee5a 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 1d1f33ad34..8daad3af38 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 5358c9080d..51fa04ec63 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/RTDrainingRecipe.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTDrainingRecipe.kt deleted file mode 100644 index 2c5bdf00f7..0000000000 --- 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/RTElectrolyzingRecipe.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTElectrolyzingRecipe.kt index bd574513b4..39ae5b1418 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 7a7c29631a..efcafff781 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 new file mode 100644 index 0000000000..5252db6d79 --- /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.HTRecipeInput +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/RTFillingRecipe.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTFillingRecipe.kt index 1125a54a61..df25f0d2d1 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 25db1728d5..21949100bc 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 af526cb5b3..ce00e514dc 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 e10337b8c6..0f453b5126 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTMixingRecipe.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTMixingRecipe.kt @@ -4,21 +4,19 @@ 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 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.input.HTFluidRecipeInput -import hiiragi283.lib.recipe.input.HTItemAndFluidRecipeInput +import hiiragi283.lib.recipe.ingredient.testOrEmpty +import hiiragi283.lib.recipe.input.HTRecipeInput 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 @@ -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,20 +34,17 @@ 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 -> 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,58 +66,46 @@ data class RTMixingRecipe( val SERIALIZER: RecipeSerializer = RecipeSerializer(CODEC, STREAM_CODEC) } - fun toItemAndFluidToFluid(): HTItemAndFluidToFluidRecipe? = when { + constructor( + ingredient: Pair, HTFluidIngredient>, + result: HTItemOrFluidResult, + progressData: HTProgressData + ) : this( + ingredient.first, + ingredient.second, + result, + progressData + ) + + 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 + ) } } 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 + else -> itemIngredients.head.test(first) && itemIngredients.getOrNull(1).testOrEmpty(second) } override fun apply(first: ItemInstance, second: ItemInstance, third: FluidInstance): HTItemAndFluidStack = @@ -133,24 +115,11 @@ 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 diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTPlantingRecipe.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTPlantingRecipe.kt index b440b19ad2..8421ecd663 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 1f5dab5f4f..c9067654c9 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 8930c5fcce..70d208095a 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.input.HTFluidRecipeInput +import hiiragi283.lib.recipe.ingredient.HTItemCatalyst +import hiiragi283.lib.recipe.ingredient.testOrEmpty +import hiiragi283.lib.recipe.input.HTRecipeInput 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.fieldOf(HTConstants.RESULT).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/RTRefiningRecipe.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTRefiningRecipe.kt index 36c7e51bc8..9b128667cd 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 abe2041138..cc599519ad 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 4f6c214ba5..04f86b7db4 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,18 +30,16 @@ 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 -> 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/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeLookups.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeLookups.kt index 5562831054..10652d5146 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeLookups.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeLookups.kt @@ -1,9 +1,8 @@ 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 import hiiragi283.lib.recipe.base.HTItemToFluidRecipe import hiiragi283.lib.recipe.base.HTItemToItemAndFluidRecipe @@ -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) @@ -73,21 +72,18 @@ data object RagiumRecipeLookups { val BATHING: HTCompoundRecipeLookup = create(RagiumConstants.BATHING) @JvmField - val CENTRIFUGING: HTCompoundRecipeLookup = create(RagiumConstants.CENTRIFUGING) + val EXCHANGING: HTCompoundRecipeLookup = create(RagiumConstants.EXCHANGING) @JvmField - val MIXING: HTRecipeLookup = create(RagiumRecipeTypes.MIXING) + val MIXING: HTCompoundRecipeLookup = create(RagiumConstants.MIXING) @JvmField - val REACTING: HTCompoundRecipeLookup = create(RagiumConstants.REACTING) + val REACTING: HTRecipeLookup = create(RagiumRecipeTypes.REACTING) @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 6e7fdccceb..9a0d3429e9 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) @@ -88,26 +88,22 @@ data object RagiumRecipeSerializers { register(RagiumConstants.BATHING, RTBathingRecipe.SERIALIZER) @JvmField - val CENTRIFUGING: RecipeSerializer = - register(RagiumConstants.CENTRIFUGING, RTCentrifugingRecipe.SERIALIZER) + val EXCHANGING: RecipeSerializer = + register(RagiumConstants.EXCHANGING, RTExchangingRecipe.SERIALIZER) @JvmField val MIXING: RecipeSerializer = 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 = 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 7d604f07c0..208996323a 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) @@ -74,21 +74,18 @@ data object RagiumRecipeTypes { val BATHING: RecipeType = create(RagiumConstants.BATHING) @JvmField - val CENTRIFUGING: RecipeType = create(RagiumConstants.CENTRIFUGING) + val EXCHANGING: RecipeType = create(RagiumConstants.EXCHANGING) @JvmField 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) - // 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/RagiumTags.kt b/src/lib/kotlin/hiiragi283/ragium/api/tag/RagiumTags.kt index 97e542fc49..7ef92e3291 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/lib/kotlin/hiiragi283/ragium/api/text/RagiumTranslation.kt b/src/lib/kotlin/hiiragi283/ragium/api/text/RagiumTranslation.kt index 4cc03e09df..ec7e0ef8d9 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/lib/kotlin/hiiragi283/ragium/api/util/HTStorageHelper.kt b/src/lib/kotlin/hiiragi283/ragium/api/util/HTStorageHelper.kt index a67d878478..6e3a6ef5fe 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/HTJeiDrawables.kt b/src/libClient/kotlin/hiiragi283/lib/integration/jei/HTJeiDrawables.kt index 34f36f8671..19d5916700 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/libClient/kotlin/hiiragi283/lib/integration/jei/HTJeiPlugin.kt b/src/libClient/kotlin/hiiragi283/lib/integration/jei/HTJeiPlugin.kt index a121378626..a998396362 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/libClient/kotlin/hiiragi283/lib/integration/jei/HTJeiRecipeHelper.kt b/src/libClient/kotlin/hiiragi283/lib/integration/jei/HTJeiRecipeHelper.kt index bf2bbc85f0..282b61c1d4 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 0000000000..e4c2cb986b --- /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 66633ba725..cb637f8c8d 100644 --- a/src/libClient/kotlin/hiiragi283/lib/integration/jei/JeiExtensions.kt +++ b/src/libClient/kotlin/hiiragi283/lib/integration/jei/JeiExtensions.kt @@ -1,15 +1,17 @@ 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 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 // @@ -18,7 +20,7 @@ import net.neoforged.neoforge.fluids.FluidStack * @author Hiiragi Tsubasa * @since 26.1.8 */ -typealias HTRecipeHolderType = IRecipeType> +typealias HTRecipeHolderType = IRecipeType> /** * 新しい[IRecipeType]のインスタンスを作成します。 @@ -86,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 3f3efbe7c3..576908891e 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 */ @@ -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/HTHolderRecipeCategory.kt b/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTHolderRecipeCategory.kt index 1cde0dd9c6..1cd0cef088 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/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 aa69a4c132..0000000000 --- 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 5248452919..0000000000 --- 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 0000000000..3968183cc0 --- /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/HTSingleRecipeCategory.kt b/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTSingleRecipeCategory.kt index f043dfc21c..f6485a8e5e 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 9faea0bf2d..e76495f6ac 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/Ragium.kt b/src/main/kotlin/hiiragi283/ragium/common/Ragium.kt index 20200d9fc8..b527dad595 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 @@ -62,6 +63,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,6 +98,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(HTConstants.UPGRADE), RagiumDataComponents.UPGRADE) + helper.register(RagiumAPI.id(HTConstants.UPGRADES), RagiumDataComponents.UPGRADES) } event.register(Registries.MENU) { helper -> helper.register( @@ -137,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/RagiumCommon.kt b/src/main/kotlin/hiiragi283/ragium/common/RagiumCommon.kt index 2859bec48e..2779caff93 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,7 +24,9 @@ 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.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 import net.minecraft.core.Holder @@ -34,12 +35,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 +84,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 +96,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) @@ -117,10 +126,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()) @@ -129,26 +138,27 @@ internal data object RagiumCommon { RagiumRecipeLookups.REFINING.fromRecipeType(RagiumRecipeTypes.REFINING, identity()) RagiumRecipeLookups.BATHING.fromRecipeType(RagiumRecipeTypes.BATHING, identity()) - RagiumRecipeLookups.CENTRIFUGING.fromRecipeType(RagiumRecipeTypes.CENTRIFUGING, identity()) - RagiumRecipeLookups.REACTING.fromRecipeType(RagiumRecipeTypes.REACTING, 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( - HTBottleType.entries.associate { bottleType: HTBottleType -> - Pair( - RecipeKey(RagiumAPI.id("/${RagiumConstants.DRAINING}/potion_bottle/${bottleType.serializedName}")), - RTPotionBottleDrainingRecipe(bottleType) - ) + RagiumRecipeLookups.CENTRIFUGING.addRecipes( + buildMap { + HTBottleType.entries.forEach { bottleType: HTBottleType -> + this[RagiumAPI.id("/${RagiumConstants.CENTRIFUGING}/potion_bottle/${bottleType.serializedName}")] = + RTPotionBottleCentrifugingRecipe(bottleType) + } + this[RagiumAPI.id("/${RagiumConstants.CENTRIFUGING}/bucket")] = RTBucketCentrifugingRecipe } ) RagiumRecipeLookups.FILLING.addRecipes( - HTBottleType.entries.associate { bottleType: HTBottleType -> - Pair( - RecipeKey(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 } ) @@ -206,7 +216,7 @@ internal data object RagiumCommon { } } - RagiumRecipeLookups.BREWING.addSubLookup { _ -> + RagiumRecipeLookups.MIXING.addSubLookup { _ -> val mixes: List> = HTPhysicalSideHelper.getPotionBrewing() ?.let(PotionBrewing::potionMixes) ?: return@addSubLookup sequenceOf() @@ -225,7 +235,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/advancment/RagiumAdvancementKeys.kt b/src/main/kotlin/hiiragi283/ragium/common/advancment/RagiumAdvancementKeys.kt index 7af4906497..72feaaca00 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/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt b/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt index 66466290a7..820ec573c9 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt @@ -23,14 +23,15 @@ 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 +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 @@ -68,6 +69,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) @@ -94,7 +97,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 +106,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( @@ -272,11 +275,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 = @@ -295,16 +298,16 @@ 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) // Electronics + @JvmField + val BLENDER: HTBasicDeferredBlockAndItem = + registerMachine(RagiumBlockEntityTypes.BLENDER) + @JvmField val ELECTROLYZER: HTBasicDeferredBlockAndItem = registerMachine(RagiumBlockEntityTypes.ELECTROLYZER) @@ -343,9 +346,9 @@ 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, BLENDER) put(HTMachineType.ELECTRONICS, ELECTROLYZER) put(HTMachineType.ELECTRONICS, PRECISION_ASSEMBLER) put(HTMachineType.ELECTRONICS, SCANNER) @@ -365,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 @@ -377,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 ) @@ -392,7 +401,7 @@ data object RagiumBlocks { RagiumBlockEntityTypes.CREATIVE_TANK, ::HTTankBlock, ::HTCreativeTankBlockItem, - machine().noOcclusion() + tankProperty ) @JvmField @@ -403,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 @@ -422,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/HTBaseMachineBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTBaseMachineBlockEntity.kt index 2fb94841bd..c8891b20f8 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTBaseMachineBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTBaseMachineBlockEntity.kt @@ -1,12 +1,9 @@ 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.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 @@ -29,13 +26,15 @@ 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) - } + /** + * @since 26.1.9 + */ + val combinedUpgrade: HTMachineUpgrade get() = HTMachineUpgradeHelper.getCombinedUpgrade(this.components()) - protected fun HTWidgetHolder.track(slot: HTBasicItemSlot, syncType: HTSyncType = HTSyncType.S2C) { - this.track(HTItemSyncSlot(slot), syncType) - } + /** + * @since 26.1.9 + */ + val customKeys: Set = combinedUpgrade.customKeys // Ticking // 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 1699b862a8..86bfd3ed27 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/HTBlockEntityWithMenu.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTBlockEntityWithMenu.kt index 282ebfb7f7..401a9010d8 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.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 +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(HTLongSyncSlot.create(handler::getAmountAsLong, handler::setAmount), syncType) + } } 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 6f5e6bb67a..6a605d60ae 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 22b50755f2..85c9d3e1b2 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/block/entity/RagiumBlockEntityTypes.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/RagiumBlockEntityTypes.kt index 60a46c28dc..8f54a42e93 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,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.HTBreweryBlockEntity +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 @@ -27,13 +27,15 @@ 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.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 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 @@ -49,6 +51,8 @@ data object RagiumBlockEntityTypes { @JvmStatic fun register(event: IEventBus) { + REGISTER.addAlias("brewery", "mixer") + event.addListener(::addSupportedBlocks) event.addListener(::registerCapabilities) @@ -92,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) @@ -105,16 +117,16 @@ 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) // Electronics + @JvmField + val BLENDER: HTDeferredBlockEntityType = + registerTick(RagiumConstants.BLENDER, ::HTBlenderBlockEntity) + @JvmField val ELECTROLYZER: HTDeferredBlockEntityType = registerTick(RagiumConstants.ELECTROLYZER, ::HTElectrolyzerBlockEntity) @@ -136,6 +148,7 @@ data object RagiumBlockEntityTypes { // Storage // + // Tank @JvmField val TANK: HTDeferredBlockEntityType = registerTick(HTConstants.TANK, ::HTTankBlockEntity) @@ -144,13 +157,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 // @@ -178,7 +198,7 @@ data object RagiumBlockEntityTypes { fun registerProcessor(type: BlockEntityType) { registerBlockEntity(type) event.registerBlockEntity(HTEnergyCapabilities.block, type) { processor: BE, _ -> - processor.handler.asForge() + processor.handler } } @@ -191,14 +211,16 @@ 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()) registerProcessor(MIXER.get()) - registerProcessor(BREWERY.get()) registerProcessor(PLANTER.get()) + registerProcessor(BLENDER.get()) registerProcessor(ELECTROLYZER.get()) registerProcessor(PRECISION_ASSEMBLER.get()) @@ -208,19 +230,13 @@ 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( HTEnergyCapabilities.block, CREATIVE_BATTERY.get() ) { _, _ -> InfiniteEnergyHandler.INSTANCE } - registerBlockEntity(CREATIVE_TANK.get()) + // Misc + registerBlockEntity(UPGRADE_STATION.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 0000000000..47f996cd66 --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTBlenderBlockEntity.kt @@ -0,0 +1,200 @@ +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.HTRecipeInput +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(): HTRecipeInput = HTRecipeInput( + inputTank.getStoredInput(), + listOf( + topInputSlot.getStoredInput(), + downInputSlot.getStoredInput() + ), + customKeys + ) + + override fun findRecipe(level: ServerLevel, input: HTRecipeInput): RTMixingRecipe? = + cache.findFirstRecipe(input, level) + + override fun canComplete( + recipe: RTMixingRecipe, + input: HTRecipeInput, + output: HTItemAndFluidStack + ): Boolean = useTransaction { transaction: Transaction -> + val (first: ItemInstance, second: ItemInstance, third: FluidInstance) = recipe.getMatchingStack(input) + val (item: ItemStack, fluid: FluidStack) = output + 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: HTRecipeInput, output: HTItemAndFluidStack) { + 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) + 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/HTBreweryBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTBreweryBlockEntity.kt deleted file mode 100644 index ce321bfc35..0000000000 --- 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/block/entity/machine/HTElectrolyzerBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTElectrolyzerBlockEntity.kt index 1e7a03f10f..8170d2808e 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,18 +69,18 @@ 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.fluid) + val inputConsume: FluidInstance = recipe.getMatchingStack(input) when { inputTank.use(inputConsume, transaction).failed -> false @@ -97,11 +97,11 @@ 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.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 8a7ce48f4c..bb0e768f81 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,27 +59,24 @@ 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.item, input.fluid) - 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.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 cb5ffc5b24..fb51e85858 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,32 +49,29 @@ 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.item()) - 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.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/HTProcessorBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTProcessorBlockEntity.kt index 22de903573..44414c64f6 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 @@ -12,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 @@ -72,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) @@ -91,16 +88,9 @@ 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(HTIntSyncSlot.create(handler::amount, handler::setAmount), HTSyncType.S2C) + widgetHolder.track(handler) } override fun writeValue(output: ValueOutput) { @@ -119,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/machine/HTPyrolyzerBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTPyrolyzerBlockEntity.kt new file mode 100644 index 0000000000..70bea5c6ad --- /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.input.HTRecipeInput +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.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(): HTRecipeInput = HTRecipeInput(inputSlot.getStoredInput(), customKeys) + + override fun findRecipe(level: ServerLevel, input: HTRecipeInput): HTItemToItemAndFluidRecipe? = + cache.findFirstRecipe(input, level) + + override fun canComplete( + recipe: HTItemToItemAndFluidRecipe, + input: HTRecipeInput, + 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: HTRecipeInput, + 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 0000000000..4bea8932ff --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTRefineryBlockEntity.kt @@ -0,0 +1,153 @@ +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.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 +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< + HTRecipeInput, + HTItemAndFluidStack, + HTFluidToItemAndFluidRecipe + >() { + 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(): HTRecipeInput = HTRecipeInput(inputTank.getStoredInput(), customKeys) + + override fun findRecipe(level: ServerLevel, input: HTRecipeInput): HTFluidToItemAndFluidRecipe? = + cache.findFirstRecipe(input, level) + + override fun canComplete( + recipe: HTFluidToItemAndFluidRecipe, + input: HTRecipeInput, + 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: HTRecipeInput, + 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/HTSmelterBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTSmelterBlockEntity.kt index 5f29bbf4f0..3233d714c2 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,22 +93,22 @@ 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.item()) + 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: HTItemToItemRecipe, input: SingleRecipeInput, output: ItemStack) { + override fun onComplete(recipe: HTItemToItemRecipe, input: HTRecipeInput, 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 fa103cea2b..6918ab6c62 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,8 +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.getItemOrEmpty +import hiiragi283.lib.recipe.input.HTRecipeInput import hiiragi283.lib.recipe.lookup.HTRecipeCache import hiiragi283.lib.recipe.lookup.HTRecipeLookup import hiiragi283.lib.sounds.HTSoundInstance @@ -23,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 +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) { @@ -55,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) } @@ -66,15 +64,21 @@ 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 { - val (firstConsume: ItemInstance, secondConsume: ItemInstance) = - recipe.getMatchingStack(input.getItemOrEmpty(0), input.getItemOrEmpty(1)) + override fun canComplete( + recipe: HTDoubleItemToItemRecipe, + input: HTRecipeInput, + output: ItemStack + ): Boolean { + val (firstConsume: ItemInstance, secondConsume: ItemInstance) = recipe.getMatchingStack(input) return useTransaction { transaction: Transaction -> when { primarySlot.use(firstConsume, transaction).failed -> false @@ -84,9 +88,8 @@ 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)) + override fun onComplete(recipe: HTDoubleItemToItemRecipe, input: HTRecipeInput, output: ItemStack) { + 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 42069ac88d..4857371595 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,21 +70,18 @@ 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.item, input.fluid) + val (itemInput: ItemInstance, fluidInput: FluidInstance) = recipe.getMatchingStack(input) when { inputSlot.use(itemInput, transaction).failed -> false inputTank.use(fluidInput, transaction).failed -> false @@ -92,14 +89,9 @@ 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.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 313f51698b..5472ef965c 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,19 +69,18 @@ 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.item, input.fluid) + val (itemInput: ItemInstance, fluidInput: FluidInstance) = recipe.getMatchingStack(input) when { inputSlot.use(itemInput, transaction).failed -> false inputTank.use(fluidInput, transaction).failed -> false @@ -89,14 +88,9 @@ 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.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 5c2f676b11..02828d4410 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,17 +65,17 @@ 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.item()) + val inputConsume: ItemInstance = recipe.getMatchingStack(input) when { inputSlot.use(inputConsume, transaction).failed -> false primarySlot.take(output.first, transaction) != HTOutputSlot.TakeResult.FULL -> false @@ -85,11 +85,11 @@ abstract class HTItemToDoubleItemBlockEntity( override fun onComplete( recipe: HTItemToDoubleItemRecipe, - input: SingleRecipeInput, + input: HTRecipeInput, 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 ccfcbe7151..cd11962cec 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,29 +53,29 @@ 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.item()) + 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: HTItemToItemRecipe, input: SingleRecipeInput, output: ItemStack) { + override fun onComplete(recipe: HTItemToItemRecipe, input: HTRecipeInput, output: ItemStack) { useTransaction { transaction: Transaction -> - inputSlot.use(recipe.getMatchingStack(input.item()), transaction) + inputSlot.use(recipe.getMatchingStack(input), transaction) outputSlot.take(output, transaction) transaction.commit() } @@ -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, 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 5fda3b8e2a..52c67255ef 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,8 +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.getItemOrEmpty +import hiiragi283.lib.recipe.input.HTRecipeInput import hiiragi283.lib.recipe.lookup.HTRecipeCache import hiiragi283.lib.recipe.lookup.HTRecipeLookup import hiiragi283.lib.sounds.HTSoundInstance @@ -23,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 @@ -33,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) { @@ -56,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) } @@ -70,18 +68,26 @@ 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.getItemOrEmpty(0), input.getItemOrEmpty(1), input.getItemOrEmpty(2)) + recipe.getMatchingStack(input) return useTransaction { transaction: Transaction -> when { primarySlot.use(firstInput, transaction).failed -> false @@ -92,9 +98,9 @@ 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.getItemOrEmpty(0), input.getItemOrEmpty(1), input.getItemOrEmpty(2)) + recipe.getMatchingStack(input) useTransaction { transaction: Transaction -> primarySlot.use(firstInput, transaction) secondarySlot.use(secondInput, transaction) 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 0000000000..055d0ddd69 --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/misc/HTUpgradeStationBlockEntity.kt @@ -0,0 +1,99 @@ +package hiiragi283.ragium.common.block.entity.misc + +import hiiragi283.lib.gui.HTBackgroundType +import hiiragi283.lib.gui.HTSlotHelper +import hiiragi283.lib.gui.widget.HTWidgetHolder +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 +import hiiragi283.ragium.common.block.entity.RagiumBlockEntityTypes +import hiiragi283.ragium.common.gui.HTWidgetSlot +import hiiragi283.ragium.common.gui.widget.HTItemWidget +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.neoforged.neoforge.transfer.item.ItemResource +import net.neoforged.neoforge.world.inventory.StackCopySlot + +class HTUpgradeStationBlockEntity(worldPosition: BlockPos, blockState: BlockState) : + HTBlockEntity(RagiumBlockEntityTypes.UPGRADE_STATION.get(), worldPosition, blockState), + HTBlockEntityWithMenu { + + lateinit var toolSlot: HTBasicItemSlot + + override fun createItemHandler(listener: Runnable): HTResourceSlotHolder { + 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) + + override fun canInsert(side: Direction?): Boolean = false + + override fun canExtract(side: Direction?): Boolean = false + } + } + + override fun onUpdateServer(level: ServerLevel, pos: BlockPos, state: BlockState): Boolean = false + + override fun setupMenu(widgetHolder: HTWidgetHolder) { + // Tool + widgetHolder += HTItemWidget.Container( + toolSlot, + 0, + HTSlotHelper.getSlotPosX(4), + HTSlotHelper.getSlotPosY(1), + 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(): HTMachineUpgradeList = this@HTUpgradeStationBlockEntity + .toolSlot + .resource + .let(HTMachineUpgradeHelper::getUpgrades) + + override fun mayPlace(itemStack: ItemStack): Boolean = + !this@HTUpgradeStationBlockEntity.toolSlot.isEmpty && itemStack.has(RagiumDataComponents.UPGRADE) + + override fun getStackCopy(): ItemStack = getUpgrades()[slotIndex] + + override fun setStackCopy(stack: ItemStack) { + val mutable = HTMachineUpgradeList.Mutable(getUpgrades()) + mutable[slotIndex] = stack + val toolStack: ItemStack = this@HTUpgradeStationBlockEntity.toolSlot.getStackCopy() + HTMachineUpgradeHelper.setUpgrades(toolStack, mutable) + 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 0000000000..91e5dfdc55 --- /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/block/storage/HTPotionTankBlock.kt b/src/main/kotlin/hiiragi283/ragium/common/block/storage/HTPotionTankBlock.kt index f9f8bd35c7..06f20de538 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 ad20756569..86935dc7d6 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 cc2b211b21..7b308195bc 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/gui/HTContainerItemSlot.kt b/src/main/kotlin/hiiragi283/ragium/common/gui/HTContainerItemSlot.kt index 8ab60606dc..aa34c50994 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 0000000000..dd59048d4e --- /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 1bb1a581bc..20d61abf28 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 @@ -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 */ @@ -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) { 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 ff57885c40..371ee0de2c 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/item/HTPotionBucketItem.kt b/src/main/kotlin/hiiragi283/ragium/common/item/HTPotionBucketItem.kt index af469aab1b..7e4de58b11 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/RagiumItems.kt b/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt index 914ae15c81..b416ce72fb 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 @@ -46,6 +47,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 +176,7 @@ data object RagiumItems { // val ALCLAD_PLATE: HTSimpleDeferredItem = REGISTER.registerSimpleItem("alclad_plate") - // Bio + // Resource @JvmField val BEESWAX: HTSimpleDeferredItem = REGISTER.registerItem("beeswax", ::HoneycombItem) @@ -243,7 +245,7 @@ data object RagiumItems { // Chemical - // Bio + // Resource // Electronics @JvmField @@ -261,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/kotlin/hiiragi283/ragium/common/item/block/HTPotionTankBlockItem.kt b/src/main/kotlin/hiiragi283/ragium/common/item/block/HTPotionTankBlockItem.kt index fa400aeaf7..299bc8415a 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/RTBucketCentrifugingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/RTBucketCentrifugingRecipe.kt new file mode 100644 index 0000000000..692fc4eb27 --- /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.lib.recipe.input.HTRecipeInput +import hiiragi283.ragium.api.recipe.RTCentrifugingRecipe +import net.minecraft.world.item.ItemInstance +import net.minecraft.world.item.ItemStack +import net.neoforged.neoforge.common.Tags +import net.neoforged.neoforge.transfer.fluid.FluidUtil + +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 + + 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 + } + + 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 0000000000..68925009bb --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/RTBucketFillingRecipe.kt @@ -0,0 +1,40 @@ +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 +import hiiragi283.lib.recipe.ingredient.HTIngredientHelper +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 { + private fun getBucket(instance: FluidInstance): ItemStack = HTIngredientHelper.unwrap(instance).createBucket() + + 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) +} diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/RTPotionBottleDrainingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/RTPotionBottleCentrifugingRecipe.kt similarity index 64% rename from src/main/kotlin/hiiragi283/ragium/common/recipe/RTPotionBottleDrainingRecipe.kt rename to src/main/kotlin/hiiragi283/ragium/common/recipe/RTPotionBottleCentrifugingRecipe.kt index 19a2b104da..71d5505902 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/recipe/RTPotionBottleDrainingRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/RTPotionBottleCentrifugingRecipe.kt @@ -2,20 +2,20 @@ 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.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 RTPotionBottleDrainingRecipe(val bottleType: HTBottleType, override val progressData: HTProgressData) : - HTItemToItemAndFluidRecipe, - HTProgressRecipe.Simple { +data class RTPotionBottleCentrifugingRecipe(val bottleType: HTBottleType, override val progressData: HTProgressData) : + RTCentrifugingRecipe, + HTProgressRecipe.Simple { companion object { @JvmField val PROGRESS_DATA: HTProgressData = HTProgressData.time(60) @@ -26,9 +26,10 @@ 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.toStack(), - HTPotionHelper.createFluid(input, HTPotionHelper.BOTTLE_AMOUNT) ?: FluidStack.EMPTY + override fun apply(input: ItemInstance): RTCentrifugingRecipe.Output = RTCentrifugingRecipe.Output( + 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 421a686e12..c4407a0631 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) @@ -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), diff --git a/src/main/kotlin/hiiragi283/ragium/common/transfer/HTCapabilityCodec.kt b/src/main/kotlin/hiiragi283/ragium/common/transfer/HTCapabilityCodec.kt index 65a1a20697..271d338cd0 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 6556253782..8598341efa 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/transfer/energy/HTMachineEnergyHandler.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/transfer/energy/HTMachineEnergyHandler.kt @@ -10,10 +10,10 @@ 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, + capacity: Long, val baseEnergyPerTick: Int, val blockEntity: BE, canExtract: Predicate, 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 de894196bb..4679547e97 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?, 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 f5016c56d3..0c83c4ee80 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) 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 2d5931545f..0000000000 Binary files a/src/main/resources/assets/ragium/textures/block/brewery_front.png and /dev/null differ 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/block/upgrade_station_bottom.png b/src/main/resources/assets/ragium/textures/block/upgrade_station_bottom.png new file mode 100644 index 0000000000..6e7f78c190 Binary files /dev/null and b/src/main/resources/assets/ragium/textures/block/upgrade_station_bottom.png differ diff --git a/src/main/resources/assets/ragium/textures/block/upgrade_station_side.png b/src/main/resources/assets/ragium/textures/block/upgrade_station_side.png new file mode 100644 index 0000000000..2d0d063d85 Binary files /dev/null and b/src/main/resources/assets/ragium/textures/block/upgrade_station_side.png differ 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 0000000000..6c9828bb24 Binary files /dev/null and b/src/main/resources/assets/ragium/textures/block/upgrade_station_top.png differ 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 0000000000..0a3e8228fb Binary files /dev/null and b/src/main/resources/assets/ragium/textures/item/advanced_upgrade.png differ 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 0000000000..3fb0925dc7 Binary files /dev/null and b/src/main/resources/assets/ragium/textures/item/ash_dust.png differ diff --git a/src/main/resources/assets/ragium/textures/item/basic_upgrade.png b/src/main/resources/assets/ragium/textures/item/basic_upgrade.png new file mode 100644 index 0000000000..b94a5fca29 Binary files /dev/null and b/src/main/resources/assets/ragium/textures/item/basic_upgrade.png differ 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 0000000000..727aeb9267 Binary files /dev/null and b/src/main/resources/assets/ragium/textures/item/elite_upgrade.png differ 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 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 0000000000..492e6c73b0 Binary files /dev/null and b/src/main/resources/assets/ragium/textures/item/ultimate_upgrade.png differ diff --git a/src/main/templates/META-INF/neoforge.mods.toml b/src/main/templates/META-INF/neoforge.mods.toml index 8adf8dd529..2b0914298a 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.