diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 175c782884..a25fbfac8f 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,8 +1,8 @@ [versions] minecraft = "26.1.2" -neo-moddev = "2.0.146" -neo-version = "26.1.2.109" +neo-moddev = "2.0.147" +neo-version = "26.1.2.112" kff-version = "6.3.0" kotlin = "2.4.0" @@ -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.37.0.100" +jei = "29.43.0.106" [libraries] diff --git a/src/client/kotlin/hiiragi283/ragium/client/RagiumClient.kt b/src/client/kotlin/hiiragi283/ragium/client/RagiumClient.kt index 4f8e444835..05e92066a0 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/RagiumClient.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/RagiumClient.kt @@ -1,6 +1,7 @@ package hiiragi283.ragium.client import hiiragi283.lib.HTConstants +import hiiragi283.lib.capability.HTFluidCapabilities import hiiragi283.lib.event.HTRegisterWidgetRendererEvent import hiiragi283.lib.fluid.FluidStackTintSource import hiiragi283.lib.fluid.HTFluidModelRegister @@ -8,8 +9,12 @@ import hiiragi283.lib.item.alchemy.HTPotionHelper import hiiragi283.lib.mod.HTClientMod import hiiragi283.lib.network.HTPayloadHandlers import hiiragi283.lib.resource.vanillaId +import hiiragi283.lib.text.HTCommonTranslation +import hiiragi283.lib.text.Text +import hiiragi283.lib.transfer.fluid.HTFluidView import hiiragi283.ragium.api.RagiumAPI -import hiiragi283.ragium.api.data.oreSlurry.HTOreSlurryDataHelper +import hiiragi283.ragium.api.data.chemical.HTClientChemicalHelper +import hiiragi283.ragium.api.tag.RagiumTags import hiiragi283.ragium.client.gui.screen.HTWidgetContainerScreen import hiiragi283.ragium.client.gui.screen.tooltip.HTMemoryDiscClientTooltipComponent import hiiragi283.ragium.client.gui.widget.HTEnergySlotWidgetRenderer @@ -25,9 +30,11 @@ import hiiragi283.ragium.common.gui.widget.RagiumWidgetTypes import hiiragi283.ragium.common.item.tooltip.HTMemoryDiscTooltipComponent import hiiragi283.ragium.common.network.HTUpdateBlockEntityPacket import hiiragi283.ragium.common.network.HTUpdateMenuPacket +import net.minecraft.ChatFormatting import net.minecraft.client.resources.model.sprite.Material import net.minecraft.util.ARGB import net.minecraft.world.item.DyeColor +import net.minecraft.world.item.ItemStack import net.neoforged.api.distmarker.Dist import net.neoforged.bus.api.IEventBus import net.neoforged.fml.ModContainer @@ -36,9 +43,14 @@ import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent import net.neoforged.neoforge.client.event.EntityRenderersEvent import net.neoforged.neoforge.client.event.RegisterClientTooltipComponentFactoriesEvent import net.neoforged.neoforge.client.event.RegisterMenuScreensEvent +import net.neoforged.neoforge.client.fluid.FluidTintSources import net.neoforged.neoforge.client.network.event.RegisterClientPayloadHandlersEvent +import net.neoforged.neoforge.common.tooltip.TooltipLocation +import net.neoforged.neoforge.event.RegisterTooltipAppendersEvent import net.neoforged.neoforge.fluids.FluidStack +import net.neoforged.neoforge.transfer.fluid.FluidResource import java.awt.Color +import java.util.function.Consumer @Mod(value = RagiumAPI.MOD_ID, dist = [Dist.CLIENT]) data object RagiumClient : HTClientMod() { @@ -46,6 +58,7 @@ data object RagiumClient : HTClientMod() { eventBus.addListener { event: RegisterClientTooltipComponentFactoriesEvent -> event.register(HTMemoryDiscTooltipComponent::class.java, ::HTMemoryDiscClientTooltipComponent) } + eventBus.addListener(::registerTooltipAppenders) configScreen(container) } @@ -60,10 +73,10 @@ data object RagiumClient : HTClientMod() { } override fun registerWidgetRenderer(event: HTRegisterWidgetRendererEvent) { - event.register(RagiumWidgetTypes.ENERGY, ::HTEnergySlotWidgetRenderer) - event.register(RagiumWidgetTypes.FLUID, ::HTFluidWidgetRenderer) - event.register(RagiumWidgetTypes.ITEM, ::HTItemWidgetRenderer) - event.register(RagiumWidgetTypes.PROGRESS, ::HTProgressWidgetRenderer) + event.register(RagiumWidgetTypes.ENERGY.get(), ::HTEnergySlotWidgetRenderer) + event.register(RagiumWidgetTypes.FLUID.get(), ::HTFluidWidgetRenderer) + event.register(RagiumWidgetTypes.ITEM.get(), ::HTItemWidgetRenderer) + event.register(RagiumWidgetTypes.PROGRESS.get(), ::HTProgressWidgetRenderer) } override fun registerFluidModels(register: HTFluidModelRegister) { @@ -83,7 +96,7 @@ data object RagiumClient : HTClientMod() { register.register(RagiumFluids.POTION) { dull() tintSource = FluidStackTintSource { stack: FluidStack -> - ARGB.opaque(HTPotionHelper.getContents(stack).color) + ARGB.opaque(HTPotionHelper.getContentsOrEmpty(stack).color) } } register.register(RagiumFluids.OMINOUS_FLUX) { @@ -112,6 +125,10 @@ data object RagiumClient : HTClientMod() { transparent() colorTint(Color(0x003399)) } + register.register(RagiumFluids.NITROGEN) { + transparent() + colorTint(Color(0x009999)) + } register.register(RagiumFluids.OXYGEN) { transparent() colorTint(Color(0x3399cc)) @@ -129,6 +146,14 @@ data object RagiumClient : HTClientMod() { molten() colorTint(Color(0x333366)) } + register.register(RagiumFluids.ALCOHOL) { + transparent() + colorTint(Color(0xcc99ff)) + } + register.register(RagiumFluids.ALDEHYDE) { + transparent() + colorTint(Color(0xcc66ff)) + } register.register(RagiumFluids.AROMATIC_COMPOUND) { transparent() colorTint(Color(0xffcc99)) @@ -149,6 +174,10 @@ data object RagiumClient : HTClientMod() { dull() colorTint(Color(0xff9933)) } + register.register(RagiumFluids.MOLTEN_PLASTIC) { + molten() + colorTint(Color(0xccccdd)) + } register.register(RagiumFluids.SYNTHETIC_RESIN) { molten() colorTint(Color(0xff6633)) @@ -170,6 +199,10 @@ data object RagiumClient : HTClientMod() { colorTint(Color(0x33cc66)) } + register.register(RagiumFluids.SALT_WATER) { + dull() + tintSource = FluidTintSources.water() + } register.register(RagiumFluids.NAOH_SOLUTION) { dull() colorTint(Color(0x003366)) @@ -202,13 +235,6 @@ data object RagiumClient : HTClientMod() { dull() colorTint(Color(0xccff99)) } - - register.register(RagiumFluids.ORE_SLURRY) { - still = Material(vanillaId(HTConstants.BLOCK, "white_concrete_powder")) - tintSource = FluidStackTintSource { stack: FluidStack -> - ARGB.opaque(HTOreSlurryDataHelper.getData(stack)?.color ?: 0x333300) - } - } } override fun registerScreens(event: RegisterMenuScreensEvent) { @@ -217,6 +243,56 @@ data object RagiumClient : HTClientMod() { override fun registerEntityRenderer(event: EntityRenderersEvent.RegisterRenderers) { event.registerBlockEntityRenderer(RagiumBlockEntityTypes.TANK.get(), ::HTTankBlockEntityRenderer) + event.registerBlockEntityRenderer(RagiumBlockEntityTypes.POTION_TANK.get(), ::HTTankBlockEntityRenderer) event.registerBlockEntityRenderer(RagiumBlockEntityTypes.CREATIVE_TANK.get(), ::HTTankBlockEntityRenderer) } + + @JvmStatic + private fun registerTooltipAppenders(event: RegisterTooltipAppendersEvent) { + event.registerAppender( + TooltipLocation.HEAD + ) { stack: ItemStack, _, _, _, _, builder: Consumer -> + if (!stack.`is`(RagiumTags.Items.SHOW_FLUID_TOOLTIPS)) return@registerAppender + val view: HTFluidView = HTFluidCapabilities.getSlot(stack, 0) ?: return@registerAppender + val isCreative: Boolean = stack.`is`(RagiumTags.BlockItems.STORAGES_CREATIVE.item) + // Fluid Name + val resource: FluidResource = view.resource + when { + resource.isEmpty -> HTCommonTranslation.EMPTY.translateColored(ChatFormatting.RED) + + isCreative -> HTCommonTranslation.STORED.translateColored( + ChatFormatting.LIGHT_PURPLE, + resource.hoverName, + ChatFormatting.GRAY, + HTCommonTranslation.INFINITE + ) + + else -> HTCommonTranslation.STORED_MB.translateColored( + ChatFormatting.LIGHT_PURPLE, + resource.hoverName, + ChatFormatting.GRAY, + view.amount + ) + }.let(builder::accept) + // Tank Capacity + when (isCreative) { + true -> HTCommonTranslation.CAPACITY.translateColored( + ChatFormatting.BLUE, + ChatFormatting.GRAY, + HTCommonTranslation.INFINITE + ) + + false -> HTCommonTranslation.CAPACITY_MB.translateColored( + ChatFormatting.BLUE, + ChatFormatting.GRAY, + view.currentCapacity + ) + }.let(builder::accept) + } + event.registerAppender( + TooltipLocation.HEAD + ) { stack: ItemStack, _, _, _, _, builder: Consumer -> + HTClientChemicalHelper.addToTooltip(stack, builder::accept) + } + } } diff --git a/src/client/kotlin/hiiragi283/ragium/client/event/RagiumClientEventHandler.kt b/src/client/kotlin/hiiragi283/ragium/client/event/RagiumClientEventHandler.kt index 5b18ca0607..80671de5a9 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/event/RagiumClientEventHandler.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/event/RagiumClientEventHandler.kt @@ -1,7 +1,9 @@ package hiiragi283.ragium.client.event import hiiragi283.lib.item.alchemy.HTPotionHelper +import hiiragi283.lib.text.Text import hiiragi283.ragium.api.RagiumAPI +import hiiragi283.ragium.api.data.chemical.HTClientChemicalHelper import hiiragi283.ragium.common.fluid.RagiumFluids import net.neoforged.api.distmarker.Dist import net.neoforged.bus.api.SubscribeEvent @@ -14,8 +16,12 @@ data object RagiumClientEventHandler { @SubscribeEvent fun onFluidTooltip(event: FluidTooltipEvent) { val stack: FluidStack = event.fluidStack + val appender: (Text) -> Unit = event.toolTip::add + // Potion Fluid if (RagiumFluids.POTION.isOf(stack)) { - HTPotionHelper.getContents(stack).addToTooltip(event.context, event.toolTip::add, event.flags, stack) + HTPotionHelper.getContentsNotEmpty(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 bbba7918b8..103a32a285 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/gui/widget/HTEnergySlotWidgetRenderer.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/gui/widget/HTEnergySlotWidgetRenderer.kt @@ -32,9 +32,7 @@ class HTEnergySlotWidgetRenderer(gui: HTGuiAccess, widget: HTEnergySlotWidget) : override fun shouldRender(): Boolean = !widget.isEmpty - override fun getSprite(): TextureAtlasSprite = getSprite(AtlasIds.BLOCKS, SPRITE) - - override fun getColor(): Int = -1 + override fun getSpriteAndColor(): Pair = getSprite(AtlasIds.BLOCKS, SPRITE) to -1 override fun getLevel(): Float = widget.filledLevel diff --git a/src/client/kotlin/hiiragi283/ragium/client/gui/widget/HTFluidWidgetRenderer.kt b/src/client/kotlin/hiiragi283/ragium/client/gui/widget/HTFluidWidgetRenderer.kt index d91fe0c405..20cb0358b2 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/gui/widget/HTFluidWidgetRenderer.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/gui/widget/HTFluidWidgetRenderer.kt @@ -27,9 +27,8 @@ class HTFluidWidgetRenderer(gui: HTGuiAccess, widget: HTFluidWidget) : override fun shouldRender(): Boolean = !widget.isEmpty - override fun getSprite(): TextureAtlasSprite? = HTGuiRenderHelper.getSprite(widget.resource) - - override fun getColor(): Int = HTGuiRenderHelper.getColor(widget.getFluidStack()) + override fun getSpriteAndColor(): Pair? = + HTGuiRenderHelper.getSpriteAndColor(widget.getFluidStack()) override fun getLevel(): Float = when (widget) { is HTFluidWidget.Slot -> 1f @@ -37,6 +36,6 @@ class HTFluidWidgetRenderer(gui: HTGuiAccess, widget: HTFluidWidget) : }.coerceAtMost(1f) override fun collectTooltips(consumer: Consumer, context: Item.TooltipContext, flag: TooltipFlag) { - HTStorageHelper.addFluidTooltip(widget.getFluidStack(), consumer, context, null, flag, false) + HTStorageHelper.addFluidTooltip(widget.getFluidStack(), consumer, context, flag, false) } } diff --git a/src/client/kotlin/hiiragi283/ragium/client/gui/widget/HTSpriteWidgetRenderer.kt b/src/client/kotlin/hiiragi283/ragium/client/gui/widget/HTSpriteWidgetRenderer.kt index 34190fceb4..809eb8c327 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/gui/widget/HTSpriteWidgetRenderer.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/gui/widget/HTSpriteWidgetRenderer.kt @@ -2,6 +2,7 @@ package hiiragi283.ragium.client.gui.widget import hiiragi283.lib.gui.HTBounds import hiiragi283.lib.gui.HTGuiAccess +import hiiragi283.lib.gui.HTGuiRenderHelper import hiiragi283.lib.gui.widget.HTAbstractWidgetRenderer import hiiragi283.lib.gui.widget.HTWidget import hiiragi283.lib.text.Text @@ -15,7 +16,6 @@ import net.minecraft.client.resources.metadata.gui.GuiSpriteScaling import net.minecraft.resources.Identifier import net.minecraft.world.item.Item import net.minecraft.world.item.TooltipFlag -import net.neoforged.neoforge.client.ClientTooltipFlag import java.util.function.Consumer abstract class HTSpriteWidgetRenderer(gui: HTGuiAccess, widget: WIDGET) : @@ -38,9 +38,11 @@ abstract class HTSpriteWidgetRenderer(gui: HTGuiAccess, widge graphics.setTooltipForNextFrame( font, buildList { - collectTooltips({ text: Text -> - this.add(text.visualOrderText) - }, Item.TooltipContext.EMPTY, getTooltipFlag()) + collectTooltips( + { text: Text -> this.add(text.visualOrderText) }, + HTGuiRenderHelper.getTooltipContext(), + HTGuiRenderHelper.getTooltipFlag() + ) }, mouseX, mouseY @@ -50,8 +52,7 @@ abstract class HTSpriteWidgetRenderer(gui: HTGuiAccess, widge private fun renderSprite(bounds: HTBounds, graphics: GuiGraphicsExtractor) { if (!shouldRender()) return - val sprite: TextureAtlasSprite = getSprite() ?: return - val color: Int = getColor() + val (sprite: TextureAtlasSprite, color: Int) = getSpriteAndColor() ?: return val fillLevel: Int = getScaledLevel().toInt() val spriteContents: SpriteContents = sprite.contents() @@ -81,18 +82,11 @@ abstract class HTSpriteWidgetRenderer(gui: HTGuiAccess, widge graphics.disableScissor() } - protected fun getTooltipFlag(): TooltipFlag = ClientTooltipFlag.of( - when (Minecraft.getInstance().options.advancedItemTooltips) { - true -> TooltipFlag.ADVANCED - false -> TooltipFlag.NORMAL - } - ) - protected abstract fun renderBackground(bounds: HTBounds, graphics: GuiGraphicsExtractor) protected abstract fun shouldRender(): Boolean - protected abstract fun getSprite(): TextureAtlasSprite? + protected abstract fun getSpriteAndColor(): Pair? protected fun getSprite(atlasId: Identifier, id: Identifier): TextureAtlasSprite = Minecraft .getInstance() @@ -100,8 +94,6 @@ abstract class HTSpriteWidgetRenderer(gui: HTGuiAccess, widge .getAtlasOrThrow(atlasId) .getSprite(id) - protected abstract fun getColor(): Int - protected open fun getScaledLevel(): Float = getLevel() * (widget.bounds.height - 2) protected abstract fun getLevel(): Float 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 320d59f597..0b8e9fdf04 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiPlugin.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiPlugin.kt @@ -3,6 +3,7 @@ package hiiragi283.ragium.client.integration.jei import hiiragi283.lib.HTPhysicalSideHelper import hiiragi283.lib.integration.jei.HTJeiPlugin import hiiragi283.lib.integration.jei.HTJeiRecipeHelper +import hiiragi283.lib.integration.jei.category.HTFluidToItemAndFluidRecipeCategory import hiiragi283.lib.integration.jei.category.HTItemAndFluidToFluidRecipeCategory import hiiragi283.lib.integration.jei.category.HTItemAndFluidToItemRecipeCategory import hiiragi283.lib.integration.jei.category.HTItemToDoubleItemRecipeCategory @@ -17,17 +18,15 @@ 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.RagiumRegistries -import hiiragi283.ragium.api.data.oreSlurry.HTOreSlurryData -import hiiragi283.ragium.api.data.oreSlurry.HTOreSlurryDataHelper +import hiiragi283.ragium.api.data.RagiumDataComponents import hiiragi283.ragium.api.data.recipe.builder.RagiumRecipeBuilders import hiiragi283.ragium.api.recipe.RagiumRecipeLookups import hiiragi283.ragium.client.gui.screen.HTWidgetContainerScreen import hiiragi283.ragium.client.integration.jei.category.RTElectrolyzingRecipeCategory import hiiragi283.ragium.client.integration.jei.category.RTEnchantingRecipeCategory import hiiragi283.ragium.client.integration.jei.category.RTReactingRecipeCategory -import hiiragi283.ragium.client.integration.jei.category.RTRefiningRecipeCategory import hiiragi283.ragium.client.integration.jei.category.RTResourceExtractingRecipeCategory +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 @@ -45,15 +44,12 @@ import mezz.jei.api.registration.IRecipeCategoryRegistration import mezz.jei.api.registration.IRecipeRegistration import mezz.jei.api.registration.ISubtypeRegistration import net.minecraft.core.Holder +import net.minecraft.core.component.DataComponents import net.minecraft.core.registries.BuiltInRegistries import net.minecraft.world.item.Item -import net.minecraft.world.item.ItemStack import net.minecraft.world.item.alchemy.Potion import net.minecraft.world.item.alchemy.Potions -import net.minecraft.world.item.crafting.display.SlotDisplay -import net.neoforged.neoforge.common.Tags import net.neoforged.neoforge.fluids.FluidStack -import net.neoforged.neoforge.fluids.crafting.display.FluidTagSlotDisplay @JeiPlugin class RagiumJeiPlugin : HTJeiPlugin(RagiumAPI.MOD_ID) { @@ -75,15 +71,13 @@ class RagiumJeiPlugin : HTJeiPlugin(RagiumAPI.MOD_ID) { .map(Holder::value) .forEach { item: Item -> if (item is HTPotionBasedItem) { - registration.registerSubtypeInterpreter(item) { stack: ItemStack, _ -> - HTPotionHelper.getContents(stack) - } + registration.registerFromDataComponentTypes(item, DataComponents.POTION_CONTENTS) } } - // Ore Slurry Bucket - registration.registerSubtypeInterpreter(RagiumFluids.ORE_SLURRY.bucketHolder.get()) { stack: ItemStack, _ -> - HTOreSlurryDataHelper.getData(stack) - } + + // Tanks + registration.registerFromDataComponentTypes(RagiumBlocks.POTION_TANK.asItem(), RagiumDataComponents.FLUID) + registration.registerFromDataComponentTypes(RagiumBlocks.CREATIVE_TANK.asItem(), RagiumDataComponents.FLUID) } override fun registerFluidSubtypes( @@ -93,11 +87,7 @@ class RagiumJeiPlugin : HTJeiPlugin(RagiumAPI.MOD_ID) { registration.registerSubtypeInterpreter( NeoForgeTypes.FLUID_STACK, RagiumFluids.POTION.getOrThrow() - ) { stack: FluidStack, _ -> HTPotionHelper.getContents(stack) } - registration.registerSubtypeInterpreter( - NeoForgeTypes.FLUID_STACK, - RagiumFluids.ORE_SLURRY.getOrThrow() - ) { stack: FluidStack, _ -> HTOreSlurryDataHelper.getHolder(stack) } + ) { stack: FluidStack, _ -> HTPotionHelper.getContentsNotEmpty(stack) } } override fun registerIngredients(registration: IModIngredientRegistration) { @@ -112,13 +102,6 @@ class RagiumJeiPlugin : HTJeiPlugin(RagiumAPI.MOD_ID) { .map(HTPotionHelper::createFluid) .toList() ) - registration.addExtraIngredients( - NeoForgeTypes.FLUID_STACK, - HTPhysicalSideHelper.registryOrThrow(RagiumRegistries.Keys.ORE_SLURRY_DATA) - .asHolderSequence() - .map(HTOreSlurryDataHelper::createFluid) - .toList() - ) } override fun registerCategories(registration: IRecipeCategoryRegistration) { @@ -137,12 +120,13 @@ class RagiumJeiPlugin : HTJeiPlugin(RagiumAPI.MOD_ID) { HTSingleRecipeCategory.FluidToItem(guiHelper, RagiumJeiRecipeTypes.FREEZING), HTSingleRecipeCategory.ItemToFluid(guiHelper, RagiumJeiRecipeTypes.MELTING), HTItemToItemAndFluidRecipeCategory(guiHelper, RagiumJeiRecipeTypes.PYROLYZING), - RTRefiningRecipeCategory(guiHelper), + HTFluidToItemAndFluidRecipeCategory(guiHelper, RagiumJeiRecipeTypes.REFINING), // Chemical HTItemAndFluidToItemRecipeCategory(guiHelper, RagiumJeiRecipeTypes.BATHING), RTElectrolyzingRecipeCategory(guiHelper), HTItemAndFluidToFluidRecipeCategory(guiHelper, RagiumJeiRecipeTypes.MIXING), RTReactingRecipeCategory(guiHelper), + RTWashingRecipeCategory(guiHelper), // Bio HTItemAndFluidToFluidRecipeCategory(guiHelper, RagiumJeiRecipeTypes.BREWING), HTItemToDoubleItemRecipeCategory(guiHelper, RagiumJeiRecipeTypes.PLANTING), @@ -169,17 +153,18 @@ class RagiumJeiPlugin : HTJeiPlugin(RagiumAPI.MOD_ID) { HTJeiRecipeHelper.addRecipes(registration, RagiumJeiRecipeTypes.REFINING, RagiumRecipeLookups.REFINING) // Chemical HTJeiRecipeHelper.addRecipes(registration, RagiumJeiRecipeTypes.BATHING, RagiumRecipeLookups.BATHING) - HTJeiRecipeHelper.addRecipes( - registration, - RagiumJeiRecipeTypes.ELECTROLYZING, - RagiumRecipeLookups.ELECTROLYZING - ) 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) HTJeiRecipeHelper.addRecipes(registration, RagiumJeiRecipeTypes.PLANTING, RagiumRecipeLookups.PLANTING) // Electronics + HTJeiRecipeHelper.addRecipes( + registration, + RagiumJeiRecipeTypes.ELECTROLYZING, + RagiumRecipeLookups.ELECTROLYZING + ) HTJeiRecipeHelper.addRecipes( registration, RagiumJeiRecipeTypes.RESOURCE_EXTRACTING, @@ -235,34 +220,6 @@ class RagiumJeiPlugin : HTJeiPlugin(RagiumAPI.MOD_ID) { }.toList() ) // Chemical - registration.addRecipes( - RagiumJeiRecipeTypes.MIXING, - listItems() - .mapNotNull { input: Holder -> - val result: FluidStack = - HTOreSlurryDataHelper.createFluid(input.components()) ?: return@mapNotNull null - RagiumRecipeBuilders.mixing { - itemIngredient = HTJeiRecipeHelper.fakeItem(SlotDisplay.ItemSlotDisplay(input)) - fluidIngredient = HTJeiRecipeHelper.fakeFluid(RagiumFluids.SULFURIC_ACID) - result { from(result) } - recipeId replace input.getKeyOrThrow().identifier().withPrefix("solving/") - }.buildSynthetic() - }.toList() - ) - - registration.addRecipes( - RagiumJeiRecipeTypes.REACTING, - HTPhysicalSideHelper.registryOrThrow(RagiumRegistries.Keys.ORE_SLURRY_DATA) - .asHolderSequence() - .map { holder: Holder -> - RagiumRecipeBuilders.reacting { - primaryIngredient = HTJeiRecipeHelper.fakeFluid(HTOreSlurryDataHelper.createFluid(holder)) - secondaryIngredient = HTJeiRecipeHelper.fakeFluid(FluidTagSlotDisplay(Tags.Fluids.WATER)) - +holder.value().result - recipeId replace holder.getKeyOrThrow().identifier().withPrefix("ore_slurry/") - }.buildSynthetic() - }.toList() - ) } override fun registerRecipeCatalysts(registration: IRecipeCatalystRegistration) { @@ -283,12 +240,12 @@ class RagiumJeiPlugin : HTJeiPlugin(RagiumAPI.MOD_ID) { // Chemical registration.addCraftingStation(RagiumJeiRecipeTypes.BATHING, RagiumBlocks.CHEMICAL_BATH) registration.addCraftingStation(RagiumJeiRecipeTypes.REACTING, RagiumBlocks.CHEMICAL_REACTOR) - registration.addCraftingStation(RagiumJeiRecipeTypes.ELECTROLYZING, RagiumBlocks.ELECTROLYZER) registration.addCraftingStation(RagiumJeiRecipeTypes.MIXING, RagiumBlocks.MIXER) // Bio registration.addCraftingStation(RagiumJeiRecipeTypes.BREWING, RagiumBlocks.BREWERY) registration.addCraftingStation(RagiumJeiRecipeTypes.PLANTING, RagiumBlocks.PLANTER) // Electronics + registration.addCraftingStation(RagiumJeiRecipeTypes.ELECTROLYZING, RagiumBlocks.ELECTROLYZER) registration.addCraftingStation(RagiumJeiRecipeTypes.ASSEMBLING, RagiumBlocks.PRECISION_ASSEMBLER) // Arcane registration.addCraftingStation(RagiumJeiRecipeTypes.ENCHANTING, RagiumBlocks.ENCHANTER) 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 e27fd82fb2..c50c68a1e0 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiRecipeTypes.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiRecipeTypes.kt @@ -2,17 +2,17 @@ package hiiragi283.ragium.client.integration.jei import hiiragi283.lib.integration.jei.HTHolderJeiRecipeType import hiiragi283.lib.integration.jei.HTJeiRecipeType +import hiiragi283.lib.recipe.base.HTFluidToDoubleFluidRecipe import hiiragi283.lib.recipe.base.HTFluidToRecipe import hiiragi283.lib.recipe.base.HTItemAndFluidToRecipe import hiiragi283.lib.recipe.base.HTItemToDoubleItemRecipe -import hiiragi283.lib.recipe.base.HTItemToItemAndFluidRecipe import hiiragi283.lib.recipe.base.HTItemToRecipe import hiiragi283.lib.recipe.base.HTTripleItemToItemRecipe import hiiragi283.ragium.api.recipe.RTElectrolyzingRecipe import hiiragi283.ragium.api.recipe.RTEnchantingRecipe import hiiragi283.ragium.api.recipe.RTReactingRecipe -import hiiragi283.ragium.api.recipe.RTRefiningRecipe import hiiragi283.ragium.api.recipe.RTResourceExtractingRecipe +import hiiragi283.ragium.api.recipe.RTWashingRecipe import hiiragi283.ragium.api.recipe.RagiumRecipeTypes import hiiragi283.ragium.common.block.RagiumBlocks @@ -35,7 +35,7 @@ data object RagiumJeiRecipeTypes { HTJeiRecipeType(RagiumRecipeTypes.CUTTING, RagiumBlocks.CUTTING_MACHINE) @JvmField - val DRAINING: HTHolderJeiRecipeType = + val DRAINING: HTHolderJeiRecipeType = HTJeiRecipeType(RagiumRecipeTypes.DRAINING, RagiumBlocks.MACHINE_CASING) @JvmField @@ -56,11 +56,11 @@ data object RagiumJeiRecipeTypes { HTJeiRecipeType(RagiumRecipeTypes.MELTING, RagiumBlocks.MELTER) @JvmField - val PYROLYZING: HTHolderJeiRecipeType = + val PYROLYZING: HTHolderJeiRecipeType = HTJeiRecipeType(RagiumRecipeTypes.PYROLYZING, RagiumBlocks.PYROLYZER) @JvmField - val REFINING: HTHolderJeiRecipeType = + val REFINING: HTHolderJeiRecipeType = HTJeiRecipeType(RagiumRecipeTypes.REFINING, RagiumBlocks.REFINERY) // Chemical @@ -69,8 +69,8 @@ data object RagiumJeiRecipeTypes { HTJeiRecipeType(RagiumRecipeTypes.BATHING, RagiumBlocks.CHEMICAL_BATH) @JvmField - val ELECTROLYZING: HTHolderJeiRecipeType = - HTJeiRecipeType(RagiumRecipeTypes.ELECTROLYZING, RagiumBlocks.ELECTROLYZER) + val CENTRIFUGING: HTHolderJeiRecipeType = + HTJeiRecipeType(RagiumRecipeTypes.CENTRIFUGING, RagiumBlocks.CHEMICAL_BATH) @JvmField val MIXING: HTHolderJeiRecipeType = @@ -80,6 +80,10 @@ data object RagiumJeiRecipeTypes { val REACTING: HTHolderJeiRecipeType = HTJeiRecipeType(RagiumRecipeTypes.REACTING, RagiumBlocks.CHEMICAL_REACTOR) + @JvmField + val WASHING: HTHolderJeiRecipeType = + HTJeiRecipeType(RagiumRecipeTypes.WASHING, RagiumBlocks.MACHINE_CASING) + // Bio @JvmField val BREWING: HTHolderJeiRecipeType = @@ -90,6 +94,10 @@ data object RagiumJeiRecipeTypes { HTJeiRecipeType(RagiumRecipeTypes.PLANTING, RagiumBlocks.PLANTER) // Electronics + @JvmField + val ELECTROLYZING: HTHolderJeiRecipeType = + HTJeiRecipeType(RagiumRecipeTypes.ELECTROLYZING, RagiumBlocks.ELECTROLYZER) + @JvmField val RESOURCE_EXTRACTING: HTHolderJeiRecipeType = HTJeiRecipeType(RagiumRecipeTypes.RESOURCE_EXTRACTING, RagiumBlocks.MACHINE_CASING) diff --git a/src/client/kotlin/hiiragi283/ragium/client/integration/jei/category/RTElectrolyzingRecipeCategory.kt b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/category/RTElectrolyzingRecipeCategory.kt index 54949a7bfe..1b2a91bd9d 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/integration/jei/category/RTElectrolyzingRecipeCategory.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/category/RTElectrolyzingRecipeCategory.kt @@ -16,7 +16,7 @@ class RTElectrolyzingRecipeCategory(guiHelper: IGuiHelper) : HTHolderRecipeCategory( guiHelper, RagiumJeiRecipeTypes.ELECTROLYZING, - 18 * 8, + 18 * 6, 18 * 1, RTElectrolyzingRecipe.CODEC ) { @@ -24,16 +24,11 @@ class RTElectrolyzingRecipeCategory(guiHelper: IGuiHelper) : // inputs builder .addInputSlot(getPosition(0), getPosition(0)) - .add(recipe.fluidIngredient) + .add(recipe.ingredient) .setSlotBackground(HTBackgroundType.INPUT) - val itemInput: IRecipeSlotBuilder = builder.addInputSlot( - getPosition(2), - getPosition(0) - ).setSlotBackground(HTBackgroundType.INPUT) - recipe.itemIngredient.ifPresent(itemInput::add) // outputs val outputSlots: Array = Array(3) { index: Int -> - builder.addOutputSlot(getPosition(5 + index), getPosition(0)).setSlotBackground(HTBackgroundType.OUTPUT) + builder.addOutputSlot(getPosition(3 + index), getPosition(0)).setSlotBackground(HTBackgroundType.OUTPUT) } for ((index: Int, result: HTFluidResult) in recipe.results.withIndex()) { outputSlots[index].add(result) @@ -41,7 +36,6 @@ class RTElectrolyzingRecipeCategory(guiHelper: IGuiHelper) : } override fun setupRecipeExtras(builder: IRecipeExtrasBuilder, recipe: RTElectrolyzingRecipe, focuses: IFocusGroup) { - builder.addRecipePlus(getPosition(1)) - builder.addRecipeArrow(recipe).setPosition(getPosition(3.25), getPosition(0)) + builder.addRecipeArrow(recipe).setPosition(getPosition(1.25), getPosition(0)) } } 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 0d8276847c..b91f15c794 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 @@ -3,8 +3,6 @@ package hiiragi283.ragium.client.integration.jei.category import hiiragi283.lib.gui.HTBackgroundType import hiiragi283.lib.integration.jei.add import hiiragi283.lib.integration.jei.category.HTHolderRecipeCategory -import hiiragi283.lib.recipe.result.HTFluidResult -import hiiragi283.lib.recipe.result.HTItemResult import hiiragi283.ragium.api.recipe.RTReactingRecipe import hiiragi283.ragium.client.integration.jei.RagiumJeiRecipeTypes import mezz.jei.api.gui.builder.IRecipeLayoutBuilder @@ -32,15 +30,13 @@ class RTReactingRecipeCategory(guiHelper: IGuiHelper) : .add(recipe.secondary) .setSlotBackground(HTBackgroundType.EXTRA_INPUT) // outputs - val (itemResult: HTItemResult?, fluidResult: HTFluidResult?) = recipe.results.toPair() val fluidOutput: IRecipeSlotBuilder = builder .addOutputSlot(getPosition(5), getPosition(0)) .setSlotBackground(HTBackgroundType.OUTPUT) val itemOutput: IRecipeSlotBuilder = builder .addOutputSlot(getPosition(7), getPosition(0)) .setSlotBackground(HTBackgroundType.OUTPUT) - fluidResult?.let(fluidOutput::add) - itemResult?.let(itemOutput::add) + recipe.result.content.mapLeft(itemOutput::add).mapRight(fluidOutput::add) } override fun setupRecipeExtras( diff --git a/src/client/kotlin/hiiragi283/ragium/client/integration/jei/category/RTRefiningRecipeCategory.kt b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/category/RTWashingRecipeCategory.kt similarity index 51% rename from src/client/kotlin/hiiragi283/ragium/client/integration/jei/category/RTRefiningRecipeCategory.kt rename to src/client/kotlin/hiiragi283/ragium/client/integration/jei/category/RTWashingRecipeCategory.kt index d14512efe1..bbf191ac66 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/integration/jei/category/RTRefiningRecipeCategory.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/category/RTWashingRecipeCategory.kt @@ -3,7 +3,7 @@ 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.RTRefiningRecipe +import hiiragi283.ragium.api.recipe.RTWashingRecipe import hiiragi283.ragium.client.integration.jei.RagiumJeiRecipeTypes import mezz.jei.api.gui.builder.IRecipeLayoutBuilder import mezz.jei.api.gui.builder.IRecipeSlotBuilder @@ -11,33 +11,39 @@ import mezz.jei.api.gui.widgets.IRecipeExtrasBuilder import mezz.jei.api.helpers.IGuiHelper import mezz.jei.api.recipe.IFocusGroup -class RTRefiningRecipeCategory(guiHelper: IGuiHelper) : - HTHolderRecipeCategory( +class RTWashingRecipeCategory(guiHelper: IGuiHelper) : + HTHolderRecipeCategory( guiHelper, - RagiumJeiRecipeTypes.REFINING, - 18 * 6, + RagiumJeiRecipeTypes.WASHING, + 18 * 8, 18 * 1, - RTRefiningRecipe.CODEC + RTWashingRecipe.CODEC ) { - override fun setupRecipe(builder: IRecipeLayoutBuilder, recipe: RTRefiningRecipe, focuses: IFocusGroup) { + override fun setupRecipe(builder: IRecipeLayoutBuilder, recipe: RTWashingRecipe, focuses: IFocusGroup) { // inputs builder .addInputSlot(getPosition(0), getPosition(0)) - .add(recipe.ingredient) + .add(recipe.fluidIngredient) + .setSlotBackground(HTBackgroundType.INPUT) + builder + .addInputSlot(getPosition(2), getPosition(0)) + .add(recipe.itemIngredient) .setSlotBackground(HTBackgroundType.INPUT) // outputs builder - .addOutputSlot(getPosition(3), getPosition(0)) - .add(recipe.fluidResult) - .setSlotBackground(HTBackgroundType.OUTPUT) - val itemOutput: IRecipeSlotBuilder = builder .addOutputSlot(getPosition(5), getPosition(0)) + .add(recipe.results.head) .setSlotBackground(HTBackgroundType.OUTPUT) - recipe.itemResult.ifPresent(itemOutput::add) + + val slot: IRecipeSlotBuilder = builder + .addOutputSlot(getPosition(7), getPosition(0)) + .setSlotBackground(HTBackgroundType.EXTRA_OUTPUT) + recipe.results.getOrNull(1)?.let(slot::add) } - override fun setupRecipeExtras(builder: IRecipeExtrasBuilder, recipe: RTRefiningRecipe, focuses: IFocusGroup) { - builder.addRecipeArrow(recipe).setPosition(getPosition(1.25), getPosition(0)) - builder.addRecipePlus(getPosition(4)) + override fun setupRecipeExtras(builder: IRecipeExtrasBuilder, recipe: RTWashingRecipe, focuses: IFocusGroup) { + builder.addRecipePlus(getPosition(1)) + builder.addRecipeArrow(recipe).setPosition(getPosition(3.25), getPosition(0)) + builder.addRecipePlus(getPosition(6)) } } diff --git a/src/data/kotlin/hiiragi283/ragium/data/RagiumDataGen.kt b/src/data/kotlin/hiiragi283/ragium/data/RagiumDataGen.kt index c6559c80a8..6854bc5ec6 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/RagiumDataGen.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/RagiumDataGen.kt @@ -2,7 +2,8 @@ package hiiragi283.ragium.data import hiiragi283.lib.data.createLootTables import hiiragi283.ragium.api.RagiumRegistries -import hiiragi283.ragium.api.data.oreSlurry.RagiumOreSlurryData +import hiiragi283.ragium.api.data.chemical.RagiumChemicals +import hiiragi283.ragium.api.data.element.RagiumElements import hiiragi283.ragium.api.world.RagiumDamageTypes import hiiragi283.ragium.data.advancement.RagiumAdvancementProvider import hiiragi283.ragium.data.lang.RagiumEnglishLangProvider @@ -39,7 +40,8 @@ data object RagiumDataGen { event.createDatapackRegistryObjects( RegistrySetBuilder() .add(Registries.DAMAGE_TYPE, RagiumDamageTypes::bootstrap) - .add(RagiumRegistries.Keys.ORE_SLURRY_DATA, RagiumOreSlurryData::bootstrap) + .add(RagiumRegistries.Keys.ELEMENT, RagiumElements::bootstrap) + .add(RagiumRegistries.Keys.CHEMICAL, RagiumChemicals::bootstrap) .apply(RagiumWorldData::bootstrap) ) @@ -78,5 +80,7 @@ data object RagiumDataGen { event.createProvider(::RagiumEnglishLangProvider) event.createProvider(::RagiumJapaneseLangProvider) + // Report + event.createProvider(::RagiumRegistryDumpReport) } } diff --git a/src/data/kotlin/hiiragi283/ragium/data/RagiumDataMapProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/RagiumDataMapProvider.kt index e64fa1b183..f053cf016a 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/RagiumDataMapProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/RagiumDataMapProvider.kt @@ -1,5 +1,6 @@ package hiiragi283.ragium.data +import hiiragi283.ragium.api.data.map.RagiumDataMaps import hiiragi283.ragium.api.material.HTItemPart import hiiragi283.ragium.api.material.RagiumMaterial import hiiragi283.ragium.common.block.RagiumBlocks @@ -8,6 +9,9 @@ import net.minecraft.core.Holder import net.minecraft.core.HolderLookup import net.minecraft.data.PackOutput import net.minecraft.world.item.Item +import net.minecraft.world.level.block.Block +import net.minecraft.world.level.block.Blocks +import net.neoforged.neoforge.common.conditions.ICondition import net.neoforged.neoforge.common.data.DataMapProvider import net.neoforged.neoforge.registries.datamaps.builtin.FurnaceFuel import net.neoforged.neoforge.registries.datamaps.builtin.NeoForgeDataMaps @@ -17,6 +21,8 @@ class RagiumDataMapProvider(packOutput: PackOutput, lookupProvider: CompletableF DataMapProvider(packOutput, lookupProvider) { override fun gather(provider: HolderLookup.Provider) { furnaceFuel() + + mortarRepair() } private fun furnaceFuel() { @@ -41,4 +47,22 @@ class RagiumDataMapProvider(packOutput: PackOutput, lookupProvider: CompletableF } } } + + private fun mortarRepair() { + builder(RagiumDataMaps.MORTAR_REPAIR) + .add(Blocks.CRACKED_DEEPSLATE_BRICKS, Blocks.DEEPSLATE_BRICKS) + .add(Blocks.CRACKED_DEEPSLATE_TILES, Blocks.DEEPSLATE_TILES) + .add(Blocks.CRACKED_NETHER_BRICKS, Blocks.NETHER_BRICKS) + .add(Blocks.CRACKED_POLISHED_BLACKSTONE_BRICKS, Blocks.POLISHED_BLACKSTONE_BRICKS) + .add(Blocks.CRACKED_STONE_BRICKS, Blocks.STONE_BRICKS) + .add(Blocks.INFESTED_CRACKED_STONE_BRICKS, Blocks.INFESTED_STONE_BRICKS) + } + + @Suppress("DEPRECATION") + private fun Builder.add( + block: Block, + value: T, + replace: Boolean = false, + conditions: List = listOf() + ): Builder = this.add(block.builtInRegistryHolder(), value, replace, *conditions.toTypedArray()) } diff --git a/src/data/kotlin/hiiragi283/ragium/data/RagiumRegistryDumpReport.kt b/src/data/kotlin/hiiragi283/ragium/data/RagiumRegistryDumpReport.kt new file mode 100644 index 0000000000..f3b5c3d6bb --- /dev/null +++ b/src/data/kotlin/hiiragi283/ragium/data/RagiumRegistryDumpReport.kt @@ -0,0 +1,48 @@ +package hiiragi283.ragium.data + +import com.google.gson.JsonArray +import com.google.gson.JsonElement +import com.google.gson.JsonObject +import hiiragi283.ragium.api.RagiumAPI +import net.minecraft.core.HolderLookup +import net.minecraft.data.CachedOutput +import net.minecraft.data.DataProvider +import net.minecraft.data.PackOutput +import net.minecraft.resources.Identifier +import net.minecraft.resources.ResourceKey +import java.util.concurrent.CompletableFuture + +/** + * @see net.minecraft.data.info.RegistryDumpReport + */ +class RagiumRegistryDumpReport(val output: PackOutput, val future: CompletableFuture) : + DataProvider { + override fun run(cache: CachedOutput): CompletableFuture<*> = + this.future.thenCompose { provider: HolderLookup.Provider -> + val root = JsonObject() + provider.listRegistries().forEach { lookup: HolderLookup.RegistryLookup<*> -> + dumpRegistry(lookup)?.let { root.add(lookup.key().identifier().toString(), it) } + } + DataProvider.saveStable( + cache, + root, + output.getOutputFolder(PackOutput.Target.REPORTS).resolve(RagiumAPI.MOD_ID, "registries.json") + ) + } + + private fun dumpRegistry(lookup: HolderLookup.RegistryLookup<*>): JsonElement? { + val entries = JsonArray() + lookup.listElementIds() + .map(ResourceKey<*>::identifier) + .filter { id: Identifier -> id.namespace == RagiumAPI.MOD_ID } + .map(Identifier::getPath) + .sorted() + .forEach(entries::add) + return when { + entries.isEmpty -> null + else -> entries + } + } + + override fun getName(): String = "Registry Dump" +} diff --git a/src/data/kotlin/hiiragi283/ragium/data/advancement/RagiumAdvancementProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/advancement/RagiumAdvancementProvider.kt index eb764034dd..b040367e4e 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/advancement/RagiumAdvancementProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/advancement/RagiumAdvancementProvider.kt @@ -78,7 +78,7 @@ class RagiumAdvancementProvider(packOutput: PackOutput, future: CompletableFutur RagiumAdvancementKeys.SOOTY_IRON, RagiumAdvancementKeys.ROOT, HTItemPart.INGOT, - RagiumMaterial.Metal.SOOTY_IRON + RagiumMaterial.Alloy.SOOTY_IRON ) // Mechanical createSimple( @@ -113,7 +113,7 @@ class RagiumAdvancementProvider(packOutput: PackOutput, future: CompletableFutur RagiumAdvancementKeys.BLACK_STEEL, RagiumAdvancementKeys.ALLOY_SMELTER, HTItemPart.INGOT, - RagiumMaterial.Metal.BLACK_STEEL + RagiumMaterial.Alloy.BLACK_STEEL ) createSimple( RagiumAdvancementKeys.FREEZER, diff --git a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt index 30609fcef1..32fb57f3a7 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt @@ -4,7 +4,8 @@ import hiiragi283.lib.data.lang.HTLangProvider import hiiragi283.lib.data.lang.HTLangTypes import hiiragi283.lib.text.HTCommonTranslation import hiiragi283.ragium.api.RagiumAPI -import hiiragi283.ragium.api.data.oreSlurry.RagiumOreSlurryData +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.common.advancment.RagiumAdvancementKeys @@ -38,15 +39,8 @@ class RagiumEnglishLangProvider(output: PackOutput) : addAdvancement(RagiumAdvancementKeys.FREEZER, "My power is 530,000.", "Acquire Freezer") addAdvancement(RagiumAdvancementKeys.MELTER, "(S)melter(y)", "Acquire Melter") // Block - add(RagiumBlocks.ECHO_BLOCK, "Block of Echo") - - add(RagiumBlocks.FLUORITE_BLOCK, "Block of Fluorite") - add(RagiumBlocks.FLUORITE_SLAB, "Fluorite Slab") - add(RagiumBlocks.FLUORITE_STAIRS, "Fluorite Stairs") - - add(RagiumBlocks.CRYOLITE_BLOCK, "Block of Cryolite") - add(RagiumBlocks.CRYOLITE_SLAB, "Cryolite Slab") - add(RagiumBlocks.CRYOLITE_STAIRS, "Cryolite Stairs") + add(RagiumBlocks.QUARTZ_GLASS, "Quartz Glass") + add(RagiumBlocks.QUARTZ_GLASS_PANE, "Quartz Glass Pane") add(RagiumBlocks.ASSEMBLER, "Assembler") add(RagiumBlocks.CRUSHER, "Crusher") @@ -62,18 +56,21 @@ class RagiumEnglishLangProvider(output: PackOutput) : add(RagiumBlocks.CHEMICAL_BATH, "Chemical Bath") add(RagiumBlocks.CHEMICAL_REACTOR, "Chemical Reactor") - add(RagiumBlocks.ELECTROLYZER, "Electrolyzer") add(RagiumBlocks.MIXER, "Mixer") add(RagiumBlocks.BREWERY, "Brewery") add(RagiumBlocks.PLANTER, "Planter") + add(RagiumBlocks.ELECTROLYZER, "Electrolyzer") add(RagiumBlocks.PRECISION_ASSEMBLER, "Precision Assembler") add(RagiumBlocks.SCANNER, "Laser Scanner") add(RagiumBlocks.ENCHANTER, "Enchanter") + add(RagiumBlocks.FLUID_OUTPUT_BUS, "Fluid Output Bus") + 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") @@ -94,21 +91,26 @@ class RagiumEnglishLangProvider(output: PackOutput) : addFluid(RagiumFluids.MOLTEN_ENDER, "Resonant Ender") addFluid(RagiumFluids.HYDROGEN, "Hydrogen") + addFluid(RagiumFluids.NITROGEN, "Nitrogen") addFluid(RagiumFluids.OXYGEN, "Oxygen") addFluid(RagiumFluids.CHLORINE, "Chlorine") addFluid(RagiumFluids.WOOD_TAR, "Wood Tar") addFluid(RagiumFluids.COAL_TAR, "Coal Tar") + addFluid(RagiumFluids.ALCOHOL, "Alcohol") + addFluid(RagiumFluids.ALDEHYDE, "Aldehyde") addFluid(RagiumFluids.AROMATIC_COMPOUND, "Aromatic Compound") addFluid(RagiumFluids.CRUDE_OIL, "Crude Oil") addFluid(RagiumFluids.NAPHTHA, "Naphtha") addFluid(RagiumFluids.FUEL, "Fuel") addFluid(RagiumFluids.ANTI_RUST_OIL, "Anti-rust Oil") + addFluid(RagiumFluids.MOLTEN_PLASTIC, "Molten Plastic") addFluid(RagiumFluids.SYNTHETIC_RESIN, "Synthetic Resin") addFluid(RagiumFluids.NITRIC_ACID, "Nitric Acid") addFluid(RagiumFluids.LIQUID_EXPLOSIVE, "Liquid Explosive") addFluid(RagiumFluids.HYDROGEN_FLUORIDE, "Hydrogen Fluoride") addFluid(RagiumFluids.HYDROFLUORIC_ACID, "Hydrofluoric Acid") + addFluid(RagiumFluids.SALT_WATER, "Salt Water") addFluid(RagiumFluids.NAOH_SOLUTION, "Sodium Hydroxide Solution") addFluid(RagiumFluids.ALUMINA_SOLUTION, "Alumina Solution") addFluid(RagiumFluids.SULFUR_DIOXIDE, "Sulfur Dioxide") @@ -117,23 +119,26 @@ class RagiumEnglishLangProvider(output: PackOutput) : addFluid(RagiumFluids.HYDROGEN_CHLORIDE, "Hydrogen Chloride") addFluid(RagiumFluids.HYDROCHLORIC_ACID, "Hydrochloric Acid") addFluid(RagiumFluids.BLEACH, "Bleach") - - add(RagiumFluids.ORE_SLURRY.getFluidType().descriptionId, "Invalid Ore Slurry") - add(RagiumFluids.ORE_SLURRY.bucketHolder, $$"%1$s Bucket") // Item add(RagiumItems.BAMBOO_CHARCOAL, "Bamboo Charcoal") - add(RagiumItems.TAR, "Tar") add(RagiumItems.PARTICLE_BOARD, "Particle Board") + add(RagiumItems.CEMENT, "Cement") + add(RagiumItems.MORTAR, "Mortar") + add(RagiumItems.TAR, "Tar") + add(RagiumItems.STICKY_BALL, "Sticky Ball") add(RagiumItems.PLASTIC_PLATE, "Plastic Plate") add(RagiumItems.SYNTHETIC_FEATHER, "Synthetic Feather") - add(RagiumItems.SYNTHETIC_FIBER, "Synthetic Fiber") add(RagiumItems.SYNTHETIC_LEATHER, "Synthetic Leather") + add(RagiumItems.SYNTHETIC_FIBER, "Synthetic Fiber") + add(RagiumItems.CARBON_FIBER, "Carbon Fiber") + add(RagiumItems.CFRP_PLATE, "CFRP Plate") + // add(RagiumItems.ALCLAD_PLATE, "Alclad Plate") add(RagiumItems.BEESWAX, "Beeswax") add(RagiumItems.SPLASH_BOTTLE, "Splash Bottle") add(RagiumItems.LINGERING_BOTTLE, "Lingering Bottle") add(RagiumItems.CRUDE_SILICON, "Crude Silicon") add(RagiumItems.SILICON_WAFER, "Silicon Wafer") - add(RagiumItems.CIRCUIT_CHIP, "Circuit Chip") + add(RagiumItems.SILICON_CHIP, "Silicon Chip") add(RagiumItems.CIRCUIT_BOARD, "Circuit Board") add(RagiumItems.ELECTRIC_CIRCUIT, "Electric Circuit") add(RagiumItems.ELDER_HEART, "Elder Heart") @@ -146,12 +151,6 @@ class RagiumEnglishLangProvider(output: PackOutput) : add(RagiumMobEffects.FROSTBITE, "Frostbite") add(RagiumMobEffects.CHEMICAL_BURN, "Chemical Burn") - // Ore Slurry - addOreSlurry(RagiumOreSlurryData.COPPER, "Copper Ore Slurry") - addOreSlurry(RagiumOreSlurryData.IRON, "Iron Ore Slurry") - addOreSlurry(RagiumOreSlurryData.GOLD, "Gold Ore Slurry") - addOreSlurry(RagiumOreSlurryData.NETHERITE_SCRAP, "Ancient Debris Slurry") - // Potion addPotion(RagiumPotions.FROSTBITE, "Frostbite") addPotion(RagiumPotions.CHEMICAL_BURN, "Chemical Burn") @@ -165,30 +164,32 @@ class RagiumEnglishLangProvider(output: PackOutput) : addCustomPotion("enchanted_golden_apple", "Enchanted Golden Apple") // Recipe Type - add(RagiumRecipeTypes.ASSEMBLING, "Assembling") - add(RagiumRecipeTypes.COMPRESSING, "Compressing") - add(RagiumRecipeTypes.CRUSHING, "Crushing") - add(RagiumRecipeTypes.CUTTING, "Cutting") - add(RagiumRecipeTypes.DRAINING, "Draining") - add(RagiumRecipeTypes.FILLING, "Filling") + addRecipeType(RagiumRecipeTypes.ASSEMBLING, "Assembling") + addRecipeType(RagiumRecipeTypes.COMPRESSING, "Compressing") + addRecipeType(RagiumRecipeTypes.CRUSHING, "Crushing") + addRecipeType(RagiumRecipeTypes.CUTTING, "Cutting") + addRecipeType(RagiumRecipeTypes.DRAINING, "Draining") + addRecipeType(RagiumRecipeTypes.FILLING, "Filling") - add(RagiumRecipeTypes.ALLOYING, "Alloying") - add(RagiumRecipeTypes.FREEZING, "Freezing") - add(RagiumRecipeTypes.MELTING, "Melting") - add(RagiumRecipeTypes.PYROLYZING, "Pyrolyzing") - add(RagiumRecipeTypes.REFINING, "Refining") + addRecipeType(RagiumRecipeTypes.ALLOYING, "Alloying") + addRecipeType(RagiumRecipeTypes.FREEZING, "Freezing") + addRecipeType(RagiumRecipeTypes.MELTING, "Melting") + addRecipeType(RagiumRecipeTypes.PYROLYZING, "Pyrolyzing") + addRecipeType(RagiumRecipeTypes.REFINING, "Refining") - add(RagiumRecipeTypes.BATHING, "Chemical Bathing") - add(RagiumRecipeTypes.ELECTROLYZING, "Electrolyzing") - add(RagiumRecipeTypes.MIXING, "Mixing") - add(RagiumRecipeTypes.REACTING, "Chemical Reacting") + addRecipeType(RagiumRecipeTypes.BATHING, "Chemical Bathing") + addRecipeType(RagiumRecipeTypes.CENTRIFUGING, "Centrifuging") + addRecipeType(RagiumRecipeTypes.MIXING, "Mixing") + addRecipeType(RagiumRecipeTypes.REACTING, "Chemical Reacting") + addRecipeType(RagiumRecipeTypes.WASHING, "Washing") - add(RagiumRecipeTypes.BREWING, "Brewing") - add(RagiumRecipeTypes.PLANTING, "Planting") + addRecipeType(RagiumRecipeTypes.BREWING, "Brewing") + addRecipeType(RagiumRecipeTypes.PLANTING, "Planting") - add(RagiumRecipeTypes.RESOURCE_EXTRACTING, "Resource Extracting") + addRecipeType(RagiumRecipeTypes.ELECTROLYZING, "Electrolyzing") + addRecipeType(RagiumRecipeTypes.RESOURCE_EXTRACTING, "Resource Extracting") - add(RagiumRecipeTypes.ENCHANTING, "Enchanting") + addRecipeType(RagiumRecipeTypes.ENCHANTING, "Enchanting") // Text - Lib add(HTCommonTranslation.ERROR, "Error") @@ -223,5 +224,73 @@ class RagiumEnglishLangProvider(output: PackOutput) : add(RagiumTranslation.CONFIG_ENERGY_RATE, "Energy Rate") add(RagiumTranslation.TOOLTIPS_MEMORY_DISC_DATA, $$"Scanned Item: %1$s") + + addDataTranslations() + } + + private fun addDataTranslations() { + // Chemical + addFromKey(RagiumChemicals.HYDROGEN, "Hydrogen") + + addFromKey(RagiumChemicals.CARBON, "Carbon") + addFromKey(RagiumChemicals.DIAMOND, "Diamond") + addFromKey(RagiumChemicals.NITROGEN, "Nitrogen") + addFromKey(RagiumChemicals.OXYGEN, "Oxygen") + + addFromKey(RagiumChemicals.ALUMINUM, "Aluminum") + addFromKey(RagiumChemicals.SILICON, "Silicon") + addFromKey(RagiumChemicals.SULFUR, "Sulfur") + addFromKey(RagiumChemicals.CHLORINE, "Chlorine") + + addFromKey(RagiumChemicals.IRON, "Iron") + addFromKey(RagiumChemicals.COPPER, "Copper") + addFromKey(RagiumChemicals.GOLD, "Gold") + + addFromKey(RagiumChemicals.HYDROXIDE, "Hydroxide") + addFromKey(RagiumChemicals.WATER, "Water") + + addFromKey(RagiumChemicals.CARBONATE, "Carbonate") + addFromKey(RagiumChemicals.NITRATE, "Nitrate") + addFromKey(RagiumChemicals.NITRIC_ACID, "Nitric Acid") + addFromKey(RagiumChemicals.HYDROGEN_FLUORIDE, "Hydrogen Fluoride") + addFromKey(RagiumChemicals.FLUORITE, "Fluorite") + addFromKey(RagiumChemicals.CRYOLITE, "Cryolite") + + addFromKey(RagiumChemicals.SODIUM_HYDROXIDE, "Sodium Hydroxide") + addFromKey(RagiumChemicals.SODIUM_CARBONATE, "Sodium Carbonate") + addFromKey(RagiumChemicals.SODIUM_CHLORIDE, "Sodium Chloride") + addFromKey(RagiumChemicals.ALUMINUM_OXIDE, "Aluminum Oxide") + addFromKey(RagiumChemicals.ALUMINUM_FLUORIDE, "Aluminum Fluoride") + addFromKey(RagiumChemicals.SILICON_DIOXIDE, "Silicon Dioxide") + addFromKey(RagiumChemicals.SULFUR_DIOXIDE, "Sulfur Dioxide") + addFromKey(RagiumChemicals.SULFUR_TRIOXIDE, "Sulfur Trioxide") + addFromKey(RagiumChemicals.SULFATE, "Sulfate") + addFromKey(RagiumChemicals.SULFURIC_ACID, "Sulfuric Acid") + addFromKey(RagiumChemicals.HYDROGEN_CHLORIDE, "Hydrogen chloride") + + addFromKey(RagiumChemicals.POTASSIUM_NITRATE, "Potassium Nitrate") + addFromKey(RagiumChemicals.CALCIUM_CARBONATE, "Calcium Carbonate") + addFromKey(RagiumChemicals.CALCIUM_OXIDE, "Calcium Oxide") + addFromKey(RagiumChemicals.CALCIUM_SULFATE, "Calcium Sulfate") + // Element + addFromKey(RagiumElements.HYDROGEN, "Hydrogen") + + addFromKey(RagiumElements.CARBON, "Carbon") + addFromKey(RagiumElements.NITROGEN, "Nitrogen") + addFromKey(RagiumElements.OXYGEN, "Oxygen") + addFromKey(RagiumElements.FLUORINE, "Fluorine") + + addFromKey(RagiumElements.SODIUM, "Sodium") + addFromKey(RagiumElements.ALUMINUM, "Aluminum") + addFromKey(RagiumElements.SILICON, "Silicon") + addFromKey(RagiumElements.SULFUR, "Sulfur") + addFromKey(RagiumElements.CHLORINE, "Chlorine") + + addFromKey(RagiumElements.POTASSIUM, "Potassium") + addFromKey(RagiumElements.CALCIUM, "Calcium") + addFromKey(RagiumElements.IRON, "Iron") + addFromKey(RagiumElements.COPPER, "Copper") + + addFromKey(RagiumElements.GOLD, "Gold") } } diff --git a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt index 1eaf4c1202..7e084e874d 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt @@ -4,7 +4,8 @@ import hiiragi283.lib.data.lang.HTLangProvider import hiiragi283.lib.data.lang.HTLangTypes import hiiragi283.lib.text.HTCommonTranslation import hiiragi283.ragium.api.RagiumAPI -import hiiragi283.ragium.api.data.oreSlurry.RagiumOreSlurryData +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.common.advancment.RagiumAdvancementKeys @@ -34,15 +35,8 @@ class RagiumJapaneseLangProvider(output: PackOutput) : addAdvancement(RagiumAdvancementKeys.FREEZER, "私の消費電力は53万です", "冷凍機を手に入れる") addAdvancement(RagiumAdvancementKeys.MELTER, "融けてしまいそう", "溶融炉を手に入れる") // Block - add(RagiumBlocks.ECHO_BLOCK, "残響ブロック") - - add(RagiumBlocks.FLUORITE_BLOCK, "蛍石ブロック") - add(RagiumBlocks.FLUORITE_SLAB, "蛍石のハーフブロック") - add(RagiumBlocks.FLUORITE_STAIRS, "蛍石の階段") - - add(RagiumBlocks.CRYOLITE_BLOCK, "氷晶石ブロック") - add(RagiumBlocks.CRYOLITE_SLAB, "氷晶石のハーフブロック") - add(RagiumBlocks.CRYOLITE_STAIRS, "氷晶石の階段") + add(RagiumBlocks.QUARTZ_GLASS, "クォーツガラス") + add(RagiumBlocks.QUARTZ_GLASS_PANE, "クォーツガラス板") add(RagiumBlocks.ASSEMBLER, "組立機") add(RagiumBlocks.CRUSHER, "破砕機") @@ -58,18 +52,21 @@ class RagiumJapaneseLangProvider(output: PackOutput) : add(RagiumBlocks.CHEMICAL_BATH, "化学浴槽") add(RagiumBlocks.CHEMICAL_REACTOR, "化学反応槽") - add(RagiumBlocks.ELECTROLYZER, "電解機") add(RagiumBlocks.MIXER, "混合機") add(RagiumBlocks.BREWERY, "醸造機") add(RagiumBlocks.PLANTER, "栽培機") + add(RagiumBlocks.ELECTROLYZER, "電解機") add(RagiumBlocks.PRECISION_ASSEMBLER, "精密組立機") add(RagiumBlocks.SCANNER, "レーザースキャナ") add(RagiumBlocks.ENCHANTER, "エンチャンター") + add(RagiumBlocks.FLUID_OUTPUT_BUS, "液体搬出バス") + add(RagiumBlocks.TANK, "可変タンク") + add(RagiumBlocks.POTION_TANK, "ポーションタンク") add(RagiumBlocks.VOID_TANK, "廃棄タンク") add(RagiumBlocks.CREATIVE_BATTERY, "クリエイティブ用バッテリー") add(RagiumBlocks.CREATIVE_TANK, "クリエイティブ用タンク") @@ -90,21 +87,26 @@ class RagiumJapaneseLangProvider(output: PackOutput) : addFluid(RagiumFluids.MOLTEN_ENDER, "共振エンダー") addFluid(RagiumFluids.HYDROGEN, "水素") + addFluid(RagiumFluids.NITROGEN, "窒素") addFluid(RagiumFluids.OXYGEN, "酸素") addFluid(RagiumFluids.CHLORINE, "塩素") addFluid(RagiumFluids.WOOD_TAR, "木タール") addFluid(RagiumFluids.COAL_TAR, "石炭タール") + addFluid(RagiumFluids.ALCOHOL, "アルコール") + addFluid(RagiumFluids.ALDEHYDE, "アルデヒド") addFluid(RagiumFluids.AROMATIC_COMPOUND, "芳香族化合物") addFluid(RagiumFluids.CRUDE_OIL, "原油") addFluid(RagiumFluids.NAPHTHA, "ナフサ") addFluid(RagiumFluids.FUEL, "燃料油") addFluid(RagiumFluids.ANTI_RUST_OIL, "防錆油") + addFluid(RagiumFluids.MOLTEN_PLASTIC, "溶融プラスチック") addFluid(RagiumFluids.SYNTHETIC_RESIN, "合成樹脂") addFluid(RagiumFluids.NITRIC_ACID, "硝酸") addFluid(RagiumFluids.LIQUID_EXPLOSIVE, "液体爆薬") addFluid(RagiumFluids.HYDROGEN_FLUORIDE, "フッ化水素") addFluid(RagiumFluids.HYDROFLUORIC_ACID, "フッ化水素酸") + addFluid(RagiumFluids.SALT_WATER, "塩水") addFluid(RagiumFluids.NAOH_SOLUTION, "水酸化ナトリウム水溶液") addFluid(RagiumFluids.ALUMINA_SOLUTION, "アルミナ水溶液") addFluid(RagiumFluids.SULFUR_DIOXIDE, "二酸化硫黄") @@ -113,23 +115,26 @@ class RagiumJapaneseLangProvider(output: PackOutput) : addFluid(RagiumFluids.HYDROGEN_CHLORIDE, "塩化水素") addFluid(RagiumFluids.HYDROCHLORIC_ACID, "塩酸") addFluid(RagiumFluids.BLEACH, "漂白剤") - - add(RagiumFluids.ORE_SLURRY.getFluidType().descriptionId, "無効な鉱石泥") - add(RagiumFluids.ORE_SLURRY.bucketHolder, $$"%1$s入りバケツ") // Item add(RagiumItems.BAMBOO_CHARCOAL, "竹炭") - add(RagiumItems.TAR, "タール") add(RagiumItems.PARTICLE_BOARD, "パーティクルボード") + add(RagiumItems.CEMENT, "セメント") + add(RagiumItems.MORTAR, "モルタル") + add(RagiumItems.TAR, "タール") + add(RagiumItems.STICKY_BALL, "粘着質な塊") add(RagiumItems.PLASTIC_PLATE, "プラスチック板") add(RagiumItems.SYNTHETIC_FEATHER, "合成羽") - add(RagiumItems.SYNTHETIC_FIBER, "合成繊維") add(RagiumItems.SYNTHETIC_LEATHER, "合成牛皮") + add(RagiumItems.SYNTHETIC_FIBER, "合成繊維") + add(RagiumItems.CARBON_FIBER, "炭素繊維") + add(RagiumItems.CFRP_PLATE, "炭素繊維強化プラスチック板") + // add(RagiumItems.ALCLAD_PLATE, "アルクラッド板") add(RagiumItems.BEESWAX, "密猟") add(RagiumItems.SPLASH_BOTTLE, "スプラッシュ瓶") add(RagiumItems.LINGERING_BOTTLE, "残留瓶") add(RagiumItems.CRUDE_SILICON, "粗製シリコン") add(RagiumItems.SILICON_WAFER, "シリコンウェハ") - add(RagiumItems.CIRCUIT_CHIP, "回路チップ") + add(RagiumItems.SILICON_CHIP, "シリコンチップ") add(RagiumItems.CIRCUIT_BOARD, "回路基板") add(RagiumItems.ELECTRIC_CIRCUIT, "電子回路") add(RagiumItems.ELDER_HEART, "エルダーの心臓") @@ -142,12 +147,6 @@ class RagiumJapaneseLangProvider(output: PackOutput) : add(RagiumMobEffects.FROSTBITE, "凍傷") add(RagiumMobEffects.CHEMICAL_BURN, "化学火傷") - // Ore Slurry - addOreSlurry(RagiumOreSlurryData.COPPER, "銅の鉱石泥") - addOreSlurry(RagiumOreSlurryData.IRON, "鉄の鉱石泥") - addOreSlurry(RagiumOreSlurryData.GOLD, "金の鉱石泥") - addOreSlurry(RagiumOreSlurryData.NETHERITE_SCRAP, "古代の鉱石泥") - // Potion addPotion(RagiumPotions.FROSTBITE, "凍傷") addPotion(RagiumPotions.CHEMICAL_BURN, "化学火傷") @@ -161,30 +160,32 @@ class RagiumJapaneseLangProvider(output: PackOutput) : addCustomPotion("enchanted_golden_apple", "エンチャントされた金リンゴ") // Recipe Type - add(RagiumRecipeTypes.ASSEMBLING, "組立") - add(RagiumRecipeTypes.COMPRESSING, "圧縮") - add(RagiumRecipeTypes.CRUSHING, "粉砕") - add(RagiumRecipeTypes.CUTTING, "切断") - add(RagiumRecipeTypes.DRAINING, "排出") - add(RagiumRecipeTypes.FILLING, "封入") + addRecipeType(RagiumRecipeTypes.ASSEMBLING, "組立") + addRecipeType(RagiumRecipeTypes.COMPRESSING, "圧縮") + addRecipeType(RagiumRecipeTypes.CRUSHING, "粉砕") + addRecipeType(RagiumRecipeTypes.CUTTING, "切断") + addRecipeType(RagiumRecipeTypes.DRAINING, "排出") + addRecipeType(RagiumRecipeTypes.FILLING, "封入") - add(RagiumRecipeTypes.ALLOYING, "合金") - add(RagiumRecipeTypes.FREEZING, "冷凍") - add(RagiumRecipeTypes.MELTING, "溶融") - add(RagiumRecipeTypes.PYROLYZING, "熱分解") - add(RagiumRecipeTypes.REFINING, "蒸留") + addRecipeType(RagiumRecipeTypes.ALLOYING, "合金") + addRecipeType(RagiumRecipeTypes.FREEZING, "冷凍") + addRecipeType(RagiumRecipeTypes.MELTING, "溶融") + addRecipeType(RagiumRecipeTypes.PYROLYZING, "熱分解") + addRecipeType(RagiumRecipeTypes.REFINING, "蒸留") - add(RagiumRecipeTypes.BATHING, "化学洗浄") - add(RagiumRecipeTypes.ELECTROLYZING, "電気分解") - add(RagiumRecipeTypes.MIXING, "混合") - add(RagiumRecipeTypes.REACTING, "化学反応") + addRecipeType(RagiumRecipeTypes.BATHING, "化学洗浄") + addRecipeType(RagiumRecipeTypes.CENTRIFUGING, "遠心分離") + addRecipeType(RagiumRecipeTypes.MIXING, "混合") + addRecipeType(RagiumRecipeTypes.REACTING, "化学反応") + addRecipeType(RagiumRecipeTypes.WASHING, "洗浄") - add(RagiumRecipeTypes.BREWING, "醸造") - add(RagiumRecipeTypes.PLANTING, "栽培") + addRecipeType(RagiumRecipeTypes.BREWING, "醸造") + addRecipeType(RagiumRecipeTypes.PLANTING, "栽培") - add(RagiumRecipeTypes.RESOURCE_EXTRACTING, "資源採集") + addRecipeType(RagiumRecipeTypes.ELECTROLYZING, "電気分解") + addRecipeType(RagiumRecipeTypes.RESOURCE_EXTRACTING, "資源採集") - add(RagiumRecipeTypes.ENCHANTING, "エンチャント") + addRecipeType(RagiumRecipeTypes.ENCHANTING, "エンチャント") // Text - Lib add(HTCommonTranslation.ERROR, "エラー") @@ -219,5 +220,73 @@ class RagiumJapaneseLangProvider(output: PackOutput) : add(RagiumTranslation.CONFIG_ENERGY_RATE, "エネルギー使用速度") add(RagiumTranslation.TOOLTIPS_MEMORY_DISC_DATA, $$"スキャン済み: %1$s") + + addDataTranslations() + } + + private fun addDataTranslations() { + // Chemical + addFromKey(RagiumChemicals.HYDROGEN, "水素") + + addFromKey(RagiumChemicals.CARBON, "炭素") + addFromKey(RagiumChemicals.DIAMOND, "ダイヤモンド") + addFromKey(RagiumChemicals.NITROGEN, "窒素") + addFromKey(RagiumChemicals.OXYGEN, "酸素") + + addFromKey(RagiumChemicals.ALUMINUM, "アルミニウム") + addFromKey(RagiumChemicals.SILICON, "ケイ素") + addFromKey(RagiumChemicals.SULFUR, "硫黄") + addFromKey(RagiumChemicals.CHLORINE, "塩素") + + addFromKey(RagiumChemicals.IRON, "鉄") + addFromKey(RagiumChemicals.COPPER, "銅") + addFromKey(RagiumChemicals.GOLD, "金") + + addFromKey(RagiumChemicals.HYDROXIDE, "水酸化物") + addFromKey(RagiumChemicals.WATER, "水") + + addFromKey(RagiumChemicals.CARBONATE, "炭酸塩") + addFromKey(RagiumChemicals.NITRATE, "硝酸塩") + addFromKey(RagiumChemicals.NITRIC_ACID, "硝酸") + addFromKey(RagiumChemicals.HYDROGEN_FLUORIDE, "フッ化水素") + addFromKey(RagiumChemicals.FLUORITE, "蛍石") + addFromKey(RagiumChemicals.CRYOLITE, "氷晶石") + + addFromKey(RagiumChemicals.SODIUM_HYDROXIDE, "水酸化ナトリウム") + addFromKey(RagiumChemicals.SODIUM_CARBONATE, "炭酸ナトリウム") + addFromKey(RagiumChemicals.SODIUM_CHLORIDE, "塩化ナトリウム") + addFromKey(RagiumChemicals.ALUMINUM_OXIDE, "酸化アルミニウム") + addFromKey(RagiumChemicals.ALUMINUM_FLUORIDE, "フッ化アルミニウム") + addFromKey(RagiumChemicals.SILICON_DIOXIDE, "二酸化ケイ素") + addFromKey(RagiumChemicals.SULFUR_DIOXIDE, "二酸化硫黄") + addFromKey(RagiumChemicals.SULFUR_TRIOXIDE, "三酸化硫黄") + addFromKey(RagiumChemicals.SULFATE, "硫酸塩") + addFromKey(RagiumChemicals.SULFURIC_ACID, "硫酸") + addFromKey(RagiumChemicals.HYDROGEN_CHLORIDE, "塩化水素") + + addFromKey(RagiumChemicals.POTASSIUM_NITRATE, "硝酸カリウム") + addFromKey(RagiumChemicals.CALCIUM_CARBONATE, "炭酸カルシウム") + addFromKey(RagiumChemicals.CALCIUM_OXIDE, "酸化カルシウム") + addFromKey(RagiumChemicals.CALCIUM_SULFATE, "硫酸カルシウム") + // Element + addFromKey(RagiumElements.HYDROGEN, "水素") + + addFromKey(RagiumElements.CARBON, "炭素") + addFromKey(RagiumElements.NITROGEN, "窒素") + addFromKey(RagiumElements.OXYGEN, "酸素") + addFromKey(RagiumElements.FLUORINE, "フッ素") + + addFromKey(RagiumElements.SODIUM, "ナトリウム") + addFromKey(RagiumElements.ALUMINUM, "アルミニウム") + addFromKey(RagiumElements.SILICON, "ケイ素") + addFromKey(RagiumElements.SULFUR, "硫黄") + addFromKey(RagiumElements.CHLORINE, "塩素") + + addFromKey(RagiumElements.POTASSIUM, "カリウム") + addFromKey(RagiumElements.CALCIUM, "カルシウム") + addFromKey(RagiumElements.IRON, "鉄") + addFromKey(RagiumElements.COPPER, "銅") + + addFromKey(RagiumElements.GOLD, "金") } } diff --git a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumLangProvider.kt index a4cdde5d38..31cd484f31 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumLangProvider.kt @@ -11,6 +11,7 @@ import hiiragi283.lib.text.HTCommonTranslation import hiiragi283.lib.text.HTHasTranslationKey import hiiragi283.ragium.api.material.HTBlockPart import hiiragi283.ragium.api.material.HTItemPart +import hiiragi283.ragium.api.material.HTStorageBlockPart import hiiragi283.ragium.api.material.RagiumMaterial import hiiragi283.ragium.common.block.RagiumBlocks import hiiragi283.ragium.common.fluid.RagiumFluids @@ -26,6 +27,12 @@ interface RagiumLangProvider { .forEach { (part: HTBlockPart, material: RagiumMaterial, block: HTHasTranslationKey) -> provider.add(block, part, material) } + provider.add(RagiumBlocks.ECHO_BLOCK, HTStorageBlockPart.DEFAULT, RagiumMaterial.Gem.ECHO) + provider.add(RagiumBlocks.FLUORITE_BLOCK, HTStorageBlockPart.DEFAULT, RagiumMaterial.Gem.FLUORITE) + provider.addDecoration(RagiumBlocks.FLUORITE_DECORATION, RagiumMaterial.Gem.FLUORITE) + // provider.add(RagiumBlocks.CRYOLITE_BLOCK, HTStorageBlockPart.DEFAULT, RagiumMaterial.Gem.CRYOLITE) + // provider.addDecoration(RagiumBlocks.CRYOLITE_DECORATION, RagiumMaterial.Gem.CRYOLITE) + val casingPattern = HTLangPatternProvider("Machine Casing (%s)", "機械筐体 (%s)") for ((machineType: HTLangName, casing: HTHasTranslationKey) in RagiumBlocks.MACHINE_CASINGS) { provider.add(casing, casingPattern, machineType) @@ -57,7 +64,7 @@ interface RagiumLangProvider { provider.add(parts, partsPattern, machineType) } for (toolType: HTToolType in HTToolType.entries) { - provider.add(RagiumItems.SOOTY_IRON_TOOLS[toolType], toolType, RagiumMaterial.Metal.SOOTY_IRON) + provider.add(RagiumItems.SOOTY_IRON_TOOLS[toolType], toolType, RagiumMaterial.Alloy.SOOTY_IRON) } // Text // API - Constants diff --git a/src/data/kotlin/hiiragi283/ragium/data/loot/RagiumBlockLootTableProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/loot/RagiumBlockLootTableProvider.kt index 684f271ff4..fce0d77b3d 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/loot/RagiumBlockLootTableProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/loot/RagiumBlockLootTableProvider.kt @@ -36,15 +36,19 @@ class RagiumBlockLootTableProvider(registries: HolderLookup.Provider) : RagiumBlocks.STORAGE_BLOCKS.values.forEach(::dropSelf) - add(RagiumBlocks.FLUORITE_SLAB, ::createSlabItemTable) - add(RagiumBlocks.CRYOLITE_SLAB, ::createSlabItemTable) + RagiumBlocks.ALL_DECORATIONS.forEach { add(it.slab, ::createSlabItemTable) } // Machine for (machine: HTSimpleDeferredBlockAndItem in RagiumBlocks.MACHINES.values.flatten()) { add(machine, ::copyComponent) } // Storage - for (tank: HTSimpleDeferredBlockAndItem in listOf(RagiumBlocks.TANK, RagiumBlocks.CREATIVE_TANK)) { - add(tank) { block: Block -> copyComponent(block) { include(RagiumDataComponents.FLUID) } } + listOf( + RagiumBlocks.FLUID_OUTPUT_BUS, + RagiumBlocks.TANK, + RagiumBlocks.POTION_TANK, + RagiumBlocks.CREATIVE_TANK + ).forEach { blockItem: HTSimpleDeferredBlockAndItem -> + add(blockItem) { block: Block -> copyComponent(block) { include(RagiumDataComponents.FLUID) } } } } diff --git a/src/data/kotlin/hiiragi283/ragium/data/model/RagiumModelProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/model/RagiumModelProvider.kt index 450da341df..e5a14a8ae6 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/model/RagiumModelProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/model/RagiumModelProvider.kt @@ -3,11 +3,10 @@ package hiiragi283.ragium.data.model import hiiragi283.lib.HTConstants import hiiragi283.lib.data.model.HTModelProvider import hiiragi283.lib.data.model.HTModelTemplates -import hiiragi283.lib.data.model.createBlock import hiiragi283.lib.registry.HTFluidContent import hiiragi283.lib.registry.HTSimpleDeferredBlockAndItem import hiiragi283.lib.registry.HTSimpleDeferredItem -import hiiragi283.lib.resource.HTValueWithId +import hiiragi283.lib.resource.HTSimpleValueWithKey import hiiragi283.lib.resource.blockId import hiiragi283.lib.resource.vanillaId import hiiragi283.ragium.api.RagiumAPI @@ -23,6 +22,7 @@ import net.minecraft.client.data.models.blockstates.PropertyDispatch import net.minecraft.client.data.models.model.ModelTemplates import net.minecraft.client.data.models.model.TextureMapping import net.minecraft.client.data.models.model.TextureSlot +import net.minecraft.client.data.models.model.TexturedModel import net.minecraft.client.resources.model.sprite.Material import net.minecraft.data.PackOutput import net.minecraft.resources.Identifier @@ -44,10 +44,9 @@ class RagiumModelProvider(output: PackOutput) : HTModelProvider(output, RagiumAP add(RagiumFluids.WOOD_TAR) add(RagiumFluids.COAL_TAR) add(RagiumFluids.CRUDE_OIL) + add(RagiumFluids.MOLTEN_PLASTIC) add(RagiumFluids.SYNTHETIC_RESIN) add(RagiumFluids.SULFURIC_ACID) - - add(RagiumFluids.ORE_SLURRY) } for (content: HTFluidContent in RagiumFluids.REGISTER.asSequence()) { // Item @@ -69,20 +68,14 @@ class RagiumModelProvider(output: PackOutput) : HTModelProvider(output, RagiumAP yieldAll(RagiumBlocks.MATERIAL_BLOCKS.values) yield(RagiumBlocks.ECHO_BLOCK) yield(RagiumBlocks.FLUORITE_BLOCK) - yield(RagiumBlocks.CRYOLITE_BLOCK) + // yield(RagiumBlocks.CRYOLITE_BLOCK) yield(RagiumBlocks.CREATIVE_BATTERY) // TODO yield(RagiumBlocks.MACHINE_CASING) }.forEach { generators.createTrivialCube(it.getOrThrow()) } - // Slab - generators.createSlab(RagiumBlocks.FLUORITE_SLAB, RagiumBlocks.FLUORITE_BLOCK) - generators.createSlab(RagiumBlocks.CRYOLITE_SLAB, RagiumBlocks.CRYOLITE_BLOCK) - - // Stairs - generators.createStairs(RagiumBlocks.FLUORITE_STAIRS, RagiumBlocks.FLUORITE_BLOCK) - generators.createStairs(RagiumBlocks.CRYOLITE_STAIRS, RagiumBlocks.CRYOLITE_BLOCK) + RagiumBlocks.ALL_DECORATIONS.forEach { generators.createDecoration(it) } // Machine val inactiveModels: Map = HTMachineType.entries @@ -97,44 +90,45 @@ class RagiumModelProvider(output: PackOutput) : HTModelProvider(output, RagiumAP RagiumBlocks.MACHINES .entries .forEach { (machineType: HTMachineType, blockItems: List) -> - val inactiveModel: Identifier = inactiveModels[machineType]!! for (blockItem: HTSimpleDeferredBlockAndItem in blockItems) { + val (inactive: Identifier, active: Identifier) = when (blockItem) { + RagiumBlocks.FREEZER -> { + RagiumAPI.id(HTConstants.BLOCK, "machine", "cryo") to blockItem.idOrThrow.blockId + } + + else -> inactiveModels[machineType]!! to machineModel(generators, machineType, blockItem) + } generators.blockStateOutput.accept( MultiVariantGenerator.dispatch(blockItem.getOrThrow()) .with( PropertyDispatch.initial(HTMachineBlock.IS_ACTIVE) - .select(false, BlockModelGenerators.plainVariant(inactiveModel)) - .select( - true, - BlockModelGenerators.plainVariant( - machineModel(generators, machineType, blockItem) - ) - ) + .select(false, BlockModelGenerators.plainVariant(inactive)) + .select(true, BlockModelGenerators.plainVariant(active)) ).with(BlockModelGenerators.ROTATION_HORIZONTAL_FACING) ) } } // Decoration + generators.createGlassBlocks( + RagiumBlocks.QUARTZ_GLASS.getOrThrow(), + RagiumBlocks.QUARTZ_GLASS_PANE.getOrThrow() + ) + for ((machineType: HTMachineType, block: HTSimpleDeferredBlockAndItem) in RagiumBlocks.MACHINE_CASINGS) { - generators.createSimple( - block.getOrThrow(), - ModelTemplates.CUBE_TOP.createBlock( - block, - textureMapping(machineType), - generators.modelOutput - ) - ) + generators.createSimple(block, ModelTemplates.CUBE_TOP, textureMapping(machineType)) } + // Bus + generators.createTrivialBlock(RagiumBlocks.FLUID_OUTPUT_BUS.getOrThrow(), TexturedModel.CUBE_TOP_BOTTOM) // Storage - generators.createTrivialBlock(RagiumBlocks.TANK.getOrThrow(), HTModelTemplates.Providers.TANK_TEMPLATE) - generators.createTrivialBlock(RagiumBlocks.VOID_TANK.getOrThrow(), HTModelTemplates.Providers.TANK_TEMPLATE) - generators.createTrivialBlock(RagiumBlocks.CREATIVE_TANK.getOrThrow(), HTModelTemplates.Providers.TANK_TEMPLATE) + for (blockItem: HTSimpleDeferredBlockAndItem in RagiumBlocks.TANKS) { + generators.createTrivialBlock(blockItem.getOrThrow(), HTModelTemplates.Providers.TANK_TEMPLATE) + } } private fun machineModel( generators: BlockModelGenerators, machineType: HTMachineType, - block: HTValueWithId + block: HTSimpleValueWithKey ): Identifier { val blockId: Identifier = block.idOrThrow.blockId return ModelTemplates.CUBE_ORIENTABLE.create( diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumArcaneRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumArcaneRecipeProvider.kt index 7914fa1f23..952ebe860d 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumArcaneRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumArcaneRecipeProvider.kt @@ -1,6 +1,8 @@ package hiiragi283.ragium.data.recipe import hiiragi283.lib.data.recipe.HTRecipeProvider +import hiiragi283.lib.data.recipe.builder.ingredient +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 diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumBioRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumBioRecipeProvider.kt index c1fcee3a4e..86bc4e6c5f 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumBioRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumBioRecipeProvider.kt @@ -28,25 +28,6 @@ class RagiumBioRecipeProvider(packOutput: PackOutput, future: CompletableFuture< } private fun brewing() { - // Poison + Spider Eye -> Fermented Spider Eye - RagiumRecipeBuilders.bathing { - itemIngredient { items { +Items.SPIDER_EYE } } - fluidIngredient { - +HTPotionFluidIngredient(Potions.POISON) - amount = 250 - } - result { +Items.FERMENTED_SPIDER_EYE } - }.save(exporter) - // Poison + Potato -> Poisonous Potato - RagiumRecipeBuilders.bathing { - itemIngredient { +holderSet(Tags.Items.CROPS_POTATO) } - fluidIngredient { - +HTPotionFluidIngredient(Potions.POISON) - amount = 250 - } - result { +Items.POISONOUS_POTATO } - }.save(exporter) - // Haste // Nausea RagiumRecipeBuilders.brewing { diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumChemicalRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumChemicalRecipeProvider.kt index 45ec6b191e..5af9d02f6d 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumChemicalRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumChemicalRecipeProvider.kt @@ -1,68 +1,175 @@ package hiiragi283.ragium.data.recipe import hiiragi283.lib.data.recipe.HTRecipeProvider +import hiiragi283.lib.recipe.ingredient.HTPotionFluidIngredient import hiiragi283.lib.tag.CommonTagPrefixes import hiiragi283.ragium.api.RagiumAPI import hiiragi283.ragium.api.data.recipe.builder.RagiumRecipeBuilders import hiiragi283.ragium.api.material.HTItemPart import hiiragi283.ragium.api.material.RagiumMaterial +import hiiragi283.ragium.api.tag.RagiumTags import hiiragi283.ragium.common.fluid.RagiumFluids import hiiragi283.ragium.common.item.RagiumItems import net.minecraft.core.HolderLookup import net.minecraft.data.PackOutput import net.minecraft.world.item.Items +import net.minecraft.world.item.alchemy.Potions +import net.neoforged.neoforge.common.Tags import java.util.concurrent.CompletableFuture class RagiumChemicalRecipeProvider(packOutput: PackOutput, future: CompletableFuture) : HTRecipeProvider(packOutput, future, RagiumAPI.MOD_ID) { override fun exportValues() { - bathing() - electrolyzing() - } + washing() - private fun bathing() { - // Wood Pulp + NaOH aq -> Paper Pulp + // Wood Pulp + Resin -> Particle Board RagiumRecipeBuilders.bathing { itemIngredient { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Other.WOOD) } fluidIngredient { - +holderSet(RagiumFluids.NAOH_SOLUTION) - amount = 250 + +holderSet(RagiumTags.Fluids.RESINS) + amount /= 8 + } + result { +RagiumItems.PARTICLE_BOARD } + }.save(exporter) + // Piston + Resin -> Sticky Piston + RagiumRecipeBuilders.bathing { + itemIngredient { items { +Items.PISTON } } + fluidIngredient { + +holderSet(RagiumTags.Fluids.RESINS) + amount /= 8 } - result { +RagiumItems.getOrThrow(HTItemPart.DUST, RagiumMaterial.Other.PAPER) } - recipeId suffix "_from_wood" + result { +Items.STICKY_PISTON } }.save(exporter) - // Paper Pulp + Water -> Paper + + // Cement + Water -> Mortar RagiumRecipeBuilders.bathing { - itemIngredient { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Other.PAPER) } + itemIngredient { items { +RagiumItems.CEMENT } } fluidIngredient { +waterSet() - amount = 250 + amount /= 4 } - result { +Items.PAPER } - recipeId suffix "_from_pulp" + result { +RagiumItems.MORTAR } }.save(exporter) - // Molten Glass + Amethyst -> Tinted Glass + // Poison + Spider Eye -> Fermented Spider Eye RagiumRecipeBuilders.bathing { - itemIngredient { +dustOrGem(RagiumMaterial.Gem.AMETHYST) } - fluidIngredient { +holderSet(RagiumFluids.MOLTEN_GLASS) } - result { - +Items.TINTED_GLASS - count = 2 + itemIngredient { items { +Items.SPIDER_EYE } } + fluidIngredient { + +HTPotionFluidIngredient(Potions.POISON) + amount = 250 } + result { +Items.FERMENTED_SPIDER_EYE } + }.save(exporter) + // Poison + Potato -> Poisonous Potato + RagiumRecipeBuilders.bathing { + itemIngredient { +holderSet(Tags.Items.CROPS_POTATO) } + fluidIngredient { + +HTPotionFluidIngredient(Potions.POISON) + amount = 250 + } + result { +Items.POISONOUS_POTATO } }.save(exporter) } - private fun electrolyzing() { - // 2x H2O -> 2x H2 + O2 - RagiumRecipeBuilders.electrolyzing { + private fun washing() { + // Gravel + Water -> Flint + RagiumRecipeBuilders.washing { + itemIngredient { +holderSet(Tags.Items.GRAVELS) } + fluidIngredient { +waterSet() } + result { +Items.FLINT } + }.save(exporter) + // Sand + Water -> SiO2 + Borax + RagiumRecipeBuilders.washing { + itemIngredient { + +holderSet(Tags.Items.SANDS_COLORLESS) + count = 4 + } + fluidIngredient { +waterSet() } + result { + +RagiumItems.getOrThrow(HTItemPart.DUST, RagiumMaterial.Gem.QUARTZ) + count = 3 + } + result { +RagiumItems.getOrThrow(HTItemPart.DUST, RagiumMaterial.Mineral.BORAX) } + recipeId suffix "_from_sands" + }.save(exporter) + // Red Sand + Water -> SiO2 + Bauxite + RagiumRecipeBuilders.washing { + itemIngredient { + +holderSet(Tags.Items.SANDS_RED) + count = 4 + } + fluidIngredient { +waterSet() } + result { + +RagiumItems.getOrThrow(HTItemPart.DUST, RagiumMaterial.Gem.QUARTZ) + count = 3 + } + result { +RagiumItems.getOrThrow(HTItemPart.DUST, RagiumMaterial.Mineral.BAUXITE) } + recipeId suffix "_from_red_sands" + }.save(exporter) + // Clay + Water -> Al2O3 + SiO2 + RagiumRecipeBuilders.washing { + itemIngredient { items { +Items.CLAY } } fluidIngredient { +waterSet() } - result { +RagiumFluids.HYDROGEN } result { - +RagiumFluids.OXYGEN - amount /= 2 + +RagiumItems.getOrThrow(HTItemPart.DUST, RagiumMaterial.Chemicals.ALUMINA) + count = 2 + } + result { + +RagiumItems.getOrThrow(HTItemPart.DUST, RagiumMaterial.Gem.QUARTZ) + count = 2 + } + recipeId suffix "_from_clay" + }.save(exporter) + + // Ancient Debris -> Netherite Scrap + RagiumRecipeBuilders.washing { + itemIngredient { items { +Items.ANCIENT_DEBRIS } } + fluidIngredient { + +holderSet(RagiumFluids.HYDROFLUORIC_ACID) + amount /= 4 + } + result { + +Items.NETHERITE_SCRAP + count = 3 + } + recipeId suffix "_from_debris" + }.save(exporter) + // Raw XX -> XX Dust + RagiumRecipeBuilders.washing { + itemIngredient { +holderSet(CommonTagPrefixes.RAW_MATERIALS, RagiumMaterial.Metal.COPPER) } + fluidIngredient { + +holderSet(RagiumFluids.SULFURIC_ACID) + amount /= 4 + } + result { + +RagiumItems.getOrThrow(HTItemPart.DUST, RagiumMaterial.Metal.COPPER) + count = 2 + } + recipeId suffix "_from_raw" + }.save(exporter) + RagiumRecipeBuilders.washing { + itemIngredient { +holderSet(CommonTagPrefixes.RAW_MATERIALS, RagiumMaterial.Metal.IRON) } + fluidIngredient { + +holderSet(RagiumFluids.SULFURIC_ACID) + amount /= 4 + } + result { + +RagiumItems.getOrThrow(HTItemPart.DUST, RagiumMaterial.Metal.IRON) + count = 2 + } + recipeId suffix "_from_raw" + }.save(exporter) + RagiumRecipeBuilders.washing { + itemIngredient { +holderSet(CommonTagPrefixes.RAW_MATERIALS, RagiumMaterial.Metal.GOLD) } + fluidIngredient { + +holderSet(RagiumFluids.NITRIC_ACID) + amount /= 4 + } + result { + +RagiumItems.getOrThrow(HTItemPart.DUST, RagiumMaterial.Metal.GOLD) + count = 2 } - recipeId suffix "_from_water" + recipeId suffix "_from_raw" }.save(exporter) } diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt index 2eb087236d..fa234aa167 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt @@ -3,6 +3,9 @@ package hiiragi283.ragium.data.recipe 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.HTMaterialTagsIngredient import hiiragi283.lib.registry.HTFluidContent import hiiragi283.lib.tag.CommonTagPrefixes @@ -24,7 +27,6 @@ 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.minecraft.world.level.material.Fluids import net.neoforged.neoforge.common.Tags import net.neoforged.neoforge.common.crafting.DifferenceIngredient import java.util.concurrent.CompletableFuture @@ -72,7 +74,15 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu time /= 2 }.save(exporter) - // Wood Tar -> Alcohol + Aromatic Compound TODO + // Wood Tar -> Alcohol + Aromatic Compound + RagiumRecipeBuilders.refining { + ingredient { +holderSet(RagiumFluids.WOOD_TAR) } + fluidResult { + +RagiumFluids.ALCOHOL + amount = 500 + } + recipeId replace RagiumFluids.WOOD_TAR.idOrThrow + }.save(exporter) } private fun coal() { @@ -88,7 +98,7 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu }.save(exporter) RagiumRecipeBuilders.pyrolyzing { ingredient { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Fuel.COAL) } - itemResult { +RagiumItems.getOrThrow(HTItemPart.DUST, RagiumMaterial.Other.CARBON) } + itemResult { +RagiumItems.getOrThrow(HTItemPart.DUST, RagiumMaterial.Chemicals.CARBON) } fluidResult { +RagiumFluids.COAL_TAR amount = 500 @@ -113,11 +123,13 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu +RagiumFluids.AROMATIC_COMPOUND amount = 250 } - recipeId suffix "_from_coal_tar" + recipeId replace RagiumFluids.COAL_TAR.idOrThrow }.save(exporter) } private fun oilRefining() { + plastic() + // Soul Sand -> Sand + Crude Oil RagiumRecipeBuilders.pyrolyzing { ingredient { items { +Items.SOUL_SAND } } @@ -146,6 +158,7 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu amount = 750 } itemResult { +RagiumItems.TAR } + recipeId replace RagiumFluids.CRUDE_OIL.idOrThrow }.save(exporter) // Naphtha -> Fuel + Sulfur @@ -156,29 +169,7 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu +RagiumFluids.FUEL amount = 500 } - recipeId suffix "_from_naphtha" - }.save(exporter) - // Naphtha -> Plastic - RagiumRecipeBuilders.freezing { - ingredient { - +holderSet(RagiumFluids.NAPHTHA) - amount /= 2 - } - result { +RagiumItems.PLASTIC_PLATE } - }.save(exporter) - RagiumRecipeBuilders.reacting { - primaryIngredient { - +holderSet(RagiumFluids.NAPHTHA) - amount /= 2 - } - secondaryIngredient { - +holderSet(RagiumFluids.OXYGEN) - amount /= 4 - } - itemResult { - +RagiumItems.PLASTIC_PLATE - count = 2 - } + recipeId replace RagiumFluids.NAPHTHA.idOrThrow }.save(exporter) // Naphtha + Redstone -> Anti-rust Oil RagiumRecipeBuilders.mixing { @@ -204,22 +195,70 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu } recipeId suffix "_from_tar" }.save(exporter) + } - // Aromatic Compound + Water -> Synthetic Resin + private fun plastic() { + // Naphtha + O2 -> Molten Plastic + RagiumRecipeBuilders.reacting { + primaryIngredient { + +holderSet(RagiumFluids.NAPHTHA) + amount /= 2 + } + secondaryIngredient { + +holderSet(RagiumFluids.OXYGEN) + amount /= 4 + } + fluidResult { + +RagiumFluids.MOLTEN_PLASTIC + amount = 180 + } + }.save(exporter) + // Molten Plastic -> Plastic + RagiumRecipeBuilders.freezing { + ingredient { + +holderSet(RagiumFluids.MOLTEN_PLASTIC) + amount = 90 + } + result { +RagiumItems.PLASTIC_PLATE } + }.save(exporter) + + // Plastic -> Synthetic XX + listOf( + RagiumItems.SYNTHETIC_FEATHER, + RagiumItems.SYNTHETIC_FIBER, + RagiumItems.SYNTHETIC_LEATHER + ).forEach { + VanillaRecipeBuilders.stonecutting { + ingredient { +holderSet(HTCommonTags.Items.PLASTICS) } + result { +it } + }.save(exporter) + } + + // Alcohol -> Aldehyde + RagiumRecipeBuilders.refining { + ingredient { +holderSet(RagiumTags.Fluids.ALCOHOLS) } + fluidResult { +RagiumFluids.ALDEHYDE } + }.save(exporter) + // Aromatic Compound + Aldehyde -> Synthetic Resin RagiumRecipeBuilders.reacting { primaryIngredient { +holderSet(RagiumFluids.AROMATIC_COMPOUND) } - secondaryIngredient { +waterSet() } - fluidResult { +RagiumFluids.SYNTHETIC_RESIN } + secondaryIngredient { +holderSet(RagiumTags.Fluids.ALDEHYDES) } + fluidResult { + +RagiumFluids.SYNTHETIC_RESIN + amount *= 2 + } }.save(exporter) - // Aluminum + ??? -> Black Steel + + // Synthetic Fiber + Nitrogen -> Carbon Fiber + // Carbon Fiber + Resin -> CFRP Plate RagiumRecipeBuilders.bathing { - itemIngredient { +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.ALUMINUM) } - /*fluidIngredient { - +holderSet(RagiumFluids.COLORED_RESINS.black) + itemIngredient { items { +RagiumItems.CARBON_FIBER } } + fluidIngredient { + +holderSet(RagiumTags.Fluids.RESINS) amount /= 4 - }*/ - result { +RagiumItems.getOrThrow(HTItemPart.INGOT, RagiumMaterial.Metal.BLACK_STEEL) } - } + } + result { +RagiumItems.CFRP_PLATE } + }.save(exporter) } // Chemical // @@ -227,13 +266,17 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu private fun chemical() { colored() - chlorine() - sulfuricAcid() - nitricAcid() + nitrogen() explosive() - fluorine() - aluminum() + + sodium() + // aluminum() + silica() + sulfur() + chlorine() + + calcium() } private fun colored() { @@ -284,7 +327,7 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu }.save(exporter) // Carbon + Resin -> Black Dye RagiumRecipeBuilders.bathing { - itemIngredient { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Other.CARBON) } + itemIngredient { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Chemicals.CARBON) } fluidIngredient { +holderSet(RagiumTags.Fluids.RESINS) amount /= 4 @@ -294,116 +337,7 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu }.save(exporter) } - private fun chlorine() { - // Dried Kelp + Water -> Salt - RagiumRecipeBuilders.bathing { - itemIngredient { +holderSet(Tags.Items.STORAGE_BLOCKS_DRIED_KELP) } - fluidIngredient { +waterSet() } - result { - +RagiumItems.getOrThrow(HTItemPart.DUST, RagiumMaterial.Mineral.SALT) - count = 6 - } - recipeId suffix "_from_block" - }.save(exporter) - // 2x NaCl + H2SO4 -> 2x HCl + Na2SO4 - RagiumRecipeBuilders.mixing { - itemIngredient { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Mineral.SALT) } - fluidIngredient { - +holderSet(RagiumFluids.SULFURIC_ACID) - amount /= 2 - } - result { +RagiumFluids.HYDROGEN_CHLORIDE } - }.save(exporter) - - // 2x NaCl(aq) -> H2 + Cl2 + 2x NaOH(aq) - RagiumRecipeBuilders.electrolyzing { - itemIngredient { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Mineral.SALT) } - fluidIngredient { +waterSet() } - result { - +RagiumFluids.HYDROGEN - amount /= 2 - } - result { - +RagiumFluids.CHLORINE - amount /= 2 - } - result { +RagiumFluids.NAOH_SOLUTION } - recipeId suffix "_from_salt_water" - }.save(exporter) - - // H2 + Cl2 -> 2x HCl - RagiumRecipeBuilders.reacting { - primaryIngredient { +holderSet(RagiumFluids.HYDROGEN) } - secondaryIngredient { +holderSet(RagiumFluids.CHLORINE) } - fluidResult { - +RagiumFluids.HYDROGEN_CHLORIDE - amount *= 2 - } - }.save(exporter) - // HCl + H2O -> HCl(aq) - RagiumRecipeBuilders.reacting { - primaryIngredient { +holderSet(RagiumFluids.HYDROGEN_CHLORIDE) } - secondaryIngredient { +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 sulfuricAcid() { - // S + O2 -> SO2 - RagiumRecipeBuilders.mixing { - itemIngredient { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Mineral.SULFUR) } - fluidIngredient { +holderSet(RagiumFluids.OXYGEN) } - result { +RagiumFluids.SULFUR_DIOXIDE } - }.save(exporter) - // SO2 + 1/2 O2 -> SO3 - RagiumRecipeBuilders.reacting { - primaryIngredient { +holderSet(RagiumFluids.SULFUR_DIOXIDE) } - secondaryIngredient { - +holderSet(RagiumFluids.OXYGEN) - amount /= 2 - } - fluidResult { +RagiumFluids.SULFUR_TRIOXIDE } - }.save(exporter) - // Blaze Powder + O2 -> SO3 - RagiumRecipeBuilders.mixing { - itemIngredient { items { +Items.BLAZE_POWDER } } - fluidIngredient { +holderSet(RagiumFluids.OXYGEN) } - result { +RagiumFluids.SULFUR_TRIOXIDE } - }.save(exporter) - // SO3 + H2O -> H2SO4 - RagiumRecipeBuilders.reacting { - primaryIngredient { +holderSet(RagiumFluids.SULFUR_TRIOXIDE) } - secondaryIngredient { +waterSet() } - fluidResult { +RagiumFluids.SULFURIC_ACID } - }.save(exporter) - } - - private fun nitricAcid() { + private fun nitrogen() { // 1/2 H2SO4 + KNO3 -> HNO3 RagiumRecipeBuilders.mixing { itemIngredient { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Mineral.NITER) } @@ -457,8 +391,60 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu }.save(exporter) } - private fun aluminum() { - // Bauxite + NaOH aq -> Alumina Solution + private fun sodium() { + // Dried Kelp -> Na2CO3 + VanillaRecipeBuilders.smeltingAndBlasting(exporter) { + ingredient { items { +Items.DRIED_KELP } } + result { +RagiumItems.getOrThrow(HTItemPart.DUST, RagiumMaterial.Chemicals.SODA_ASH) } + exp = 0.15f + } + // 2x NaOH (aq) + CO2 -> Na2CO3 + H2O + RagiumRecipeBuilders.refining { + ingredient { +holderSet(RagiumFluids.NAOH_SOLUTION) } + fluidResult { + water() + amount *= 2 + } + itemResult { +RagiumItems.getOrThrow(HTItemPart.DUST, RagiumMaterial.Chemicals.SODA_ASH) } + recipeId replace RagiumFluids.NAOH_SOLUTION.idOrThrow + }.save(exporter) + // SiO2 + Na2CO3 -> Glass + RagiumRecipeBuilders.alloying { + ingredient { + +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Gem.QUARTZ) + count = 2 + } + extra { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Chemicals.SODA_ASH) } + result { + +Items.GLASS + count = 6 + } + }.save(exporter) + + // Wood Pulp + NaOH aq -> Paper Pulp + RagiumRecipeBuilders.bathing { + itemIngredient { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Other.WOOD) } + fluidIngredient { + +holderSet(RagiumFluids.NAOH_SOLUTION) + amount = 250 + } + result { +RagiumItems.getOrThrow(HTItemPart.DUST, RagiumMaterial.Other.PAPER) } + recipeId suffix "_from_wood" + }.save(exporter) + // Paper Pulp + Water -> Paper + RagiumRecipeBuilders.bathing { + itemIngredient { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Other.PAPER) } + fluidIngredient { + +waterSet() + amount = 250 + } + result { +Items.PAPER } + recipeId suffix "_from_pulp" + }.save(exporter) + } + + /*private fun aluminum() { + // Bauxite + NaOH aq -> Al(OH)3 (aq) RagiumRecipeBuilders.mixing { itemIngredient { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Mineral.BAUXITE) } fluidIngredient { @@ -467,25 +453,38 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu } result { +RagiumFluids.ALUMINA_SOLUTION } }.save(exporter) - // Alumina Solution -> Al2O3 + Water + // Al(OH)3 (aq) -> Al2O3 + Water RagiumRecipeBuilders.refining { ingredient { +holderSet(RagiumFluids.ALUMINA_SOLUTION) } - itemResult { +RagiumItems.getOrThrow(HTItemPart.DUST, RagiumMaterial.Other.ALUMINA) } - fluidResult { +Fluids.WATER } - recipeId replace id("alumina_dust_from_solution") + itemResult { +RagiumItems.getOrThrow(HTItemPart.DUST, RagiumMaterial.Chemicals.ALUMINA) } + fluidResult { water() } + recipeId replace RagiumFluids.ALUMINA_SOLUTION.idOrThrow }.save(exporter) - // Alumina Solution + HF aq -> Na3AlF6 + // Al(OH)3 (aq) + HF (aq) -> AlF3 (aq) RagiumRecipeBuilders.reacting { primaryIngredient { +holderSet(RagiumFluids.ALUMINA_SOLUTION) } secondaryIngredient { +holderSet(RagiumFluids.HYDROFLUORIC_ACID) - amount *= 6 + amount *= 3 } - itemResult { +RagiumItems.getOrThrow(HTItemPart.GEM, RagiumMaterial.Gem.CRYOLITE) } + itemResult { +RagiumItems.getOrThrow(HTItemPart.DUST, RagiumMaterial.Chemicals.ALUMINUM_FLUORIDE) } + fluidResult { water() } + }.save(exporter) + // 2x AlF3 + 3x Na2CO3 -> Na3AlF6 + 3x CO2 + RagiumRecipeBuilders.alloying { + ingredient { + +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Chemicals.ALUMINUM_FLUORIDE) + count = 2 + } + extra { + +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Chemicals.SODIUM_CARBONATE) + count = 3 + } + result { +RagiumItems.getOrThrow(HTItemPart.DUST, RagiumMaterial.Gem.CRYOLITE) } }.save(exporter) // Al2O3 + Cokes + Na3AlF6 -> Al RagiumRecipeBuilders.alloying { - ingredient { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Other.ALUMINA) } + ingredient { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Chemicals.ALUMINA) } extra { +holderSet(RagiumTags.Items.COKES) } result { +RagiumItems.getOrThrow(HTItemPart.INGOT, RagiumMaterial.Metal.ALUMINUM) @@ -494,7 +493,7 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu time *= 4 }.save(exporter) RagiumRecipeBuilders.alloying { - ingredient { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Other.ALUMINA) } + ingredient { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Chemicals.ALUMINA) } extra { +holderSet(RagiumTags.Items.COKES) } extra { +dustOrGem(RagiumMaterial.Gem.CRYOLITE) } result { @@ -503,6 +502,207 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu } recipeId suffix "_with_cryolite" }.save(exporter) + // Al + Cu -> Alclad Plate + RagiumRecipeBuilders.assembling { + ingredient { + +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.ALUMINUM) + count = 3 + } + extra { +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.COPPER) } + result { + +RagiumItems.ALCLAD_PLATE + count = 4 + } + }.save(exporter) + }*/ + + private fun silica() { + // Glass -> Molten Glass + RagiumRecipeBuilders.melting { + ingredient { + +holderSet(Tags.Items.GLASS_BLOCKS_CHEAP, CommonTagPrefixes.DUST.itemTagKey(RagiumMaterial.Other.GLASS)) + } + result { +RagiumFluids.MOLTEN_GLASS } + recipeId suffix "_from_block" + }.save(exporter) + RagiumRecipeBuilders.melting { + ingredient { +holderSet(Tags.Items.GLASS_PANES) } + result { + +RagiumFluids.MOLTEN_GLASS + amount = 375 + } + recipeId suffix "_from_pane" + }.save(exporter) + RagiumRecipeBuilders.melting { + ingredient { + +holderSet(Tags.Items.GLASS_PANES) + count = 8 + } + result { + +RagiumFluids.MOLTEN_GLASS + amount *= 3 + } + time *= 8 + recipeId suffix "_from_panes" + }.save(exporter) + // Molten Glass -> Glass + RagiumRecipeBuilders.freezing { + ingredient { +holderSet(RagiumFluids.MOLTEN_GLASS) } + result { +Items.GLASS } + }.save(exporter) + // SiO2 + Sand -> Quartz Glass + RagiumRecipeBuilders.alloying { + ingredient { +dustOrGem(RagiumMaterial.Gem.QUARTZ) } + extra { +holderSet(Tags.Items.SANDS) } + result { +RagiumBlocks.QUARTZ_GLASS } + recipeId suffix "_from_quartz" + }.save(exporter) + RagiumRecipeBuilders.alloying { + ingredient { + +dustOrGem(RagiumMaterial.Gem.AMETHYST) + count = 4 + } + extra { +holderSet(Tags.Items.SANDS) } + result { +RagiumBlocks.QUARTZ_GLASS } + recipeId suffix "_from_amethyst" + }.save(exporter) + RagiumRecipeBuilders.alloying { + ingredient { items { +Items.AMETHYST_BLOCK } } + extra { +holderSet(Tags.Items.SANDS) } + result { +RagiumBlocks.QUARTZ_GLASS } + recipeId suffix "_from_amethyst_block" + }.save(exporter) + } + + private fun sulfur() { + // S -> SO2 + RagiumRecipeBuilders.pyrolyzing { + ingredient { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Mineral.SULFUR) } + fluidResult { +RagiumFluids.SULFUR_DIOXIDE } + }.save(exporter) + // SO2 + 1/2 O2 -> SO3 + RagiumRecipeBuilders.reacting { + primaryIngredient { +holderSet(RagiumFluids.SULFUR_DIOXIDE) } + secondaryIngredient { + +holderSet(RagiumFluids.OXYGEN) + amount /= 2 + } + fluidResult { +RagiumFluids.SULFUR_TRIOXIDE } + }.save(exporter) + // Blaze Powder -> SO3 + RagiumRecipeBuilders.pyrolyzing { + ingredient { items { +Items.BLAZE_POWDER } } + fluidResult { +RagiumFluids.SULFUR_TRIOXIDE } + }.save(exporter) + // SO3 + H2O -> H2SO4 + RagiumRecipeBuilders.reacting { + primaryIngredient { +holderSet(RagiumFluids.SULFUR_TRIOXIDE) } + secondaryIngredient { +waterSet() } + fluidResult { +RagiumFluids.SULFURIC_ACID } + }.save(exporter) + } + + private fun chlorine() { + // NaCl(aq) -> H2O + NaCl + RagiumRecipeBuilders.refining { + ingredient { +holderSet(RagiumFluids.SALT_WATER) } + fluidResult { water() } + itemResult { +RagiumItems.getOrThrow(HTItemPart.DUST, RagiumMaterial.Mineral.SALT) } + recipeId replace RagiumFluids.SALT_WATER.idOrThrow + }.save(exporter) + + // 2x NaCl + H2SO4 -> 2x HCl + Na2SO4 + RagiumRecipeBuilders.mixing { + itemIngredient { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Mineral.SALT) } + fluidIngredient { + +holderSet(RagiumFluids.SULFURIC_ACID) + amount /= 2 + } + result { +RagiumFluids.HYDROGEN_CHLORIDE } + }.save(exporter) + + // 2x NaCl(aq) -> H2 + Cl2 + 2x NaOH(aq) + RagiumRecipeBuilders.electrolyzing { + ingredient { +holderSet(RagiumFluids.SALT_WATER) } + result { + +RagiumFluids.HYDROGEN + amount /= 2 + } + result { + +RagiumFluids.CHLORINE + amount /= 2 + } + result { +RagiumFluids.NAOH_SOLUTION } + recipeId suffix "_from_salt_water" + }.save(exporter) + + // H2 + Cl2 -> 2x HCl + RagiumRecipeBuilders.reacting { + primaryIngredient { +holderSet(RagiumFluids.HYDROGEN) } + secondaryIngredient { +holderSet(RagiumFluids.CHLORINE) } + fluidResult { + +RagiumFluids.HYDROGEN_CHLORIDE + amount *= 2 + } + }.save(exporter) + // HCl + H2O -> HCl(aq) + RagiumRecipeBuilders.reacting { + primaryIngredient { +holderSet(RagiumFluids.HYDROGEN_CHLORIDE) } + secondaryIngredient { +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() { + // Calcite / Dripstone -> CaCO3 + RagiumRecipeBuilders.crushing { + ingredient { + items { + +Items.CALCITE + +Items.DRIPSTONE_BLOCK + } + } + result { +RagiumItems.getOrThrow(HTItemPart.DUST, RagiumMaterial.Chemicals.LIME) } + }.save(exporter) + // CaCO3 -> CaO + CO2 + VanillaRecipeBuilders.smeltingAndBlasting(exporter) { + ingredient { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Chemicals.LIME) } + result { +RagiumItems.getOrThrow(HTItemPart.DUST, RagiumMaterial.Chemicals.QUICK_LIME) } + exp = 0.15f + } + + // CaSO4 -> CaO + SO3 + RagiumRecipeBuilders.pyrolyzing { + ingredient { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Mineral.GYPSUM) } + itemResult { +RagiumItems.getOrThrow(HTItemPart.DUST, RagiumMaterial.Chemicals.QUICK_LIME) } + fluidResult { +RagiumFluids.SULFUR_TRIOXIDE } + time *= 4 + }.save(exporter) } // Electronics // @@ -527,7 +727,7 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu recipeId suffix "_from_quartz" }.save(exporter) RagiumRecipeBuilders.alloying { - ingredient { +holderSet(RagiumTags.BlockItem.QUARTZ_BLOCKS.item) } + ingredient { +holderSet(RagiumTags.BlockItems.QUARTZ_BLOCKS.item) } extra { +dustOrCoke count = 4 @@ -563,12 +763,12 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu +holderSet(RagiumFluids.HYDROCHLORIC_ACID) amount = 125 } - result { +RagiumItems.getOrThrow(HTItemPart.DUST, RagiumMaterial.Other.SILICON) } + result { +RagiumItems.getOrThrow(HTItemPart.DUST, RagiumMaterial.Chemicals.SILICON) } }.save(exporter) // Si Dust + Redstone -> Silicon Wafer RagiumRecipeBuilders.alloying { ingredient { - +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Other.SILICON) + +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Chemicals.SILICON) count = 8 } extra { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Mineral.RAGINITE) } @@ -578,7 +778,7 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu RagiumRecipeBuilders.cutting { ingredient { items { +RagiumItems.SILICON_WAFER } } result { - +RagiumItems.CIRCUIT_CHIP + +RagiumItems.SILICON_CHIP count = 8 } }.save(exporter) @@ -589,20 +789,34 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu extra { +dustOrIngot(RagiumMaterial.Metal.GOLD) } result { +RagiumItems.CIRCUIT_BOARD } }.save(exporter) - // Circuit Chip + Circuit Board -> Electric Circuit + // Silicon Chip + Circuit Board -> Electric Circuit RagiumRecipeBuilders.assembling { ingredient { - items { +RagiumItems.CIRCUIT_CHIP } + items { +RagiumItems.SILICON_CHIP } count = 2 } extra { items { +RagiumItems.CIRCUIT_BOARD } } result { +RagiumItems.ELECTRIC_CIRCUIT } + recipeId suffix "_with_board" + }.save(exporter) + // Plastic + Silicon Chip + Gold Nugget -> Electric Circuit + RagiumRecipeBuilders.assembling { + ingredient { +holderSet(HTCommonTags.Items.PLASTICS) } + extra { + items { +RagiumItems.SILICON_CHIP } + count = 2 + } + extra { + +holderSet(CommonTagPrefixes.NUGGET, RagiumMaterial.Metal.GOLD) + count = 3 + } + result { +RagiumItems.ELECTRIC_CIRCUIT } }.save(exporter) // Machine Parts RagiumRecipeBuilders.assembling { ingredient { - +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.BLACK_STEEL) - count = 4 + +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Alloy.BLACK_STEEL) + count = 2 } extra { items { +RagiumItems.ELECTRIC_CIRCUIT } } result { +RagiumItems.getParts(HTMachineType.ELECTRONICS) } @@ -610,10 +824,16 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu }.save(exporter) RagiumRecipeBuilders.assembling { ingredient { - +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.VOID_METAL) + items { +RagiumItems.CFRP_PLATE } + } + extra { + items { +RagiumItems.SILICON_CHIP } count = 2 } - extra { items { +RagiumItems.ELECTRIC_CIRCUIT } } + extra { + +holderSet(CommonTagPrefixes.NUGGET, RagiumMaterial.Metal.GOLD) + count = 3 + } result { +RagiumItems.getParts(HTMachineType.ELECTRONICS) } }.save(exporter) } diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumElectronicsRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumElectronicsRecipeProvider.kt index 8e51cca590..eb902c8232 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumElectronicsRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumElectronicsRecipeProvider.kt @@ -7,22 +7,35 @@ import hiiragi283.ragium.common.fluid.RagiumFluids import net.minecraft.core.HolderLookup import net.minecraft.data.PackOutput import net.minecraft.world.level.biome.Biomes -import net.minecraft.world.level.material.Fluids import net.neoforged.neoforge.common.Tags import java.util.concurrent.CompletableFuture class RagiumElectronicsRecipeProvider(packOutput: PackOutput, future: CompletableFuture) : HTRecipeProvider(packOutput, future, RagiumAPI.MOD_ID) { override fun exportValues() { + electrolyzing() resourceExtracting() } + private fun electrolyzing() { + // 2x H2O -> 2x H2 + O2 + RagiumRecipeBuilders.electrolyzing { + ingredient { +waterSet() } + result { +RagiumFluids.HYDROGEN } + result { + +RagiumFluids.OXYGEN + amount /= 2 + } + recipeId suffix "_from_water" + }.save(exporter) + } + private fun resourceExtracting() { // XX -> Water RagiumRecipeBuilders.resourceExtracting { biomes { +holderSet(Tags.Biomes.IS_OCEAN) } result { - +Fluids.WATER + +RagiumFluids.SALT_WATER amount *= 4 } recipeId suffix "_at_ocean" @@ -30,14 +43,14 @@ class RagiumElectronicsRecipeProvider(packOutput: PackOutput, future: Completabl RagiumRecipeBuilders.resourceExtracting { biomes { +holderSet(Tags.Biomes.IS_RIVER) } result { - +Fluids.WATER + water() amount *= 2 } recipeId suffix "_at_river" }.save(exporter) RagiumRecipeBuilders.resourceExtracting { biomes { +holderSet(Tags.Biomes.IS_WET) } - result { +Fluids.WATER } + result { water() } recipeId suffix "_at_wet_biomes" }.save(exporter) @@ -45,7 +58,7 @@ class RagiumElectronicsRecipeProvider(packOutput: PackOutput, future: Completabl RagiumRecipeBuilders.resourceExtracting { biomes { +holderSet(Tags.Biomes.IS_NETHER) } result { - +Fluids.LAVA + lava() amount /= 4 } recipeId suffix "_at_nether" diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumHeatRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumHeatRecipeProvider.kt index 6610f3b0de..4fc9b8d556 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumHeatRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumHeatRecipeProvider.kt @@ -2,6 +2,8 @@ package hiiragi283.ragium.data.recipe import hiiragi283.lib.collection.nelOf import hiiragi283.lib.data.recipe.HTRecipeProvider +import hiiragi283.lib.data.recipe.builder.ingredient +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 @@ -64,7 +66,7 @@ class RagiumHeatRecipeProvider(packOutput: PackOutput, future: CompletableFuture // Machine Casing RagiumRecipeBuilders.alloying { ingredient { - +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.BLACK_STEEL) + +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Alloy.BLACK_STEEL) count = 2 } extra { +dustOrIngot(RagiumMaterial.Metal.GOLD) } @@ -82,7 +84,7 @@ class RagiumHeatRecipeProvider(packOutput: PackOutput, future: CompletableFuture ) ) } - result { +RagiumItems.getOrThrow(HTItemPart.INGOT, RagiumMaterial.Metal.SOOTY_IRON) } + result { +RagiumItems.getOrThrow(HTItemPart.INGOT, RagiumMaterial.Alloy.SOOTY_IRON) } recipeId suffix "_by_coals" }.save(exporter) // 2x Iron + Cokes -> 2x Sooty Iron @@ -93,33 +95,19 @@ class RagiumHeatRecipeProvider(packOutput: PackOutput, future: CompletableFuture } extra { +holderSet(RagiumTags.Items.COKES) } result { - +RagiumItems.getOrThrow(HTItemPart.INGOT, RagiumMaterial.Metal.SOOTY_IRON) + +RagiumItems.getOrThrow(HTItemPart.INGOT, RagiumMaterial.Alloy.SOOTY_IRON) count = 2 } recipeId suffix "_by_cokes" }.save(exporter) // Sooty Iron + Obsidian Dust -> Black Steel RagiumRecipeBuilders.alloying { - ingredient { +dustOrIngot(RagiumMaterial.Metal.SOOTY_IRON) } + ingredient { +dustOrIngot(RagiumMaterial.Alloy.SOOTY_IRON) } extra { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Other.OBSIDIAN) count = 2 } - result { +RagiumItems.getOrThrow(HTItemPart.INGOT, RagiumMaterial.Metal.BLACK_STEEL) } - }.save(exporter) - // Aluminum + Copper + Obsidian Dust -> Black Steel - RagiumRecipeBuilders.alloying { - ingredient { - +dustOrIngot(RagiumMaterial.Metal.ALUMINUM) - count = 3 - } - extra { +dustOrIngot(RagiumMaterial.Metal.COPPER) } - extra { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Other.OBSIDIAN) } - result { - +RagiumItems.getOrThrow(HTItemPart.INGOT, RagiumMaterial.Metal.BLACK_STEEL) - count = 4 - } - recipeId replace id("obzinite_ingot") + result { +RagiumItems.getOrThrow(HTItemPart.INGOT, RagiumMaterial.Alloy.BLACK_STEEL) } }.save(exporter) } @@ -139,10 +127,14 @@ class RagiumHeatRecipeProvider(packOutput: PackOutput, future: CompletableFuture ingredient { +holderSet(RagiumFluids.HONEY) } result { +Items.HONEY_BLOCK } }.save(exporter) - // Glass + + // Sticky Ball RagiumRecipeBuilders.freezing { - ingredient { +holderSet(RagiumFluids.MOLTEN_GLASS) } - result { +Items.GLASS } + ingredient { + +holderSet(RagiumTags.Fluids.RESINS) + amount /= 4 + } + result { +RagiumItems.STICKY_BALL } }.save(exporter) } @@ -246,34 +238,6 @@ class RagiumHeatRecipeProvider(packOutput: PackOutput, future: CompletableFuture recipeId prefix "${amplifier}x_" }.save(exporter) } - // Molten Glass - RagiumRecipeBuilders.melting { - ingredient { - +holderSet(Tags.Items.GLASS_BLOCKS_CHEAP, CommonTagPrefixes.DUST.itemTagKey(RagiumMaterial.Other.GLASS)) - } - result { +RagiumFluids.MOLTEN_GLASS } - recipeId suffix "_from_block" - }.save(exporter) - RagiumRecipeBuilders.melting { - ingredient { +holderSet(Tags.Items.GLASS_PANES) } - result { - +RagiumFluids.MOLTEN_GLASS - amount = 375 - } - recipeId suffix "_from_pane" - }.save(exporter) - RagiumRecipeBuilders.melting { - ingredient { - +holderSet(Tags.Items.GLASS_PANES) - count = 8 - } - result { - +RagiumFluids.MOLTEN_GLASS - amount *= 3 - } - time *= 8 - recipeId suffix "_from_panes" - }.save(exporter) // Molten Redstone RagiumRecipeBuilders.melting { ingredient { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Mineral.REDSTONE) } diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumMechanicalRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumMechanicalRecipeProvider.kt index bbdd793e73..5dec41afc1 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumMechanicalRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumMechanicalRecipeProvider.kt @@ -3,12 +3,13 @@ package hiiragi283.ragium.data.recipe import hiiragi283.lib.color.HTColoredCollection import hiiragi283.lib.color.VanillaColoredCollections import hiiragi283.lib.data.recipe.HTRecipeProvider +import hiiragi283.lib.data.recipe.builder.ingredient +import hiiragi283.lib.data.recipe.builder.result import hiiragi283.lib.data.recipe.ingredient.HTItemIngredientBuilder import hiiragi283.lib.registry.HTSimpleDeferredItem import hiiragi283.lib.resource.debugPath import hiiragi283.lib.resource.vanillaId import hiiragi283.lib.tag.CommonTagPrefixes -import hiiragi283.lib.tag.HTCommonTags import hiiragi283.ragium.api.RagiumAPI import hiiragi283.ragium.api.data.recipe.builder.RagiumRecipeBuilders import hiiragi283.ragium.api.material.HTItemPart @@ -29,7 +30,6 @@ import net.minecraft.world.item.Item import net.minecraft.world.item.Items import net.minecraft.world.item.crafting.Ingredient import net.minecraft.world.level.ItemLike -import net.minecraft.world.level.material.Fluids import net.neoforged.neoforge.common.Tags import net.neoforged.neoforge.common.crafting.BlockTagIngredient import net.neoforged.neoforge.common.crafting.DifferenceIngredient @@ -83,13 +83,13 @@ class RagiumMechanicalRecipeProvider(packOutput: PackOutput, future: Completable extra { items { +Items.WARPED_FUNGUS } } result { +Items.WARPED_NYLIUM } }.save(exporter) - // String + Sticky -> Cobweb + // String + Slime Ball -> Cobweb RagiumRecipeBuilders.assembling { ingredient { +holderSet(Tags.Items.STRINGS) count = 5 } - extra { +holderSet(HTCommonTags.Items.STICKY_BALLS) } + extra { +holderSet(Tags.Items.SLIME_BALLS) } result { +Items.COBWEB } }.save(exporter) @@ -377,7 +377,7 @@ class RagiumMechanicalRecipeProvider(packOutput: PackOutput, future: Completable // XX Dust -> XX for (fuel: RagiumMaterial.Fuel in RagiumMaterial.Fuel.entries) { - val baseItem: HTSimpleDeferredItem = RagiumMaterialHelper.getFuelBase(fuel) + val baseItem: HTSimpleDeferredItem = RagiumMaterialHelper.getBase(fuel) RagiumRecipeBuilders.compressing { ingredient { +holderSet(CommonTagPrefixes.DUST, fuel) } result { +baseItem } @@ -436,8 +436,8 @@ class RagiumMechanicalRecipeProvider(packOutput: PackOutput, future: Completable Items.PURPUR_BLOCK to Items.POPPED_CHORUS_FRUIT, Items.SNOW_BLOCK to Items.SNOWBALL, RagiumBlocks.ECHO_BLOCK to Items.ECHO_SHARD, - RagiumBlocks.FLUORITE_BLOCK to RagiumItems.getOrThrow(HTItemPart.GEM, RagiumMaterial.Gem.FLUORITE), - RagiumBlocks.CRYOLITE_BLOCK to RagiumItems.getOrThrow(HTItemPart.GEM, RagiumMaterial.Gem.CRYOLITE) + RagiumBlocks.FLUORITE_BLOCK to RagiumItems.getOrThrow(HTItemPart.GEM, RagiumMaterial.Gem.FLUORITE) + // RagiumBlocks.CRYOLITE_BLOCK to RagiumItems.getOrThrow(HTItemPart.GEM, RagiumMaterial.Gem.CRYOLITE) ).forEach { (block: ItemLike, base: ItemLike) -> RagiumRecipeBuilders.crushing { ingredient { items { +block.asItem() } } @@ -448,7 +448,9 @@ class RagiumMechanicalRecipeProvider(packOutput: PackOutput, future: Completable }.save(exporter) } setOf( - RagiumTags.BlockItem.QUARTZ_BLOCKS.item to Items.QUARTZ + Tags.Items.SANDSTONE_UNCOLORED_BLOCKS to Items.SAND, + Tags.Items.SANDSTONE_RED_BLOCKS to Items.RED_SAND, + RagiumTags.BlockItems.QUARTZ_BLOCKS.item to Items.QUARTZ ).forEach { (block: TagKey, base: Item) -> RagiumRecipeBuilders.crushing { ingredient { +holderSet(block) } @@ -458,39 +460,6 @@ class RagiumMechanicalRecipeProvider(packOutput: PackOutput, future: Completable } }.save(exporter) } - // Sandstone -> 4x Sand + Niter - RagiumRecipeBuilders.crushing { - ingredient { +holderSet(Tags.Items.SANDSTONE_UNCOLORED_BLOCKS) } - result { - +Items.SAND - count = 4 - } - result { - +RagiumItems.getOrThrow(HTItemPart.DUST, RagiumMaterial.Mineral.NITER) - } - }.save(exporter) - // Red Sandstone -> 4x Red Sand + Bauxite - RagiumRecipeBuilders.crushing { - ingredient { +holderSet(Tags.Items.SANDSTONE_RED_BLOCKS) } - result { - +Items.RED_SAND - count = 4 - } - result { - +RagiumItems.getOrThrow(HTItemPart.DUST, RagiumMaterial.Mineral.BAUXITE) - } - }.save(exporter) - // Blue Ice -> 9x Packed Ice + Cryolite - RagiumRecipeBuilders.crushing { - ingredient { items { +Items.BLUE_ICE } } - result { - +Items.PACKED_ICE - count = 9 - } - result { - +RagiumItems.getOrThrow(HTItemPart.DUST, RagiumMaterial.Gem.CRYOLITE) - } - }.save(exporter) // Book -> 3x Paper Pulp RagiumRecipeBuilders.crushing { @@ -531,7 +500,7 @@ class RagiumMechanicalRecipeProvider(packOutput: PackOutput, future: Completable }.save(exporter) RagiumRecipeBuilders.crushing { ingredient { +holderSet(RagiumTags.Items.COKES) } - result { +RagiumItems.getOrThrow(HTItemPart.DUST, RagiumMaterial.Other.CARBON) } + result { +RagiumItems.getOrThrow(HTItemPart.DUST, RagiumMaterial.Chemicals.CARBON) } }.save(exporter) for (gem: RagiumMaterial.Gem in RagiumMaterial.Gem.entries) { @@ -543,10 +512,10 @@ class RagiumMechanicalRecipeProvider(packOutput: PackOutput, future: Completable }.save(exporter) } - for (metal: RagiumMaterial.Metal in RagiumMaterial.Metal.entries) { - val dust: HTSimpleDeferredItem = RagiumItems.MATERIAL_ITEMS[HTItemPart.DUST, metal] ?: continue + for (metalLike: RagiumMaterial.MetalLike in RagiumMaterial.MetalLike.entries) { + val dust: HTSimpleDeferredItem = RagiumItems.MATERIAL_ITEMS[HTItemPart.DUST, metalLike] ?: continue RagiumRecipeBuilders.crushing { - ingredient { +holderSet(CommonTagPrefixes.INGOT, metal) } + ingredient { +holderSet(CommonTagPrefixes.INGOT, metalLike) } result { +dust } recipeId suffix "_from_ingot" }.save(exporter) @@ -731,7 +700,6 @@ class RagiumMechanicalRecipeProvider(packOutput: PackOutput, future: Completable }.save(exporter) // Raw XX -> XX Dust for (metal: RagiumMaterial.Metal in RagiumMaterial.Metal.entries) { - if (!metal.hasRawVariant) continue val dust: HTSimpleDeferredItem = RagiumItems.MATERIAL_ITEMS[HTItemPart.DUST, metal] ?: continue RagiumRecipeBuilders.crushing { ingredient { @@ -906,7 +874,7 @@ class RagiumMechanicalRecipeProvider(packOutput: PackOutput, future: Completable RagiumRecipeBuilders.draining { ingredient { items { +Items.WET_SPONGE } } itemResult { +Items.SPONGE } - fluidResult { +Fluids.WATER } + fluidResult { water() } }.save(exporter) // Honeycomb -> Beeswax + Honey diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt index 08d6b9fbc0..dbf23f4eee 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt @@ -6,6 +6,7 @@ import hiiragi283.lib.data.recipe.builder.VanillaRecipeBuilders import hiiragi283.lib.data.recipe.ingredient.IngredientBuilder import hiiragi283.lib.item.component.HTToolCollection import hiiragi283.lib.item.component.HTToolType +import hiiragi283.lib.registry.HTDecorationContent import hiiragi283.lib.registry.HTSimpleDeferredBlockAndItem import hiiragi283.lib.registry.HTSimpleDeferredItem import hiiragi283.lib.resource.vanillaId @@ -41,6 +42,7 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut HTRecipeProvider(packOutput, future, RagiumAPI.MOD_ID) { override fun exportValues() { vanilla() + decoration() machine() storage() material() @@ -55,23 +57,12 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut VanillaRecipeBuilders.shaped { hollow8() define('A') { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Other.WOOD) } - define('B') { +holderSet(HTCommonTags.Items.STICKY_BALLS) } + define('B') { +holderSet(Tags.Items.SLIME_BALLS) } result { +RagiumItems.PARTICLE_BOARD count = 4 } }.save(exporter) - // Synthetic - listOf( - RagiumItems.SYNTHETIC_FEATHER, - RagiumItems.SYNTHETIC_FIBER, - RagiumItems.SYNTHETIC_LEATHER - ).forEach { - VanillaRecipeBuilders.stonecutting { - ingredient { +holderSet(HTCommonTags.Items.PLASTICS) } - result { +it } - }.save(exporter) - } // Splash Bottle VanillaRecipeBuilders.shapeless { ingredient { +holderSet(Tags.Items.GUNPOWDERS) } @@ -90,6 +81,36 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut count = 4 } }.save(exporter) + // Cement + VanillaRecipeBuilders.shapeless { + ingredient { +holderSet(Tags.Items.SANDS) } + ingredient { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Chemicals.QUICK_LIME) } + result { + +RagiumItems.CEMENT + count = 2 + } + }.save(exporter) + // Mortar + VanillaRecipeBuilders.shapeless { + ingredient { +holderSet(Tags.Items.BUCKETS_WATER) } + repeat(4) { ingredient { items { +RagiumItems.CEMENT } } } + result { + +RagiumItems.MORTAR + count = 4 + } + }.save(exporter) + VanillaRecipeBuilders.shaped { + mosaic4() + define('A') { +holderSet(Tags.Items.BRICKS_NORMAL) } + define('B') { items { +RagiumItems.MORTAR } } + result { +Items.BRICKS } + }.save(exporter) + VanillaRecipeBuilders.shaped { + mosaic4() + define('A') { +holderSet(Tags.Items.BRICKS_NETHER) } + define('B') { items { +RagiumItems.MORTAR } } + result { +Items.NETHER_BRICKS } + }.save(exporter) // XX Tools registerTools(RagiumItems.SOOTY_IRON_TOOLS, RagiumToolMaterials.SOOTY_IRON) @@ -234,7 +255,7 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut +"A A" +"ABA" +" A " - define('A') { +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.SOOTY_IRON) } + define('A') { +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Alloy.SOOTY_IRON) } define('B') { +holderSet(Tags.Items.CHESTS_WOODEN) } result { +Items.HOPPER @@ -246,7 +267,7 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut +"A A" +"ABA" +" A " - define('A') { +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.BLACK_STEEL) } + define('A') { +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Alloy.BLACK_STEEL) } define('B') { +holderSet(Tags.Items.CHESTS_WOODEN) } result { +Items.HOPPER @@ -256,13 +277,95 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut }.save(exporter) } + // Decoration // + + private fun decoration() { + RagiumBlocks.ALL_DECORATIONS.forEach(::registerDecoration) + + // Quartz Glass Pane + VanillaRecipeBuilders.shaped { + +"AAA" + +"AAA" + define('A') { items { +RagiumBlocks.QUARTZ_GLASS } } + result { + +RagiumBlocks.QUARTZ_GLASS_PANE + count = 8 + } + }.save(exporter) + } + + private fun registerDecoration(content: HTDecorationContent) { + val (base, slab, stairs, wall) = content + val stonecutterInput: IngredientBuilder.() -> Unit = { + items { + +base + content.parent()?.base?.let { +it } + } + } + // Slab + VanillaRecipeBuilders.shaped { + +"AAA" + define('A') { items { +base } } + result { + +content.slab + count = 6 + } + group = content.slab.idOrThrow.path + }.save(exporter) + VanillaRecipeBuilders.stonecutting { + ingredient(stonecutterInput) + result { + +slab + count = 2 + } + group = slab.idOrThrow.path + }.save(exporter) + // Stairs + if (stairs != null) { + VanillaRecipeBuilders.shaped { + +"A " + +"AA " + +"AAA" + define('A') { items { +base } } + result { + +stairs + count = 4 + } + group = stairs.idOrThrow.path + }.save(exporter) + VanillaRecipeBuilders.stonecutting { + ingredient(stonecutterInput) + result { +stairs } + group = stairs.idOrThrow.path + }.save(exporter) + } + // Wall + if (wall != null) { + VanillaRecipeBuilders.shaped { + +"AAA" + +"AAA" + define('A') { items { +base } } + result { + +wall + count = 6 + } + group = wall.idOrThrow.path + }.save(exporter) + VanillaRecipeBuilders.stonecutting { + ingredient(stonecutterInput) + result { +wall } + group = wall.idOrThrow.path + }.save(exporter) + } + } + // Machine // private fun machine() { // Mechanical VanillaRecipeBuilders.shaped { layered2() - define('A') { +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.SOOTY_IRON) } + define('A') { +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Alloy.SOOTY_IRON) } define('B') { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Mineral.REDSTONE) } result { +RagiumItems.getParts(HTMachineType.MECHANICAL) @@ -287,17 +390,24 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut bio(RagiumBlocks.BREWERY) { items { +Items.BREWING_STAND } } bio(RagiumBlocks.PLANTER) { items { +Items.FLOWER_POT } } // Electronics + electronics(RagiumBlocks.ELECTROLYZER) { +holderSet(ItemTags.LIGHTNING_RODS) } electronics(RagiumBlocks.PRECISION_ASSEMBLER) { items { +RagiumBlocks.ASSEMBLER } } // Arcane arcane(RagiumBlocks.ENCHANTER) { items { +Items.ENCHANTING_TABLE } } + // Bus + VanillaRecipeBuilders.shapeless { + ingredient { items { +RagiumBlocks.MACHINE_CASING } } + ingredient { items { +RagiumBlocks.TANK } } + result { +RagiumBlocks.FLUID_OUTPUT_BUS } + }.save(exporter) // Decoration VanillaRecipeBuilders.shaped { +"ABA" +"B B" +"ABA" - define('A') { +holderSet(CommonTagPrefixes.NUGGET, RagiumMaterial.Metal.SOOTY_IRON) } - define('B') { +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.SOOTY_IRON) } + define('A') { +holderSet(CommonTagPrefixes.NUGGET, RagiumMaterial.Alloy.SOOTY_IRON) } + define('B') { +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Alloy.SOOTY_IRON) } result { +RagiumBlocks.MACHINE_CASING count = 4 @@ -334,7 +444,7 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut private inline fun mechanical(result: HTSimpleDeferredBlockAndItem, builderAction: IngredientBuilder.() -> Unit) { machine( HTMachineType.MECHANICAL, - RagiumMaterial.Metal.SOOTY_IRON, + RagiumMaterial.Alloy.SOOTY_IRON, RagiumMaterial.Metal.COPPER, result, builderAction @@ -344,7 +454,7 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut private inline fun heat(result: HTSimpleDeferredBlockAndItem, builderAction: IngredientBuilder.() -> Unit) { machine( HTMachineType.HEAT, - RagiumMaterial.Metal.SOOTY_IRON, + RagiumMaterial.Alloy.SOOTY_IRON, RagiumMaterial.Metal.IRON, result, builderAction @@ -354,7 +464,7 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut private inline fun chemical(result: HTSimpleDeferredBlockAndItem, builderAction: IngredientBuilder.() -> Unit) { machine( HTMachineType.CHEMICAL, - RagiumMaterial.Metal.BLACK_STEEL, + RagiumMaterial.Alloy.BLACK_STEEL, RagiumMaterial.Metal.GOLD, result, builderAction @@ -364,7 +474,7 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut private inline fun bio(result: HTSimpleDeferredBlockAndItem, builderAction: IngredientBuilder.() -> Unit) { machine( HTMachineType.BIO, - RagiumMaterial.Metal.BLACK_STEEL, + RagiumMaterial.Alloy.BLACK_STEEL, RagiumMaterial.Gem.EMERALD, result, builderAction @@ -372,23 +482,29 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut } private inline fun electronics(result: HTSimpleDeferredBlockAndItem, builderAction: IngredientBuilder.() -> Unit) { - machine( - HTMachineType.ELECTRONICS, - RagiumMaterial.Metal.VOID_METAL, - RagiumMaterial.Gem.DIAMOND, - result, - builderAction - ) + VanillaRecipeBuilders.shaped { + +"ABA" + +"BCB" + +"ADA" + define('A') { +holderSet(CommonTagPrefixes.NUGGET, RagiumMaterial.Alloy.BLACK_STEEL) } + define('B') { items { +RagiumItems.getParts(HTMachineType.ELECTRONICS) } } + define('C') { +holderSet(CommonTagPrefixes.GEAR, RagiumMaterial.Gem.DIAMOND) } + define('D', builderAction) + result { +result } + }.save(exporter) } private inline fun arcane(result: HTSimpleDeferredBlockAndItem, builderAction: IngredientBuilder.() -> Unit) { - machine( - HTMachineType.ARCANE, - RagiumMaterial.Metal.VOID_METAL, - RagiumMaterial.Metal.NETHERITE, - result, - builderAction - ) + VanillaRecipeBuilders.shaped { + +"ABA" + +"BCB" + +"ADA" + define('A') { items { +Items.GHAST_TEAR } } + define('B') { items { +RagiumItems.getParts(HTMachineType.ARCANE) } } + define('C') { +holderSet(CommonTagPrefixes.GEAR, RagiumMaterial.Alloy.NETHERITE) } + define('D', builderAction) + result { +result } + }.save(exporter) } // Machine // @@ -397,22 +513,29 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut // Tank VanillaRecipeBuilders.shaped { hollow8() - define('A') { +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.SOOTY_IRON) } + define('A') { +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Alloy.SOOTY_IRON) } define('B') { +holderSet(Tags.Items.BUCKETS_EMPTY) } result { +RagiumBlocks.TANK } recipeId suffix "_by_sooty_iron" }.save(exporter) VanillaRecipeBuilders.shaped { hollow4() - define('A') { +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.BLACK_STEEL) } + define('A') { +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Alloy.BLACK_STEEL) } define('B') { +holderSet(Tags.Items.BUCKETS_EMPTY) } result { +RagiumBlocks.TANK } recipeId suffix "_by_black_steel" }.save(exporter) + // Potion Tank + VanillaRecipeBuilders.shaped { + hollow4() + define('A') { +holderSet(Tags.Items.RODS_BLAZE) } + define('B') { +holderSet(Tags.Items.BUCKETS_EMPTY) } + result { +RagiumBlocks.POTION_TANK } + }.save(exporter) // Void Tank VanillaRecipeBuilders.shaped { hollow8() - define('A') { +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.VOID_METAL) } + define('A') { +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Alloy.VOID_METAL) } define('B') { +holderSet(Tags.Items.BUCKETS_EMPTY) } result { +RagiumBlocks.VOID_TANK } }.save(exporter) @@ -423,25 +546,19 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut private fun material() { // XX <-> Storage Block gemBlock(RagiumMaterial.Gem.ECHO, RagiumBlocks.ECHO_BLOCK) - gemBlock(RagiumMaterial.Gem.FLUORITE, RagiumBlocks.FLUORITE_BLOCK) - registerSlabRecipes(RagiumBlocks.FLUORITE_SLAB, Ingredient.of(RagiumBlocks.FLUORITE_BLOCK)) - registerStairsRecipes(RagiumBlocks.FLUORITE_STAIRS, Ingredient.of(RagiumBlocks.FLUORITE_BLOCK)) - - gemBlock(RagiumMaterial.Gem.CRYOLITE, RagiumBlocks.CRYOLITE_BLOCK) - registerSlabRecipes(RagiumBlocks.CRYOLITE_SLAB, Ingredient.of(RagiumBlocks.CRYOLITE_BLOCK)) - registerStairsRecipes(RagiumBlocks.CRYOLITE_STAIRS, Ingredient.of(RagiumBlocks.CRYOLITE_BLOCK)) + // gemBlock(RagiumMaterial.Gem.CRYOLITE, RagiumBlocks.CRYOLITE_BLOCK) nineToBlock(RagiumMaterial.Metal.ALUMINUM, HTItemPart.INGOT) - nineToBlock(RagiumMaterial.Metal.SOOTY_IRON, HTItemPart.INGOT) - nineToBlock(RagiumMaterial.Metal.BLACK_STEEL, HTItemPart.INGOT) - nineToBlock(RagiumMaterial.Metal.VOID_METAL, HTItemPart.INGOT) + nineToBlock(RagiumMaterial.Alloy.SOOTY_IRON, HTItemPart.INGOT) + nineToBlock(RagiumMaterial.Alloy.BLACK_STEEL, HTItemPart.INGOT) + nineToBlock(RagiumMaterial.Alloy.VOID_METAL, HTItemPart.INGOT) // Ingot <-> Nugget - ingotToNugget(RagiumMaterial.Metal.NETHERITE, ingot = HTSimpleDeferredItem(vanillaId("netherite_ingot"))) ingotToNugget(RagiumMaterial.Metal.ALUMINUM) - ingotToNugget(RagiumMaterial.Metal.SOOTY_IRON) - ingotToNugget(RagiumMaterial.Metal.BLACK_STEEL) - ingotToNugget(RagiumMaterial.Metal.VOID_METAL) + ingotToNugget(RagiumMaterial.Alloy.NETHERITE, ingot = HTSimpleDeferredItem(vanillaId("netherite_ingot"))) + ingotToNugget(RagiumMaterial.Alloy.SOOTY_IRON) + ingotToNugget(RagiumMaterial.Alloy.BLACK_STEEL) + ingotToNugget(RagiumMaterial.Alloy.VOID_METAL) // Gear RagiumItems.getOrThrow(HTItemPart.GEAR, RagiumMaterial.Other.WOOD).let { gear: HTSimpleDeferredItem -> VanillaRecipeBuilders.shaped { @@ -456,24 +573,18 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut gear(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.COPPER) gear(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.IRON) gear(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.GOLD) - RagiumItems.MATERIAL_ITEMS[HTItemPart.GEAR, RagiumMaterial.Metal.NETHERITE]?.let { + RagiumItems.MATERIAL_ITEMS[HTItemPart.GEAR, RagiumMaterial.Alloy.NETHERITE]?.let { VanillaRecipeBuilders.smithing { template { items { +Items.NETHERITE_UPGRADE_SMITHING_TEMPLATE } } base { +holderSet(CommonTagPrefixes.GEAR, RagiumMaterial.Gem.DIAMOND) } - addition { +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.NETHERITE) } + addition { +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Alloy.NETHERITE) } result { +it } }.save(exporter) } // Dust -> Ingot - for (metal: RagiumMaterial.Metal in RagiumMaterial.Metal.entries) { - val dust: HTSimpleDeferredItem = RagiumItems.MATERIAL_ITEMS[HTItemPart.DUST, metal] ?: continue - val item: HTSimpleDeferredItem = when (metal) { - RagiumMaterial.Metal.COPPER -> HTSimpleDeferredItem(vanillaId("copper_ingot")) - RagiumMaterial.Metal.IRON -> HTSimpleDeferredItem(vanillaId("iron_ingot")) - RagiumMaterial.Metal.GOLD -> HTSimpleDeferredItem(vanillaId("gold_ingot")) - RagiumMaterial.Metal.NETHERITE -> HTSimpleDeferredItem(vanillaId("netherite_ingot")) - else -> RagiumItems.MATERIAL_ITEMS[HTItemPart.INGOT, metal] - } ?: continue + for (metalLike: RagiumMaterial.MetalLike in RagiumMaterial.MetalLike.entries) { + val dust: HTSimpleDeferredItem = RagiumItems.MATERIAL_ITEMS[HTItemPart.DUST, metalLike] ?: continue + val item: HTSimpleDeferredItem = RagiumMaterialHelper.getIngot(metalLike) VanillaRecipeBuilders.smeltingAndBlasting(exporter) { ingredient { items { +dust } } result { +item } @@ -482,9 +593,17 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut recipeId suffix "_from_dust" } } + // Dust -> Base + VanillaRecipeBuilders.smelting { + ingredient { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Other.GLASS) } + result { +Items.GLASS } + group = "glass" + recipeId suffix "_from_dust" + }.save(exporter) + // Fuel for (fuel: RagiumMaterial.Fuel in RagiumMaterial.Fuel.entries) { - val base: HTSimpleDeferredItem = RagiumMaterialHelper.getFuelBase(fuel) + val base: HTSimpleDeferredItem = RagiumMaterialHelper.getBase(fuel) // Storage nineToBlock(fuel, Ingredient.of(base), base) // Tiny @@ -508,7 +627,7 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut // Sooty Iron val ironIngot: HolderSet = holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.IRON) val sootyIronIngot: HTSimpleDeferredItem = - RagiumItems.getOrThrow(HTItemPart.INGOT, RagiumMaterial.Metal.SOOTY_IRON) + RagiumItems.getOrThrow(HTItemPart.INGOT, RagiumMaterial.Alloy.SOOTY_IRON) VanillaRecipeBuilders.shaped { hollow8() define('A') { diff --git a/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumBlockItemTagsProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumBlockItemTagsProvider.kt index 07703b6075..e65b93a8e7 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumBlockItemTagsProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumBlockItemTagsProvider.kt @@ -7,11 +7,13 @@ import hiiragi283.lib.registry.HTSimpleDeferredBlockAndItem import hiiragi283.lib.resource.BlockItemKey import hiiragi283.lib.resource.vanillaId import hiiragi283.lib.tag.BlockItemTag +import hiiragi283.lib.tag.HTCommonTags 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 class RagiumBlockItemTagsProvider(factory: (BlockItemTag) -> HTBlockItemTagBuilder) : HTBlockItemTagsProvider(factory) { override fun run() { @@ -21,20 +23,29 @@ class RagiumBlockItemTagsProvider(factory: (BlockItemTag) -> HTBlockItemTagBuild builder(part.tagPrefix, material).add(block) } - builder(RagiumTags.BlockItem.QUARTZ_BLOCKS) + builder(RagiumTags.BlockItems.QUARTZ_BLOCKS) .add(BlockItemKey(vanillaId("chiseled_quartz_block"))) .add(BlockItemKey(vanillaId("quartz_block"))) .add(BlockItemKey(vanillaId("quartz_bricks"))) .add(BlockItemKey(vanillaId("quartz_pillar"))) - builder(RagiumTags.BlockItem.STORAGES_CREATIVE) - .add(RagiumBlocks.CREATIVE_BATTERY) - .add(RagiumBlocks.CREATIVE_TANK) + // Decoration + builder(Tags.Blocks.GLASS_BLOCKS, Tags.Items.GLASS_BLOCKS).addTag(HTCommonTags.BlockItems.GLASS_BLOCKS_QUARTZ) + builder(HTCommonTags.BlockItems.GLASS_BLOCKS_QUARTZ).add(RagiumBlocks.QUARTZ_GLASS) + + builder(Tags.Blocks.GLASS_PANES, Tags.Items.GLASS_PANES).addTag(HTCommonTags.BlockItems.GLASS_PANES_QUARTZ) + builder(HTCommonTags.BlockItems.GLASS_PANES_QUARTZ).add(RagiumBlocks.QUARTZ_GLASS_PANE) + + RagiumBlocks.ALL_DECORATIONS.forEach { it.appendTags(::builder) } // Machine for (machineType: HTMachineType in HTMachineType.entries) { for (block: HTSimpleDeferredBlockAndItem in RagiumBlocks.MACHINES[machineType] ?: listOf()) { builder(HTMachineType.PREFIX, machineType).add(block) } } + // Storage + builder(RagiumTags.BlockItems.STORAGES_CREATIVE) + .add(RagiumBlocks.CREATIVE_BATTERY) + .add(RagiumBlocks.CREATIVE_TANK) } } diff --git a/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumBlockTagsProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumBlockTagsProvider.kt index a458c40f2c..c5ab7a0499 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumBlockTagsProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumBlockTagsProvider.kt @@ -26,28 +26,18 @@ class RagiumBlockTagsProvider(output: PackOutput, lookupProvider: CompletableFut yieldAll(RagiumBlocks.MATERIAL_ORES.values) yieldAll(RagiumBlocks.STORAGE_BLOCKS.values) yield(RagiumBlocks.ECHO_BLOCK) - yield(RagiumBlocks.FLUORITE_BLOCK) - yield(RagiumBlocks.FLUORITE_SLAB) - yield(RagiumBlocks.FLUORITE_STAIRS) - yield(RagiumBlocks.CRYOLITE_BLOCK) - yield(RagiumBlocks.CRYOLITE_SLAB) - yield(RagiumBlocks.CRYOLITE_STAIRS) + yield(RagiumBlocks.QUARTZ_GLASS) + yield(RagiumBlocks.QUARTZ_GLASS_PANE) + yieldAll(RagiumBlocks.ALL_DECORATIONS.flatMap { it.all }) yieldAll(RagiumBlocks.MACHINES.values.flatten()) yield(RagiumBlocks.MACHINE_CASING) yieldAll(RagiumBlocks.MACHINE_CASINGS.values) - yield(RagiumBlocks.TANK) - yield(RagiumBlocks.VOID_TANK) + yield(RagiumBlocks.FLUID_OUTPUT_BUS) + + yieldAll(RagiumBlocks.TANKS) yield(RagiumBlocks.CREATIVE_BATTERY) - yield(RagiumBlocks.CREATIVE_TANK) }.forEach(pickaxe::add) - // Other - builder(BlockTags.SLABS) - .add(RagiumBlocks.FLUORITE_SLAB) - .add(RagiumBlocks.CRYOLITE_SLAB) - builder(BlockTags.STAIRS) - .add(RagiumBlocks.FLUORITE_STAIRS) - .add(RagiumBlocks.CRYOLITE_STAIRS) } } diff --git a/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumFluidTagsProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumFluidTagsProvider.kt index 5cfa624005..07d29470ed 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumFluidTagsProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumFluidTagsProvider.kt @@ -1,6 +1,9 @@ package hiiragi283.ragium.data.tag +import hiiragi283.lib.HTConstants import hiiragi283.lib.data.tag.HTFluidTagsProvider +import hiiragi283.lib.data.tag.HTTagDependType +import hiiragi283.lib.resource.toId import hiiragi283.ragium.api.RagiumAPI import hiiragi283.ragium.api.tag.RagiumTags import hiiragi283.ragium.common.fluid.RagiumFluids @@ -16,5 +19,15 @@ class RagiumFluidTagsProvider(output: PackOutput, lookupProvider: CompletableFut builder(RagiumTags.Fluids.RESINS) .addContentTag(RagiumFluids.RESIN) .addContentTag(RagiumFluids.SYNTHETIC_RESIN) + builder(RagiumTags.Fluids.ALCOHOLS) + .addContentTag(RagiumFluids.ALCOHOL) + .addTag(HTConstants.COMMON.toId("methanol"), type = HTTagDependType.OPTIONAL) + .addTag(HTConstants.COMMON.toId("ethanol"), type = HTTagDependType.OPTIONAL) + .addTag(HTConstants.COMMON.toId("bioethanol"), type = HTTagDependType.OPTIONAL) + .addTag(HTConstants.COMMON.toId("bio_ethanol"), type = HTTagDependType.OPTIONAL) + builder(RagiumTags.Fluids.ALDEHYDES) + .addContentTag(RagiumFluids.ALDEHYDE) + .addTag(HTConstants.COMMON.toId("formaldehyde"), type = HTTagDependType.OPTIONAL) + .addTag(HTConstants.COMMON.toId("acetaldehyde"), type = HTTagDependType.OPTIONAL) } } diff --git a/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumItemTagsProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumItemTagsProvider.kt index 42c47d2e5d..81530c05ae 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumItemTagsProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumItemTagsProvider.kt @@ -31,7 +31,7 @@ class RagiumItemTagsProvider(output: PackOutput, lookupProvider: CompletableFutu HTBlockItemTagsProvider.forItem(builder(item)) }.run() // Material - builder(CommonTagPrefixes.GEM, RagiumMaterial.Gem.ECHO).add(createKey(vanillaId("echo_shard"))) + builder(CommonTagPrefixes.GEM, RagiumMaterial.Gem.ECHO).add(vanillaId("echo_shard")) RagiumItems.MATERIAL_ITEMS .forEach { (part: HTItemPart, material: RagiumMaterial, item: HTSimpleValueWithKey) -> @@ -53,38 +53,30 @@ class RagiumItemTagsProvider(output: PackOutput, lookupProvider: CompletableFutu } builder(RagiumTags.Items.SOOTY_IRON_TOOL_MATERIALS) - .addTag(CommonTagPrefixes.INGOT.itemTagKey(RagiumMaterial.Metal.SOOTY_IRON)) + .addTag(CommonTagPrefixes.INGOT.itemTagKey(RagiumMaterial.Alloy.SOOTY_IRON)) // Other - builder(ItemTags.SLABS) - .add(RagiumBlocks.FLUORITE_SLAB) - .add(RagiumBlocks.CRYOLITE_SLAB) - builder(ItemTags.STAIRS) - .add(RagiumBlocks.FLUORITE_STAIRS) - .add(RagiumBlocks.CRYOLITE_STAIRS) - builder(ItemTags.PLANKS).add(RagiumItems.PARTICLE_BOARD) builder(Tags.Items.FEATHERS).add(RagiumItems.SYNTHETIC_FEATHER) 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) builder(HTCommonTags.Items.COAL_COKE).add(RagiumItems.COAL_COKE) - builder(HTCommonTags.Items.PAPER).add(createKey(vanillaId("paper"))) + builder(HTCommonTags.Items.PAPER).add(vanillaId("paper")) builder(HTCommonTags.Items.PITCH_COKE).add(RagiumItems.PITCH_COKE) builder(HTCommonTags.Items.PLASTICS).add(RagiumItems.PLASTIC_PLATE) builder(HTCommonTags.Items.SILICON).add(RagiumItems.CRUDE_SILICON) - builder(HTCommonTags.Items.STICKY_BALLS).addTag(Tags.Items.SLIME_BALLS) builder(RagiumTags.Items.COALS) .add(RagiumItems.BAMBOO_CHARCOAL) - .add(createKey(vanillaId("charcoal"))) - .add(createKey(vanillaId("coal"))) + .add(vanillaId("charcoal")) + .add(vanillaId("coal")) builder(RagiumTags.Items.COKES) .addTag(HTCommonTags.Items.COAL_COKE) .addTag(HTCommonTags.Items.PITCH_COKE) builder(RagiumTags.Items.SHOW_FLUID_TOOLTIPS) - .add(RagiumBlocks.TANK) - .add(RagiumBlocks.VOID_TANK) - .add(RagiumBlocks.CREATIVE_TANK) + .add(RagiumBlocks.FLUID_OUTPUT_BUS) + .apply { RagiumBlocks.TANKS.forEach { add(it) } } } } diff --git a/src/generated/resources/assets/ragium/blockstates/cryolite_block.json b/src/generated/resources/assets/ragium/blockstates/cryolite_block.json deleted file mode 100644 index 401a31da57..0000000000 --- a/src/generated/resources/assets/ragium/blockstates/cryolite_block.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "variants": { - "": { - "model": "ragium:block/cryolite_block" - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/blockstates/cryolite_slab.json b/src/generated/resources/assets/ragium/blockstates/cryolite_slab.json deleted file mode 100644 index 785eb35090..0000000000 --- a/src/generated/resources/assets/ragium/blockstates/cryolite_slab.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "variants": { - "type=bottom": { - "model": "ragium:block/cryolite_slab" - }, - "type=double": { - "model": "ragium:block/cryolite_block" - }, - "type=top": { - "model": "ragium:block/cryolite_slab_top" - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/blockstates/cryolite_stairs.json b/src/generated/resources/assets/ragium/blockstates/cryolite_stairs.json deleted file mode 100644 index 2bf5534649..0000000000 --- a/src/generated/resources/assets/ragium/blockstates/cryolite_stairs.json +++ /dev/null @@ -1,209 +0,0 @@ -{ - "variants": { - "facing=east,half=bottom,shape=inner_left": { - "model": "ragium:block/cryolite_stairs_inner", - "uvlock": true, - "y": 270 - }, - "facing=east,half=bottom,shape=inner_right": { - "model": "ragium:block/cryolite_stairs_inner" - }, - "facing=east,half=bottom,shape=outer_left": { - "model": "ragium:block/cryolite_stairs_outer", - "uvlock": true, - "y": 270 - }, - "facing=east,half=bottom,shape=outer_right": { - "model": "ragium:block/cryolite_stairs_outer" - }, - "facing=east,half=bottom,shape=straight": { - "model": "ragium:block/cryolite_stairs" - }, - "facing=east,half=top,shape=inner_left": { - "model": "ragium:block/cryolite_stairs_inner", - "uvlock": true, - "x": 180 - }, - "facing=east,half=top,shape=inner_right": { - "model": "ragium:block/cryolite_stairs_inner", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=east,half=top,shape=outer_left": { - "model": "ragium:block/cryolite_stairs_outer", - "uvlock": true, - "x": 180 - }, - "facing=east,half=top,shape=outer_right": { - "model": "ragium:block/cryolite_stairs_outer", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=east,half=top,shape=straight": { - "model": "ragium:block/cryolite_stairs", - "uvlock": true, - "x": 180 - }, - "facing=north,half=bottom,shape=inner_left": { - "model": "ragium:block/cryolite_stairs_inner", - "uvlock": true, - "y": 180 - }, - "facing=north,half=bottom,shape=inner_right": { - "model": "ragium:block/cryolite_stairs_inner", - "uvlock": true, - "y": 270 - }, - "facing=north,half=bottom,shape=outer_left": { - "model": "ragium:block/cryolite_stairs_outer", - "uvlock": true, - "y": 180 - }, - "facing=north,half=bottom,shape=outer_right": { - "model": "ragium:block/cryolite_stairs_outer", - "uvlock": true, - "y": 270 - }, - "facing=north,half=bottom,shape=straight": { - "model": "ragium:block/cryolite_stairs", - "uvlock": true, - "y": 270 - }, - "facing=north,half=top,shape=inner_left": { - "model": "ragium:block/cryolite_stairs_inner", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=north,half=top,shape=inner_right": { - "model": "ragium:block/cryolite_stairs_inner", - "uvlock": true, - "x": 180 - }, - "facing=north,half=top,shape=outer_left": { - "model": "ragium:block/cryolite_stairs_outer", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=north,half=top,shape=outer_right": { - "model": "ragium:block/cryolite_stairs_outer", - "uvlock": true, - "x": 180 - }, - "facing=north,half=top,shape=straight": { - "model": "ragium:block/cryolite_stairs", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=south,half=bottom,shape=inner_left": { - "model": "ragium:block/cryolite_stairs_inner" - }, - "facing=south,half=bottom,shape=inner_right": { - "model": "ragium:block/cryolite_stairs_inner", - "uvlock": true, - "y": 90 - }, - "facing=south,half=bottom,shape=outer_left": { - "model": "ragium:block/cryolite_stairs_outer" - }, - "facing=south,half=bottom,shape=outer_right": { - "model": "ragium:block/cryolite_stairs_outer", - "uvlock": true, - "y": 90 - }, - "facing=south,half=bottom,shape=straight": { - "model": "ragium:block/cryolite_stairs", - "uvlock": true, - "y": 90 - }, - "facing=south,half=top,shape=inner_left": { - "model": "ragium:block/cryolite_stairs_inner", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=south,half=top,shape=inner_right": { - "model": "ragium:block/cryolite_stairs_inner", - "uvlock": true, - "x": 180, - "y": 180 - }, - "facing=south,half=top,shape=outer_left": { - "model": "ragium:block/cryolite_stairs_outer", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=south,half=top,shape=outer_right": { - "model": "ragium:block/cryolite_stairs_outer", - "uvlock": true, - "x": 180, - "y": 180 - }, - "facing=south,half=top,shape=straight": { - "model": "ragium:block/cryolite_stairs", - "uvlock": true, - "x": 180, - "y": 90 - }, - "facing=west,half=bottom,shape=inner_left": { - "model": "ragium:block/cryolite_stairs_inner", - "uvlock": true, - "y": 90 - }, - "facing=west,half=bottom,shape=inner_right": { - "model": "ragium:block/cryolite_stairs_inner", - "uvlock": true, - "y": 180 - }, - "facing=west,half=bottom,shape=outer_left": { - "model": "ragium:block/cryolite_stairs_outer", - "uvlock": true, - "y": 90 - }, - "facing=west,half=bottom,shape=outer_right": { - "model": "ragium:block/cryolite_stairs_outer", - "uvlock": true, - "y": 180 - }, - "facing=west,half=bottom,shape=straight": { - "model": "ragium:block/cryolite_stairs", - "uvlock": true, - "y": 180 - }, - "facing=west,half=top,shape=inner_left": { - "model": "ragium:block/cryolite_stairs_inner", - "uvlock": true, - "x": 180, - "y": 180 - }, - "facing=west,half=top,shape=inner_right": { - "model": "ragium:block/cryolite_stairs_inner", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=west,half=top,shape=outer_left": { - "model": "ragium:block/cryolite_stairs_outer", - "uvlock": true, - "x": 180, - "y": 180 - }, - "facing=west,half=top,shape=outer_right": { - "model": "ragium:block/cryolite_stairs_outer", - "uvlock": true, - "x": 180, - "y": 270 - }, - "facing=west,half=top,shape=straight": { - "model": "ragium:block/cryolite_stairs", - "uvlock": true, - "x": 180, - "y": 180 - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/blockstates/electrolyzer.json b/src/generated/resources/assets/ragium/blockstates/electrolyzer.json index 48bc37471f..47fbf005cb 100644 --- a/src/generated/resources/assets/ragium/blockstates/electrolyzer.json +++ b/src/generated/resources/assets/ragium/blockstates/electrolyzer.json @@ -1,7 +1,7 @@ { "variants": { "facing=east,is_active=false": { - "model": "ragium:block/machine/chemical", + "model": "ragium:block/machine/electronics", "y": 90 }, "facing=east,is_active=true": { @@ -9,13 +9,13 @@ "y": 90 }, "facing=north,is_active=false": { - "model": "ragium:block/machine/chemical" + "model": "ragium:block/machine/electronics" }, "facing=north,is_active=true": { "model": "ragium:block/electrolyzer" }, "facing=south,is_active=false": { - "model": "ragium:block/machine/chemical", + "model": "ragium:block/machine/electronics", "y": 180 }, "facing=south,is_active=true": { @@ -23,7 +23,7 @@ "y": 180 }, "facing=west,is_active=false": { - "model": "ragium:block/machine/chemical", + "model": "ragium:block/machine/electronics", "y": 270 }, "facing=west,is_active=true": { diff --git a/src/generated/resources/assets/ragium/blockstates/fluid_output_bus.json b/src/generated/resources/assets/ragium/blockstates/fluid_output_bus.json new file mode 100644 index 0000000000..ffc971dedf --- /dev/null +++ b/src/generated/resources/assets/ragium/blockstates/fluid_output_bus.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "ragium:block/fluid_output_bus" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/blockstates/fluorite_wall.json b/src/generated/resources/assets/ragium/blockstates/fluorite_wall.json new file mode 100644 index 0000000000..815c4c55f5 --- /dev/null +++ b/src/generated/resources/assets/ragium/blockstates/fluorite_wall.json @@ -0,0 +1,90 @@ +{ + "multipart": [ + { + "apply": { + "model": "ragium:block/fluorite_wall_post" + }, + "when": { + "up": "true" + } + }, + { + "apply": { + "model": "ragium:block/fluorite_wall_side", + "uvlock": true + }, + "when": { + "north": "low" + } + }, + { + "apply": { + "model": "ragium:block/fluorite_wall_side", + "uvlock": true, + "y": 90 + }, + "when": { + "east": "low" + } + }, + { + "apply": { + "model": "ragium:block/fluorite_wall_side", + "uvlock": true, + "y": 180 + }, + "when": { + "south": "low" + } + }, + { + "apply": { + "model": "ragium:block/fluorite_wall_side", + "uvlock": true, + "y": 270 + }, + "when": { + "west": "low" + } + }, + { + "apply": { + "model": "ragium:block/fluorite_wall_side_tall", + "uvlock": true + }, + "when": { + "north": "tall" + } + }, + { + "apply": { + "model": "ragium:block/fluorite_wall_side_tall", + "uvlock": true, + "y": 90 + }, + "when": { + "east": "tall" + } + }, + { + "apply": { + "model": "ragium:block/fluorite_wall_side_tall", + "uvlock": true, + "y": 180 + }, + "when": { + "south": "tall" + } + }, + { + "apply": { + "model": "ragium:block/fluorite_wall_side_tall", + "uvlock": true, + "y": 270 + }, + "when": { + "west": "tall" + } + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/blockstates/freezer.json b/src/generated/resources/assets/ragium/blockstates/freezer.json index d4c8248a23..74fbaa4ddf 100644 --- a/src/generated/resources/assets/ragium/blockstates/freezer.json +++ b/src/generated/resources/assets/ragium/blockstates/freezer.json @@ -1,7 +1,7 @@ { "variants": { "facing=east,is_active=false": { - "model": "ragium:block/machine/heat", + "model": "ragium:block/machine/cryo", "y": 90 }, "facing=east,is_active=true": { @@ -9,13 +9,13 @@ "y": 90 }, "facing=north,is_active=false": { - "model": "ragium:block/machine/heat" + "model": "ragium:block/machine/cryo" }, "facing=north,is_active=true": { "model": "ragium:block/freezer" }, "facing=south,is_active=false": { - "model": "ragium:block/machine/heat", + "model": "ragium:block/machine/cryo", "y": 180 }, "facing=south,is_active=true": { @@ -23,7 +23,7 @@ "y": 180 }, "facing=west,is_active=false": { - "model": "ragium:block/machine/heat", + "model": "ragium:block/machine/cryo", "y": 270 }, "facing=west,is_active=true": { diff --git a/src/generated/resources/assets/ragium/blockstates/potion_tank.json b/src/generated/resources/assets/ragium/blockstates/potion_tank.json new file mode 100644 index 0000000000..c98021c972 --- /dev/null +++ b/src/generated/resources/assets/ragium/blockstates/potion_tank.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "ragium:block/potion_tank" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/blockstates/quartz_glass.json b/src/generated/resources/assets/ragium/blockstates/quartz_glass.json new file mode 100644 index 0000000000..cbb912bf02 --- /dev/null +++ b/src/generated/resources/assets/ragium/blockstates/quartz_glass.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "ragium:block/quartz_glass" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/blockstates/quartz_glass_pane.json b/src/generated/resources/assets/ragium/blockstates/quartz_glass_pane.json new file mode 100644 index 0000000000..832ad7c705 --- /dev/null +++ b/src/generated/resources/assets/ragium/blockstates/quartz_glass_pane.json @@ -0,0 +1,77 @@ +{ + "multipart": [ + { + "apply": { + "model": "ragium:block/quartz_glass_pane_post" + } + }, + { + "apply": { + "model": "ragium:block/quartz_glass_pane_side" + }, + "when": { + "north": "true" + } + }, + { + "apply": { + "model": "ragium:block/quartz_glass_pane_side", + "y": 90 + }, + "when": { + "east": "true" + } + }, + { + "apply": { + "model": "ragium:block/quartz_glass_pane_side_alt" + }, + "when": { + "south": "true" + } + }, + { + "apply": { + "model": "ragium:block/quartz_glass_pane_side_alt", + "y": 90 + }, + "when": { + "west": "true" + } + }, + { + "apply": { + "model": "ragium:block/quartz_glass_pane_noside" + }, + "when": { + "north": "false" + } + }, + { + "apply": { + "model": "ragium:block/quartz_glass_pane_noside_alt" + }, + "when": { + "east": "false" + } + }, + { + "apply": { + "model": "ragium:block/quartz_glass_pane_noside_alt", + "y": 90 + }, + "when": { + "south": "false" + } + }, + { + "apply": { + "model": "ragium:block/quartz_glass_pane_noside", + "y": 270 + }, + "when": { + "west": "false" + } + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/blockstates/salt_water.json b/src/generated/resources/assets/ragium/blockstates/salt_water.json new file mode 100644 index 0000000000..bd4a894986 --- /dev/null +++ b/src/generated/resources/assets/ragium/blockstates/salt_water.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "ragium:block/salt_water" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/items/alcohol_bucket.json b/src/generated/resources/assets/ragium/items/alcohol_bucket.json new file mode 100644 index 0000000000..350de685ee --- /dev/null +++ b/src/generated/resources/assets/ragium/items/alcohol_bucket.json @@ -0,0 +1,12 @@ +{ + "model": { + "type": "neoforge:fluid_container", + "apply_fluid_luminosity": false, + "fluid": "ragium:alcohol", + "textures": { + "base": "minecraft:item/bucket", + "fluid": "neoforge:item/mask/bucket_fluid", + "particle": "minecraft:item/bucket" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/items/aldehyde_bucket.json b/src/generated/resources/assets/ragium/items/aldehyde_bucket.json new file mode 100644 index 0000000000..853f45a164 --- /dev/null +++ b/src/generated/resources/assets/ragium/items/aldehyde_bucket.json @@ -0,0 +1,12 @@ +{ + "model": { + "type": "neoforge:fluid_container", + "apply_fluid_luminosity": false, + "fluid": "ragium:aldehyde", + "textures": { + "base": "minecraft:item/bucket", + "fluid": "neoforge:item/mask/bucket_fluid", + "particle": "minecraft:item/bucket" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/items/circuit_chip.json b/src/generated/resources/assets/ragium/items/carbon_fiber.json similarity index 56% rename from src/generated/resources/assets/ragium/items/circuit_chip.json rename to src/generated/resources/assets/ragium/items/carbon_fiber.json index 2557a36f8a..24627ae3cf 100644 --- a/src/generated/resources/assets/ragium/items/circuit_chip.json +++ b/src/generated/resources/assets/ragium/items/carbon_fiber.json @@ -1,6 +1,6 @@ { "model": { "type": "minecraft:model", - "model": "ragium:item/circuit_chip" + "model": "ragium:item/carbon_fiber" } } \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/items/cryolite.json b/src/generated/resources/assets/ragium/items/cement.json similarity index 58% rename from src/generated/resources/assets/ragium/items/cryolite.json rename to src/generated/resources/assets/ragium/items/cement.json index e24430fe02..53fa74ebed 100644 --- a/src/generated/resources/assets/ragium/items/cryolite.json +++ b/src/generated/resources/assets/ragium/items/cement.json @@ -1,6 +1,6 @@ { "model": { "type": "minecraft:model", - "model": "ragium:item/cryolite" + "model": "ragium:item/cement" } } \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/items/cryolite_dust.json b/src/generated/resources/assets/ragium/items/cfrp_plate.json similarity index 55% rename from src/generated/resources/assets/ragium/items/cryolite_dust.json rename to src/generated/resources/assets/ragium/items/cfrp_plate.json index 6aea72d9b2..6814337876 100644 --- a/src/generated/resources/assets/ragium/items/cryolite_dust.json +++ b/src/generated/resources/assets/ragium/items/cfrp_plate.json @@ -1,6 +1,6 @@ { "model": { "type": "minecraft:model", - "model": "ragium:item/cryolite_dust" + "model": "ragium:item/cfrp_plate" } } \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/items/cryolite_stairs.json b/src/generated/resources/assets/ragium/items/cryolite_stairs.json deleted file mode 100644 index 9aa78038be..0000000000 --- a/src/generated/resources/assets/ragium/items/cryolite_stairs.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "model": { - "type": "minecraft:model", - "model": "ragium:block/cryolite_stairs" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/items/fluid_output_bus.json b/src/generated/resources/assets/ragium/items/fluid_output_bus.json new file mode 100644 index 0000000000..ff3f8e7a28 --- /dev/null +++ b/src/generated/resources/assets/ragium/items/fluid_output_bus.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "ragium:block/fluid_output_bus" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/items/fluorite_wall.json b/src/generated/resources/assets/ragium/items/fluorite_wall.json new file mode 100644 index 0000000000..282562066b --- /dev/null +++ b/src/generated/resources/assets/ragium/items/fluorite_wall.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "ragium:block/fluorite_wall_inventory" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/items/cryolite_slab.json b/src/generated/resources/assets/ragium/items/gypsum_dust.json similarity index 54% rename from src/generated/resources/assets/ragium/items/cryolite_slab.json rename to src/generated/resources/assets/ragium/items/gypsum_dust.json index 38ef6ed7a0..ded27915ca 100644 --- a/src/generated/resources/assets/ragium/items/cryolite_slab.json +++ b/src/generated/resources/assets/ragium/items/gypsum_dust.json @@ -1,6 +1,6 @@ { "model": { "type": "minecraft:model", - "model": "ragium:block/cryolite_slab" + "model": "ragium:item/gypsum_dust" } } \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/items/lime_dust.json b/src/generated/resources/assets/ragium/items/lime_dust.json new file mode 100644 index 0000000000..f67dd04a3b --- /dev/null +++ b/src/generated/resources/assets/ragium/items/lime_dust.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "ragium:item/lime_dust" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/items/ore_slurry_bucket.json b/src/generated/resources/assets/ragium/items/molten_plastic_bucket.json similarity index 87% rename from src/generated/resources/assets/ragium/items/ore_slurry_bucket.json rename to src/generated/resources/assets/ragium/items/molten_plastic_bucket.json index 2ba314b923..f85fd43f56 100644 --- a/src/generated/resources/assets/ragium/items/ore_slurry_bucket.json +++ b/src/generated/resources/assets/ragium/items/molten_plastic_bucket.json @@ -2,7 +2,7 @@ "model": { "type": "neoforge:fluid_container", "apply_fluid_luminosity": false, - "fluid": "ragium:ore_slurry", + "fluid": "ragium:molten_plastic", "textures": { "base": "minecraft:item/bucket", "fluid": "neoforge:item/mask/bucket_fluid_drip", diff --git a/src/generated/resources/assets/ragium/items/mortar.json b/src/generated/resources/assets/ragium/items/mortar.json new file mode 100644 index 0000000000..8cc764b4f0 --- /dev/null +++ b/src/generated/resources/assets/ragium/items/mortar.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "ragium:item/mortar" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/items/nitrogen_bucket.json b/src/generated/resources/assets/ragium/items/nitrogen_bucket.json new file mode 100644 index 0000000000..edcd279f2b --- /dev/null +++ b/src/generated/resources/assets/ragium/items/nitrogen_bucket.json @@ -0,0 +1,13 @@ +{ + "model": { + "type": "neoforge:fluid_container", + "apply_fluid_luminosity": false, + "flip_gas": true, + "fluid": "ragium:nitrogen", + "textures": { + "base": "minecraft:item/bucket", + "fluid": "neoforge:item/mask/bucket_fluid", + "particle": "minecraft:item/bucket" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/items/potion_tank.json b/src/generated/resources/assets/ragium/items/potion_tank.json new file mode 100644 index 0000000000..0ccff2694d --- /dev/null +++ b/src/generated/resources/assets/ragium/items/potion_tank.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "ragium:block/potion_tank" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/items/quartz_glass.json b/src/generated/resources/assets/ragium/items/quartz_glass.json new file mode 100644 index 0000000000..5697662cb1 --- /dev/null +++ b/src/generated/resources/assets/ragium/items/quartz_glass.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "ragium:block/quartz_glass" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/items/quartz_glass_pane.json b/src/generated/resources/assets/ragium/items/quartz_glass_pane.json new file mode 100644 index 0000000000..462c60eeb0 --- /dev/null +++ b/src/generated/resources/assets/ragium/items/quartz_glass_pane.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "ragium:item/quartz_glass_pane" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/items/cryolite_block.json b/src/generated/resources/assets/ragium/items/quick_lime_dust.json similarity index 54% rename from src/generated/resources/assets/ragium/items/cryolite_block.json rename to src/generated/resources/assets/ragium/items/quick_lime_dust.json index db77e8f7d3..ebf8648445 100644 --- a/src/generated/resources/assets/ragium/items/cryolite_block.json +++ b/src/generated/resources/assets/ragium/items/quick_lime_dust.json @@ -1,6 +1,6 @@ { "model": { "type": "minecraft:model", - "model": "ragium:block/cryolite_block" + "model": "ragium:item/quick_lime_dust" } } \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/items/salt_water_bucket.json b/src/generated/resources/assets/ragium/items/salt_water_bucket.json new file mode 100644 index 0000000000..7c048af530 --- /dev/null +++ b/src/generated/resources/assets/ragium/items/salt_water_bucket.json @@ -0,0 +1,12 @@ +{ + "model": { + "type": "neoforge:fluid_container", + "apply_fluid_luminosity": false, + "fluid": "ragium:salt_water", + "textures": { + "base": "minecraft:item/bucket", + "fluid": "neoforge:item/mask/bucket_fluid", + "particle": "minecraft:item/bucket" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/items/silicon_chip.json b/src/generated/resources/assets/ragium/items/silicon_chip.json new file mode 100644 index 0000000000..9052c33356 --- /dev/null +++ b/src/generated/resources/assets/ragium/items/silicon_chip.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "ragium:item/silicon_chip" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/items/soda_ash_dust.json b/src/generated/resources/assets/ragium/items/soda_ash_dust.json new file mode 100644 index 0000000000..f1ba4092b4 --- /dev/null +++ b/src/generated/resources/assets/ragium/items/soda_ash_dust.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "ragium:item/soda_ash_dust" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/items/sticky_ball.json b/src/generated/resources/assets/ragium/items/sticky_ball.json new file mode 100644 index 0000000000..481f769dcb --- /dev/null +++ b/src/generated/resources/assets/ragium/items/sticky_ball.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "ragium:item/sticky_ball" + } +} \ 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 d0dee0cd12..ec2ad33968 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", + "block.ragium.alcohol": "Alcohol", + "block.ragium.aldehyde": "Aldehyde", "block.ragium.alloy_smelter": "Alloy Smelter", "block.ragium.alumina_solution": "Alumina Solution", "block.ragium.aluminum_block": "Block of Aluminum", @@ -43,9 +45,6 @@ "block.ragium.creative_tank": "Creative Tank", "block.ragium.crude_oil": "Crude Oil", "block.ragium.crusher": "Crusher", - "block.ragium.cryolite_block": "Block of Cryolite", - "block.ragium.cryolite_slab": "Cryolite Slab", - "block.ragium.cryolite_stairs": "Cryolite Stairs", "block.ragium.cutting_machine": "Cutting Machine", "block.ragium.cyan_dye": "Cyan Dye", "block.ragium.deepslate_niter_ore": "Deepslate Niter Ore", @@ -54,9 +53,11 @@ "block.ragium.electrolyzer": "Electrolyzer", "block.ragium.electronics_machine_casing": "Machine Casing (Electronics)", "block.ragium.enchanter": "Enchanter", + "block.ragium.fluid_output_bus": "Fluid Output Bus", "block.ragium.fluorite_block": "Block of Fluorite", "block.ragium.fluorite_slab": "Fluorite Slab", "block.ragium.fluorite_stairs": "Fluorite Stairs", + "block.ragium.fluorite_wall": "Fluorite Wall", "block.ragium.freezer": "Freezer", "block.ragium.fuel": "Fuel", "block.ragium.gray_dye": "Gray Dye", @@ -80,25 +81,30 @@ "block.ragium.molten_ender": "Resonant Ender", "block.ragium.molten_glass": "Molten Glass", "block.ragium.molten_glowstone": "Energized Glowstone", + "block.ragium.molten_plastic": "Molten Plastic", "block.ragium.molten_redstone": "Destabilized Redstone", "block.ragium.naphtha": "Naphtha", "block.ragium.nether_niter_ore": "Nether Niter Ore", "block.ragium.nether_sulfur_ore": "Nether Sulfur Ore", "block.ragium.niter_ore": "Niter Ore", "block.ragium.nitric_acid": "Nitric Acid", + "block.ragium.nitrogen": "Nitrogen", "block.ragium.ominous_flux": "Ominous Flux", "block.ragium.orange_dye": "Orange Dye", - "block.ragium.ore_slurry": "Invalid Ore Slurry", "block.ragium.oxygen": "Oxygen", "block.ragium.pink_dye": "Pink Dye", "block.ragium.pitch_coke_block": "Block of Pitch Coke", "block.ragium.planter": "Planter", + "block.ragium.potion_tank": "Potion Tank", "block.ragium.precision_assembler": "Precision Assembler", "block.ragium.purple_dye": "Purple Dye", "block.ragium.pyrolyzer": "Pyrolyzer", + "block.ragium.quartz_glass": "Quartz Glass", + "block.ragium.quartz_glass_pane": "Quartz Glass Pane", "block.ragium.red_dye": "Red Dye", "block.ragium.refinery": "Refinery", "block.ragium.resin": "Resin", + "block.ragium.salt_water": "Salt Water", "block.ragium.scanner": "Laser Scanner", "block.ragium.smelter": "Smelter", "block.ragium.sodium_hydroxide_solution": "Sodium Hydroxide Solution", @@ -185,6 +191,8 @@ "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.alcohol_bucket": "Alcohol Bucket", + "item.ragium.aldehyde_bucket": "Aldehyde Bucket", "item.ragium.alumina_dust": "Alumina Dust", "item.ragium.alumina_solution_bucket": "Alumina Solution Bucket", "item.ragium.aluminum_ingot": "Aluminum Ingot", @@ -205,11 +213,13 @@ "item.ragium.borax_dust": "Borax Dust", "item.ragium.brown_dye_bucket": "Brown Dye Bucket", "item.ragium.carbon_dust": "Carbon Dust", + "item.ragium.carbon_fiber": "Carbon Fiber", + "item.ragium.cement": "Cement", + "item.ragium.cfrp_plate": "CFRP Plate", "item.ragium.charcoal_dust": "Charcoal Dust", "item.ragium.chemical_machine_parts": "Machine Parts (Chemical)", "item.ragium.chlorine_bucket": "Chlorine Bucket", "item.ragium.circuit_board": "Circuit Board", - "item.ragium.circuit_chip": "Circuit Chip", "item.ragium.coal_coke": "Coal Coke", "item.ragium.coal_dust": "Coal Dust", "item.ragium.coal_tar_bucket": "Coal Tar Bucket", @@ -217,8 +227,6 @@ "item.ragium.copper_gear": "Copper Gear", "item.ragium.crude_oil_bucket": "Crude Oil Bucket", "item.ragium.crude_silicon": "Crude Silicon", - "item.ragium.cryolite": "Cryolite", - "item.ragium.cryolite_dust": "Cryolite Dust", "item.ragium.cyan_dye_bucket": "Cyan Dye Bucket", "item.ragium.diamond_dust": "Diamond Dust", "item.ragium.diamond_gear": "Diamond Gear", @@ -236,6 +244,7 @@ "item.ragium.gold_gear": "Gold Gear", "item.ragium.gray_dye_bucket": "Gray Dye Bucket", "item.ragium.green_dye_bucket": "Green Dye Bucket", + "item.ragium.gypsum_dust": "Gypsum Dust", "item.ragium.heat_machine_parts": "Machine Parts (Heat)", "item.ragium.honey_bucket": "Honey Bucket", "item.ragium.hydrochloric_acid_bucket": "Hydrochloric Acid Bucket", @@ -248,6 +257,7 @@ "item.ragium.lapis_dust": "Lapis Dust", "item.ragium.light_blue_dye_bucket": "Light Blue Dye Bucket", "item.ragium.light_gray_dye_bucket": "Light Gray Dye Bucket", + "item.ragium.lime_dust": "Lime Dust", "item.ragium.lime_dye_bucket": "Lime Dye Bucket", "item.ragium.lingering_bottle": "Lingering Bottle", "item.ragium.liquid_explosive_bucket": "Liquid Explosive Bucket", @@ -257,17 +267,19 @@ "item.ragium.molten_ender_bucket": "Resonant Ender Bucket", "item.ragium.molten_glass_bucket": "Molten Glass Bucket", "item.ragium.molten_glowstone_bucket": "Energized Glowstone Bucket", + "item.ragium.molten_plastic_bucket": "Molten Plastic Bucket", "item.ragium.molten_redstone_bucket": "Destabilized Redstone Bucket", + "item.ragium.mortar": "Mortar", "item.ragium.naphtha_bucket": "Naphtha Bucket", "item.ragium.netherite_dust": "Netherite Dust", "item.ragium.netherite_gear": "Netherite Gear", "item.ragium.netherite_nugget": "Netherite Nugget", "item.ragium.niter_dust": "Niter Dust", "item.ragium.nitric_acid_bucket": "Nitric Acid Bucket", + "item.ragium.nitrogen_bucket": "Nitrogen Bucket", "item.ragium.obsidian_dust": "Obsidian Dust", "item.ragium.ominous_flux_bucket": "Ominous Flux Bucket", "item.ragium.orange_dye_bucket": "Orange Dye Bucket", - "item.ragium.ore_slurry_bucket": "%1$s Bucket", "item.ragium.oxygen_bucket": "Oxygen Bucket", "item.ragium.paper_dust": "Paper Pulp", "item.ragium.particle_board": "Particle Board", @@ -278,12 +290,16 @@ "item.ragium.prismarine_dust": "Prismarine Dust", "item.ragium.purple_dye_bucket": "Purple Dye Bucket", "item.ragium.quartz_dust": "Quartz Dust", + "item.ragium.quick_lime_dust": "Quick Lime Dust", "item.ragium.raginite_dust": "Raginite Dust", "item.ragium.red_dye_bucket": "Red Dye Bucket", "item.ragium.resin_bucket": "Resin Bucket", "item.ragium.salt_dust": "Salt Dust", + "item.ragium.salt_water_bucket": "Salt Water Bucket", + "item.ragium.silicon_chip": "Silicon Chip", "item.ragium.silicon_dust": "Silicon Dust", "item.ragium.silicon_wafer": "Silicon Wafer", + "item.ragium.soda_ash_dust": "Soda Ash Dust", "item.ragium.sodium_hydroxide_solution_bucket": "Sodium Hydroxide Solution Bucket", "item.ragium.sooty_iron_axe": "Sooty Iron Axe", "item.ragium.sooty_iron_hoe": "Sooty Iron Hoe", @@ -293,6 +309,7 @@ "item.ragium.sooty_iron_shovel": "Sooty Iron Shovel", "item.ragium.sooty_iron_sword": "Sooty Iron Sword", "item.ragium.splash_bottle": "Splash Bottle", + "item.ragium.sticky_ball": "Sticky Ball", "item.ragium.sulfur_dioxide_bucket": "Sulfur Dioxide Bucket", "item.ragium.sulfur_dust": "Sulfur Dust", "item.ragium.sulfur_trioxide_bucket": "Sulfur Trioxide Bucket", @@ -315,14 +332,61 @@ "item.ragium.wood_gear": "Wood Gear", "item.ragium.wood_tar_bucket": "Wood Tar Bucket", "item.ragium.yellow_dye_bucket": "Yellow Dye Bucket", - "ragium.ore_slurry_data.ragium.copper": "Copper Ore Slurry", - "ragium.ore_slurry_data.ragium.gold": "Gold Ore Slurry", - "ragium.ore_slurry_data.ragium.iron": "Iron Ore Slurry", - "ragium.ore_slurry_data.ragium.netherite_scrap": "Ancient Debris Slurry", + "ragium.chemical.ragium.aluminum": "Aluminum", + "ragium.chemical.ragium.aluminum_fluoride": "Aluminum Fluoride", + "ragium.chemical.ragium.aluminum_oxide": "Aluminum Oxide", + "ragium.chemical.ragium.calcium_carbonate": "Calcium Carbonate", + "ragium.chemical.ragium.calcium_oxide": "Calcium Oxide", + "ragium.chemical.ragium.calcium_sulfate": "Calcium Sulfate", + "ragium.chemical.ragium.carbon": "Carbon", + "ragium.chemical.ragium.carbonate": "Carbonate", + "ragium.chemical.ragium.chlorine": "Chlorine", + "ragium.chemical.ragium.copper": "Copper", + "ragium.chemical.ragium.cryolite": "Cryolite", + "ragium.chemical.ragium.diamond": "Diamond", + "ragium.chemical.ragium.fluorite": "Fluorite", + "ragium.chemical.ragium.gold": "Gold", + "ragium.chemical.ragium.hydrogen": "Hydrogen", + "ragium.chemical.ragium.hydrogen_chloride": "Hydrogen chloride", + "ragium.chemical.ragium.hydrogen_fluoride": "Hydrogen Fluoride", + "ragium.chemical.ragium.hydroxide": "Hydroxide", + "ragium.chemical.ragium.iron": "Iron", + "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_nitrate": "Potassium Nitrate", + "ragium.chemical.ragium.silicon": "Silicon", + "ragium.chemical.ragium.silicon_dioxide": "Silicon Dioxide", + "ragium.chemical.ragium.sodium_carbonate": "Sodium Carbonate", + "ragium.chemical.ragium.sodium_chloride": "Sodium Chloride", + "ragium.chemical.ragium.sodium_hydroxide": "Sodium Hydroxide", + "ragium.chemical.ragium.sulfate": "Sulfate", + "ragium.chemical.ragium.sulfur": "Sulfur", + "ragium.chemical.ragium.sulfur_dioxide": "Sulfur Dioxide", + "ragium.chemical.ragium.sulfur_trioxide": "Sulfur Trioxide", + "ragium.chemical.ragium.sulfuric_acid": "Sulfuric Acid", + "ragium.chemical.ragium.water": "Water", + "ragium.element.ragium.aluminum": "Aluminum", + "ragium.element.ragium.calcium": "Calcium", + "ragium.element.ragium.carbon": "Carbon", + "ragium.element.ragium.chlorine": "Chlorine", + "ragium.element.ragium.copper": "Copper", + "ragium.element.ragium.fluorine": "Fluorine", + "ragium.element.ragium.gold": "Gold", + "ragium.element.ragium.hydrogen": "Hydrogen", + "ragium.element.ragium.iron": "Iron", + "ragium.element.ragium.nitrogen": "Nitrogen", + "ragium.element.ragium.oxygen": "Oxygen", + "ragium.element.ragium.potassium": "Potassium", + "ragium.element.ragium.silicon": "Silicon", + "ragium.element.ragium.sodium": "Sodium", + "ragium.element.ragium.sulfur": "Sulfur", "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", @@ -338,6 +402,9 @@ "recipe_type.ragium.reacting": "Chemical Reacting", "recipe_type.ragium.refining": "Refining", "recipe_type.ragium.resource.extracting": "Resource Extracting", + "recipe_type.ragium.washing": "Washing", + "tag.fluid.c.alcohol": "Alcohol", + "tag.fluid.c.aldehyde": "Aldehyde", "tag.fluid.c.alumina_solution": "Alumina Solution", "tag.fluid.c.anti_rust_oil": "Anti-rust Oil", "tag.fluid.c.aromatic_compound": "Aromatic Compound", @@ -372,18 +439,23 @@ "tag.fluid.c.molten_ender": "Resonant Ender", "tag.fluid.c.molten_glass": "Molten Glass", "tag.fluid.c.molten_glowstone": "Energized Glowstone", + "tag.fluid.c.molten_plastic": "Molten Plastic", "tag.fluid.c.molten_redstone": "Destabilized Redstone", "tag.fluid.c.naphtha": "Naphtha", "tag.fluid.c.nitric_acid": "Nitric Acid", + "tag.fluid.c.nitrogen": "Nitrogen", "tag.fluid.c.ominous_flux": "Ominous Flux", "tag.fluid.c.oxygen": "Oxygen", "tag.fluid.c.resin": "Resin", + "tag.fluid.c.salt_water": "Salt Water", "tag.fluid.c.sodium_hydroxide_solution": "Sodium Hydroxide Solution", "tag.fluid.c.sulfur_dioxide": "Sulfur Dioxide", "tag.fluid.c.sulfur_trioxide": "Sulfur Trioxide", "tag.fluid.c.sulfuric_acid": "Sulfuric Acid", "tag.fluid.c.synthetic_resin": "Synthetic Resin", "tag.fluid.c.wood_tar": "Wood Tar", + "tag.item.c.buckets.alcohol": "Alcohol Bucket", + "tag.item.c.buckets.aldehyde": "Aldehyde Bucket", "tag.item.c.buckets.alumina_solution": "Alumina Solution Bucket", "tag.item.c.buckets.anti_rust_oil": "Anti-rust Oil Bucket", "tag.item.c.buckets.aromatic_compound": "Aromatic Compound Bucket", @@ -418,12 +490,15 @@ "tag.item.c.buckets.molten_ender": "Resonant Ender Bucket", "tag.item.c.buckets.molten_glass": "Molten Glass Bucket", "tag.item.c.buckets.molten_glowstone": "Energized Glowstone Bucket", + "tag.item.c.buckets.molten_plastic": "Molten Plastic Bucket", "tag.item.c.buckets.molten_redstone": "Destabilized Redstone Bucket", "tag.item.c.buckets.naphtha": "Naphtha Bucket", "tag.item.c.buckets.nitric_acid": "Nitric Acid Bucket", + "tag.item.c.buckets.nitrogen": "Nitrogen Bucket", "tag.item.c.buckets.ominous_flux": "Ominous Flux Bucket", "tag.item.c.buckets.oxygen": "Oxygen Bucket", "tag.item.c.buckets.resin": "Resin Bucket", + "tag.item.c.buckets.salt_water": "Salt Water Bucket", "tag.item.c.buckets.sodium_hydroxide_solution": "Sodium Hydroxide Solution Bucket", "tag.item.c.buckets.sulfur_dioxide": "Sulfur Dioxide Bucket", "tag.item.c.buckets.sulfur_trioxide": "Sulfur Trioxide Bucket", diff --git a/src/generated/resources/assets/ragium/lang/ja_jp.json b/src/generated/resources/assets/ragium/lang/ja_jp.json index fae291e3f8..851b2f367b 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": "黒鉄(くろがね)を手に入れる", + "block.ragium.alcohol": "アルコール", + "block.ragium.aldehyde": "アルデヒド", "block.ragium.alloy_smelter": "合金炉", "block.ragium.alumina_solution": "アルミナ水溶液", "block.ragium.aluminum_block": "アルミニウムブロック", @@ -43,9 +45,6 @@ "block.ragium.creative_tank": "クリエイティブ用タンク", "block.ragium.crude_oil": "原油", "block.ragium.crusher": "破砕機", - "block.ragium.cryolite_block": "氷晶石ブロック", - "block.ragium.cryolite_slab": "氷晶石のハーフブロック", - "block.ragium.cryolite_stairs": "氷晶石の階段", "block.ragium.cutting_machine": "裁断機", "block.ragium.cyan_dye": "青緑色の染料", "block.ragium.deepslate_niter_ore": "深層硝石鉱石", @@ -54,9 +53,11 @@ "block.ragium.electrolyzer": "電解機", "block.ragium.electronics_machine_casing": "機械筐体 (電子)", "block.ragium.enchanter": "エンチャンター", + "block.ragium.fluid_output_bus": "液体搬出バス", "block.ragium.fluorite_block": "蛍石ブロック", "block.ragium.fluorite_slab": "蛍石のハーフブロック", "block.ragium.fluorite_stairs": "蛍石の階段", + "block.ragium.fluorite_wall": "蛍石の壁", "block.ragium.freezer": "冷凍機", "block.ragium.fuel": "燃料油", "block.ragium.gray_dye": "灰色の染料", @@ -80,25 +81,30 @@ "block.ragium.molten_ender": "共振エンダー", "block.ragium.molten_glass": "溶融ガラス", "block.ragium.molten_glowstone": "活性グロウストーン", + "block.ragium.molten_plastic": "溶融プラスチック", "block.ragium.molten_redstone": "励起レッドストーン", "block.ragium.naphtha": "ナフサ", "block.ragium.nether_niter_ore": "ネザー硝石鉱石", "block.ragium.nether_sulfur_ore": "ネザー硫黄鉱石", "block.ragium.niter_ore": "硝石鉱石", "block.ragium.nitric_acid": "硝酸", + "block.ragium.nitrogen": "窒素", "block.ragium.ominous_flux": "不吉な流動体", "block.ragium.orange_dye": "橙色の染料", - "block.ragium.ore_slurry": "無効な鉱石泥", "block.ragium.oxygen": "酸素", "block.ragium.pink_dye": "桃色の染料", "block.ragium.pitch_coke_block": "ピッチコークスブロック", "block.ragium.planter": "栽培機", + "block.ragium.potion_tank": "ポーションタンク", "block.ragium.precision_assembler": "精密組立機", "block.ragium.purple_dye": "紫色の染料", "block.ragium.pyrolyzer": "熱分解炉", + "block.ragium.quartz_glass": "クォーツガラス", + "block.ragium.quartz_glass_pane": "クォーツガラス板", "block.ragium.red_dye": "赤色の染料", "block.ragium.refinery": "精製機", "block.ragium.resin": "樹脂", + "block.ragium.salt_water": "塩水", "block.ragium.scanner": "レーザースキャナ", "block.ragium.smelter": "製錬炉", "block.ragium.sodium_hydroxide_solution": "水酸化ナトリウム水溶液", @@ -185,6 +191,8 @@ "item.minecraft.tipped_arrow.effect.hunger": "空腹の矢", "item.minecraft.tipped_arrow.effect.nausea": "吐き気の矢", "item.minecraft.tipped_arrow.effect.wither": "衰退の矢", + "item.ragium.alcohol_bucket": "アルコール入りバケツ", + "item.ragium.aldehyde_bucket": "アルデヒド入りバケツ", "item.ragium.alumina_dust": "アルミナの粉", "item.ragium.alumina_solution_bucket": "アルミナ水溶液入りバケツ", "item.ragium.aluminum_ingot": "アルミニウムインゴット", @@ -205,11 +213,13 @@ "item.ragium.borax_dust": "ホウ砂の粉", "item.ragium.brown_dye_bucket": "茶色の染料入りバケツ", "item.ragium.carbon_dust": "炭素の粉", + "item.ragium.carbon_fiber": "炭素繊維", + "item.ragium.cement": "セメント", + "item.ragium.cfrp_plate": "炭素繊維強化プラスチック板", "item.ragium.charcoal_dust": "木炭の粉", "item.ragium.chemical_machine_parts": "機械部品 (化学)", "item.ragium.chlorine_bucket": "塩素入りバケツ", "item.ragium.circuit_board": "回路基板", - "item.ragium.circuit_chip": "回路チップ", "item.ragium.coal_coke": "石炭コークス", "item.ragium.coal_dust": "石炭の粉", "item.ragium.coal_tar_bucket": "石炭タール入りバケツ", @@ -217,8 +227,6 @@ "item.ragium.copper_gear": "銅の歯車", "item.ragium.crude_oil_bucket": "原油入りバケツ", "item.ragium.crude_silicon": "粗製シリコン", - "item.ragium.cryolite": "氷晶石", - "item.ragium.cryolite_dust": "氷晶石の粉", "item.ragium.cyan_dye_bucket": "青緑色の染料入りバケツ", "item.ragium.diamond_dust": "ダイヤモンドの粉", "item.ragium.diamond_gear": "ダイヤモンドの歯車", @@ -236,6 +244,7 @@ "item.ragium.gold_gear": "金の歯車", "item.ragium.gray_dye_bucket": "灰色の染料入りバケツ", "item.ragium.green_dye_bucket": "緑色の染料入りバケツ", + "item.ragium.gypsum_dust": "石膏の粉", "item.ragium.heat_machine_parts": "機械部品 (熱)", "item.ragium.honey_bucket": "ハチミツ入りバケツ", "item.ragium.hydrochloric_acid_bucket": "塩酸入りバケツ", @@ -248,6 +257,7 @@ "item.ragium.lapis_dust": "ラピスの粉", "item.ragium.light_blue_dye_bucket": "空色の染料入りバケツ", "item.ragium.light_gray_dye_bucket": "薄灰色の染料入りバケツ", + "item.ragium.lime_dust": "石灰の粉", "item.ragium.lime_dye_bucket": "黄緑色の染料入りバケツ", "item.ragium.lingering_bottle": "残留瓶", "item.ragium.liquid_explosive_bucket": "液体爆薬入りバケツ", @@ -257,17 +267,19 @@ "item.ragium.molten_ender_bucket": "共振エンダー入りバケツ", "item.ragium.molten_glass_bucket": "溶融ガラス入りバケツ", "item.ragium.molten_glowstone_bucket": "活性グロウストーン入りバケツ", + "item.ragium.molten_plastic_bucket": "溶融プラスチック入りバケツ", "item.ragium.molten_redstone_bucket": "励起レッドストーン入りバケツ", + "item.ragium.mortar": "モルタル", "item.ragium.naphtha_bucket": "ナフサ入りバケツ", "item.ragium.netherite_dust": "ネザライトの粉", "item.ragium.netherite_gear": "ネザライトの歯車", "item.ragium.netherite_nugget": "ネザライトナゲット", "item.ragium.niter_dust": "硝石の粉", "item.ragium.nitric_acid_bucket": "硝酸入りバケツ", + "item.ragium.nitrogen_bucket": "窒素入りバケツ", "item.ragium.obsidian_dust": "黒曜石の粉", "item.ragium.ominous_flux_bucket": "不吉な流動体入りバケツ", "item.ragium.orange_dye_bucket": "橙色の染料入りバケツ", - "item.ragium.ore_slurry_bucket": "%1$s入りバケツ", "item.ragium.oxygen_bucket": "酸素入りバケツ", "item.ragium.paper_dust": "紙パルプ", "item.ragium.particle_board": "パーティクルボード", @@ -278,12 +290,16 @@ "item.ragium.prismarine_dust": "プリズマリンの粉", "item.ragium.purple_dye_bucket": "紫色の染料入りバケツ", "item.ragium.quartz_dust": "水晶の粉", + "item.ragium.quick_lime_dust": "生石灰の粉", "item.ragium.raginite_dust": "ラギナイトの粉", "item.ragium.red_dye_bucket": "赤色の染料入りバケツ", "item.ragium.resin_bucket": "樹脂入りバケツ", "item.ragium.salt_dust": "食塩の粉", + "item.ragium.salt_water_bucket": "塩水入りバケツ", + "item.ragium.silicon_chip": "シリコンチップ", "item.ragium.silicon_dust": "シリコンの粉", "item.ragium.silicon_wafer": "シリコンウェハ", + "item.ragium.soda_ash_dust": "ソーダ灰の粉", "item.ragium.sodium_hydroxide_solution_bucket": "水酸化ナトリウム水溶液入りバケツ", "item.ragium.sooty_iron_axe": "煤鉄の斧", "item.ragium.sooty_iron_hoe": "煤鉄のクワ", @@ -293,6 +309,7 @@ "item.ragium.sooty_iron_shovel": "煤鉄のショベル", "item.ragium.sooty_iron_sword": "煤鉄の剣", "item.ragium.splash_bottle": "スプラッシュ瓶", + "item.ragium.sticky_ball": "粘着質な塊", "item.ragium.sulfur_dioxide_bucket": "二酸化硫黄入りバケツ", "item.ragium.sulfur_dust": "硫黄の粉", "item.ragium.sulfur_trioxide_bucket": "三酸化硫黄入りバケツ", @@ -315,14 +332,61 @@ "item.ragium.wood_gear": "木の歯車", "item.ragium.wood_tar_bucket": "木タール入りバケツ", "item.ragium.yellow_dye_bucket": "黄色の染料入りバケツ", - "ragium.ore_slurry_data.ragium.copper": "銅の鉱石泥", - "ragium.ore_slurry_data.ragium.gold": "金の鉱石泥", - "ragium.ore_slurry_data.ragium.iron": "鉄の鉱石泥", - "ragium.ore_slurry_data.ragium.netherite_scrap": "古代の鉱石泥", + "ragium.chemical.ragium.aluminum": "アルミニウム", + "ragium.chemical.ragium.aluminum_fluoride": "フッ化アルミニウム", + "ragium.chemical.ragium.aluminum_oxide": "酸化アルミニウム", + "ragium.chemical.ragium.calcium_carbonate": "炭酸カルシウム", + "ragium.chemical.ragium.calcium_oxide": "酸化カルシウム", + "ragium.chemical.ragium.calcium_sulfate": "硫酸カルシウム", + "ragium.chemical.ragium.carbon": "炭素", + "ragium.chemical.ragium.carbonate": "炭酸塩", + "ragium.chemical.ragium.chlorine": "塩素", + "ragium.chemical.ragium.copper": "銅", + "ragium.chemical.ragium.cryolite": "氷晶石", + "ragium.chemical.ragium.diamond": "ダイヤモンド", + "ragium.chemical.ragium.fluorite": "蛍石", + "ragium.chemical.ragium.gold": "金", + "ragium.chemical.ragium.hydrogen": "水素", + "ragium.chemical.ragium.hydrogen_chloride": "塩化水素", + "ragium.chemical.ragium.hydrogen_fluoride": "フッ化水素", + "ragium.chemical.ragium.hydroxide": "水酸化物", + "ragium.chemical.ragium.iron": "鉄", + "ragium.chemical.ragium.nitrate": "硝酸塩", + "ragium.chemical.ragium.nitric_acid": "硝酸", + "ragium.chemical.ragium.nitrogen": "窒素", + "ragium.chemical.ragium.oxygen": "酸素", + "ragium.chemical.ragium.potassium_nitrate": "硝酸カリウム", + "ragium.chemical.ragium.silicon": "ケイ素", + "ragium.chemical.ragium.silicon_dioxide": "二酸化ケイ素", + "ragium.chemical.ragium.sodium_carbonate": "炭酸ナトリウム", + "ragium.chemical.ragium.sodium_chloride": "塩化ナトリウム", + "ragium.chemical.ragium.sodium_hydroxide": "水酸化ナトリウム", + "ragium.chemical.ragium.sulfate": "硫酸塩", + "ragium.chemical.ragium.sulfur": "硫黄", + "ragium.chemical.ragium.sulfur_dioxide": "二酸化硫黄", + "ragium.chemical.ragium.sulfur_trioxide": "三酸化硫黄", + "ragium.chemical.ragium.sulfuric_acid": "硫酸", + "ragium.chemical.ragium.water": "水", + "ragium.element.ragium.aluminum": "アルミニウム", + "ragium.element.ragium.calcium": "カルシウム", + "ragium.element.ragium.carbon": "炭素", + "ragium.element.ragium.chlorine": "塩素", + "ragium.element.ragium.copper": "銅", + "ragium.element.ragium.fluorine": "フッ素", + "ragium.element.ragium.gold": "金", + "ragium.element.ragium.hydrogen": "水素", + "ragium.element.ragium.iron": "鉄", + "ragium.element.ragium.nitrogen": "窒素", + "ragium.element.ragium.oxygen": "酸素", + "ragium.element.ragium.potassium": "カリウム", + "ragium.element.ragium.silicon": "ケイ素", + "ragium.element.ragium.sodium": "ナトリウム", + "ragium.element.ragium.sulfur": "硫黄", "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": "切断", @@ -338,6 +402,9 @@ "recipe_type.ragium.reacting": "化学反応", "recipe_type.ragium.refining": "蒸留", "recipe_type.ragium.resource.extracting": "資源採集", + "recipe_type.ragium.washing": "洗浄", + "tag.fluid.c.alcohol": "アルコール", + "tag.fluid.c.aldehyde": "アルデヒド", "tag.fluid.c.alumina_solution": "アルミナ水溶液", "tag.fluid.c.anti_rust_oil": "防錆油", "tag.fluid.c.aromatic_compound": "芳香族化合物", @@ -372,18 +439,23 @@ "tag.fluid.c.molten_ender": "共振エンダー", "tag.fluid.c.molten_glass": "溶融ガラス", "tag.fluid.c.molten_glowstone": "活性グロウストーン", + "tag.fluid.c.molten_plastic": "溶融プラスチック", "tag.fluid.c.molten_redstone": "励起レッドストーン", "tag.fluid.c.naphtha": "ナフサ", "tag.fluid.c.nitric_acid": "硝酸", + "tag.fluid.c.nitrogen": "窒素", "tag.fluid.c.ominous_flux": "不吉な流動体", "tag.fluid.c.oxygen": "酸素", "tag.fluid.c.resin": "樹脂", + "tag.fluid.c.salt_water": "塩水", "tag.fluid.c.sodium_hydroxide_solution": "水酸化ナトリウム水溶液", "tag.fluid.c.sulfur_dioxide": "二酸化硫黄", "tag.fluid.c.sulfur_trioxide": "三酸化硫黄", "tag.fluid.c.sulfuric_acid": "硫酸", "tag.fluid.c.synthetic_resin": "合成樹脂", "tag.fluid.c.wood_tar": "木タール", + "tag.item.c.buckets.alcohol": "アルコール入りバケツ", + "tag.item.c.buckets.aldehyde": "アルデヒド入りバケツ", "tag.item.c.buckets.alumina_solution": "アルミナ水溶液入りバケツ", "tag.item.c.buckets.anti_rust_oil": "防錆油入りバケツ", "tag.item.c.buckets.aromatic_compound": "芳香族化合物入りバケツ", @@ -418,12 +490,15 @@ "tag.item.c.buckets.molten_ender": "共振エンダー入りバケツ", "tag.item.c.buckets.molten_glass": "溶融ガラス入りバケツ", "tag.item.c.buckets.molten_glowstone": "活性グロウストーン入りバケツ", + "tag.item.c.buckets.molten_plastic": "溶融プラスチック入りバケツ", "tag.item.c.buckets.molten_redstone": "励起レッドストーン入りバケツ", "tag.item.c.buckets.naphtha": "ナフサ入りバケツ", "tag.item.c.buckets.nitric_acid": "硝酸入りバケツ", + "tag.item.c.buckets.nitrogen": "窒素入りバケツ", "tag.item.c.buckets.ominous_flux": "不吉な流動体入りバケツ", "tag.item.c.buckets.oxygen": "酸素入りバケツ", "tag.item.c.buckets.resin": "樹脂入りバケツ", + "tag.item.c.buckets.salt_water": "塩水入りバケツ", "tag.item.c.buckets.sodium_hydroxide_solution": "水酸化ナトリウム水溶液入りバケツ", "tag.item.c.buckets.sulfur_dioxide": "二酸化硫黄入りバケツ", "tag.item.c.buckets.sulfur_trioxide": "三酸化硫黄入りバケツ", diff --git a/src/generated/resources/assets/ragium/models/block/cryolite_block.json b/src/generated/resources/assets/ragium/models/block/cryolite_block.json deleted file mode 100644 index 358c7a98f8..0000000000 --- a/src/generated/resources/assets/ragium/models/block/cryolite_block.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/cube_all", - "textures": { - "all": "ragium:block/cryolite_block" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/models/block/cryolite_slab.json b/src/generated/resources/assets/ragium/models/block/cryolite_slab.json deleted file mode 100644 index 483227ad38..0000000000 --- a/src/generated/resources/assets/ragium/models/block/cryolite_slab.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/slab", - "textures": { - "bottom": "ragium:block/cryolite_block", - "side": "ragium:block/cryolite_block", - "top": "ragium:block/cryolite_block" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/models/block/cryolite_slab_top.json b/src/generated/resources/assets/ragium/models/block/cryolite_slab_top.json deleted file mode 100644 index eb934758e1..0000000000 --- a/src/generated/resources/assets/ragium/models/block/cryolite_slab_top.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/slab_top", - "textures": { - "bottom": "ragium:block/cryolite_block", - "side": "ragium:block/cryolite_block", - "top": "ragium:block/cryolite_block" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/models/block/cryolite_stairs.json b/src/generated/resources/assets/ragium/models/block/cryolite_stairs.json deleted file mode 100644 index 9e104411c7..0000000000 --- a/src/generated/resources/assets/ragium/models/block/cryolite_stairs.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/stairs", - "textures": { - "bottom": "ragium:block/cryolite_block", - "side": "ragium:block/cryolite_block", - "top": "ragium:block/cryolite_block" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/models/block/cryolite_stairs_inner.json b/src/generated/resources/assets/ragium/models/block/cryolite_stairs_inner.json deleted file mode 100644 index 71fab6dd07..0000000000 --- a/src/generated/resources/assets/ragium/models/block/cryolite_stairs_inner.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/inner_stairs", - "textures": { - "bottom": "ragium:block/cryolite_block", - "side": "ragium:block/cryolite_block", - "top": "ragium:block/cryolite_block" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/models/block/cryolite_stairs_outer.json b/src/generated/resources/assets/ragium/models/block/cryolite_stairs_outer.json deleted file mode 100644 index c0925acb40..0000000000 --- a/src/generated/resources/assets/ragium/models/block/cryolite_stairs_outer.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "minecraft:block/outer_stairs", - "textures": { - "bottom": "ragium:block/cryolite_block", - "side": "ragium:block/cryolite_block", - "top": "ragium:block/cryolite_block" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/models/block/electrolyzer.json b/src/generated/resources/assets/ragium/models/block/electrolyzer.json index 871ea10fd4..92bd9d14eb 100644 --- a/src/generated/resources/assets/ragium/models/block/electrolyzer.json +++ b/src/generated/resources/assets/ragium/models/block/electrolyzer.json @@ -2,7 +2,7 @@ "parent": "minecraft:block/orientable", "textures": { "front": "ragium:block/electrolyzer_front", - "side": "ragium:block/machine/chemical_side", + "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/fluid_output_bus.json b/src/generated/resources/assets/ragium/models/block/fluid_output_bus.json new file mode 100644 index 0000000000..bd83ffe6ca --- /dev/null +++ b/src/generated/resources/assets/ragium/models/block/fluid_output_bus.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/cube_bottom_top", + "textures": { + "bottom": "ragium:block/fluid_output_bus_bottom", + "side": "ragium:block/fluid_output_bus_side", + "top": "ragium:block/fluid_output_bus_top" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/models/block/fluorite_wall_inventory.json b/src/generated/resources/assets/ragium/models/block/fluorite_wall_inventory.json new file mode 100644 index 0000000000..d897b511f4 --- /dev/null +++ b/src/generated/resources/assets/ragium/models/block/fluorite_wall_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/wall_inventory", + "textures": { + "wall": "ragium:block/fluorite_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/models/block/fluorite_wall_post.json b/src/generated/resources/assets/ragium/models/block/fluorite_wall_post.json new file mode 100644 index 0000000000..a442ef8bff --- /dev/null +++ b/src/generated/resources/assets/ragium/models/block/fluorite_wall_post.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_post", + "textures": { + "wall": "ragium:block/fluorite_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/models/block/fluorite_wall_side.json b/src/generated/resources/assets/ragium/models/block/fluorite_wall_side.json new file mode 100644 index 0000000000..61f09f73f4 --- /dev/null +++ b/src/generated/resources/assets/ragium/models/block/fluorite_wall_side.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side", + "textures": { + "wall": "ragium:block/fluorite_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/models/block/fluorite_wall_side_tall.json b/src/generated/resources/assets/ragium/models/block/fluorite_wall_side_tall.json new file mode 100644 index 0000000000..69ea3d8fc9 --- /dev/null +++ b/src/generated/resources/assets/ragium/models/block/fluorite_wall_side_tall.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side_tall", + "textures": { + "wall": "ragium:block/fluorite_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/models/block/potion_tank.json b/src/generated/resources/assets/ragium/models/block/potion_tank.json new file mode 100644 index 0000000000..561839fd20 --- /dev/null +++ b/src/generated/resources/assets/ragium/models/block/potion_tank.json @@ -0,0 +1,7 @@ +{ + "parent": "ragium:block/tank_template", + "textures": { + "side": "ragium:block/potion_tank_side", + "top": "ragium:block/potion_tank_top" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/models/block/quartz_glass.json b/src/generated/resources/assets/ragium/models/block/quartz_glass.json new file mode 100644 index 0000000000..c5594e968f --- /dev/null +++ b/src/generated/resources/assets/ragium/models/block/quartz_glass.json @@ -0,0 +1,9 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": { + "force_translucent": true, + "sprite": "ragium:block/quartz_glass" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/models/block/quartz_glass_pane_noside.json b/src/generated/resources/assets/ragium/models/block/quartz_glass_pane_noside.json new file mode 100644 index 0000000000..3ad9d6a868 --- /dev/null +++ b/src/generated/resources/assets/ragium/models/block/quartz_glass_pane_noside.json @@ -0,0 +1,9 @@ +{ + "parent": "minecraft:block/template_glass_pane_noside", + "textures": { + "pane": { + "force_translucent": true, + "sprite": "ragium:block/quartz_glass" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/models/block/quartz_glass_pane_noside_alt.json b/src/generated/resources/assets/ragium/models/block/quartz_glass_pane_noside_alt.json new file mode 100644 index 0000000000..4882542843 --- /dev/null +++ b/src/generated/resources/assets/ragium/models/block/quartz_glass_pane_noside_alt.json @@ -0,0 +1,9 @@ +{ + "parent": "minecraft:block/template_glass_pane_noside_alt", + "textures": { + "pane": { + "force_translucent": true, + "sprite": "ragium:block/quartz_glass" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/models/block/quartz_glass_pane_post.json b/src/generated/resources/assets/ragium/models/block/quartz_glass_pane_post.json new file mode 100644 index 0000000000..c9197a7f98 --- /dev/null +++ b/src/generated/resources/assets/ragium/models/block/quartz_glass_pane_post.json @@ -0,0 +1,13 @@ +{ + "parent": "minecraft:block/template_glass_pane_post", + "textures": { + "edge": { + "force_translucent": true, + "sprite": "ragium:block/quartz_glass_pane_top" + }, + "pane": { + "force_translucent": true, + "sprite": "ragium:block/quartz_glass" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/models/block/quartz_glass_pane_side.json b/src/generated/resources/assets/ragium/models/block/quartz_glass_pane_side.json new file mode 100644 index 0000000000..fc0844c83a --- /dev/null +++ b/src/generated/resources/assets/ragium/models/block/quartz_glass_pane_side.json @@ -0,0 +1,13 @@ +{ + "parent": "minecraft:block/template_glass_pane_side", + "textures": { + "edge": { + "force_translucent": true, + "sprite": "ragium:block/quartz_glass_pane_top" + }, + "pane": { + "force_translucent": true, + "sprite": "ragium:block/quartz_glass" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/models/block/quartz_glass_pane_side_alt.json b/src/generated/resources/assets/ragium/models/block/quartz_glass_pane_side_alt.json new file mode 100644 index 0000000000..abfdd8b8aa --- /dev/null +++ b/src/generated/resources/assets/ragium/models/block/quartz_glass_pane_side_alt.json @@ -0,0 +1,13 @@ +{ + "parent": "minecraft:block/template_glass_pane_side_alt", + "textures": { + "edge": { + "force_translucent": true, + "sprite": "ragium:block/quartz_glass_pane_top" + }, + "pane": { + "force_translucent": true, + "sprite": "ragium:block/quartz_glass" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/models/block/salt_water.json b/src/generated/resources/assets/ragium/models/block/salt_water.json new file mode 100644 index 0000000000..67032282f0 --- /dev/null +++ b/src/generated/resources/assets/ragium/models/block/salt_water.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "minecraft:block/water_still" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/models/item/circuit_chip.json b/src/generated/resources/assets/ragium/models/item/carbon_fiber.json similarity index 60% rename from src/generated/resources/assets/ragium/models/item/circuit_chip.json rename to src/generated/resources/assets/ragium/models/item/carbon_fiber.json index 8dc75a31d3..3e544adc15 100644 --- a/src/generated/resources/assets/ragium/models/item/circuit_chip.json +++ b/src/generated/resources/assets/ragium/models/item/carbon_fiber.json @@ -1,6 +1,6 @@ { "parent": "minecraft:item/generated", "textures": { - "layer0": "ragium:item/circuit_chip" + "layer0": "ragium:item/carbon_fiber" } } \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/models/item/cryolite.json b/src/generated/resources/assets/ragium/models/item/cement.json similarity index 63% rename from src/generated/resources/assets/ragium/models/item/cryolite.json rename to src/generated/resources/assets/ragium/models/item/cement.json index 9d1270c1c8..8562dfd76d 100644 --- a/src/generated/resources/assets/ragium/models/item/cryolite.json +++ b/src/generated/resources/assets/ragium/models/item/cement.json @@ -1,6 +1,6 @@ { "parent": "minecraft:item/generated", "textures": { - "layer0": "ragium:item/cryolite" + "layer0": "ragium:item/cement" } } \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/models/item/cryolite_dust.json b/src/generated/resources/assets/ragium/models/item/cfrp_plate.json similarity index 60% rename from src/generated/resources/assets/ragium/models/item/cryolite_dust.json rename to src/generated/resources/assets/ragium/models/item/cfrp_plate.json index 7a664a22fa..bd333972c9 100644 --- a/src/generated/resources/assets/ragium/models/item/cryolite_dust.json +++ b/src/generated/resources/assets/ragium/models/item/cfrp_plate.json @@ -1,6 +1,6 @@ { "parent": "minecraft:item/generated", "textures": { - "layer0": "ragium:item/cryolite_dust" + "layer0": "ragium:item/cfrp_plate" } } \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/models/item/gypsum_dust.json b/src/generated/resources/assets/ragium/models/item/gypsum_dust.json new file mode 100644 index 0000000000..0bf6988c54 --- /dev/null +++ b/src/generated/resources/assets/ragium/models/item/gypsum_dust.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "ragium:item/gypsum_dust" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/models/item/lime_dust.json b/src/generated/resources/assets/ragium/models/item/lime_dust.json new file mode 100644 index 0000000000..7a80a0ac39 --- /dev/null +++ b/src/generated/resources/assets/ragium/models/item/lime_dust.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "ragium:item/lime_dust" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/models/item/mortar.json b/src/generated/resources/assets/ragium/models/item/mortar.json new file mode 100644 index 0000000000..9921905530 --- /dev/null +++ b/src/generated/resources/assets/ragium/models/item/mortar.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "ragium:item/mortar" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/models/item/quartz_glass_pane.json b/src/generated/resources/assets/ragium/models/item/quartz_glass_pane.json new file mode 100644 index 0000000000..5c9935e777 --- /dev/null +++ b/src/generated/resources/assets/ragium/models/item/quartz_glass_pane.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "ragium:block/quartz_glass" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/models/item/quick_lime_dust.json b/src/generated/resources/assets/ragium/models/item/quick_lime_dust.json new file mode 100644 index 0000000000..b16de6ccd4 --- /dev/null +++ b/src/generated/resources/assets/ragium/models/item/quick_lime_dust.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "ragium:item/quick_lime_dust" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/models/item/silicon_chip.json b/src/generated/resources/assets/ragium/models/item/silicon_chip.json new file mode 100644 index 0000000000..36798d0b2f --- /dev/null +++ b/src/generated/resources/assets/ragium/models/item/silicon_chip.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "ragium:item/silicon_chip" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/models/item/soda_ash_dust.json b/src/generated/resources/assets/ragium/models/item/soda_ash_dust.json new file mode 100644 index 0000000000..0c1a2d30c8 --- /dev/null +++ b/src/generated/resources/assets/ragium/models/item/soda_ash_dust.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "ragium:item/soda_ash_dust" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/models/item/sticky_ball.json b/src/generated/resources/assets/ragium/models/item/sticky_ball.json new file mode 100644 index 0000000000..305ca35ab2 --- /dev/null +++ b/src/generated/resources/assets/ragium/models/item/sticky_ball.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "ragium:item/sticky_ball" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/block/glass_blocks.json b/src/generated/resources/data/c/tags/block/glass_blocks.json new file mode 100644 index 0000000000..0c30de2d38 --- /dev/null +++ b/src/generated/resources/data/c/tags/block/glass_blocks.json @@ -0,0 +1,5 @@ +{ + "values": [ + "#c:glass_blocks/quartz" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/block/glass_blocks/quartz.json b/src/generated/resources/data/c/tags/block/glass_blocks/quartz.json new file mode 100644 index 0000000000..195fe5361e --- /dev/null +++ b/src/generated/resources/data/c/tags/block/glass_blocks/quartz.json @@ -0,0 +1,5 @@ +{ + "values": [ + "ragium:quartz_glass" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/block/glass_panes.json b/src/generated/resources/data/c/tags/block/glass_panes.json new file mode 100644 index 0000000000..c5411323ac --- /dev/null +++ b/src/generated/resources/data/c/tags/block/glass_panes.json @@ -0,0 +1,5 @@ +{ + "values": [ + "#c:glass_panes/quartz" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/block/glass_panes/quartz.json b/src/generated/resources/data/c/tags/block/glass_panes/quartz.json new file mode 100644 index 0000000000..3f5a7df9b6 --- /dev/null +++ b/src/generated/resources/data/c/tags/block/glass_panes/quartz.json @@ -0,0 +1,5 @@ +{ + "values": [ + "ragium:quartz_glass_pane" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/sticky_balls.json b/src/generated/resources/data/c/tags/fluid/alcohol.json similarity index 50% rename from src/generated/resources/data/c/tags/item/sticky_balls.json rename to src/generated/resources/data/c/tags/fluid/alcohol.json index a99bc9dea4..2492e11316 100644 --- a/src/generated/resources/data/c/tags/item/sticky_balls.json +++ b/src/generated/resources/data/c/tags/fluid/alcohol.json @@ -1,5 +1,5 @@ { "values": [ - "#c:slime_balls" + "ragium:alcohol" ] } \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/fluid/aldehyde.json b/src/generated/resources/data/c/tags/fluid/aldehyde.json new file mode 100644 index 0000000000..d2d87b5c47 --- /dev/null +++ b/src/generated/resources/data/c/tags/fluid/aldehyde.json @@ -0,0 +1,5 @@ +{ + "values": [ + "ragium:aldehyde" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/fluid/gaseous.json b/src/generated/resources/data/c/tags/fluid/gaseous.json index 1f94bcb1d7..6ce4deb519 100644 --- a/src/generated/resources/data/c/tags/fluid/gaseous.json +++ b/src/generated/resources/data/c/tags/fluid/gaseous.json @@ -4,6 +4,7 @@ "#c:hydrogen", "#c:hydrogen_chloride", "#c:hydrogen_fluoride", + "#c:nitrogen", "#c:oxygen", "#c:sulfur_dioxide", "#c:sulfur_trioxide" diff --git a/src/generated/resources/data/c/tags/fluid/molten_plastic.json b/src/generated/resources/data/c/tags/fluid/molten_plastic.json new file mode 100644 index 0000000000..ef8fada53b --- /dev/null +++ b/src/generated/resources/data/c/tags/fluid/molten_plastic.json @@ -0,0 +1,5 @@ +{ + "values": [ + "ragium:molten_plastic" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/fluid/nitrogen.json b/src/generated/resources/data/c/tags/fluid/nitrogen.json new file mode 100644 index 0000000000..15f7aadae1 --- /dev/null +++ b/src/generated/resources/data/c/tags/fluid/nitrogen.json @@ -0,0 +1,5 @@ +{ + "values": [ + "ragium:nitrogen" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/fluid/ore_slurry.json b/src/generated/resources/data/c/tags/fluid/ore_slurry.json deleted file mode 100644 index 1466234804..0000000000 --- a/src/generated/resources/data/c/tags/fluid/ore_slurry.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "ragium:ore_slurry" - ] -} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/fluid/salt_water.json b/src/generated/resources/data/c/tags/fluid/salt_water.json new file mode 100644 index 0000000000..d7f9e601b7 --- /dev/null +++ b/src/generated/resources/data/c/tags/fluid/salt_water.json @@ -0,0 +1,6 @@ +{ + "values": [ + "ragium:flowing_salt_water", + "ragium:salt_water" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/buckets.json b/src/generated/resources/data/c/tags/item/buckets.json index fc1fe9cb84..87c2a133ce 100644 --- a/src/generated/resources/data/c/tags/item/buckets.json +++ b/src/generated/resources/data/c/tags/item/buckets.json @@ -1,5 +1,7 @@ { "values": [ + "#c:buckets/alcohol", + "#c:buckets/aldehyde", "#c:buckets/alumina_solution", "#c:buckets/anti_rust_oil", "#c:buckets/aromatic_compound", @@ -34,14 +36,16 @@ "#c:buckets/molten_ender", "#c:buckets/molten_glass", "#c:buckets/molten_glowstone", + "#c:buckets/molten_plastic", "#c:buckets/molten_redstone", "#c:buckets/naphtha", "#c:buckets/nitric_acid", + "#c:buckets/nitrogen", "#c:buckets/ominous_flux", - "#c:buckets/ore_slurry", "#c:buckets/oxygen", "#c:buckets/potion", "#c:buckets/resin", + "#c:buckets/salt_water", "#c:buckets/sodium_hydroxide_solution", "#c:buckets/sulfur_dioxide", "#c:buckets/sulfur_trioxide", diff --git a/src/generated/resources/data/c/tags/item/buckets/alcohol.json b/src/generated/resources/data/c/tags/item/buckets/alcohol.json new file mode 100644 index 0000000000..e2e685975e --- /dev/null +++ b/src/generated/resources/data/c/tags/item/buckets/alcohol.json @@ -0,0 +1,5 @@ +{ + "values": [ + "ragium:alcohol_bucket" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/buckets/aldehyde.json b/src/generated/resources/data/c/tags/item/buckets/aldehyde.json new file mode 100644 index 0000000000..c9d43cb4e5 --- /dev/null +++ b/src/generated/resources/data/c/tags/item/buckets/aldehyde.json @@ -0,0 +1,5 @@ +{ + "values": [ + "ragium:aldehyde_bucket" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/buckets/molten_plastic.json b/src/generated/resources/data/c/tags/item/buckets/molten_plastic.json new file mode 100644 index 0000000000..48b0e63471 --- /dev/null +++ b/src/generated/resources/data/c/tags/item/buckets/molten_plastic.json @@ -0,0 +1,5 @@ +{ + "values": [ + "ragium:molten_plastic_bucket" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/buckets/nitrogen.json b/src/generated/resources/data/c/tags/item/buckets/nitrogen.json new file mode 100644 index 0000000000..c44e29e2e3 --- /dev/null +++ b/src/generated/resources/data/c/tags/item/buckets/nitrogen.json @@ -0,0 +1,5 @@ +{ + "values": [ + "ragium:nitrogen_bucket" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/buckets/ore_slurry.json b/src/generated/resources/data/c/tags/item/buckets/ore_slurry.json deleted file mode 100644 index 588595b609..0000000000 --- a/src/generated/resources/data/c/tags/item/buckets/ore_slurry.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "ragium:ore_slurry_bucket" - ] -} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/buckets/salt_water.json b/src/generated/resources/data/c/tags/item/buckets/salt_water.json new file mode 100644 index 0000000000..d49d534f74 --- /dev/null +++ b/src/generated/resources/data/c/tags/item/buckets/salt_water.json @@ -0,0 +1,5 @@ +{ + "values": [ + "ragium:salt_water_bucket" + ] +} \ 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 4decc30e59..f5010ba9a9 100644 --- a/src/generated/resources/data/c/tags/item/dusts.json +++ b/src/generated/resources/data/c/tags/item/dusts.json @@ -8,24 +8,27 @@ "#c:dusts/charcoal", "#c:dusts/coal", "#c:dusts/copper", - "#c:dusts/cryolite", "#c:dusts/diamond", "#c:dusts/echo", "#c:dusts/emerald", "#c:dusts/fluorite", "#c:dusts/glass", "#c:dusts/gold", + "#c:dusts/gypsum", "#c:dusts/iron", "#c:dusts/lapis", + "#c:dusts/lime", "#c:dusts/netherite", "#c:dusts/niter", "#c:dusts/obsidian", "#c:dusts/paper", "#c:dusts/prismarine", "#c:dusts/quartz", + "#c:dusts/quick_lime", "#c:dusts/raginite", "#c:dusts/salt", "#c:dusts/silicon", + "#c:dusts/soda_ash", "#c:dusts/sulfur", "#c:dusts/wood" ] diff --git a/src/generated/resources/data/c/tags/item/dusts/cryolite.json b/src/generated/resources/data/c/tags/item/dusts/cryolite.json deleted file mode 100644 index 086c5b3633..0000000000 --- a/src/generated/resources/data/c/tags/item/dusts/cryolite.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "ragium:cryolite_dust" - ] -} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/dusts/gypsum.json b/src/generated/resources/data/c/tags/item/dusts/gypsum.json new file mode 100644 index 0000000000..04efd89a48 --- /dev/null +++ b/src/generated/resources/data/c/tags/item/dusts/gypsum.json @@ -0,0 +1,5 @@ +{ + "values": [ + "ragium:gypsum_dust" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/dusts/lime.json b/src/generated/resources/data/c/tags/item/dusts/lime.json new file mode 100644 index 0000000000..ef76055357 --- /dev/null +++ b/src/generated/resources/data/c/tags/item/dusts/lime.json @@ -0,0 +1,5 @@ +{ + "values": [ + "ragium:lime_dust" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/dusts/quick_lime.json b/src/generated/resources/data/c/tags/item/dusts/quick_lime.json new file mode 100644 index 0000000000..317bd6275a --- /dev/null +++ b/src/generated/resources/data/c/tags/item/dusts/quick_lime.json @@ -0,0 +1,5 @@ +{ + "values": [ + "ragium:quick_lime_dust" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/dusts/soda_ash.json b/src/generated/resources/data/c/tags/item/dusts/soda_ash.json new file mode 100644 index 0000000000..17ab294028 --- /dev/null +++ b/src/generated/resources/data/c/tags/item/dusts/soda_ash.json @@ -0,0 +1,5 @@ +{ + "values": [ + "ragium:soda_ash_dust" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/gems.json b/src/generated/resources/data/c/tags/item/gems.json index 7c478dca32..413fe31acd 100644 --- a/src/generated/resources/data/c/tags/item/gems.json +++ b/src/generated/resources/data/c/tags/item/gems.json @@ -1,6 +1,5 @@ { "values": [ - "#c:gems/cryolite", "#c:gems/echo", "#c:gems/fluorite" ] diff --git a/src/generated/resources/data/c/tags/item/gems/cryolite.json b/src/generated/resources/data/c/tags/item/gems/cryolite.json deleted file mode 100644 index 26c80ec1ac..0000000000 --- a/src/generated/resources/data/c/tags/item/gems/cryolite.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "ragium:cryolite" - ] -} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/glass_blocks.json b/src/generated/resources/data/c/tags/item/glass_blocks.json new file mode 100644 index 0000000000..0c30de2d38 --- /dev/null +++ b/src/generated/resources/data/c/tags/item/glass_blocks.json @@ -0,0 +1,5 @@ +{ + "values": [ + "#c:glass_blocks/quartz" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/glass_blocks/quartz.json b/src/generated/resources/data/c/tags/item/glass_blocks/quartz.json new file mode 100644 index 0000000000..195fe5361e --- /dev/null +++ b/src/generated/resources/data/c/tags/item/glass_blocks/quartz.json @@ -0,0 +1,5 @@ +{ + "values": [ + "ragium:quartz_glass" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/glass_panes.json b/src/generated/resources/data/c/tags/item/glass_panes.json new file mode 100644 index 0000000000..c5411323ac --- /dev/null +++ b/src/generated/resources/data/c/tags/item/glass_panes.json @@ -0,0 +1,5 @@ +{ + "values": [ + "#c:glass_panes/quartz" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/glass_panes/quartz.json b/src/generated/resources/data/c/tags/item/glass_panes/quartz.json new file mode 100644 index 0000000000..3f5a7df9b6 --- /dev/null +++ b/src/generated/resources/data/c/tags/item/glass_panes/quartz.json @@ -0,0 +1,5 @@ +{ + "values": [ + "ragium:quartz_glass_pane" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/slime_balls.json b/src/generated/resources/data/c/tags/item/slime_balls.json new file mode 100644 index 0000000000..cd41f1d1ef --- /dev/null +++ b/src/generated/resources/data/c/tags/item/slime_balls.json @@ -0,0 +1,5 @@ +{ + "values": [ + "ragium:sticky_ball" + ] +} \ 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 40996203de..75f7766d12 100644 --- a/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json +++ b/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json @@ -16,9 +16,6 @@ "ragium:creative_battery", "ragium:creative_tank", "ragium:crusher", - "ragium:cryolite_block", - "ragium:cryolite_slab", - "ragium:cryolite_stairs", "ragium:cutting_machine", "ragium:deepslate_niter_ore", "ragium:deepslate_sulfur_ore", @@ -26,9 +23,11 @@ "ragium:electrolyzer", "ragium:electronics_machine_casing", "ragium:enchanter", + "ragium:fluid_output_bus", "ragium:fluorite_block", "ragium:fluorite_slab", "ragium:fluorite_stairs", + "ragium:fluorite_wall", "ragium:freezer", "ragium:heat_machine_casing", "ragium:machine_casing", @@ -40,8 +39,11 @@ "ragium:niter_ore", "ragium:pitch_coke_block", "ragium:planter", + "ragium:potion_tank", "ragium:precision_assembler", "ragium:pyrolyzer", + "ragium:quartz_glass", + "ragium:quartz_glass_pane", "ragium:refinery", "ragium:scanner", "ragium:smelter", diff --git a/src/generated/resources/data/minecraft/tags/block/slabs.json b/src/generated/resources/data/minecraft/tags/block/slabs.json index 1894019991..307ff4a9f1 100644 --- a/src/generated/resources/data/minecraft/tags/block/slabs.json +++ b/src/generated/resources/data/minecraft/tags/block/slabs.json @@ -1,6 +1,5 @@ { "values": [ - "ragium:cryolite_slab", "ragium:fluorite_slab" ] } \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/block/stairs.json b/src/generated/resources/data/minecraft/tags/block/stairs.json index fe730d5066..9d1259b86f 100644 --- a/src/generated/resources/data/minecraft/tags/block/stairs.json +++ b/src/generated/resources/data/minecraft/tags/block/stairs.json @@ -1,6 +1,5 @@ { "values": [ - "ragium:cryolite_stairs", "ragium:fluorite_stairs" ] } \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/block/walls.json b/src/generated/resources/data/minecraft/tags/block/walls.json new file mode 100644 index 0000000000..0495a90816 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/block/walls.json @@ -0,0 +1,5 @@ +{ + "values": [ + "ragium:fluorite_wall" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/item/beacon_payment_items.json b/src/generated/resources/data/minecraft/tags/item/beacon_payment_items.json index 75dea581a0..0b48dd7751 100644 --- a/src/generated/resources/data/minecraft/tags/item/beacon_payment_items.json +++ b/src/generated/resources/data/minecraft/tags/item/beacon_payment_items.json @@ -2,7 +2,6 @@ "values": [ "ragium:aluminum_ingot", "ragium:black_steel_ingot", - "ragium:cryolite", "ragium:fluorite", "ragium:sooty_iron_ingot", "ragium:void_metal_ingot" diff --git a/src/generated/resources/data/minecraft/tags/item/slabs.json b/src/generated/resources/data/minecraft/tags/item/slabs.json index 1894019991..307ff4a9f1 100644 --- a/src/generated/resources/data/minecraft/tags/item/slabs.json +++ b/src/generated/resources/data/minecraft/tags/item/slabs.json @@ -1,6 +1,5 @@ { "values": [ - "ragium:cryolite_slab", "ragium:fluorite_slab" ] } \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/item/stairs.json b/src/generated/resources/data/minecraft/tags/item/stairs.json index fe730d5066..9d1259b86f 100644 --- a/src/generated/resources/data/minecraft/tags/item/stairs.json +++ b/src/generated/resources/data/minecraft/tags/item/stairs.json @@ -1,6 +1,5 @@ { "values": [ - "ragium:cryolite_stairs", "ragium:fluorite_stairs" ] } \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/item/walls.json b/src/generated/resources/data/minecraft/tags/item/walls.json new file mode 100644 index 0000000000..0495a90816 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/item/walls.json @@ -0,0 +1,5 @@ +{ + "values": [ + "ragium:fluorite_wall" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/data_maps/block/mortar_repair.json b/src/generated/resources/data/ragium/data_maps/block/mortar_repair.json new file mode 100644 index 0000000000..d2c7200251 --- /dev/null +++ b/src/generated/resources/data/ragium/data_maps/block/mortar_repair.json @@ -0,0 +1,10 @@ +{ + "values": { + "minecraft:cracked_deepslate_bricks": "minecraft:deepslate_bricks", + "minecraft:cracked_deepslate_tiles": "minecraft:deepslate_tiles", + "minecraft:cracked_nether_bricks": "minecraft:nether_bricks", + "minecraft:cracked_polished_blackstone_bricks": "minecraft:polished_blackstone_bricks", + "minecraft:cracked_stone_bricks": "minecraft:stone_bricks", + "minecraft:infested_cracked_stone_bricks": "minecraft:infested_stone_bricks" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/loot_table/blocks/cryolite_slab.json b/src/generated/resources/data/ragium/loot_table/blocks/cryolite_slab.json deleted file mode 100644 index da029e80b2..0000000000 --- a/src/generated/resources/data/ragium/loot_table/blocks/cryolite_slab.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "functions": [ - { - "add": false, - "conditions": [ - { - "block": "ragium:cryolite_slab", - "condition": "minecraft:block_state_property", - "properties": { - "type": "double" - } - } - ], - "count": 2.0, - "function": "minecraft:set_count" - }, - { - "function": "minecraft:explosion_decay" - } - ], - "name": "ragium:cryolite_slab" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "ragium:blocks/cryolite_slab" -} \ No newline at end of file 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 new file mode 100644 index 0000000000..689aeadd8d --- /dev/null +++ b/src/generated/resources/data/ragium/loot_table/blocks/fluid_output_bus.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:fluid" + ], + "source": "block_entity" + } + ], + "name": "ragium:fluid_output_bus" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "ragium:blocks/fluid_output_bus" +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/loot_table/blocks/cryolite_block.json b/src/generated/resources/data/ragium/loot_table/blocks/fluorite_wall.json similarity index 75% rename from src/generated/resources/data/ragium/loot_table/blocks/cryolite_block.json rename to src/generated/resources/data/ragium/loot_table/blocks/fluorite_wall.json index a21263dd58..bfc860751c 100644 --- a/src/generated/resources/data/ragium/loot_table/blocks/cryolite_block.json +++ b/src/generated/resources/data/ragium/loot_table/blocks/fluorite_wall.json @@ -11,11 +11,11 @@ "entries": [ { "type": "minecraft:item", - "name": "ragium:cryolite_block" + "name": "ragium:fluorite_wall" } ], "rolls": 1.0 } ], - "random_sequence": "ragium:blocks/cryolite_block" + "random_sequence": "ragium:blocks/fluorite_wall" } \ No newline at end of file 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 new file mode 100644 index 0000000000..b7594c1937 --- /dev/null +++ b/src/generated/resources/data/ragium/loot_table/blocks/potion_tank.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:fluid" + ], + "source": "block_entity" + } + ], + "name": "ragium:potion_tank" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "ragium:blocks/potion_tank" +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/loot_table/blocks/cryolite_stairs.json b/src/generated/resources/data/ragium/loot_table/blocks/quartz_glass.json similarity index 75% rename from src/generated/resources/data/ragium/loot_table/blocks/cryolite_stairs.json rename to src/generated/resources/data/ragium/loot_table/blocks/quartz_glass.json index 8dfa581224..b7326614b5 100644 --- a/src/generated/resources/data/ragium/loot_table/blocks/cryolite_stairs.json +++ b/src/generated/resources/data/ragium/loot_table/blocks/quartz_glass.json @@ -11,11 +11,11 @@ "entries": [ { "type": "minecraft:item", - "name": "ragium:cryolite_stairs" + "name": "ragium:quartz_glass" } ], "rolls": 1.0 } ], - "random_sequence": "ragium:blocks/cryolite_stairs" + "random_sequence": "ragium:blocks/quartz_glass" } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/loot_table/blocks/quartz_glass_pane.json b/src/generated/resources/data/ragium/loot_table/blocks/quartz_glass_pane.json new file mode 100644 index 0000000000..5885964be4 --- /dev/null +++ b/src/generated/resources/data/ragium/loot_table/blocks/quartz_glass_pane.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "ragium:quartz_glass_pane" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "ragium:blocks/quartz_glass_pane" +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/chemical/aluminum.json b/src/generated/resources/data/ragium/ragium/chemical/aluminum.json new file mode 100644 index 0000000000..9906ab68db --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/chemical/aluminum.json @@ -0,0 +1,4 @@ +{ + "type": "ragium:simple", + "element": "ragium:aluminum" +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/chemical/aluminum_fluoride.json b/src/generated/resources/data/ragium/ragium/chemical/aluminum_fluoride.json new file mode 100644 index 0000000000..fac774e355 --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/chemical/aluminum_fluoride.json @@ -0,0 +1,12 @@ +{ + "type": "ragium:compound", + "composition": [ + { + "element": "ragium:aluminum" + }, + { + "element": "ragium:fluorine", + "weight": 3 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/chemical/aluminum_oxide.json b/src/generated/resources/data/ragium/ragium/chemical/aluminum_oxide.json new file mode 100644 index 0000000000..1b6ef7a3f1 --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/chemical/aluminum_oxide.json @@ -0,0 +1,13 @@ +{ + "type": "ragium:compound", + "composition": [ + { + "element": "ragium:aluminum", + "weight": 2 + }, + { + "element": "ragium:oxygen", + "weight": 3 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/chemical/calcium_carbonate.json b/src/generated/resources/data/ragium/ragium/chemical/calcium_carbonate.json new file mode 100644 index 0000000000..10b17363cf --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/chemical/calcium_carbonate.json @@ -0,0 +1,11 @@ +{ + "type": "ragium:compound", + "composition": [ + { + "element": "ragium:calcium" + }, + { + "chemical": "ragium:carbonate" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/chemical/calcium_oxide.json b/src/generated/resources/data/ragium/ragium/chemical/calcium_oxide.json new file mode 100644 index 0000000000..a20f9f3bb6 --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/chemical/calcium_oxide.json @@ -0,0 +1,11 @@ +{ + "type": "ragium:compound", + "composition": [ + { + "element": "ragium:calcium" + }, + { + "element": "ragium:oxygen" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/chemical/calcium_sulfate.json b/src/generated/resources/data/ragium/ragium/chemical/calcium_sulfate.json new file mode 100644 index 0000000000..6c27850521 --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/chemical/calcium_sulfate.json @@ -0,0 +1,11 @@ +{ + "type": "ragium:compound", + "composition": [ + { + "element": "ragium:calcium" + }, + { + "chemical": "ragium:sulfate" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/chemical/carbon.json b/src/generated/resources/data/ragium/ragium/chemical/carbon.json new file mode 100644 index 0000000000..ddb636aff4 --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/chemical/carbon.json @@ -0,0 +1,4 @@ +{ + "type": "ragium:simple", + "element": "ragium:carbon" +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/chemical/carbonate.json b/src/generated/resources/data/ragium/ragium/chemical/carbonate.json new file mode 100644 index 0000000000..f688fce9be --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/chemical/carbonate.json @@ -0,0 +1,12 @@ +{ + "type": "ragium:compound", + "composition": [ + { + "element": "ragium:carbon" + }, + { + "element": "ragium:oxygen", + "weight": 3 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/chemical/chlorine.json b/src/generated/resources/data/ragium/ragium/chemical/chlorine.json new file mode 100644 index 0000000000..a6de7fe918 --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/chemical/chlorine.json @@ -0,0 +1,5 @@ +{ + "type": "ragium:simple", + "element": "ragium:chlorine", + "weight": 2 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/chemical/copper.json b/src/generated/resources/data/ragium/ragium/chemical/copper.json new file mode 100644 index 0000000000..2064f74721 --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/chemical/copper.json @@ -0,0 +1,4 @@ +{ + "type": "ragium:simple", + "element": "ragium:copper" +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/chemical/cryolite.json b/src/generated/resources/data/ragium/ragium/chemical/cryolite.json new file mode 100644 index 0000000000..2fc87e4293 --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/chemical/cryolite.json @@ -0,0 +1,16 @@ +{ + "type": "ragium:compound", + "composition": [ + { + "element": "ragium:sodium", + "weight": 3 + }, + { + "element": "ragium:aluminum" + }, + { + "element": "ragium:fluorine", + "weight": 6 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/chemical/diamond.json b/src/generated/resources/data/ragium/ragium/chemical/diamond.json new file mode 100644 index 0000000000..ddb636aff4 --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/chemical/diamond.json @@ -0,0 +1,4 @@ +{ + "type": "ragium:simple", + "element": "ragium:carbon" +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/chemical/fluorite.json b/src/generated/resources/data/ragium/ragium/chemical/fluorite.json new file mode 100644 index 0000000000..f8fce3ded7 --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/chemical/fluorite.json @@ -0,0 +1,12 @@ +{ + "type": "ragium:compound", + "composition": [ + { + "element": "ragium:calcium" + }, + { + "element": "ragium:fluorine", + "weight": 2 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/chemical/gold.json b/src/generated/resources/data/ragium/ragium/chemical/gold.json new file mode 100644 index 0000000000..06a9e6d5ec --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/chemical/gold.json @@ -0,0 +1,4 @@ +{ + "type": "ragium:simple", + "element": "ragium:gold" +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/chemical/hydrogen.json b/src/generated/resources/data/ragium/ragium/chemical/hydrogen.json new file mode 100644 index 0000000000..fa11358a92 --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/chemical/hydrogen.json @@ -0,0 +1,5 @@ +{ + "type": "ragium:simple", + "element": "ragium:hydrogen", + "weight": 2 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/chemical/hydrogen_chloride.json b/src/generated/resources/data/ragium/ragium/chemical/hydrogen_chloride.json new file mode 100644 index 0000000000..391e33091d --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/chemical/hydrogen_chloride.json @@ -0,0 +1,11 @@ +{ + "type": "ragium:compound", + "composition": [ + { + "element": "ragium:hydrogen" + }, + { + "element": "ragium:chlorine" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/chemical/hydrogen_fluoride.json b/src/generated/resources/data/ragium/ragium/chemical/hydrogen_fluoride.json new file mode 100644 index 0000000000..8a2706b7f8 --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/chemical/hydrogen_fluoride.json @@ -0,0 +1,11 @@ +{ + "type": "ragium:compound", + "composition": [ + { + "element": "ragium:hydrogen" + }, + { + "element": "ragium:fluorine" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/chemical/hydroxide.json b/src/generated/resources/data/ragium/ragium/chemical/hydroxide.json new file mode 100644 index 0000000000..4e59fd3381 --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/chemical/hydroxide.json @@ -0,0 +1,11 @@ +{ + "type": "ragium:compound", + "composition": [ + { + "element": "ragium:oxygen" + }, + { + "element": "ragium:hydrogen" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/chemical/iron.json b/src/generated/resources/data/ragium/ragium/chemical/iron.json new file mode 100644 index 0000000000..fff0d9cea4 --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/chemical/iron.json @@ -0,0 +1,4 @@ +{ + "type": "ragium:simple", + "element": "ragium:iron" +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/chemical/nitrate.json b/src/generated/resources/data/ragium/ragium/chemical/nitrate.json new file mode 100644 index 0000000000..ee421eb5ce --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/chemical/nitrate.json @@ -0,0 +1,12 @@ +{ + "type": "ragium:compound", + "composition": [ + { + "element": "ragium:nitrogen" + }, + { + "element": "ragium:oxygen", + "weight": 3 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/chemical/nitric_acid.json b/src/generated/resources/data/ragium/ragium/chemical/nitric_acid.json new file mode 100644 index 0000000000..4e67d6505b --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/chemical/nitric_acid.json @@ -0,0 +1,11 @@ +{ + "type": "ragium:compound", + "composition": [ + { + "element": "ragium:nitrogen" + }, + { + "chemical": "ragium:nitrate" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/chemical/nitrogen.json b/src/generated/resources/data/ragium/ragium/chemical/nitrogen.json new file mode 100644 index 0000000000..5edf8e564a --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/chemical/nitrogen.json @@ -0,0 +1,5 @@ +{ + "type": "ragium:simple", + "element": "ragium:nitrogen", + "weight": 2 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/chemical/oxygen.json b/src/generated/resources/data/ragium/ragium/chemical/oxygen.json new file mode 100644 index 0000000000..502fb04d78 --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/chemical/oxygen.json @@ -0,0 +1,5 @@ +{ + "type": "ragium:simple", + "element": "ragium:oxygen", + "weight": 2 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/chemical/potassium_nitrate.json b/src/generated/resources/data/ragium/ragium/chemical/potassium_nitrate.json new file mode 100644 index 0000000000..322dc32f9f --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/chemical/potassium_nitrate.json @@ -0,0 +1,11 @@ +{ + "type": "ragium:compound", + "composition": [ + { + "element": "ragium:potassium" + }, + { + "chemical": "ragium:nitrate" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/chemical/silicon.json b/src/generated/resources/data/ragium/ragium/chemical/silicon.json new file mode 100644 index 0000000000..43370cd44e --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/chemical/silicon.json @@ -0,0 +1,4 @@ +{ + "type": "ragium:simple", + "element": "ragium:silicon" +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/chemical/silicon_dioxide.json b/src/generated/resources/data/ragium/ragium/chemical/silicon_dioxide.json new file mode 100644 index 0000000000..5d8350bafe --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/chemical/silicon_dioxide.json @@ -0,0 +1,12 @@ +{ + "type": "ragium:compound", + "composition": [ + { + "element": "ragium:silicon" + }, + { + "element": "ragium:oxygen", + "weight": 2 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/chemical/sodium_carbonate.json b/src/generated/resources/data/ragium/ragium/chemical/sodium_carbonate.json new file mode 100644 index 0000000000..7061f89cce --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/chemical/sodium_carbonate.json @@ -0,0 +1,12 @@ +{ + "type": "ragium:compound", + "composition": [ + { + "element": "ragium:sodium", + "weight": 2 + }, + { + "chemical": "ragium:carbonate" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/chemical/sodium_chloride.json b/src/generated/resources/data/ragium/ragium/chemical/sodium_chloride.json new file mode 100644 index 0000000000..8f576d54d5 --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/chemical/sodium_chloride.json @@ -0,0 +1,11 @@ +{ + "type": "ragium:compound", + "composition": [ + { + "element": "ragium:sodium" + }, + { + "element": "ragium:chlorine" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/chemical/sodium_hydroxide.json b/src/generated/resources/data/ragium/ragium/chemical/sodium_hydroxide.json new file mode 100644 index 0000000000..dc22add704 --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/chemical/sodium_hydroxide.json @@ -0,0 +1,11 @@ +{ + "type": "ragium:compound", + "composition": [ + { + "element": "ragium:sodium" + }, + { + "chemical": "ragium:hydroxide" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/chemical/sulfate.json b/src/generated/resources/data/ragium/ragium/chemical/sulfate.json new file mode 100644 index 0000000000..5210ee4472 --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/chemical/sulfate.json @@ -0,0 +1,12 @@ +{ + "type": "ragium:compound", + "composition": [ + { + "element": "ragium:sulfur" + }, + { + "element": "ragium:oxygen", + "weight": 4 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/chemical/sulfur.json b/src/generated/resources/data/ragium/ragium/chemical/sulfur.json new file mode 100644 index 0000000000..7ef322fe26 --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/chemical/sulfur.json @@ -0,0 +1,4 @@ +{ + "type": "ragium:simple", + "element": "ragium:sulfur" +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/chemical/sulfur_dioxide.json b/src/generated/resources/data/ragium/ragium/chemical/sulfur_dioxide.json new file mode 100644 index 0000000000..da9b702736 --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/chemical/sulfur_dioxide.json @@ -0,0 +1,12 @@ +{ + "type": "ragium:compound", + "composition": [ + { + "element": "ragium:sulfur" + }, + { + "element": "ragium:oxygen", + "weight": 2 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/chemical/sulfur_trioxide.json b/src/generated/resources/data/ragium/ragium/chemical/sulfur_trioxide.json new file mode 100644 index 0000000000..a11f2ca7ae --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/chemical/sulfur_trioxide.json @@ -0,0 +1,12 @@ +{ + "type": "ragium:compound", + "composition": [ + { + "element": "ragium:sulfur" + }, + { + "element": "ragium:oxygen", + "weight": 3 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/chemical/sulfuric_acid.json b/src/generated/resources/data/ragium/ragium/chemical/sulfuric_acid.json new file mode 100644 index 0000000000..b3ccfc19ea --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/chemical/sulfuric_acid.json @@ -0,0 +1,12 @@ +{ + "type": "ragium:compound", + "composition": [ + { + "element": "ragium:hydrogen", + "weight": 2 + }, + { + "chemical": "ragium:sulfate" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/chemical/water.json b/src/generated/resources/data/ragium/ragium/chemical/water.json new file mode 100644 index 0000000000..eb92294e2d --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/chemical/water.json @@ -0,0 +1,12 @@ +{ + "type": "ragium:compound", + "composition": [ + { + "element": "ragium:hydrogen", + "weight": 2 + }, + { + "element": "ragium:oxygen" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/element/aluminum.json b/src/generated/resources/data/ragium/ragium/element/aluminum.json new file mode 100644 index 0000000000..924ba5d970 --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/element/aluminum.json @@ -0,0 +1,3 @@ +{ + "symbol": "Al" +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/element/calcium.json b/src/generated/resources/data/ragium/ragium/element/calcium.json new file mode 100644 index 0000000000..e63670375e --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/element/calcium.json @@ -0,0 +1,3 @@ +{ + "symbol": "Ca" +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/element/carbon.json b/src/generated/resources/data/ragium/ragium/element/carbon.json new file mode 100644 index 0000000000..109c0c317c --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/element/carbon.json @@ -0,0 +1,3 @@ +{ + "symbol": "C" +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/element/chlorine.json b/src/generated/resources/data/ragium/ragium/element/chlorine.json new file mode 100644 index 0000000000..74ee59107a --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/element/chlorine.json @@ -0,0 +1,3 @@ +{ + "symbol": "Cl" +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/element/copper.json b/src/generated/resources/data/ragium/ragium/element/copper.json new file mode 100644 index 0000000000..1549e9407b --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/element/copper.json @@ -0,0 +1,3 @@ +{ + "symbol": "Cu" +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/element/fluorine.json b/src/generated/resources/data/ragium/ragium/element/fluorine.json new file mode 100644 index 0000000000..47844d2535 --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/element/fluorine.json @@ -0,0 +1,3 @@ +{ + "symbol": "F" +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/element/gold.json b/src/generated/resources/data/ragium/ragium/element/gold.json new file mode 100644 index 0000000000..33595d5826 --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/element/gold.json @@ -0,0 +1,3 @@ +{ + "symbol": "Au" +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/element/hydrogen.json b/src/generated/resources/data/ragium/ragium/element/hydrogen.json new file mode 100644 index 0000000000..a7fb573d7a --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/element/hydrogen.json @@ -0,0 +1,3 @@ +{ + "symbol": "H" +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/element/iron.json b/src/generated/resources/data/ragium/ragium/element/iron.json new file mode 100644 index 0000000000..d782ef4663 --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/element/iron.json @@ -0,0 +1,3 @@ +{ + "symbol": "Fe" +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/element/nitrogen.json b/src/generated/resources/data/ragium/ragium/element/nitrogen.json new file mode 100644 index 0000000000..14297777a4 --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/element/nitrogen.json @@ -0,0 +1,3 @@ +{ + "symbol": "N" +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/element/oxygen.json b/src/generated/resources/data/ragium/ragium/element/oxygen.json new file mode 100644 index 0000000000..152cab0aaa --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/element/oxygen.json @@ -0,0 +1,3 @@ +{ + "symbol": "O" +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/element/potassium.json b/src/generated/resources/data/ragium/ragium/element/potassium.json new file mode 100644 index 0000000000..d46b76fb28 --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/element/potassium.json @@ -0,0 +1,3 @@ +{ + "symbol": "K" +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/element/silicon.json b/src/generated/resources/data/ragium/ragium/element/silicon.json new file mode 100644 index 0000000000..0ecb3ca497 --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/element/silicon.json @@ -0,0 +1,3 @@ +{ + "symbol": "Si" +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/element/sodium.json b/src/generated/resources/data/ragium/ragium/element/sodium.json new file mode 100644 index 0000000000..3513305853 --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/element/sodium.json @@ -0,0 +1,3 @@ +{ + "symbol": "Na" +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/element/sulfur.json b/src/generated/resources/data/ragium/ragium/element/sulfur.json new file mode 100644 index 0000000000..70629b6e59 --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/element/sulfur.json @@ -0,0 +1,3 @@ +{ + "symbol": "S" +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/ore_slurry_data/copper.json b/src/generated/resources/data/ragium/ragium/ore_slurry_data/copper.json deleted file mode 100644 index b26e843e01..0000000000 --- a/src/generated/resources/data/ragium/ragium/ore_slurry_data/copper.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "color": "#c15a36", - "result": { - "type": "ragium:with_fallback", - "base": { - "type": "ragium:tag", - "tag": "#c:dusts/copper" - }, - "count": 3, - "fallback": { - "id": "ragium:copper_dust" - } - }, - "title": { - "translate": "ragium.ore_slurry_data.ragium.copper" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/ore_slurry_data/gold.json b/src/generated/resources/data/ragium/ragium/ore_slurry_data/gold.json deleted file mode 100644 index 02ef20bc8f..0000000000 --- a/src/generated/resources/data/ragium/ragium/ore_slurry_data/gold.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "color": "#ffcc00", - "result": { - "type": "ragium:with_fallback", - "base": { - "type": "ragium:tag", - "tag": "#c:dusts/gold" - }, - "count": 2, - "fallback": { - "id": "ragium:gold_dust" - } - }, - "title": { - "translate": "ragium.ore_slurry_data.ragium.gold" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/ore_slurry_data/iron.json b/src/generated/resources/data/ragium/ragium/ore_slurry_data/iron.json deleted file mode 100644 index de10c1c784..0000000000 --- a/src/generated/resources/data/ragium/ragium/ore_slurry_data/iron.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "color": "#777777", - "result": { - "type": "ragium:with_fallback", - "base": { - "type": "ragium:tag", - "tag": "#c:dusts/iron" - }, - "count": 2, - "fallback": { - "id": "ragium:iron_dust" - } - }, - "title": { - "translate": "ragium.ore_slurry_data.ragium.iron" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/ragium/ore_slurry_data/netherite_scrap.json b/src/generated/resources/data/ragium/ragium/ore_slurry_data/netherite_scrap.json deleted file mode 100644 index d656b3144e..0000000000 --- a/src/generated/resources/data/ragium/ragium/ore_slurry_data/netherite_scrap.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "color": "#473e3f", - "result": { - "count": 2, - "id": "minecraft:netherite_scrap" - }, - "title": { - "translate": "ragium.ore_slurry_data.ragium.netherite_scrap" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/alloying/aluminum_ingot.json b/src/generated/resources/data/ragium/recipe/alloying/aluminum_ingot.json deleted file mode 100644 index db409a6093..0000000000 --- a/src/generated/resources/data/ragium/recipe/alloying/aluminum_ingot.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "ragium:alloying", - "extra": { - "count": 1, - "items": "#ragium:cokes" - }, - "ingredient": { - "count": 1, - "items": "#c:dusts/alumina" - }, - "result": { - "count": 2, - "id": "ragium:aluminum_ingot" - }, - "time": 800 -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/alloying/aluminum_ingot_with_cryolite.json b/src/generated/resources/data/ragium/recipe/alloying/aluminum_ingot_with_cryolite.json deleted file mode 100644 index 9c4035abf7..0000000000 --- a/src/generated/resources/data/ragium/recipe/alloying/aluminum_ingot_with_cryolite.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "type": "ragium:alloying", - "extras": [ - { - "count": 1, - "items": "#ragium:cokes" - }, - { - "count": 1, - "items": { - "neoforge:ingredient_type": "ragium:material_tags", - "tags": [ - "c:dusts/cryolite", - "c:gems/cryolite" - ] - } - } - ], - "ingredient": { - "count": 1, - "items": "#c:dusts/alumina" - }, - "result": { - "count": 3, - "id": "ragium:aluminum_ingot" - }, - "time": 200 -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/alloying/glass.json b/src/generated/resources/data/ragium/recipe/alloying/glass.json new file mode 100644 index 0000000000..47d5934c6a --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/alloying/glass.json @@ -0,0 +1,16 @@ +{ + "type": "ragium:alloying", + "extra": { + "count": 1, + "items": "#c:dusts/soda_ash" + }, + "ingredient": { + "count": 2, + "items": "#c:dusts/quartz" + }, + "result": { + "count": 6, + "id": "minecraft:glass" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/alloying/obzinite_ingot.json b/src/generated/resources/data/ragium/recipe/alloying/obzinite_ingot.json deleted file mode 100644 index b1ab1a2837..0000000000 --- a/src/generated/resources/data/ragium/recipe/alloying/obzinite_ingot.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "type": "ragium:alloying", - "extras": [ - { - "count": 1, - "items": { - "neoforge:ingredient_type": "ragium:material_tags", - "tags": [ - "c:dusts/copper", - "c:ingots/copper" - ] - } - }, - { - "count": 1, - "items": "#c:dusts/obsidian" - } - ], - "ingredient": { - "count": 3, - "items": { - "neoforge:ingredient_type": "ragium:material_tags", - "tags": [ - "c:dusts/aluminum", - "c:ingots/aluminum" - ] - } - }, - "result": { - "count": 4, - "id": "ragium:black_steel_ingot" - }, - "time": 200 -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/tinted_glass.json b/src/generated/resources/data/ragium/recipe/alloying/quartz_glass_from_amethyst.json similarity index 55% rename from src/generated/resources/data/ragium/recipe/bathing/tinted_glass.json rename to src/generated/resources/data/ragium/recipe/alloying/quartz_glass_from_amethyst.json index 3e32376200..488490d122 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/tinted_glass.json +++ b/src/generated/resources/data/ragium/recipe/alloying/quartz_glass_from_amethyst.json @@ -1,11 +1,11 @@ { - "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 1000, - "fluids": "#c:molten_glass" - }, - "item_ingredient": { + "type": "ragium:alloying", + "extra": { "count": 1, + "items": "#c:sands" + }, + "ingredient": { + "count": 4, "items": { "neoforge:ingredient_type": "ragium:material_tags", "tags": [ @@ -15,8 +15,8 @@ } }, "result": { - "count": 2, - "id": "minecraft:tinted_glass" + "count": 1, + "id": "ragium:quartz_glass" }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/alloying/quartz_glass_from_amethyst_block.json b/src/generated/resources/data/ragium/recipe/alloying/quartz_glass_from_amethyst_block.json new file mode 100644 index 0000000000..768738ae17 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/alloying/quartz_glass_from_amethyst_block.json @@ -0,0 +1,16 @@ +{ + "type": "ragium:alloying", + "extra": { + "count": 1, + "items": "#c:sands" + }, + "ingredient": { + "count": 1, + "items": "minecraft:amethyst_block" + }, + "result": { + "count": 1, + "id": "ragium:quartz_glass" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/alloying/quartz_glass_from_quartz.json b/src/generated/resources/data/ragium/recipe/alloying/quartz_glass_from_quartz.json new file mode 100644 index 0000000000..bbff0f154f --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/alloying/quartz_glass_from_quartz.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:alloying", + "extra": { + "count": 1, + "items": "#c:sands" + }, + "ingredient": { + "count": 1, + "items": { + "neoforge:ingredient_type": "ragium:material_tags", + "tags": [ + "c:dusts/quartz", + "c:gems/quartz" + ] + } + }, + "result": { + "count": 1, + "id": "ragium:quartz_glass" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/assembling/cobweb.json b/src/generated/resources/data/ragium/recipe/assembling/cobweb.json index 34c481d046..9f13c6b658 100644 --- a/src/generated/resources/data/ragium/recipe/assembling/cobweb.json +++ b/src/generated/resources/data/ragium/recipe/assembling/cobweb.json @@ -2,7 +2,7 @@ "type": "ragium:assembling", "extra": { "count": 1, - "items": "#c:sticky_balls" + "items": "#c:slime_balls" }, "ingredient": { "count": 5, diff --git a/src/generated/resources/data/ragium/recipe/assembling/electric_circuit.json b/src/generated/resources/data/ragium/recipe/assembling/electric_circuit.json index aa1faac67b..934dabde63 100644 --- a/src/generated/resources/data/ragium/recipe/assembling/electric_circuit.json +++ b/src/generated/resources/data/ragium/recipe/assembling/electric_circuit.json @@ -1,12 +1,18 @@ { "type": "ragium:assembling", - "extra": { - "count": 1, - "items": "ragium:circuit_board" - }, + "extras": [ + { + "count": 2, + "items": "ragium:silicon_chip" + }, + { + "count": 3, + "items": "#c:nuggets/gold" + } + ], "ingredient": { - "count": 2, - "items": "ragium:circuit_chip" + "count": 1, + "items": "#c:plastics" }, "result": { "count": 1, diff --git a/src/generated/resources/data/ragium/recipe/assembling/electric_circuit_with_board.json b/src/generated/resources/data/ragium/recipe/assembling/electric_circuit_with_board.json new file mode 100644 index 0000000000..3e2ed2668f --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/assembling/electric_circuit_with_board.json @@ -0,0 +1,16 @@ +{ + "type": "ragium:assembling", + "extra": { + "count": 1, + "items": "ragium:circuit_board" + }, + "ingredient": { + "count": 2, + "items": "ragium:silicon_chip" + }, + "result": { + "count": 1, + "id": "ragium:electric_circuit" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/assembling/electronics_machine_parts.json b/src/generated/resources/data/ragium/recipe/assembling/electronics_machine_parts.json index 73392ae268..1ff1946a98 100644 --- a/src/generated/resources/data/ragium/recipe/assembling/electronics_machine_parts.json +++ b/src/generated/resources/data/ragium/recipe/assembling/electronics_machine_parts.json @@ -1,12 +1,18 @@ { "type": "ragium:assembling", - "extra": { - "count": 1, - "items": "ragium:electric_circuit" - }, + "extras": [ + { + "count": 2, + "items": "ragium:silicon_chip" + }, + { + "count": 3, + "items": "#c:nuggets/gold" + } + ], "ingredient": { - "count": 2, - "items": "#c:ingots/void_metal" + "count": 1, + "items": "ragium:cfrp_plate" }, "result": { "count": 1, diff --git a/src/generated/resources/data/ragium/recipe/assembling/electronics_machine_parts_by_black_metal.json b/src/generated/resources/data/ragium/recipe/assembling/electronics_machine_parts_by_black_metal.json index e7be79da01..b0c15b8525 100644 --- a/src/generated/resources/data/ragium/recipe/assembling/electronics_machine_parts_by_black_metal.json +++ b/src/generated/resources/data/ragium/recipe/assembling/electronics_machine_parts_by_black_metal.json @@ -5,7 +5,7 @@ "items": "ragium:electric_circuit" }, "ingredient": { - "count": 4, + "count": 2, "items": "#c:ingots/black_steel" }, "result": { diff --git a/src/generated/resources/data/ragium/recipe/bathing/cfrp_plate.json b/src/generated/resources/data/ragium/recipe/bathing/cfrp_plate.json new file mode 100644 index 0000000000..0f1f140f32 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/cfrp_plate.json @@ -0,0 +1,16 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 250, + "fluids": "#ragium:resins" + }, + "item_ingredient": { + "count": 1, + "items": "ragium:carbon_fiber" + }, + "result": { + "count": 1, + "id": "ragium:cfrp_plate" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/salt_dust_from_block.json b/src/generated/resources/data/ragium/recipe/bathing/mortar.json similarity index 59% rename from src/generated/resources/data/ragium/recipe/bathing/salt_dust_from_block.json rename to src/generated/resources/data/ragium/recipe/bathing/mortar.json index 83aab8897e..f2e35bb8d5 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/salt_dust_from_block.json +++ b/src/generated/resources/data/ragium/recipe/bathing/mortar.json @@ -1,16 +1,16 @@ { "type": "ragium:bathing", "fluid_ingredient": { - "amount": 1000, + "amount": 250, "fluids": "#c:water" }, "item_ingredient": { "count": 1, - "items": "#c:storage_blocks/dried_kelp" + "items": "ragium:cement" }, "result": { - "count": 6, - "id": "ragium:salt_dust" + "count": 1, + "id": "ragium:mortar" }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/particle_board.json b/src/generated/resources/data/ragium/recipe/bathing/particle_board.json new file mode 100644 index 0000000000..717a98c830 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/particle_board.json @@ -0,0 +1,16 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#ragium:resins" + }, + "item_ingredient": { + "count": 1, + "items": "#c:dusts/wood" + }, + "result": { + "count": 1, + "id": "ragium:particle_board" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/sticky_piston.json b/src/generated/resources/data/ragium/recipe/bathing/sticky_piston.json new file mode 100644 index 0000000000..14e0f73f05 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/sticky_piston.json @@ -0,0 +1,16 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#ragium:resins" + }, + "item_ingredient": { + "count": 1, + "items": "minecraft:piston" + }, + "result": { + "count": 1, + "id": "minecraft:sticky_piston" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/blasting/quick_lime_dust.json b/src/generated/resources/data/ragium/recipe/blasting/quick_lime_dust.json new file mode 100644 index 0000000000..90dd722f1e --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/blasting/quick_lime_dust.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:blasting", + "category": "misc", + "cookingtime": 100, + "experience": 0.15, + "ingredient": "#c:dusts/lime", + "result": { + "id": "ragium:quick_lime_dust" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/blasting/soda_ash_dust.json b/src/generated/resources/data/ragium/recipe/blasting/soda_ash_dust.json new file mode 100644 index 0000000000..95e857dd96 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/blasting/soda_ash_dust.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:blasting", + "category": "misc", + "cookingtime": 100, + "experience": 0.15, + "ingredient": "minecraft:dried_kelp", + "result": { + "id": "ragium:soda_ash_dust" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/crushing/cryolite.json b/src/generated/resources/data/ragium/recipe/crushing/cryolite.json deleted file mode 100644 index 5006ddb270..0000000000 --- a/src/generated/resources/data/ragium/recipe/crushing/cryolite.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "ragium:crushing", - "ingredient": { - "count": 1, - "items": "ragium:cryolite_block" - }, - "result": { - "count": 4, - "id": "ragium:cryolite" - }, - "time": 200 -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/crushing/cryolite_dust_from_gem.json b/src/generated/resources/data/ragium/recipe/crushing/lime_dust.json similarity index 51% rename from src/generated/resources/data/ragium/recipe/crushing/cryolite_dust_from_gem.json rename to src/generated/resources/data/ragium/recipe/crushing/lime_dust.json index 4ca387edfd..e67f6790dc 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/cryolite_dust_from_gem.json +++ b/src/generated/resources/data/ragium/recipe/crushing/lime_dust.json @@ -2,11 +2,14 @@ "type": "ragium:crushing", "ingredient": { "count": 1, - "items": "#c:gems/cryolite" + "items": [ + "minecraft:calcite", + "minecraft:dripstone_block" + ] }, "result": { "count": 1, - "id": "ragium:cryolite_dust" + "id": "ragium:lime_dust" }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/crushing/packed_ice.json b/src/generated/resources/data/ragium/recipe/crushing/packed_ice.json deleted file mode 100644 index bb8899831b..0000000000 --- a/src/generated/resources/data/ragium/recipe/crushing/packed_ice.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "ragium:crushing", - "ingredient": { - "count": 1, - "items": "minecraft:blue_ice" - }, - "results": [ - { - "count": 9, - "id": "minecraft:packed_ice" - }, - { - "count": 1, - "id": "ragium:cryolite_dust" - } - ], - "time": 200 -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/crushing/red_sand.json b/src/generated/resources/data/ragium/recipe/crushing/red_sand.json index e775c57413..fa5904c680 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/red_sand.json +++ b/src/generated/resources/data/ragium/recipe/crushing/red_sand.json @@ -4,15 +4,9 @@ "count": 1, "items": "#c:sandstone/red_blocks" }, - "results": [ - { - "count": 4, - "id": "minecraft:red_sand" - }, - { - "count": 1, - "id": "ragium:bauxite_dust" - } - ], + "result": { + "count": 4, + "id": "minecraft:red_sand" + }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/crushing/sand.json b/src/generated/resources/data/ragium/recipe/crushing/sand.json index 82c9ef9e6e..74b20e6eaa 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/sand.json +++ b/src/generated/resources/data/ragium/recipe/crushing/sand.json @@ -4,15 +4,9 @@ "count": 1, "items": "#c:sandstone/uncolored_blocks" }, - "results": [ - { - "count": 4, - "id": "minecraft:sand" - }, - { - "count": 1, - "id": "ragium:niter_dust" - } - ], + "result": { + "count": 4, + "id": "minecraft:sand" + }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/cutting/circuit_chip.json b/src/generated/resources/data/ragium/recipe/cutting/silicon_chip.json similarity index 82% rename from src/generated/resources/data/ragium/recipe/cutting/circuit_chip.json rename to src/generated/resources/data/ragium/recipe/cutting/silicon_chip.json index e7cbe309c4..11ff885c57 100644 --- a/src/generated/resources/data/ragium/recipe/cutting/circuit_chip.json +++ b/src/generated/resources/data/ragium/recipe/cutting/silicon_chip.json @@ -6,7 +6,7 @@ }, "result": { "count": 8, - "id": "ragium:circuit_chip" + "id": "ragium:silicon_chip" }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/electrolyzing/hydrogen_from_salt_water.json b/src/generated/resources/data/ragium/recipe/electrolyzing/hydrogen_from_salt_water.json index 161e77bfc9..347ee03bcc 100644 --- a/src/generated/resources/data/ragium/recipe/electrolyzing/hydrogen_from_salt_water.json +++ b/src/generated/resources/data/ragium/recipe/electrolyzing/hydrogen_from_salt_water.json @@ -1,12 +1,8 @@ { "type": "ragium:electrolyzing", - "fluid_ingredient": { + "ingredient": { "amount": 1000, - "fluids": "#c:water" - }, - "item_ingredient": { - "count": 1, - "items": "#c:dusts/salt" + "fluids": "#c:salt_water" }, "results": [ { diff --git a/src/generated/resources/data/ragium/recipe/electrolyzing/hydrogen_from_water.json b/src/generated/resources/data/ragium/recipe/electrolyzing/hydrogen_from_water.json index b1e72301bb..af0768a996 100644 --- a/src/generated/resources/data/ragium/recipe/electrolyzing/hydrogen_from_water.json +++ b/src/generated/resources/data/ragium/recipe/electrolyzing/hydrogen_from_water.json @@ -1,6 +1,6 @@ { "type": "ragium:electrolyzing", - "fluid_ingredient": { + "ingredient": { "amount": 1000, "fluids": "#c:water" }, diff --git a/src/generated/resources/data/ragium/recipe/freezing/plastic_plate.json b/src/generated/resources/data/ragium/recipe/freezing/plastic_plate.json index b3b05987fd..4b3ec7ed4c 100644 --- a/src/generated/resources/data/ragium/recipe/freezing/plastic_plate.json +++ b/src/generated/resources/data/ragium/recipe/freezing/plastic_plate.json @@ -1,8 +1,8 @@ { "type": "ragium:freezing", "ingredient": { - "amount": 500, - "fluids": "#c:naphtha" + "amount": 90, + "fluids": "#c:molten_plastic" }, "result": { "count": 1, diff --git a/src/generated/resources/data/ragium/recipe/freezing/sticky_ball.json b/src/generated/resources/data/ragium/recipe/freezing/sticky_ball.json new file mode 100644 index 0000000000..97893ca52a --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/freezing/sticky_ball.json @@ -0,0 +1,12 @@ +{ + "type": "ragium:freezing", + "ingredient": { + "amount": 250, + "fluids": "#ragium:resins" + }, + "result": { + "count": 1, + "id": "ragium:sticky_ball" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/mixing/alumina_solution.json b/src/generated/resources/data/ragium/recipe/mixing/alumina_solution.json deleted file mode 100644 index 660da860bd..0000000000 --- a/src/generated/resources/data/ragium/recipe/mixing/alumina_solution.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 500, - "fluids": "#c:sodium_hydroxide_solution" - }, - "item_ingredient": { - "count": 1, - "items": "#c:dusts/bauxite" - }, - "result": { - "amount": 1000, - "id": "ragium:alumina_solution" - }, - "time": 200 -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/mixing/sulfur_dioxide.json b/src/generated/resources/data/ragium/recipe/mixing/sulfur_dioxide.json deleted file mode 100644 index 9acbf8dfcc..0000000000 --- a/src/generated/resources/data/ragium/recipe/mixing/sulfur_dioxide.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 1000, - "fluids": "#c:oxygen" - }, - "item_ingredient": { - "count": 1, - "items": "#c:dusts/sulfur" - }, - "result": { - "amount": 1000, - "id": "ragium:sulfur_dioxide" - }, - "time": 200 -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/mixing/sulfur_trioxide.json b/src/generated/resources/data/ragium/recipe/mixing/sulfur_trioxide.json deleted file mode 100644 index a38c8efa49..0000000000 --- a/src/generated/resources/data/ragium/recipe/mixing/sulfur_trioxide.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "ragium:mixing", - "fluid_ingredient": { - "amount": 1000, - "fluids": "#c:oxygen" - }, - "item_ingredient": { - "count": 1, - "items": "minecraft:blaze_powder" - }, - "result": { - "amount": 1000, - "id": "ragium:sulfur_trioxide" - }, - "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 new file mode 100644 index 0000000000..8c2cada30f --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/pyrolyzing/quick_lime_dust.json @@ -0,0 +1,16 @@ +{ + "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" + }, + "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 new file mode 100644 index 0000000000..eda6ca4efb --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/pyrolyzing/sulfur_dioxide.json @@ -0,0 +1,12 @@ +{ + "type": "ragium:pyrolyzing", + "fluid_result": { + "amount": 1000, + "id": "ragium:sulfur_dioxide" + }, + "ingredient": { + "count": 1, + "items": "#c:dusts/sulfur" + }, + "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 new file mode 100644 index 0000000000..7a8efd59a8 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/pyrolyzing/sulfur_trioxide.json @@ -0,0 +1,12 @@ +{ + "type": "ragium:pyrolyzing", + "fluid_result": { + "amount": 1000, + "id": "ragium:sulfur_trioxide" + }, + "ingredient": { + "count": 1, + "items": "minecraft:blaze_powder" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/reacting/cryolite.json b/src/generated/resources/data/ragium/recipe/reacting/cryolite.json deleted file mode 100644 index 4446d36927..0000000000 --- a/src/generated/resources/data/ragium/recipe/reacting/cryolite.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "ragium:reacting", - "item_result": { - "count": 1, - "id": "ragium:cryolite" - }, - "primary_ingredient": { - "amount": 1000, - "fluids": "#c:alumina_solution" - }, - "secondary_ingredient": { - "amount": 6000, - "fluids": "#c:hydrofluoric_acid" - }, - "time": 200 -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/reacting/plastic_plate.json b/src/generated/resources/data/ragium/recipe/reacting/molten_plastic.json similarity index 73% rename from src/generated/resources/data/ragium/recipe/reacting/plastic_plate.json rename to src/generated/resources/data/ragium/recipe/reacting/molten_plastic.json index 13da8c0df8..73ceb2da57 100644 --- a/src/generated/resources/data/ragium/recipe/reacting/plastic_plate.json +++ b/src/generated/resources/data/ragium/recipe/reacting/molten_plastic.json @@ -1,8 +1,8 @@ { "type": "ragium:reacting", - "item_result": { - "count": 2, - "id": "ragium:plastic_plate" + "fluid_result": { + "amount": 180, + "id": "ragium:molten_plastic" }, "primary_ingredient": { "amount": 500, 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 a9b089e3c8..afe4003494 100644 --- a/src/generated/resources/data/ragium/recipe/reacting/synthetic_resin.json +++ b/src/generated/resources/data/ragium/recipe/reacting/synthetic_resin.json @@ -1,7 +1,7 @@ { "type": "ragium:reacting", "fluid_result": { - "amount": 1000, + "amount": 2000, "id": "ragium:synthetic_resin" }, "primary_ingredient": { @@ -10,7 +10,7 @@ }, "secondary_ingredient": { "amount": 1000, - "fluids": "#c:water" + "fluids": "#ragium:aldehydes" }, "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 new file mode 100644 index 0000000000..08c48c3d36 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/refining/aldehyde.json @@ -0,0 +1,12 @@ +{ + "type": "ragium:refining", + "fluid_result": { + "amount": 1000, + "id": "ragium:aldehyde" + }, + "ingredient": { + "amount": 1000, + "fluids": "#ragium:alcohols" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/refining/aromatic_compound_from_coal_tar.json b/src/generated/resources/data/ragium/recipe/refining/coal_tar.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/refining/aromatic_compound_from_coal_tar.json rename to src/generated/resources/data/ragium/recipe/refining/coal_tar.json diff --git a/src/generated/resources/data/ragium/recipe/refining/fuel_from_naphtha.json b/src/generated/resources/data/ragium/recipe/refining/crude_oil.json similarity index 60% rename from src/generated/resources/data/ragium/recipe/refining/fuel_from_naphtha.json rename to src/generated/resources/data/ragium/recipe/refining/crude_oil.json index bdeb5228a6..33908465ed 100644 --- a/src/generated/resources/data/ragium/recipe/refining/fuel_from_naphtha.json +++ b/src/generated/resources/data/ragium/recipe/refining/crude_oil.json @@ -1,16 +1,16 @@ { "type": "ragium:refining", "fluid_result": { - "amount": 500, - "id": "ragium:fuel" + "amount": 750, + "id": "ragium:naphtha" }, "ingredient": { "amount": 1000, - "fluids": "#c:naphtha" + "fluids": "#c:crude_oil" }, "item_result": { "count": 1, - "id": "ragium:sulfur_dust" + "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 33908465ed..bdeb5228a6 100644 --- a/src/generated/resources/data/ragium/recipe/refining/naphtha.json +++ b/src/generated/resources/data/ragium/recipe/refining/naphtha.json @@ -1,16 +1,16 @@ { "type": "ragium:refining", "fluid_result": { - "amount": 750, - "id": "ragium:naphtha" + "amount": 500, + "id": "ragium:fuel" }, "ingredient": { "amount": 1000, - "fluids": "#c:crude_oil" + "fluids": "#c:naphtha" }, "item_result": { "count": 1, - "id": "ragium:tar" + "id": "ragium:sulfur_dust" }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/refining/alumina_dust_from_solution.json b/src/generated/resources/data/ragium/recipe/refining/salt_water.json similarity index 74% rename from src/generated/resources/data/ragium/recipe/refining/alumina_dust_from_solution.json rename to src/generated/resources/data/ragium/recipe/refining/salt_water.json index 415a16752b..82817b0d90 100644 --- a/src/generated/resources/data/ragium/recipe/refining/alumina_dust_from_solution.json +++ b/src/generated/resources/data/ragium/recipe/refining/salt_water.json @@ -6,11 +6,11 @@ }, "ingredient": { "amount": 1000, - "fluids": "#c:alumina_solution" + "fluids": "#c:salt_water" }, "item_result": { "count": 1, - "id": "ragium:alumina_dust" + "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 new file mode 100644 index 0000000000..2938d91f00 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/refining/sodium_hydroxide_solution.json @@ -0,0 +1,16 @@ +{ + "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" + }, + "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 new file mode 100644 index 0000000000..6ae0890777 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/refining/wood_tar.json @@ -0,0 +1,12 @@ +{ + "type": "ragium:refining", + "fluid_result": { + "amount": 500, + "id": "ragium:alcohol" + }, + "ingredient": { + "amount": 1000, + "fluids": "#c:wood_tar" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/resource/extracting/water_at_ocean.json b/src/generated/resources/data/ragium/recipe/resource/extracting/salt_water_at_ocean.json similarity index 80% rename from src/generated/resources/data/ragium/recipe/resource/extracting/water_at_ocean.json rename to src/generated/resources/data/ragium/recipe/resource/extracting/salt_water_at_ocean.json index b06ae25601..48fa996a67 100644 --- a/src/generated/resources/data/ragium/recipe/resource/extracting/water_at_ocean.json +++ b/src/generated/resources/data/ragium/recipe/resource/extracting/salt_water_at_ocean.json @@ -3,7 +3,7 @@ "condition": "#c:is_ocean", "result": { "amount": 4000, - "id": "minecraft:water" + "id": "ragium:salt_water" }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/shaped/bricks.json b/src/generated/resources/data/ragium/recipe/shaped/bricks.json new file mode 100644 index 0000000000..e48ffb6c2e --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/shaped/bricks.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "A": "#c:bricks/normal", + "B": "ragium:mortar" + }, + "pattern": [ + "AB", + "BA" + ], + "result": { + "id": "minecraft:bricks" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/shaped/cryolite_block.json b/src/generated/resources/data/ragium/recipe/shaped/cryolite_block.json deleted file mode 100644 index 08350be81a..0000000000 --- a/src/generated/resources/data/ragium/recipe/shaped/cryolite_block.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "group": "cryolite_block", - "key": { - "A": "#c:gems/cryolite" - }, - "pattern": [ - "AA", - "AA" - ], - "result": { - "id": "ragium:cryolite_block" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/shaped/cryolite_stairs.json b/src/generated/resources/data/ragium/recipe/shaped/cryolite_stairs.json deleted file mode 100644 index b11cf3cedb..0000000000 --- a/src/generated/resources/data/ragium/recipe/shaped/cryolite_stairs.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "misc", - "group": "cryolite_stairs", - "key": { - "A": "ragium:cryolite_block" - }, - "pattern": [ - "A ", - "AA ", - "AAA" - ], - "result": { - "count": 4, - "id": "ragium:cryolite_stairs" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/shaped/electrolyzer.json b/src/generated/resources/data/ragium/recipe/shaped/electrolyzer.json new file mode 100644 index 0000000000..cc1d04c30d --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/shaped/electrolyzer.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "A": "#c:nuggets/black_steel", + "B": "ragium:electronics_machine_parts", + "C": "#c:gears/diamond", + "D": "#minecraft:lightning_rods" + }, + "pattern": [ + "ABA", + "BCB", + "ADA" + ], + "result": { + "id": "ragium:electrolyzer" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/shaped/enchanter.json b/src/generated/resources/data/ragium/recipe/shaped/enchanter.json index b1130e35af..53c0c62d93 100644 --- a/src/generated/resources/data/ragium/recipe/shaped/enchanter.json +++ b/src/generated/resources/data/ragium/recipe/shaped/enchanter.json @@ -2,7 +2,7 @@ "type": "minecraft:crafting_shaped", "category": "misc", "key": { - "A": "#c:nuggets/void_metal", + "A": "minecraft:ghast_tear", "B": "ragium:arcane_machine_parts", "C": "#c:gears/netherite", "D": "minecraft:enchanting_table" diff --git a/src/generated/resources/data/ragium/recipe/shaped/cryolite_slab.json b/src/generated/resources/data/ragium/recipe/shaped/fluorite_wall.json similarity index 57% rename from src/generated/resources/data/ragium/recipe/shaped/cryolite_slab.json rename to src/generated/resources/data/ragium/recipe/shaped/fluorite_wall.json index 478b42a56a..3889352aa5 100644 --- a/src/generated/resources/data/ragium/recipe/shaped/cryolite_slab.json +++ b/src/generated/resources/data/ragium/recipe/shaped/fluorite_wall.json @@ -1,15 +1,16 @@ { "type": "minecraft:crafting_shaped", "category": "misc", - "group": "cryolite_slab", + "group": "fluorite_wall", "key": { - "A": "ragium:cryolite_block" + "A": "ragium:fluorite_block" }, "pattern": [ + "AAA", "AAA" ], "result": { "count": 6, - "id": "ragium:cryolite_slab" + "id": "ragium:fluorite_wall" } } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/shaped/nether_bricks.json b/src/generated/resources/data/ragium/recipe/shaped/nether_bricks.json new file mode 100644 index 0000000000..8b8cdccfa7 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/shaped/nether_bricks.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "A": "#c:bricks/nether", + "B": "ragium:mortar" + }, + "pattern": [ + "AB", + "BA" + ], + "result": { + "id": "minecraft:nether_bricks" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/shaped/particle_board.json b/src/generated/resources/data/ragium/recipe/shaped/particle_board.json index 6252617576..3d9ae7d04f 100644 --- a/src/generated/resources/data/ragium/recipe/shaped/particle_board.json +++ b/src/generated/resources/data/ragium/recipe/shaped/particle_board.json @@ -3,7 +3,7 @@ "category": "misc", "key": { "A": "#c:dusts/wood", - "B": "#c:sticky_balls" + "B": "#c:slime_balls" }, "pattern": [ "AAA", diff --git a/src/generated/resources/data/ragium/recipe/shaped/potion_tank.json b/src/generated/resources/data/ragium/recipe/shaped/potion_tank.json new file mode 100644 index 0000000000..3b6f7253a2 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/shaped/potion_tank.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "A": "#c:rods/blaze", + "B": "#c:buckets/empty" + }, + "pattern": [ + " A ", + "ABA", + " A " + ], + "result": { + "id": "ragium:potion_tank" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/shaped/precision_assembler.json b/src/generated/resources/data/ragium/recipe/shaped/precision_assembler.json index c7ebde1de5..1408c53adf 100644 --- a/src/generated/resources/data/ragium/recipe/shaped/precision_assembler.json +++ b/src/generated/resources/data/ragium/recipe/shaped/precision_assembler.json @@ -2,7 +2,7 @@ "type": "minecraft:crafting_shaped", "category": "misc", "key": { - "A": "#c:nuggets/void_metal", + "A": "#c:nuggets/black_steel", "B": "ragium:electronics_machine_parts", "C": "#c:gears/diamond", "D": "ragium:assembler" diff --git a/src/generated/resources/data/ragium/recipe/shaped/quartz_glass_pane.json b/src/generated/resources/data/ragium/recipe/shaped/quartz_glass_pane.json new file mode 100644 index 0000000000..5d4c1bf454 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/shaped/quartz_glass_pane.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "A": "ragium:quartz_glass" + }, + "pattern": [ + "AAA", + "AAA" + ], + "result": { + "count": 8, + "id": "ragium:quartz_glass_pane" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/shapeless/cement.json b/src/generated/resources/data/ragium/recipe/shapeless/cement.json new file mode 100644 index 0000000000..00072652a7 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/shapeless/cement.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + "#c:sands", + "#c:dusts/quick_lime" + ], + "result": { + "count": 2, + "id": "ragium:cement" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/shapeless/fluid_output_bus.json b/src/generated/resources/data/ragium/recipe/shapeless/fluid_output_bus.json new file mode 100644 index 0000000000..fc3c8348e1 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/shapeless/fluid_output_bus.json @@ -0,0 +1,11 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + "ragium:machine_casing", + "ragium:tank" + ], + "result": { + "id": "ragium:fluid_output_bus" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/shapeless/mortar.json b/src/generated/resources/data/ragium/recipe/shapeless/mortar.json new file mode 100644 index 0000000000..e0e3b7e376 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/shapeless/mortar.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + "#c:buckets/water", + "ragium:cement", + "ragium:cement", + "ragium:cement", + "ragium:cement" + ], + "result": { + "count": 4, + "id": "ragium:mortar" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/smelting/glass_from_dust.json b/src/generated/resources/data/ragium/recipe/smelting/glass_from_dust.json new file mode 100644 index 0000000000..7663028620 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/smelting/glass_from_dust.json @@ -0,0 +1,11 @@ +{ + "type": "minecraft:smelting", + "category": "misc", + "cookingtime": 200, + "experience": 0.0, + "group": "glass", + "ingredient": "#c:dusts/glass", + "result": { + "id": "minecraft:glass" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/smelting/quick_lime_dust.json b/src/generated/resources/data/ragium/recipe/smelting/quick_lime_dust.json new file mode 100644 index 0000000000..db1a2482eb --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/smelting/quick_lime_dust.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:smelting", + "category": "misc", + "cookingtime": 200, + "experience": 0.15, + "ingredient": "#c:dusts/lime", + "result": { + "id": "ragium:quick_lime_dust" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/smelting/soda_ash_dust.json b/src/generated/resources/data/ragium/recipe/smelting/soda_ash_dust.json new file mode 100644 index 0000000000..c39669d489 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/smelting/soda_ash_dust.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:smelting", + "category": "misc", + "cookingtime": 200, + "experience": 0.15, + "ingredient": "minecraft:dried_kelp", + "result": { + "id": "ragium:soda_ash_dust" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/stonecutting/cryolite_slab.json b/src/generated/resources/data/ragium/recipe/stonecutting/cryolite_slab.json deleted file mode 100644 index f23b3e3544..0000000000 --- a/src/generated/resources/data/ragium/recipe/stonecutting/cryolite_slab.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": "ragium:cryolite_block", - "result": { - "count": 2, - "id": "ragium:cryolite_slab" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/stonecutting/cryolite_stairs.json b/src/generated/resources/data/ragium/recipe/stonecutting/cryolite_stairs.json deleted file mode 100644 index 19f17a6ca8..0000000000 --- a/src/generated/resources/data/ragium/recipe/stonecutting/cryolite_stairs.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "ingredient": "ragium:cryolite_block", - "result": { - "id": "ragium:cryolite_stairs" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/stonecutting/fluorite_wall.json b/src/generated/resources/data/ragium/recipe/stonecutting/fluorite_wall.json new file mode 100644 index 0000000000..cb34f744eb --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/stonecutting/fluorite_wall.json @@ -0,0 +1,7 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": "ragium:fluorite_block", + "result": { + "id": "ragium:fluorite_wall" + } +} \ 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 new file mode 100644 index 0000000000..6623cdc76d --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/washing/alumina_dust_from_clay.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:washing", + "fluid_ingredient": { + "amount": 1000, + "fluids": "#c:water" + }, + "item_ingredient": { + "count": 1, + "items": "minecraft:clay" + }, + "results": [ + { + "count": 2, + "id": "ragium:alumina_dust" + }, + { + "count": 2, + "id": "ragium:quartz_dust" + } + ], + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/washing/copper_dust_from_raw.json b/src/generated/resources/data/ragium/recipe/washing/copper_dust_from_raw.json new file mode 100644 index 0000000000..38ff1558e3 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/washing/copper_dust_from_raw.json @@ -0,0 +1,16 @@ +{ + "type": "ragium:washing", + "fluid_ingredient": { + "amount": 250, + "fluids": "#c:sulfuric_acid" + }, + "item_ingredient": { + "count": 1, + "items": "#c:raw_materials/copper" + }, + "result": { + "count": 2, + "id": "ragium:copper_dust" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/washing/flint.json b/src/generated/resources/data/ragium/recipe/washing/flint.json new file mode 100644 index 0000000000..e4f3919778 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/washing/flint.json @@ -0,0 +1,16 @@ +{ + "type": "ragium:washing", + "fluid_ingredient": { + "amount": 1000, + "fluids": "#c:water" + }, + "item_ingredient": { + "count": 1, + "items": "#c:gravels" + }, + "result": { + "count": 1, + "id": "minecraft:flint" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/washing/gold_dust_from_raw.json b/src/generated/resources/data/ragium/recipe/washing/gold_dust_from_raw.json new file mode 100644 index 0000000000..728d1f14be --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/washing/gold_dust_from_raw.json @@ -0,0 +1,16 @@ +{ + "type": "ragium:washing", + "fluid_ingredient": { + "amount": 250, + "fluids": "#c:nitric_acid" + }, + "item_ingredient": { + "count": 1, + "items": "#c:raw_materials/gold" + }, + "result": { + "count": 2, + "id": "ragium:gold_dust" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/washing/iron_dust_from_raw.json b/src/generated/resources/data/ragium/recipe/washing/iron_dust_from_raw.json new file mode 100644 index 0000000000..ff9a3337c3 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/washing/iron_dust_from_raw.json @@ -0,0 +1,16 @@ +{ + "type": "ragium:washing", + "fluid_ingredient": { + "amount": 250, + "fluids": "#c:sulfuric_acid" + }, + "item_ingredient": { + "count": 1, + "items": "#c:raw_materials/iron" + }, + "result": { + "count": 2, + "id": "ragium:iron_dust" + }, + "time": 200 +} \ No newline at end of file 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 new file mode 100644 index 0000000000..efc2d1ba4b --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/washing/netherite_scrap_from_debris.json @@ -0,0 +1,16 @@ +{ + "type": "ragium:washing", + "fluid_ingredient": { + "amount": 250, + "fluids": "#c:hydrofluoric_acid" + }, + "item_ingredient": { + "count": 1, + "items": "minecraft:ancient_debris" + }, + "result": { + "count": 3, + "id": "minecraft:netherite_scrap" + }, + "time": 200 +} \ No newline at end of file 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 new file mode 100644 index 0000000000..654c22b8aa --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/washing/quartz_dust_from_red_sands.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:washing", + "fluid_ingredient": { + "amount": 1000, + "fluids": "#c:water" + }, + "item_ingredient": { + "count": 4, + "items": "#c:sands/red" + }, + "results": [ + { + "count": 3, + "id": "ragium:quartz_dust" + }, + { + "count": 1, + "id": "ragium:bauxite_dust" + } + ], + "time": 200 +} \ No newline at end of file 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 new file mode 100644 index 0000000000..ff7b409dc2 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/washing/quartz_dust_from_sands.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:washing", + "fluid_ingredient": { + "amount": 1000, + "fluids": "#c:water" + }, + "item_ingredient": { + "count": 4, + "items": "#c:sands/colorless" + }, + "results": [ + { + "count": 3, + "id": "ragium:quartz_dust" + }, + { + "count": 1, + "id": "ragium:borax_dust" + } + ], + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/tags/block/machines/chemical.json b/src/generated/resources/data/ragium/tags/block/machines/chemical.json index 72f0688681..e851b26289 100644 --- a/src/generated/resources/data/ragium/tags/block/machines/chemical.json +++ b/src/generated/resources/data/ragium/tags/block/machines/chemical.json @@ -2,7 +2,6 @@ "values": [ "ragium:chemical_bath", "ragium:chemical_reactor", - "ragium:electrolyzer", "ragium:mixer" ] } \ 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 1be45a33dc..2be2125c5e 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:electrolyzer", "ragium:precision_assembler", "ragium:scanner" ] diff --git a/src/generated/resources/data/ragium/tags/fluid/alcohols.json b/src/generated/resources/data/ragium/tags/fluid/alcohols.json new file mode 100644 index 0000000000..8d59226b05 --- /dev/null +++ b/src/generated/resources/data/ragium/tags/fluid/alcohols.json @@ -0,0 +1,21 @@ +{ + "values": [ + { + "id": "#c:bio_ethanol", + "required": false + }, + { + "id": "#c:bioethanol", + "required": false + }, + { + "id": "#c:ethanol", + "required": false + }, + { + "id": "#c:methanol", + "required": false + }, + "#c:alcohol" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/tags/fluid/aldehydes.json b/src/generated/resources/data/ragium/tags/fluid/aldehydes.json new file mode 100644 index 0000000000..6b507b8920 --- /dev/null +++ b/src/generated/resources/data/ragium/tags/fluid/aldehydes.json @@ -0,0 +1,13 @@ +{ + "values": [ + { + "id": "#c:acetaldehyde", + "required": false + }, + { + "id": "#c:formaldehyde", + "required": false + }, + "#c:aldehyde" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/tags/item/machines/chemical.json b/src/generated/resources/data/ragium/tags/item/machines/chemical.json index 72f0688681..e851b26289 100644 --- a/src/generated/resources/data/ragium/tags/item/machines/chemical.json +++ b/src/generated/resources/data/ragium/tags/item/machines/chemical.json @@ -2,7 +2,6 @@ "values": [ "ragium:chemical_bath", "ragium:chemical_reactor", - "ragium:electrolyzer", "ragium:mixer" ] } \ 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 1be45a33dc..2be2125c5e 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:electrolyzer", "ragium:precision_assembler", "ragium:scanner" ] diff --git a/src/generated/resources/data/ragium/tags/item/show_fluid_tooltips.json b/src/generated/resources/data/ragium/tags/item/show_fluid_tooltips.json index 29217b0ffd..ba40b7b577 100644 --- a/src/generated/resources/data/ragium/tags/item/show_fluid_tooltips.json +++ b/src/generated/resources/data/ragium/tags/item/show_fluid_tooltips.json @@ -1,6 +1,8 @@ { "values": [ "ragium:creative_tank", + "ragium:fluid_output_bus", + "ragium:potion_tank", "ragium:tank", "ragium:void_tank" ] diff --git a/src/generated/resources/reports/ragium/registries.json b/src/generated/resources/reports/ragium/registries.json new file mode 100644 index 0000000000..e187673884 --- /dev/null +++ b/src/generated/resources/reports/ragium/registries.json @@ -0,0 +1,618 @@ +{ + "minecraft:block": [ + "alloy_smelter", + "aluminum_block", + "arcane_machine_casing", + "aromatic_compound", + "assembler", + "bio_machine_casing", + "black_dye", + "black_steel_block", + "blue_dye", + "brewery", + "brown_dye", + "charcoal_block", + "chemical_bath", + "chemical_machine_casing", + "chemical_reactor", + "coal_coke_block", + "compressor", + "creative_battery", + "creative_tank", + "crude_oil", + "crusher", + "cutting_machine", + "cyan_dye", + "deepslate_niter_ore", + "deepslate_sulfur_ore", + "echo_block", + "electrolyzer", + "electronics_machine_casing", + "enchanter", + "fluid_output_bus", + "fluorite_block", + "fluorite_slab", + "fluorite_stairs", + "fluorite_wall", + "freezer", + "fuel", + "gray_dye", + "green_dye", + "heat_machine_casing", + "honey", + "hydrochloric_acid", + "hydrofluoric_acid", + "light_blue_dye", + "light_gray_dye", + "lime_dye", + "liquid_explosive", + "machine_casing", + "magenta_dye", + "mechanical_machine_casing", + "melter", + "mixer", + "naphtha", + "nether_niter_ore", + "nether_sulfur_ore", + "niter_ore", + "nitric_acid", + "orange_dye", + "pink_dye", + "pitch_coke_block", + "planter", + "potion_tank", + "precision_assembler", + "purple_dye", + "pyrolyzer", + "quartz_glass", + "quartz_glass_pane", + "red_dye", + "refinery", + "resin", + "salt_water", + "scanner", + "smelter", + "sodium_hydroxide_solution", + "sooty_iron_block", + "sulfur_ore", + "sulfuric_acid", + "tank", + "void_metal_block", + "void_tank", + "white_dye", + "yellow_dye" + ], + "minecraft:block_entity_type": [ + "alloy_smelter", + "assembler", + "brewery", + "chemical_bath", + "compressor", + "creative_battery", + "creative_tank", + "crusher", + "cutting_machine", + "electrolyzer", + "enchanter", + "fluid_output_bus", + "freezer", + "melter", + "mixer", + "planter", + "potion_tank", + "precision_assembler", + "smelter", + "tank" + ], + "minecraft:creative_mode_tab": [ + "common" + ], + "minecraft:damage_type": [ + "chemical_burn" + ], + "minecraft:data_component_type": [ + "chemical", + "energy", + "fluid", + "memory_disc_data", + "owner_id" + ], + "minecraft:fluid": [ + "alcohol", + "aldehyde", + "alumina_solution", + "anti_rust_oil", + "aromatic_compound", + "black_dye", + "bleach", + "blue_dye", + "brown_dye", + "chlorine", + "coal_tar", + "crude_oil", + "cyan_dye", + "flowing_aromatic_compound", + "flowing_black_dye", + "flowing_blue_dye", + "flowing_brown_dye", + "flowing_crude_oil", + "flowing_cyan_dye", + "flowing_fuel", + "flowing_gray_dye", + "flowing_green_dye", + "flowing_honey", + "flowing_hydrochloric_acid", + "flowing_hydrofluoric_acid", + "flowing_light_blue_dye", + "flowing_light_gray_dye", + "flowing_lime_dye", + "flowing_liquid_explosive", + "flowing_magenta_dye", + "flowing_naphtha", + "flowing_nitric_acid", + "flowing_orange_dye", + "flowing_pink_dye", + "flowing_purple_dye", + "flowing_red_dye", + "flowing_resin", + "flowing_salt_water", + "flowing_sodium_hydroxide_solution", + "flowing_sulfuric_acid", + "flowing_white_dye", + "flowing_yellow_dye", + "fuel", + "gray_dye", + "green_dye", + "honey", + "hydrochloric_acid", + "hydrofluoric_acid", + "hydrogen", + "hydrogen_chloride", + "hydrogen_fluoride", + "light_blue_dye", + "light_gray_dye", + "lime_dye", + "liquid_explosive", + "magenta_dye", + "molten_ender", + "molten_glass", + "molten_glowstone", + "molten_plastic", + "molten_redstone", + "naphtha", + "nitric_acid", + "nitrogen", + "ominous_flux", + "orange_dye", + "oxygen", + "pink_dye", + "potion", + "purple_dye", + "red_dye", + "resin", + "salt_water", + "sodium_hydroxide_solution", + "sulfur_dioxide", + "sulfur_trioxide", + "sulfuric_acid", + "synthetic_resin", + "white_dye", + "wood_tar", + "yellow_dye" + ], + "minecraft:item": [ + "alcohol_bucket", + "aldehyde_bucket", + "alloy_smelter", + "alumina_dust", + "alumina_solution_bucket", + "aluminum_block", + "aluminum_ingot", + "aluminum_nugget", + "amethyst_dust", + "anti_rust_oil_bucket", + "arcane_machine_casing", + "arcane_machine_parts", + "aromatic_compound_bucket", + "assembler", + "bamboo_charcoal", + "bauxite_dust", + "beeswax", + "bio_machine_casing", + "bio_machine_parts", + "black_dye_bucket", + "black_steel_block", + "black_steel_ingot", + "black_steel_nugget", + "bleach_bucket", + "blue_dye_bucket", + "borax_dust", + "brewery", + "brown_dye_bucket", + "carbon_dust", + "carbon_fiber", + "cement", + "cfrp_plate", + "charcoal_block", + "charcoal_dust", + "chemical_bath", + "chemical_machine_casing", + "chemical_machine_parts", + "chemical_reactor", + "chlorine_bucket", + "circuit_board", + "coal_coke", + "coal_coke_block", + "coal_dust", + "coal_tar_bucket", + "compressor", + "copper_dust", + "copper_gear", + "creative_battery", + "creative_tank", + "crude_oil_bucket", + "crude_silicon", + "crusher", + "cutting_machine", + "cyan_dye_bucket", + "deepslate_niter_ore", + "deepslate_sulfur_ore", + "diamond_dust", + "diamond_gear", + "echo_block", + "echo_dust", + "elder_heart", + "electric_circuit", + "electrolyzer", + "electronics_machine_casing", + "electronics_machine_parts", + "emerald_dust", + "emerald_gear", + "enchanter", + "fluid_output_bus", + "fluorite", + "fluorite_block", + "fluorite_dust", + "fluorite_slab", + "fluorite_stairs", + "fluorite_wall", + "freezer", + "fuel_bucket", + "glass_dust", + "gold_dust", + "gold_gear", + "gray_dye_bucket", + "green_dye_bucket", + "gypsum_dust", + "heat_machine_casing", + "heat_machine_parts", + "honey_bucket", + "hydrochloric_acid_bucket", + "hydrofluoric_acid_bucket", + "hydrogen_bucket", + "hydrogen_chloride_bucket", + "hydrogen_fluoride_bucket", + "iron_dust", + "iron_gear", + "lapis_dust", + "light_blue_dye_bucket", + "light_gray_dye_bucket", + "lime_dust", + "lime_dye_bucket", + "lingering_bottle", + "liquid_explosive_bucket", + "machine_casing", + "magenta_dye_bucket", + "mechanical_machine_casing", + "mechanical_machine_parts", + "melter", + "memory_disc", + "mixer", + "molten_ender_bucket", + "molten_glass_bucket", + "molten_glowstone_bucket", + "molten_plastic_bucket", + "molten_redstone_bucket", + "mortar", + "naphtha_bucket", + "nether_niter_ore", + "nether_sulfur_ore", + "netherite_dust", + "netherite_gear", + "netherite_nugget", + "niter_dust", + "niter_ore", + "nitric_acid_bucket", + "nitrogen_bucket", + "obsidian_dust", + "ominous_flux_bucket", + "orange_dye_bucket", + "oxygen_bucket", + "paper_dust", + "particle_board", + "pink_dye_bucket", + "pitch_coke", + "pitch_coke_block", + "planter", + "plastic_plate", + "potion_bucket", + "potion_tank", + "precision_assembler", + "prismarine_dust", + "purple_dye_bucket", + "pyrolyzer", + "quartz_dust", + "quartz_glass", + "quartz_glass_pane", + "quick_lime_dust", + "raginite_dust", + "red_dye_bucket", + "refinery", + "resin_bucket", + "salt_dust", + "salt_water_bucket", + "scanner", + "silicon_chip", + "silicon_dust", + "silicon_wafer", + "smelter", + "soda_ash_dust", + "sodium_hydroxide_solution_bucket", + "sooty_iron_axe", + "sooty_iron_block", + "sooty_iron_hoe", + "sooty_iron_ingot", + "sooty_iron_nugget", + "sooty_iron_pickaxe", + "sooty_iron_shovel", + "sooty_iron_sword", + "splash_bottle", + "sticky_ball", + "sulfur_dioxide_bucket", + "sulfur_dust", + "sulfur_ore", + "sulfur_trioxide_bucket", + "sulfuric_acid_bucket", + "synthetic_feather", + "synthetic_fiber", + "synthetic_leather", + "synthetic_resin_bucket", + "tank", + "tar", + "tiny_charcoal", + "tiny_coal", + "tiny_coal_coke", + "tiny_pitch_coke", + "void_metal_block", + "void_metal_ingot", + "void_metal_nugget", + "void_tank", + "white_dye_bucket", + "wither_doll", + "wither_star", + "wood_dust", + "wood_gear", + "wood_tar_bucket", + "yellow_dye_bucket" + ], + "minecraft:menu": [ + "block" + ], + "minecraft:mob_effect": [ + "chemical_burn", + "frostbite" + ], + "minecraft:potion": [ + "chemical_burn", + "frostbite", + "long_chemical_burn", + "long_frostbite", + "strong_chemical_burn", + "strong_frostbite" + ], + "minecraft:recipe_serializer": [ + "alloying", + "assembling", + "bathing", + "brewing", + "centrifuging", + "compressing", + "crushing", + "cutting", + "draining", + "electrolyzing", + "enchanting", + "filling", + "freezing", + "melting", + "mixing", + "planting", + "pyrolyzing", + "reacting", + "refining", + "resource/extracting", + "washing" + ], + "minecraft:recipe_type": [ + "alloying", + "assembling", + "bathing", + "brewing", + "centrifuging", + "compressing", + "crushing", + "cutting", + "draining", + "electrolyzing", + "enchanting", + "filling", + "freezing", + "melting", + "mixing", + "planting", + "pyrolyzing", + "reacting", + "refining", + "resource/extracting", + "washing" + ], + "minecraft:worldgen/configured_feature": [ + "lake/crude_oil", + "ore/niter", + "ore/sulfur" + ], + "minecraft:worldgen/placed_feature": [ + "lake/crude_oil", + "nether_ore/niter", + "nether_ore/sulfur", + "ore/niter", + "ore/sulfur" + ], + "neoforge:biome_modifier": [ + "lake/crude_oil", + "nether_ore/niter", + "nether_ore/sulfur", + "ore/niter", + "ore/sulfur" + ], + "neoforge:fluid_ingredient_type": [ + "potion" + ], + "neoforge:fluid_type": [ + "alcohol", + "aldehyde", + "alumina_solution", + "anti_rust_oil", + "aromatic_compound", + "black_dye", + "bleach", + "blue_dye", + "brown_dye", + "chlorine", + "coal_tar", + "crude_oil", + "cyan_dye", + "fuel", + "gray_dye", + "green_dye", + "honey", + "hydrochloric_acid", + "hydrofluoric_acid", + "hydrogen", + "hydrogen_chloride", + "hydrogen_fluoride", + "light_blue_dye", + "light_gray_dye", + "lime_dye", + "liquid_explosive", + "magenta_dye", + "molten_ender", + "molten_glass", + "molten_glowstone", + "molten_plastic", + "molten_redstone", + "naphtha", + "nitric_acid", + "nitrogen", + "ominous_flux", + "orange_dye", + "oxygen", + "pink_dye", + "potion", + "purple_dye", + "red_dye", + "resin", + "salt_water", + "sodium_hydroxide_solution", + "sulfur_dioxide", + "sulfur_trioxide", + "sulfuric_acid", + "synthetic_resin", + "white_dye", + "wood_tar", + "yellow_dye" + ], + "neoforge:ingredient_serializer": [ + "material_tags" + ], + "ragium:chemical": [ + "aluminum", + "aluminum_fluoride", + "aluminum_oxide", + "calcium_carbonate", + "calcium_oxide", + "calcium_sulfate", + "carbon", + "carbonate", + "chlorine", + "copper", + "cryolite", + "diamond", + "fluorite", + "gold", + "hydrogen", + "hydrogen_chloride", + "hydrogen_fluoride", + "hydroxide", + "iron", + "nitrate", + "nitric_acid", + "nitrogen", + "oxygen", + "potassium_nitrate", + "silicon", + "silicon_dioxide", + "sodium_carbonate", + "sodium_chloride", + "sodium_hydroxide", + "sulfate", + "sulfur", + "sulfur_dioxide", + "sulfur_trioxide", + "sulfuric_acid", + "water" + ], + "ragium:chemical_type": [ + "compound", + "mixture", + "simple" + ], + "ragium:element": [ + "aluminum", + "calcium", + "carbon", + "chlorine", + "copper", + "fluorine", + "gold", + "hydrogen", + "iron", + "nitrogen", + "oxygen", + "potassium", + "silicon", + "sodium", + "sulfur" + ], + "ragium:fluid_result_type": [ + "potion", + "simple" + ], + "ragium:item_result_type": [ + "enchanted_book", + "simple", + "tag", + "with_fallback" + ], + "ragium:syncable_payload_type": [ + "fluid", + "integer", + "item" + ], + "ragium:widget_type": [ + "energy", + "fluid", + "item", + "progress" + ] +} \ No newline at end of file diff --git a/src/lib/java/hiiragi283/lib/data/HTDataComponentHelper.java b/src/lib/java/hiiragi283/lib/data/HTDataComponentHelper.java new file mode 100644 index 0000000000..d9020da2c6 --- /dev/null +++ b/src/lib/java/hiiragi283/lib/data/HTDataComponentHelper.java @@ -0,0 +1,35 @@ +package hiiragi283.lib.data; + +import net.minecraft.core.component.DataComponentGetter; +import net.minecraft.core.component.DataComponentPatch; +import net.minecraft.core.component.DataComponentType; +import net.minecraft.core.component.TypedDataComponent; +import net.minecraft.core.registries.BuiltInRegistries; + +import java.util.List; +import java.util.function.Consumer; + +/// @author Hiiragi Tsubasa +/// @since 26.1.8 +public final class HTDataComponentHelper { + + /// Javaのガバガバジェネリクスを利用して[DataComponentGetter]を無理やり[DataComponentPatch]に変換します。 + /// + /// @param getter コンポーネントの提供元 + /// @return 無理やり作った[DataComponentPatch]のインスタンス + @SuppressWarnings({"rawtypes", "unchecked"}) + public static DataComponentPatch createPatch(DataComponentGetter getter) { + List> list = + BuiltInRegistries.DATA_COMPONENT_TYPE.stream() + .mapMulti( + (DataComponentType type, + Consumer> consumer) -> { + Object value = getter.get(type); + if (value != null) { + consumer.accept(new TypedDataComponent(type, value)); + } + }) + .toList(); + return DataComponentPatch.builder().set(list).build(); + } +} diff --git a/src/lib/java/hiiragi283/lib/data/package-info.java b/src/lib/java/hiiragi283/lib/data/package-info.java new file mode 100644 index 0000000000..6b8598233b --- /dev/null +++ b/src/lib/java/hiiragi283/lib/data/package-info.java @@ -0,0 +1,4 @@ +@NullMarked +package hiiragi283.lib.data; + +import org.jspecify.annotations.NullMarked; diff --git a/src/lib/kotlin/hiiragi283/lib/HTConstants.kt b/src/lib/kotlin/hiiragi283/lib/HTConstants.kt index e1532670aa..311b5adaee 100644 --- a/src/lib/kotlin/hiiragi283/lib/HTConstants.kt +++ b/src/lib/kotlin/hiiragi283/lib/HTConstants.kt @@ -72,6 +72,9 @@ data object HTConstants { const val POTIONS = "potions" const val BOTTLE_TYPE = "bottle_type" + const val ELEMENT = "element" + const val CHEMICAL = "chemical" + // Recipes // // Vanilla diff --git a/src/lib/kotlin/hiiragi283/lib/capability/HTMultiCapability.kt b/src/lib/kotlin/hiiragi283/lib/capability/HTMultiCapability.kt index 61d6e86790..ddf19ac3bf 100644 --- a/src/lib/kotlin/hiiragi283/lib/capability/HTMultiCapability.kt +++ b/src/lib/kotlin/hiiragi283/lib/capability/HTMultiCapability.kt @@ -42,9 +42,7 @@ interface HTMultiCapability { level: ServerLevel, pos: BlockPos, side: Direction?, - validator: BooleanSupplier = BooleanSupplier { - true - }, + validator: BooleanSupplier = BooleanSupplier { true }, listener: Runnable = Runnables.doNothing() ): BlockCapabilityCache = BlockCapabilityCache.create(block, level, pos, side, validator, listener) diff --git a/src/lib/kotlin/hiiragi283/lib/collection/NonEmptyLists.kt b/src/lib/kotlin/hiiragi283/lib/collection/NonEmptyLists.kt index 83d27257c2..5d5965c29b 100644 --- a/src/lib/kotlin/hiiragi283/lib/collection/NonEmptyLists.kt +++ b/src/lib/kotlin/hiiragi283/lib/collection/NonEmptyLists.kt @@ -19,7 +19,7 @@ fun nelOf(head: E, vararg tail: E): Nel = Nel(head, listOf(*tail)) * @author Hiiragi Tsubasa * @since 26.1.6 */ -fun E.toNel(): Nel = NonEmptyList(this) +fun E.nel(): Nel = NonEmptyList(this) // Iterable <-> Nel // diff --git a/src/lib/kotlin/hiiragi283/lib/data/ExporterDataProvider.kt b/src/lib/kotlin/hiiragi283/lib/data/ExporterDataProvider.kt index 7b043e90bb..90d79b38c8 100644 --- a/src/lib/kotlin/hiiragi283/lib/data/ExporterDataProvider.kt +++ b/src/lib/kotlin/hiiragi283/lib/data/ExporterDataProvider.kt @@ -6,7 +6,7 @@ import com.mojang.serialization.JsonOps import hiiragi283.lib.HTComparators import hiiragi283.lib.registry.HTFluidContent import hiiragi283.lib.registry.RegistryKey -import hiiragi283.lib.resource.HTValueWithId +import hiiragi283.lib.resource.HTSimpleValueWithKey import hiiragi283.lib.resource.debugPath import hiiragi283.lib.resource.toId import hiiragi283.lib.tag.HTMaterialLike @@ -108,7 +108,7 @@ abstract class ExporterDataProvider( protected fun getHasName(id: Identifier): String = "has_${id.debugPath}" - protected fun getHasName(value: HTValueWithId<*>): String = getHasName(value.idOrThrow) + protected fun getHasName(value: HTSimpleValueWithKey<*>): String = getHasName(value.idOrThrow) protected fun getHasName(tagKey: TagKey<*>): String = getHasName(tagKey.location()) diff --git a/src/lib/kotlin/hiiragi283/lib/data/HolderAcceptor.kt b/src/lib/kotlin/hiiragi283/lib/data/HolderAcceptor.kt index 42dd16c652..31fa4d1d7e 100644 --- a/src/lib/kotlin/hiiragi283/lib/data/HolderAcceptor.kt +++ b/src/lib/kotlin/hiiragi283/lib/data/HolderAcceptor.kt @@ -3,12 +3,13 @@ package hiiragi283.lib.data import hiiragi283.lib.registry.HTDeferredBlockAndItem +import hiiragi283.lib.registry.HTFluidContent import hiiragi283.lib.util.HTBuilderMarker -import hiiragi283.lib.util.HTDelegates import it.unimi.dsi.fastutil.objects.ObjectArrayList import net.minecraft.core.Holder import net.minecraft.core.HolderSet import net.minecraft.world.item.Item +import net.minecraft.world.level.block.Block import net.minecraft.world.level.material.Fluid import kotlin.contracts.ExperimentalContracts import kotlin.contracts.InvocationKind @@ -27,6 +28,21 @@ interface HolderAcceptor { */ operator fun Holder.unaryPlus() + /** + * [Block]向けの[HolderAcceptor]の拡張インターフェースです。 + * @since 26.1.8 + */ + interface BlockAcceptor : HolderAcceptor { + @Suppress("DEPRECATION") + operator fun Block.unaryPlus() { + +this.builtInRegistryHolder() + } + + operator fun HTDeferredBlockAndItem<*, *>.unaryPlus() { + +this.block + } + } + /** * [Fluid]向けの[HolderAcceptor]の拡張インターフェースです。 */ @@ -35,6 +51,13 @@ interface HolderAcceptor { operator fun Fluid.unaryPlus() { +this.builtInRegistryHolder() } + + /** + * @since 26.1.8 + */ + operator fun HTFluidContent.unaryPlus() { + +this.sourceHolder + } } /** @@ -51,36 +74,6 @@ interface HolderAcceptor { } } - // ValueBuilder // - - /** - * 単一の[Holder]のみを保持する[HolderAcceptor]の実装クラスです。 - */ - open class ValueBuilder : HolderAcceptor { - private var holder: Holder by HTDelegates.onceInitialize() - - override fun Holder.unaryPlus() { - check(this.delegate is Holder.Reference) { "Cannot serialize given holder $this" } - holder = this - } - - fun build(): Holder = holder - } - - /** - * [Fluid]向けの[ValueBuilder]の拡張クラスです。 - */ - class FluidValueBuilder : - ValueBuilder(), - FluidAcceptor - - /** - * [Item]向けの[ValueBuilder]の拡張クラスです。 - */ - class ItemValueBuilder : - ValueBuilder(), - ItemAcceptor - // SetBuilder // /** @@ -97,6 +90,13 @@ interface HolderAcceptor { fun build(): HolderSet = HolderSet.direct(holders) } + /** + * [Block]向けの[SetBuilder]の拡張クラスです。 + */ + class BlockSetBuilder : + SetBuilder(), + BlockAcceptor + /** * [Fluid]向けの[SetBuilder]の拡張クラスです。 */ @@ -112,6 +112,17 @@ interface HolderAcceptor { ItemAcceptor companion object { + /** + * @since 26.1.8 + */ + @JvmStatic + inline fun buildBlockSet(builderAction: BlockSetBuilder.() -> Unit): HolderSet { + contract { + callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) + } + return BlockSetBuilder().apply(builderAction).build() + } + /** * @since 26.1.7 */ diff --git a/src/lib/kotlin/hiiragi283/lib/data/advancement/criterion/HTBlockPredicateBuilder.kt b/src/lib/kotlin/hiiragi283/lib/data/advancement/criterion/HTBlockPredicateBuilder.kt new file mode 100644 index 0000000000..e6c826418e --- /dev/null +++ b/src/lib/kotlin/hiiragi283/lib/data/advancement/criterion/HTBlockPredicateBuilder.kt @@ -0,0 +1,73 @@ +@file:OptIn(ExperimentalContracts::class) + +package hiiragi283.lib.data.advancement.criterion + +import hiiragi283.lib.data.HolderAcceptor +import hiiragi283.lib.util.HTBuilderMarker +import hiiragi283.lib.util.HTDelegates +import net.minecraft.advancements.criterion.BlockPredicate +import net.minecraft.advancements.criterion.DataComponentMatchers +import net.minecraft.advancements.criterion.NbtPredicate +import net.minecraft.advancements.criterion.StatePropertiesPredicate +import net.minecraft.core.HolderSet +import net.minecraft.world.level.block.Block +import java.util.Optional +import kotlin.contracts.ExperimentalContracts +import kotlin.contracts.InvocationKind +import kotlin.contracts.contract + +/** + * @author Hiiragi Tsubasa + * @since 26.1.8 + */ +@HTBuilderMarker +class HTBlockPredicateBuilder { + @PublishedApi internal var blocks: Optional> by HTDelegates.optionalInitialize() + + @PublishedApi internal var properties: Optional by HTDelegates.optionalInitialize() + + @PublishedApi internal var nbt: Optional by HTDelegates.optionalInitialize() + + @PublishedApi internal var components: DataComponentMatchers by HTDelegates.onceInitialize { + DataComponentMatchers.ANY + } + + // blocks + operator fun HolderSet.unaryPlus() { + blocks = Optional.of(this) + } + + inline fun blocks(builderAction: HolderAcceptor.BlockSetBuilder.() -> Unit) { + contract { + callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) + } + +HolderAcceptor.buildBlockSet(builderAction) + } + + // properties + inline fun properties(builderAction: StatePropertiesPredicate.Builder.() -> Unit) { + contract { + callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) + } + properties = StatePropertiesPredicate.Builder.properties().apply(builderAction).build() + } + + // nbt + operator fun NbtPredicate.unaryPlus() { + nbt = Optional.of(this) + } + + // components + operator fun DataComponentMatchers.unaryPlus() { + components = this + } + + inline fun components(builderAction: DataComponentMatchers.Builder.() -> Unit) { + contract { + callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) + } + +DataComponentMatchers.Builder.components().apply(builderAction).build() + } + + fun build(): BlockPredicate = BlockPredicate(blocks, properties, nbt, components) +} diff --git a/src/lib/kotlin/hiiragi283/lib/data/advancement/criterion/HTItemPredicateBuilder.kt b/src/lib/kotlin/hiiragi283/lib/data/advancement/criterion/HTItemPredicateBuilder.kt index e565bfb109..6d920a2b95 100644 --- a/src/lib/kotlin/hiiragi283/lib/data/advancement/criterion/HTItemPredicateBuilder.kt +++ b/src/lib/kotlin/hiiragi283/lib/data/advancement/criterion/HTItemPredicateBuilder.kt @@ -29,6 +29,7 @@ class HTItemPredicateBuilder { DataComponentMatchers.ANY } + // items operator fun HolderSet.unaryPlus() { items = Optional.of(this) } @@ -40,10 +41,12 @@ class HTItemPredicateBuilder { +HolderAcceptor.buildItemSet(builderAction) } + // count operator fun MinMaxBounds.Ints.unaryPlus() { count = this } + // components operator fun DataComponentMatchers.unaryPlus() { components = this } diff --git a/src/lib/kotlin/hiiragi283/lib/data/lang/HTLangProvider.kt b/src/lib/kotlin/hiiragi283/lib/data/lang/HTLangProvider.kt index f2cfa19f0f..afce749ac8 100644 --- a/src/lib/kotlin/hiiragi283/lib/data/lang/HTLangProvider.kt +++ b/src/lib/kotlin/hiiragi283/lib/data/lang/HTLangProvider.kt @@ -3,13 +3,15 @@ package hiiragi283.lib.data.lang import hiiragi283.lib.advancment.AdvancementKey import hiiragi283.lib.advancment.descKey import hiiragi283.lib.advancment.titleKey +import hiiragi283.lib.registry.HTDecorationContent import hiiragi283.lib.registry.HTFluidContent import hiiragi283.lib.registry.HTPotionContent import hiiragi283.lib.resource.toLanguageKey import hiiragi283.lib.text.HTHasTranslationKey -import hiiragi283.ragium.api.data.oreSlurry.HTOreSlurryData +import net.minecraft.core.registries.BuiltInRegistries import net.minecraft.data.PackOutput import net.minecraft.resources.ResourceKey +import net.minecraft.world.item.crafting.RecipeType import net.minecraft.world.item.enchantment.Enchantment import net.neoforged.neoforge.common.data.LanguageProvider @@ -35,6 +37,15 @@ abstract class HTLangProvider(output: PackOutput, modId: String, val langType: H @JvmField val TIPPED_ARROW_PATTERN = HTLangPatternProvider("Arrow of %s", "%sの矢") + + @JvmField + val SLAB_PATTERN = HTLangPatternProvider("%s Slab", "%sのハーフブロック") + + @JvmField + val STAIRS_PATTERN = HTLangPatternProvider("%s Stairs", "%sの階段") + + @JvmField + val WALL_PATTERN = HTLangPatternProvider("%s Wall", "%sの壁") } fun add(translatable: HTHasTranslationKey, value: String) { @@ -49,14 +60,28 @@ abstract class HTLangProvider(output: PackOutput, modId: String, val langType: H add(translatable, pattern.translate(langType, name)) } + /** + * @since 26.1.8 + */ + fun addFromKey(key: ResourceKey<*>, value: String) { + add(key.toLanguageKey(), value) + } + + /** + * @since 26.1.8 + */ + fun addFromKey(key: ResourceKey<*>, suffix: String, value: String) { + add(key.toLanguageKey(suffix), value) + } + /** * エンチャントの翻訳名を追加します。 * @param value エンチャントの翻訳名 * @param desc エンチャントの説明 */ protected fun addEnchantment(key: ResourceKey, value: String, desc: String) { - add(key.toLanguageKey(), value) - add(key.toLanguageKey("desc"), desc) + addFromKey(key, value) + addFromKey(key, "desc", desc) } /** @@ -94,9 +119,23 @@ abstract class HTLangProvider(output: PackOutput, modId: String, val langType: H } /** - * @since 26.1.5 + * @since 26.1.8 */ - fun addOreSlurry(key: ResourceKey, value: String) { - add(key.toLanguageKey(), value) + fun addDecoration(content: HTDecorationContent, name: HTLangName) { + // Slab + add(content.slab, SLAB_PATTERN, name) + // Stairs + content.stairs?.let { add(it, STAIRS_PATTERN, name) } + // Wall + content.wall?.let { add(it, WALL_PATTERN, name) } + } + + /** + * @since 26.1.8 + */ + fun addRecipeType(recipeType: RecipeType<*>, value: String) { + BuiltInRegistries.RECIPE_TYPE.getResourceKey(recipeType).ifPresent { + add(it.toLanguageKey(), value) + } } } diff --git a/src/lib/kotlin/hiiragi283/lib/data/loot/HTBlockLootTableProvider.kt b/src/lib/kotlin/hiiragi283/lib/data/loot/HTBlockLootTableProvider.kt index 05c1f47469..f8dc0c872e 100644 --- a/src/lib/kotlin/hiiragi283/lib/data/loot/HTBlockLootTableProvider.kt +++ b/src/lib/kotlin/hiiragi283/lib/data/loot/HTBlockLootTableProvider.kt @@ -1,6 +1,7 @@ package hiiragi283.lib.data.loot -import hiiragi283.lib.resource.HTValueWithId +import hiiragi283.lib.resource.HTSimpleValueWithKey +import hiiragi283.lib.resource.HTValueWithKey import net.minecraft.core.Holder import net.minecraft.core.HolderLookup import net.minecraft.data.loot.BlockLootSubProvider @@ -19,11 +20,11 @@ import net.minecraft.world.level.storage.loot.LootTable abstract class HTBlockLootTableProvider( registries: HolderLookup.Provider, protected val modId: String, - private val rawBlocks: Sequence> + private val rawBlocks: Sequence> ) : BlockLootSubProvider(emptySet(), FeatureFlags.REGISTRY.allFlags(), registries) { final override fun getKnownBlocks(): Iterable = rawBlocks - .filter { block: HTValueWithId -> block.idOrNull?.namespace == modId } - .mapNotNull(HTValueWithId::getOrNull) + .filter { block: HTSimpleValueWithKey -> block.idOrNull?.namespace == modId } + .mapNotNull(HTSimpleValueWithKey::getOrNull) .filter { block: Block -> block.lootTable.isPresent } .toList() @@ -34,16 +35,16 @@ abstract class HTBlockLootTableProvider( */ val fortune: Holder by lazy { registries.holderOrThrow(Enchantments.FORTUNE) } - protected fun dropSelf(like: HTValueWithId) { + protected fun dropSelf(like: HTSimpleValueWithKey) { dropSelf(like.getOrThrow()) } - protected fun add(like: HTValueWithId, table: LootTable.Builder) { + protected fun add(like: HTSimpleValueWithKey, table: LootTable.Builder) { add(like.getOrThrow(), table) } - protected inline fun add(like: HTValueWithId, factory: (BLOCK) -> LootTable.Builder) { - val block: BLOCK = like.getOrThrow() + protected inline fun add(like: HTValueWithKey, factory: (T) -> LootTable.Builder) { + val block: T = like.getOrThrow() add(block, factory(block)) } } diff --git a/src/lib/kotlin/hiiragi283/lib/data/model/HTModelProvider.kt b/src/lib/kotlin/hiiragi283/lib/data/model/HTModelProvider.kt index 5a24eb7aa1..58856d7866 100644 --- a/src/lib/kotlin/hiiragi283/lib/data/model/HTModelProvider.kt +++ b/src/lib/kotlin/hiiragi283/lib/data/model/HTModelProvider.kt @@ -1,8 +1,10 @@ package hiiragi283.lib.data.model import hiiragi283.lib.HTConstants +import hiiragi283.lib.registry.HTDecorationContent import hiiragi283.lib.registry.HTFluidContent -import hiiragi283.lib.resource.HTValueWithId +import hiiragi283.lib.resource.HTSimpleValueWithKey +import hiiragi283.lib.resource.HTValueWithKey import hiiragi283.lib.resource.blockId import hiiragi283.lib.resource.itemId import hiiragi283.lib.resource.toId @@ -23,6 +25,7 @@ import net.minecraft.world.item.Item import net.minecraft.world.level.block.Block import net.minecraft.world.level.block.SlabBlock import net.minecraft.world.level.block.StairBlock +import net.minecraft.world.level.block.WallBlock import net.neoforged.neoforge.client.model.item.DynamicFluidContainerModel import java.util.Optional @@ -36,6 +39,30 @@ abstract class HTModelProvider(output: PackOutput, modId: String) : ModelProvide // Block // + /** + * @since 26.1.8 + */ + fun BlockModelGenerators.plainVariant( + block: HTSimpleValueWithKey<*>, + template: ModelTemplate, + mapping: TextureMapping + ): MultiVariant = BlockModelGenerators.plainVariant(template.createBlock(block, mapping, this.modelOutput)) + + /** + * ブロックJSONを生成します。 + * @param block ブロックのインスタンス + * @param template 生成するモデルのテンプレート + * @param mapping テクスチャのマッピング + * @since 26.1.8 + */ + fun BlockModelGenerators.createSimple( + block: HTSimpleValueWithKey, + template: ModelTemplate, + mapping: TextureMapping + ) { + this.createSimple(block.getOrThrow(), this.plainVariant(block, template, mapping)) + } + /** * ブロックJSONを生成します。 * @param block ブロックのインスタンス @@ -55,31 +82,22 @@ abstract class HTModelProvider(output: PackOutput, modId: String) : ModelProvide } /** - * ブロックJSONを生成します。 - * @param block ブロックの提供元 - * @param modelId 使用するモデルのID - */ - fun BlockModelGenerators.createAltModel( - block: HTValueWithId, - modelId: Identifier = block.idOrThrow.blockId - ) { - this.createSimple(block.getOrThrow(), modelId) - } - - /** - * ハーフブロックのブロックJSONを生成します。 + * @since 26.1.8 */ - fun BlockModelGenerators.createSlab(block: HTValueWithId, fullBlock: HTValueWithId<*>) { - val fullBlockId: Identifier = fullBlock.idOrThrow.blockId + fun BlockModelGenerators.createDecoration(content: HTDecorationContent) { + val fullBlockId: Identifier = content.base.idOrThrow.blockId val texture = Material(fullBlockId) - this.createSlab(block, fullBlockId, texture, texture, texture) + + this.createSlab(content.slab, fullBlockId, texture, texture, texture) + content.stairs?.let { this.createStairs(it, texture, texture, texture) } + content.wall?.let { this.createWall(it, texture) } } /** * ハーフブロックのブロックJSONを生成します。 */ fun BlockModelGenerators.createSlab( - block: HTValueWithId, + block: HTValueWithKey, fullModel: Identifier, top: Material, side: Material, @@ -96,61 +114,69 @@ abstract class HTModelProvider(output: PackOutput, modId: String) : ModelProvide BlockModelGenerators.createSlab( slab, BlockModelGenerators.plainVariant(modelId), - BlockModelGenerators.plainVariant(ModelTemplates.SLAB_TOP.createBlock(block, mapping, modelOutput)), + this.plainVariant(block, ModelTemplates.SLAB_TOP, mapping), BlockModelGenerators.plainVariant(fullModel) ) ) registerSimpleItemModel(slab, modelId) } - /** - * 階段ブロックのブロックJSONを生成します。 - */ - fun BlockModelGenerators.createStairs(block: HTValueWithId, fullBlock: HTValueWithId<*>) { - val fullBlockId: Identifier = fullBlock.idOrThrow.blockId - val texture = Material(fullBlockId) - this.createStairs(block, texture, texture, texture) - } - /** * 階段ブロックのブロックJSONを生成します。 */ fun BlockModelGenerators.createStairs( - block: HTValueWithId, + block: HTValueWithKey, top: Material, side: Material, bottom: Material ) { val stairs: StairBlock = block.getOrThrow() - val mapping: TextureMapping = TextureMapping().put( - TextureSlot.TOP, - top - ).put(TextureSlot.BOTTOM, bottom).put(TextureSlot.SIDE, side) + val mapping: TextureMapping = TextureMapping() + .put(TextureSlot.TOP, top) + .put(TextureSlot.BOTTOM, bottom) + .put(TextureSlot.SIDE, side) val modelId: Identifier = ModelTemplates.STAIRS_STRAIGHT.createBlock(block, mapping, modelOutput) blockStateOutput.accept( BlockModelGenerators.createStairs( stairs, - BlockModelGenerators.plainVariant(ModelTemplates.STAIRS_INNER.createBlock(block, mapping, modelOutput)), + this.plainVariant(block, ModelTemplates.STAIRS_INNER, mapping), BlockModelGenerators.plainVariant(modelId), - BlockModelGenerators.plainVariant(ModelTemplates.STAIRS_OUTER.createBlock(block, mapping, modelOutput)) + this.plainVariant(block, ModelTemplates.STAIRS_OUTER, mapping) ) ) registerSimpleItemModel(stairs, modelId) } + /** + * 壁ブロックのブロックJSONを生成します。 + * @since 26.1.8 + */ + fun BlockModelGenerators.createWall(block: HTValueWithKey, wall: Material) { + val mapping: TextureMapping = TextureMapping().put(TextureSlot.WALL, wall) + this.blockStateOutput.accept( + BlockModelGenerators.createWall( + block.getOrThrow(), + this.plainVariant(block, ModelTemplates.WALL_POST, mapping), + this.plainVariant(block, ModelTemplates.WALL_LOW_SIDE, mapping), + this.plainVariant(block, ModelTemplates.WALL_TALL_SIDE, mapping) + ) + ) + this.registerSimpleItemModel( + block.getOrThrow(), + ModelTemplates.WALL_INVENTORY.createBlock(block, mapping, this.modelOutput) + ) + } + /** * 液体ブロックのブロックJSONを生成します。 * @param fluidBlock 液体ブロックの提供元 */ - fun BlockModelGenerators.createFluid(fluidBlock: HTValueWithId) { - this.createAltModel( + fun BlockModelGenerators.createFluid(fluidBlock: HTSimpleValueWithKey) { + this.createSimple( fluidBlock, - HTModelTemplates.FLUID_BLOCK.createBlock( - fluidBlock, - TextureMapping.particle(Material(vanillaId(HTConstants.BLOCK, "water_still"))), - this.modelOutput - ) + HTModelTemplates.FLUID_BLOCK, + TextureMapping.particle(Material(vanillaId(HTConstants.BLOCK, "water_still"))) ) } @@ -163,7 +189,7 @@ abstract class HTModelProvider(output: PackOutput, modId: String) : ModelProvide * @param template 使用するモデルのテンプレート */ fun ItemModelGenerators.generateFlatItem( - item: HTValueWithId, + item: HTSimpleValueWithKey, layer: Identifier = item.idOrThrow.itemId, template: ModelTemplate = ModelTemplates.FLAT_ITEM ) { @@ -179,7 +205,7 @@ abstract class HTModelProvider(output: PackOutput, modId: String) : ModelProvide * @param layers モデルのテクスチャのパス * @throws IllegalStateException [layers]のサイズが`0`または`4`以上の場合 */ - fun ItemModelGenerators.generateLayeredItem(item: HTValueWithId, vararg layers: Identifier) { + fun ItemModelGenerators.generateLayeredItem(item: HTSimpleValueWithKey, vararg layers: Identifier) { val (mapping: TextureMapping, template: ModelTemplate) = when (layers.size) { 1 -> TextureMapping.layer0(Material(layers[0])) to ModelTemplates.FLAT_ITEM @@ -204,7 +230,7 @@ abstract class HTModelProvider(output: PackOutput, modId: String) : ModelProvide * @return モデルのパス */ fun ItemModelGenerators.createFlatItemModel( - item: HTValueWithId<*>, + item: HTSimpleValueWithKey<*>, layer: Identifier = item.idOrThrow.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 d003dea4c9..e12cc7d583 100644 --- a/src/lib/kotlin/hiiragi283/lib/data/model/ModelTemplates.kt +++ b/src/lib/kotlin/hiiragi283/lib/data/model/ModelTemplates.kt @@ -1,6 +1,6 @@ package hiiragi283.lib.data.model -import hiiragi283.lib.resource.HTValueWithId +import hiiragi283.lib.resource.HTSimpleValueWithKey import hiiragi283.lib.resource.blockId import hiiragi283.lib.resource.itemId import net.minecraft.client.data.models.model.ModelInstance @@ -16,7 +16,7 @@ import kotlin.jvm.optionals.getOrElse * @since 26.1.0 */ fun ModelTemplate.createBlock( - block: HTValueWithId<*>, + block: HTSimpleValueWithKey<*>, textures: TextureMapping, output: BiConsumer ): Identifier = this.create(block.idOrThrow.blockId.withSuffix(this.suffix.getOrElse { "" }), textures, output) @@ -27,7 +27,7 @@ fun ModelTemplate.createBlock( * @since 26.1.0 */ fun ModelTemplate.createItem( - item: HTValueWithId<*>, + item: HTSimpleValueWithKey<*>, textures: TextureMapping, output: BiConsumer ): Identifier = this.create(item.idOrThrow.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 513cf30b19..2330815c26 100644 --- a/src/lib/kotlin/hiiragi283/lib/data/recipe/HTRecipeProvider.kt +++ b/src/lib/kotlin/hiiragi283/lib/data/recipe/HTRecipeProvider.kt @@ -6,9 +6,7 @@ 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.recipe.ingredient.HTMaterialTagsIngredient -import hiiragi283.lib.registry.HTBasicDeferredBlockAndItem import hiiragi283.lib.tag.CommonTagPrefixes import hiiragi283.lib.tag.HTMaterialLike import hiiragi283.lib.tag.HTTagPrefix @@ -18,10 +16,7 @@ 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.crafting.Ingredient import net.minecraft.world.item.crafting.Recipe -import net.minecraft.world.level.block.SlabBlock -import net.minecraft.world.level.block.StairBlock import net.neoforged.neoforge.common.conditions.ModLoadedCondition import java.util.concurrent.CompletableFuture @@ -78,55 +73,6 @@ abstract class HTRecipeProvider( fun dustOrIngot(material: HTMaterialLike): HTMaterialTagsIngredient = materialTags(nelOf(CommonTagPrefixes.DUST, CommonTagPrefixes.INGOT), material) - /** - * @since 26.1.7 - */ - fun registerSlabRecipes(slab: HTBasicDeferredBlockAndItem, base: Ingredient) { - // Shaped - VanillaRecipeBuilders.shaped { - +"AAA" - define('A') { +base } - result { - +slab - count = 6 - } - group = slab.idOrThrow.path - }.save(exporter) - // Stonecutting - VanillaRecipeBuilders.stonecutting { - ingredient = base - result { - +slab - count = 2 - } - group = slab.idOrThrow.path - }.save(exporter) - } - - /** - * @since 26.1.7 - */ - fun registerStairsRecipes(stairs: HTBasicDeferredBlockAndItem, base: Ingredient) { - // Shaped - VanillaRecipeBuilders.shaped { - +"A " - +"AA " - +"AAA" - define('A') { +base } - result { - +stairs - count = 4 - } - group = stairs.idOrThrow.path - }.save(exporter) - // Stonecutting - VanillaRecipeBuilders.stonecutting { - ingredient = base - result { +stairs } - group = stairs.idOrThrow.path - }.save(exporter) - } - // Integration // abstract class Integration( diff --git a/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/HTFluidToDoubleFluidRecipeBuilder.kt b/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/HTFluidToDoubleFluidRecipeBuilder.kt new file mode 100644 index 0000000000..fb5eea8b7b --- /dev/null +++ b/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/HTFluidToDoubleFluidRecipeBuilder.kt @@ -0,0 +1,66 @@ +@file:OptIn(ExperimentalContracts::class) + +package hiiragi283.lib.data.recipe.builder + +import hiiragi283.lib.collection.Nel +import hiiragi283.lib.collection.toNel +import hiiragi283.lib.data.recipe.ingredient.HTFluidIngredientBuilder +import hiiragi283.lib.data.recipe.result.HTFluidResultBuilder +import hiiragi283.lib.recipe.base.HTProgressData +import hiiragi283.lib.recipe.ingredient.HTFluidIngredient +import hiiragi283.lib.recipe.result.HTFluidResult +import hiiragi283.lib.util.HTDelegates +import it.unimi.dsi.fastutil.objects.ObjectArrayList +import net.minecraft.resources.Identifier +import net.minecraft.world.item.crafting.Recipe +import kotlin.contracts.ExperimentalContracts +import kotlin.contracts.InvocationKind +import kotlin.contracts.contract + +/** + * 1種類の液体から2種類の液体を作成するレシピ向けの[HTProgressRecipeBuilder]の実装クラスです。 + * @param RECIPE 生成するレシピのクラス + * @author Hiiragi Tsubasa + * @since 26.1.8 + */ +class HTFluidToDoubleFluidRecipeBuilder>(prefix: String, private val factory: Factory) : + HTProgressRecipeBuilder(prefix) { + override fun getRecipeId(): Identifier? = results.first().getId() + + override fun createRecipe(): RECIPE = factory.create(ingredient, results.toNel(), progressData) + + // Ingredient + @PublishedApi internal var ingredient: HTFluidIngredient by HTDelegates.onceInitialize() + + operator fun HTFluidIngredient.unaryPlus() { + ingredient = this + } + + inline fun ingredient(builderAction: HTFluidIngredientBuilder.() -> Unit) { + contract { + callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) + } + +HTFluidIngredientBuilder.build(builderAction) + } + + // Result + @PublishedApi internal val results: MutableList = ObjectArrayList() + + inline fun result(builderAction: HTFluidResultBuilder.() -> Unit) { + contract { + callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) + } + results += HTFluidResultBuilder.build(builderAction) + } + + // Factory // + + /** + * @param RECIPE 生成するレシピのクラス + * @author Hiiragi Tsubasa + * @since 26.1.0 + */ + fun interface Factory { + fun create(ingredient: HTFluidIngredient, results: Nel, progressData: HTProgressData): RECIPE + } +} diff --git a/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/HTFluidToRecipeBuilder.kt b/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/HTFluidToRecipeBuilder.kt deleted file mode 100644 index 33ad0d0678..0000000000 --- a/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/HTFluidToRecipeBuilder.kt +++ /dev/null @@ -1,95 +0,0 @@ -@file:OptIn(ExperimentalContracts::class) - -package hiiragi283.lib.data.recipe.builder - -import hiiragi283.lib.data.recipe.ingredient.HTFluidIngredientBuilder -import hiiragi283.lib.data.recipe.result.HTFluidResultBuilder -import hiiragi283.lib.data.recipe.result.HTItemResultBuilder -import hiiragi283.lib.recipe.base.HTProgressData -import hiiragi283.lib.recipe.ingredient.HTFluidIngredient -import hiiragi283.lib.recipe.result.HTFluidResult -import hiiragi283.lib.recipe.result.HTItemResult -import hiiragi283.lib.recipe.result.HTRecipeResult -import hiiragi283.lib.util.HTDelegates -import net.minecraft.resources.Identifier -import net.minecraft.world.item.crafting.Recipe -import kotlin.contracts.ExperimentalContracts -import kotlin.contracts.InvocationKind -import kotlin.contracts.contract - -abstract class HTFluidToRecipeBuilder, out RECIPE : Recipe<*>>( - prefix: String, - private val factory: Factory -) : HTProgressRecipeBuilder(prefix) { - override fun getRecipeId(): Identifier? = result.getId() - - override fun createRecipe(): RECIPE = factory.create(ingredient, result, progressData) - - // Ingredient - @PublishedApi internal var ingredient: HTFluidIngredient by HTDelegates.onceInitialize() - - operator fun HTFluidIngredient.unaryPlus() { - ingredient = this - } - - inline fun ingredient(builderAction: HTFluidIngredientBuilder.() -> Unit) { - contract { - callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) - } - +HTFluidIngredientBuilder.build(builderAction) - } - - // Result - @PublishedApi internal var result: RESULT by HTDelegates.onceInitialize() - - operator fun RESULT.unaryPlus() { - result = this - } - - // ToFluid // - - /** - * 1種類のアイテムと液体から1種類の液体を作成するレシピ向けの[HTProgressRecipeBuilder]の実装クラスです。 - * @param RECIPE 生成するレシピのクラス - * @author Hiiragi Tsubasa - * @since 26.1.5 - */ - class ToFluid>(prefix: String, factory: Factory) : - HTFluidToRecipeBuilder(prefix, factory) { - inline fun result(builderAction: HTFluidResultBuilder.() -> Unit) { - contract { - callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) - } - +HTFluidResultBuilder.build(builderAction) - } - } - - // ToItem // - - /** - * 1種類のアイテムと液体から1種類のアイテムを作成するレシピ向けの[HTProgressRecipeBuilder]の実装クラスです。 - * @param RECIPE 生成するレシピのクラス - * @author Hiiragi Tsubasa - * @since 26.1.5 - */ - class ToItem>(prefix: String, factory: Factory) : - HTFluidToRecipeBuilder(prefix, factory) { - inline fun result(builderAction: HTItemResultBuilder.() -> Unit) { - contract { - callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) - } - +HTItemResultBuilder.build(builderAction) - } - } - - // Factory // - - /** - * @param RECIPE 生成するレシピのクラス - * @author Hiiragi Tsubasa - * @since 26.1.5 - */ - fun interface Factory, out RECIPE : Any> { - fun create(ingredient: HTFluidIngredient, result: RESULT, progressData: HTProgressData): RECIPE - } -} diff --git a/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/HTItemToItemAndFluidRecipeBuilder.kt b/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/HTItemToItemAndFluidRecipeBuilder.kt deleted file mode 100644 index 47df2096a6..0000000000 --- a/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/HTItemToItemAndFluidRecipeBuilder.kt +++ /dev/null @@ -1,87 +0,0 @@ -@file:OptIn(ExperimentalContracts::class) - -package hiiragi283.lib.data.recipe.builder - -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.base.HTProgressData -import hiiragi283.lib.recipe.ingredient.HTItemIngredient -import hiiragi283.lib.recipe.result.HTFluidResult -import hiiragi283.lib.recipe.result.HTItemResult -import hiiragi283.lib.util.HTDelegates -import net.minecraft.resources.Identifier -import net.minecraft.world.item.crafting.Recipe -import kotlin.contracts.ExperimentalContracts -import kotlin.contracts.InvocationKind -import kotlin.contracts.contract - -/** - * 1種類のアイテムから1種類のアイテムと液体を作成するレシピ向けの[HTProgressRecipeBuilder]の実装クラスです。 - * @param RECIPE 生成するレシピのクラス - * @author Hiiragi Tsubasa - * @since 26.1.0 - */ -class HTItemToItemAndFluidRecipeBuilder>(prefix: String, private val factory: Factory) : - HTProgressRecipeBuilder(prefix) { - override fun getRecipeId(): Identifier? = itemResult.getId() ?: fluidResult.getId() - - override fun createRecipe(): RECIPE = factory.create(ingredient, itemResult, fluidResult, progressData) - - // Ingredient - @PublishedApi internal var ingredient: HTItemIngredient by HTDelegates.onceInitialize() - - operator fun HTItemIngredient.unaryPlus() { - ingredient = this - } - - inline fun ingredient(builderAction: HTItemIngredientBuilder.() -> Unit) { - contract { - callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) - } - +HTItemIngredientBuilder.build(builderAction) - } - - // Result - @PublishedApi internal var itemResult: HTItemResult by HTDelegates.onceInitialize() - - @PublishedApi internal var fluidResult: HTFluidResult by HTDelegates.onceInitialize() - - operator fun HTItemResult.unaryPlus() { - itemResult = this - } - - operator fun HTFluidResult.unaryPlus() { - fluidResult = 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) - } - - // Factory // - - /** - * @param RECIPE 生成するレシピのクラス - * @author Hiiragi Tsubasa - * @since 26.1.0 - */ - fun interface Factory { - fun create( - ingredient: HTItemIngredient, - itemResult: HTItemResult, - fluidResult: HTFluidResult, - progressData: HTProgressData - ): RECIPE - } -} diff --git a/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/HTItemToRecipeBuilder.kt b/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/HTItemToRecipeBuilder.kt deleted file mode 100644 index 09fa1f6604..0000000000 --- a/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/HTItemToRecipeBuilder.kt +++ /dev/null @@ -1,95 +0,0 @@ -@file:OptIn(ExperimentalContracts::class) - -package hiiragi283.lib.data.recipe.builder - -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.base.HTProgressData -import hiiragi283.lib.recipe.ingredient.HTItemIngredient -import hiiragi283.lib.recipe.result.HTFluidResult -import hiiragi283.lib.recipe.result.HTItemResult -import hiiragi283.lib.recipe.result.HTRecipeResult -import hiiragi283.lib.util.HTDelegates -import net.minecraft.resources.Identifier -import net.minecraft.world.item.crafting.Recipe -import kotlin.contracts.ExperimentalContracts -import kotlin.contracts.InvocationKind -import kotlin.contracts.contract - -abstract class HTItemToRecipeBuilder, out RECIPE : Recipe<*>>( - prefix: String, - private val factory: Factory -) : HTProgressRecipeBuilder(prefix) { - override fun getRecipeId(): Identifier? = result.getId() - - override fun createRecipe(): RECIPE = factory.create(ingredient, result, progressData) - - // Ingredient - @PublishedApi internal var ingredient: HTItemIngredient by HTDelegates.onceInitialize() - - operator fun HTItemIngredient.unaryPlus() { - ingredient = this - } - - inline fun ingredient(builderAction: HTItemIngredientBuilder.() -> Unit) { - contract { - callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) - } - +HTItemIngredientBuilder.build(builderAction) - } - - // Result - @PublishedApi internal var result: RESULT by HTDelegates.onceInitialize() - - operator fun RESULT.unaryPlus() { - result = this - } - - // ToFluid // - - /** - * 1種類のアイテムと液体から1種類の液体を作成するレシピ向けの[HTProgressRecipeBuilder]の実装クラスです。 - * @param RECIPE 生成するレシピのクラス - * @author Hiiragi Tsubasa - * @since 26.1.0 - */ - class ToFluid>(prefix: String, factory: Factory) : - HTItemToRecipeBuilder(prefix, factory) { - inline fun result(builderAction: HTFluidResultBuilder.() -> Unit) { - contract { - callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) - } - +HTFluidResultBuilder.build(builderAction) - } - } - - // ToItem // - - /** - * 1種類のアイテムと液体から1種類のアイテムを作成するレシピ向けの[HTProgressRecipeBuilder]の実装クラスです。 - * @param RECIPE 生成するレシピのクラス - * @author Hiiragi Tsubasa - * @since 26.1.0 - */ - class ToItem>(prefix: String, factory: Factory) : - HTItemToRecipeBuilder(prefix, factory) { - inline fun result(builderAction: HTItemResultBuilder.() -> Unit) { - contract { - callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) - } - +HTItemResultBuilder.build(builderAction) - } - } - - // Factory // - - /** - * @param RECIPE 生成するレシピのクラス - * @author Hiiragi Tsubasa - * @since 26.1.5 - */ - fun interface Factory, out RECIPE : Any> { - fun create(ingredient: HTItemIngredient, result: RESULT, progressData: HTProgressData): RECIPE - } -} diff --git a/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/HTSingleRecipeBuilder.kt b/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/HTSingleRecipeBuilder.kt new file mode 100644 index 0000000000..55590a561d --- /dev/null +++ b/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/HTSingleRecipeBuilder.kt @@ -0,0 +1,130 @@ +@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.base.HTBasicSingleRecipe +import hiiragi283.lib.recipe.ingredient.HTFluidIngredient +import hiiragi283.lib.recipe.ingredient.HTIngredient +import hiiragi283.lib.recipe.ingredient.HTItemIngredient +import hiiragi283.lib.recipe.result.HTFluidResult +import hiiragi283.lib.recipe.result.HTItemResult +import hiiragi283.lib.recipe.result.HTRecipeResult +import hiiragi283.lib.util.HTDelegates +import net.minecraft.resources.Identifier +import net.minecraft.world.item.crafting.Recipe +import kotlin.contracts.ExperimentalContracts +import kotlin.contracts.InvocationKind +import kotlin.contracts.contract + +/** + * 1種類の材料から1種類の完成品を作成するレシピ向けの[HTProgressRecipeBuilder]の実装クラスです。 + * @param ING レシピの材料を判定するクラス + * @param RES レシピの完成品を提供するクラス + * @param RECIPE 生成するレシピのクラス + * @author Hiiragi Tsubasa + * @since 26.1.8 + */ +open class HTSingleRecipeBuilder, RES : HTRecipeResult<*>, out RECIPE : Recipe<*>>( + prefix: String, + private val factory: HTBasicSingleRecipe.Factory +) : HTProgressRecipeBuilder(prefix) { + final override fun getRecipeId(): Identifier? = result.getId() + + final override fun createRecipe(): RECIPE = factory.create(ingredient, result, progressData) + + // Ingredient + var ingredient: ING by HTDelegates.onceInitialize() + + operator fun ING.unaryPlus() { + ingredient = this + } + + // Result + var result: RES by HTDelegates.onceInitialize() + + operator fun RES.unaryPlus() { + result = this + } +} + +// Extensions // + +/** + * @param RECIPE 生成するレシピのクラス + * @author Hiiragi Tsubasa + * @since 26.1.8 + */ +typealias HTFluidToFluidRecipeBuilder = HTSingleRecipeBuilder + +/** + * @param RECIPE 生成するレシピのクラス + * @author Hiiragi Tsubasa + * @since 26.1.8 + */ +typealias HTFluidToItemRecipeBuilder = HTSingleRecipeBuilder + +/** + * @param RECIPE 生成するレシピのクラス + * @author Hiiragi Tsubasa + * @since 26.1.8 + */ +typealias HTItemToFluidRecipeBuilder = HTSingleRecipeBuilder + +/** + * @param RECIPE 生成するレシピのクラス + * @author Hiiragi Tsubasa + * @since 26.1.8 + */ +typealias HTItemToItemRecipeBuilder = HTSingleRecipeBuilder + +/** + * @author Hiiragi Tsubasa + * @since 26.1.8 + */ +@JvmName("itemIngredient") +fun HTSingleRecipeBuilder.ingredient(builderAction: HTFluidIngredientBuilder.() -> Unit) { + contract { + callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) + } + +HTFluidIngredientBuilder.build(builderAction) +} + +/** + * @author Hiiragi Tsubasa + * @since 26.1.8 + */ +@JvmName("fluidIngredient") +fun HTSingleRecipeBuilder.ingredient(builderAction: HTItemIngredientBuilder.() -> Unit) { + contract { + callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) + } + +HTItemIngredientBuilder.build(builderAction) +} + +/** + * @author Hiiragi Tsubasa + * @since 26.1.8 + */ +@JvmName("itemResult") +fun HTSingleRecipeBuilder<*, HTFluidResult, *>.result(builderAction: HTFluidResultBuilder.() -> Unit) { + contract { + callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) + } + +HTFluidResultBuilder.build(builderAction) +} + +/** + * @author Hiiragi Tsubasa + * @since 26.1.8 + */ +@JvmName("fluidResult") +fun HTSingleRecipeBuilder<*, HTItemResult, *>.result(builderAction: HTItemResultBuilder.() -> Unit) { + contract { + callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) + } + +HTItemResultBuilder.build(builderAction) +} diff --git a/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/HTSingleToItemAndFluidRecipeBuilder.kt b/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/HTSingleToItemAndFluidRecipeBuilder.kt new file mode 100644 index 0000000000..42c3e6bf71 --- /dev/null +++ b/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/HTSingleToItemAndFluidRecipeBuilder.kt @@ -0,0 +1,121 @@ +@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.base.HTBasicSingleRecipe +import hiiragi283.lib.recipe.ingredient.HTFluidIngredient +import hiiragi283.lib.recipe.ingredient.HTIngredient +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 ING レシピの材料を判定するクラス + * @param RECIPE 生成するレシピのクラス + * @author Hiiragi Tsubasa + * @since 26.1.8 + */ +class HTSingleToItemAndFluidRecipeBuilder, out RECIPE : Recipe<*>>( + prefix: String, + private val factory: HTBasicSingleRecipe.Factory +) : HTProgressRecipeBuilder(prefix) { + override fun getRecipeId(): Identifier? = result.getId() + + override fun createRecipe(): RECIPE = factory.create(ingredient, result, progressData) + + // Ingredient + var ingredient: ING by HTDelegates.onceInitialize() + + operator fun ING.unaryPlus() { + ingredient = this + } + + // 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) + } +} + +// Extensions // + +/** + * @param RECIPE 生成するレシピのクラス + * @author Hiiragi Tsubasa + * @since 26.1.8 + */ +typealias HTFluidToItemAndFluidRecipeBuilder = HTSingleToItemAndFluidRecipeBuilder + +/** + * @param RECIPE 生成するレシピのクラス + * @author Hiiragi Tsubasa + * @since 26.1.8 + */ +typealias HTItemToItemAndFluidRecipeBuilder = HTSingleToItemAndFluidRecipeBuilder + +/** + * @author Hiiragi Tsubasa + * @since 26.1.8 + */ +@JvmName("itemIngredient") +fun HTSingleToItemAndFluidRecipeBuilder.ingredient( + builderAction: HTFluidIngredientBuilder.() -> Unit +) { + contract { + callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) + } + +HTFluidIngredientBuilder.build(builderAction) +} + +/** + * @author Hiiragi Tsubasa + * @since 26.1.8 + */ +@JvmName("fluidIngredient") +fun HTSingleToItemAndFluidRecipeBuilder.ingredient( + builderAction: HTItemIngredientBuilder.() -> Unit +) { + contract { + callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) + } + +HTItemIngredientBuilder.build(builderAction) +} diff --git a/src/lib/kotlin/hiiragi283/lib/data/tag/HTBlockItemTagsProvider.kt b/src/lib/kotlin/hiiragi283/lib/data/tag/HTBlockItemTagsProvider.kt index 4220901a82..461549ef8f 100644 --- a/src/lib/kotlin/hiiragi283/lib/data/tag/HTBlockItemTagsProvider.kt +++ b/src/lib/kotlin/hiiragi283/lib/data/tag/HTBlockItemTagsProvider.kt @@ -4,6 +4,7 @@ import hiiragi283.lib.resource.BlockItemKey import hiiragi283.lib.tag.BlockItemTag import hiiragi283.lib.tag.HTMaterialLike import hiiragi283.lib.tag.HTTagPrefix +import net.minecraft.tags.TagKey import net.minecraft.world.item.Item import net.minecraft.world.level.block.Block @@ -47,6 +48,12 @@ abstract class HTBlockItemTagsProvider(private val factory: (BlockItemTag) -> HT protected fun builder(tagKey: BlockItemTag): HTBlockItemTagBuilder = factory(tagKey) + /** + * @since 26.1.8 + */ + protected fun builder(block: TagKey, item: TagKey): HTBlockItemTagBuilder = + builder(BlockItemTag(block, item)) + protected fun builders(tagKey: BlockItemTag, vararg children: BlockItemTag): HTBlockItemTagBuilder = children.fold(builder(tagKey)) { builder: HTBlockItemTagBuilder, tagKeyIn: BlockItemTag -> builder.addTag(tagKeyIn) diff --git a/src/lib/kotlin/hiiragi283/lib/data/tag/HTTagBuilder.kt b/src/lib/kotlin/hiiragi283/lib/data/tag/HTTagBuilder.kt index a5d5f4091f..c47ff1f7e1 100644 --- a/src/lib/kotlin/hiiragi283/lib/data/tag/HTTagBuilder.kt +++ b/src/lib/kotlin/hiiragi283/lib/data/tag/HTTagBuilder.kt @@ -37,7 +37,7 @@ fun interface HTTagBuilder : Consumer { * @param id 要素のID * @param type このエントリの依存関係 */ - private fun add(id: Identifier, type: HTTagDependType = HTTagDependType.REQUIRED): HTTagBuilder = apply { + fun add(id: Identifier, type: HTTagDependType = HTTagDependType.REQUIRED): HTTagBuilder = apply { when (type) { HTTagDependType.REQUIRED -> TagEntry.element(id) HTTagDependType.OPTIONAL -> TagEntry.optionalElement(id) @@ -57,7 +57,7 @@ fun interface HTTagBuilder : Consumer { * @param id 子タグのID * @param type このエントリの依存関係 */ - private fun addTag(id: Identifier, type: HTTagDependType = HTTagDependType.REQUIRED): HTTagBuilder = apply { + fun addTag(id: Identifier, type: HTTagDependType = HTTagDependType.REQUIRED): HTTagBuilder = apply { when (type) { HTTagDependType.REQUIRED -> TagEntry.tag(id) HTTagDependType.OPTIONAL -> TagEntry.optionalTag(id) diff --git a/src/lib/kotlin/hiiragi283/lib/data/tag/HTTagsProvider.kt b/src/lib/kotlin/hiiragi283/lib/data/tag/HTTagsProvider.kt index a4ba18493b..ad965b8638 100644 --- a/src/lib/kotlin/hiiragi283/lib/data/tag/HTTagsProvider.kt +++ b/src/lib/kotlin/hiiragi283/lib/data/tag/HTTagsProvider.kt @@ -2,13 +2,10 @@ package hiiragi283.lib.data.tag import hiiragi283.lib.collection.SetMultiMapBuilder import hiiragi283.lib.registry.RegistryKey -import hiiragi283.lib.registry.createKey import it.unimi.dsi.fastutil.objects.Object2ObjectLinkedOpenHashMap import net.minecraft.core.HolderLookup import net.minecraft.data.PackOutput import net.minecraft.data.tags.TagsProvider -import net.minecraft.resources.Identifier -import net.minecraft.resources.ResourceKey import net.minecraft.tags.TagEntry import net.minecraft.tags.TagKey import java.util.concurrent.CompletableFuture @@ -83,9 +80,4 @@ abstract class HTTagsProvider : TagsProvider { builder.addTag(tagKeyIn) builder(tagKeyIn) } - - /** - * @since 26.1.7 - */ - protected fun createKey(id: Identifier): ResourceKey = registryKey.createKey(id) } diff --git a/src/lib/kotlin/hiiragi283/lib/fluid/FluidInstanceBuilder.kt b/src/lib/kotlin/hiiragi283/lib/fluid/FluidInstanceBuilder.kt index 2eca746512..50b6c94cbb 100644 --- a/src/lib/kotlin/hiiragi283/lib/fluid/FluidInstanceBuilder.kt +++ b/src/lib/kotlin/hiiragi283/lib/fluid/FluidInstanceBuilder.kt @@ -4,7 +4,6 @@ package hiiragi283.lib.fluid import hiiragi283.lib.data.HolderAcceptor import hiiragi283.lib.data.buildDataPatch -import hiiragi283.lib.registry.HTFluidContent import hiiragi283.lib.registry.isEmpty import hiiragi283.lib.util.HTBuilderMarker import hiiragi283.lib.util.HTDelegates @@ -76,10 +75,6 @@ class FluidInstanceBuilder : HolderAcceptor.FluidAcceptor { fluid = this } - operator fun HTFluidContent.unaryPlus() { - +this.sourceHolder - } - operator fun DataComponentPatch.unaryPlus() { patch = this } diff --git a/src/lib/kotlin/hiiragi283/lib/gui/widget/HTWidgetType.kt b/src/lib/kotlin/hiiragi283/lib/gui/widget/HTWidgetType.kt index 110f4b4e61..f57b346b2e 100644 --- a/src/lib/kotlin/hiiragi283/lib/gui/widget/HTWidgetType.kt +++ b/src/lib/kotlin/hiiragi283/lib/gui/widget/HTWidgetType.kt @@ -1,11 +1,6 @@ package hiiragi283.lib.gui.widget -import hiiragi283.lib.registry.createKey -import hiiragi283.lib.resource.HTValueWithKey -import hiiragi283.lib.util.Ior -import hiiragi283.ragium.api.RagiumRegistries import net.minecraft.resources.Identifier -import net.minecraft.resources.ResourceKey /** * [HTWidget]を識別するためのインターフェースです。 @@ -13,10 +8,11 @@ import net.minecraft.resources.ResourceKey * @author Hiiragi Tsubasa * @since 26.1.0 */ -class HTWidgetType(private val id: Identifier) : - HTValueWithKey, HTWidgetType> { - override fun unwrapWithKey(): Ior>, HTWidgetType> = - Ior.Both(RagiumRegistries.Keys.WIDGET_TYPE.createKey(id), this) - - override fun toString(): String = "HTWidgetType(id=$id)" +interface HTWidgetType { + companion object { + @JvmStatic + fun simple(id: Identifier): HTWidgetType = object : HTWidgetType { + override fun toString(): String = id.toString() + } + } } diff --git a/src/lib/kotlin/hiiragi283/lib/item/HTItemDropHelper.kt b/src/lib/kotlin/hiiragi283/lib/item/HTItemDropHelper.kt index 7ba077d0b4..7c24ad91bd 100644 --- a/src/lib/kotlin/hiiragi283/lib/item/HTItemDropHelper.kt +++ b/src/lib/kotlin/hiiragi283/lib/item/HTItemDropHelper.kt @@ -9,6 +9,7 @@ import net.minecraft.world.entity.Entity import net.minecraft.world.entity.item.ItemEntity import net.minecraft.world.entity.player.Player import net.minecraft.world.item.ItemStack +import net.minecraft.world.item.ItemStackTemplate import net.minecraft.world.level.Level import net.neoforged.neoforge.capabilities.Capabilities import net.neoforged.neoforge.transfer.item.ItemUtil @@ -44,6 +45,16 @@ data object HTItemDropHelper { } } + /** + * アイテムをインベントリに入れます。 + * @param player インベントリの所有者 + * @param template インベントリに入れられるアイテム + * @return 正常にアイテムを移動できた場合は`true` + * @since 26.1.8 + */ + @JvmStatic + fun giveStackTo(player: Player, template: ItemStackTemplate): Boolean = giveStackTo(player, template.create()) + /** * アイテムをインベントリに入れます。 * @param player インベントリの所有者 diff --git a/src/lib/kotlin/hiiragi283/lib/item/alchemy/HTBottleType.kt b/src/lib/kotlin/hiiragi283/lib/item/alchemy/HTBottleType.kt index 63b96023b3..5887ec48e2 100644 --- a/src/lib/kotlin/hiiragi283/lib/item/alchemy/HTBottleType.kt +++ b/src/lib/kotlin/hiiragi283/lib/item/alchemy/HTBottleType.kt @@ -8,9 +8,11 @@ import hiiragi283.lib.resource.vanillaId import hiiragi283.lib.serialization.codec.HTCodecs import hiiragi283.lib.serialization.network.HTStreamCodecs import io.netty.buffer.ByteBuf +import net.minecraft.core.TypedInstance import net.minecraft.network.codec.StreamCodec import net.minecraft.resources.Identifier import net.minecraft.util.StringRepresentable +import net.minecraft.world.item.Item /** * ポーション瓶の種類を管理するクラスです。 @@ -32,6 +34,20 @@ enum class HTBottleType(val filledItem: HTSimpleDeferredItem) : StringRepresenta @JvmField val STREAM_CODEC: StreamCodec = HTStreamCodecs.enum() + + /** + * @since 26.1.8 + */ + @JvmStatic + fun getFromFilled(instance: TypedInstance): HTBottleType? = + HTBottleType.entries.firstOrNull { it.filledItem.isOf(instance) } + + /** + * @since 26.1.8 + */ + @JvmStatic + fun getFromEmpty(instance: TypedInstance): HTBottleType? = + HTBottleType.entries.firstOrNull { it.emptyItem.isOf(instance) } } constructor(filledItem: Identifier) : this(HTSimpleDeferredItem(filledItem)) diff --git a/src/lib/kotlin/hiiragi283/lib/item/alchemy/HTPotionHelper.kt b/src/lib/kotlin/hiiragi283/lib/item/alchemy/HTPotionHelper.kt index f6c0f419df..7058cdfa0d 100644 --- a/src/lib/kotlin/hiiragi283/lib/item/alchemy/HTPotionHelper.kt +++ b/src/lib/kotlin/hiiragi283/lib/item/alchemy/HTPotionHelper.kt @@ -32,11 +32,17 @@ data object HTPotionHelper { * @return 値を保持していない場合は[PotionContents.EMPTY] */ @JvmStatic - fun getContents(getter: DataComponentGetter): PotionContents = + fun getContentsOrEmpty(getter: DataComponentGetter): PotionContents = getter.getOrDefault(DataComponents.POTION_CONTENTS, PotionContents.EMPTY) + /** + * 指定した[getter]から[PotionContents]を取得します。 + * @return 取得した[PotionContents]が空の場合は`null` + * @since 26.1.8 + */ @JvmStatic - fun isEmpty(getter: DataComponentGetter): Boolean = getContents(getter).let(::isEmpty) + fun getContentsNotEmpty(getter: DataComponentGetter): PotionContents? = + getContentsOrEmpty(getter).takeUnless(::isEmpty) /** * 指定した[contents]が空かどうか判定します。 @@ -47,24 +53,26 @@ data object HTPotionHelper { contents == PotionContents.EMPTY || (contents.potion().isEmpty && contents.customEffects.isEmpty()) @JvmStatic - fun hasAnyEffect(getter: DataComponentGetter): Boolean = !getContents(getter).let(::isEmpty) + fun hasAnyEffect(getter: DataComponentGetter): Boolean = !getContentsOrEmpty(getter).let(::isEmpty) // Patch @JvmStatic fun createPotionPatch(getter: DataComponentGetter): DataComponentPatch = - getContents(getter).let(::createPotionPatch) + getContentsNotEmpty(getter)?.let(::createPotionPatch) ?: DataComponentPatch.EMPTY @JvmStatic fun createPotionPatch(potion: Holder): DataComponentPatch = createPotionPatch(PotionContents(potion)) @JvmStatic - fun createPotionPatch(contents: PotionContents): DataComponentPatch = - buildDataPatch { set(DataComponents.POTION_CONTENTS, contents) } + fun createPotionPatch(contents: PotionContents): DataComponentPatch = when { + isEmpty(contents) -> DataComponentPatch.EMPTY + else -> buildDataPatch { set(DataComponents.POTION_CONTENTS, contents) } + } // Potion Id @JvmStatic - fun getPotionId(getter: DataComponentGetter): Identifier? = getContents(getter).let(::getPotionId) + fun getPotionId(getter: DataComponentGetter): Identifier? = getContentsOrEmpty(getter).let(::getPotionId) @JvmStatic fun getPotionId(contents: PotionContents): Identifier? = contents @@ -77,7 +85,7 @@ data object HTPotionHelper { @JvmStatic fun getPotionName(getter: DataComponentGetter, bottleType: HTBottleType): Text = - getPotionName(getContents(getter), bottleType) + getPotionName(getContentsOrEmpty(getter), bottleType) @JvmStatic fun getPotionName(contents: PotionContents, bottleType: HTBottleType): Text = @@ -89,7 +97,7 @@ data object HTPotionHelper { @JvmStatic fun createFilled(getter: DataComponentGetter, bottleType: HTBottleType): ItemStackTemplate = - createFilled(getContents(getter), bottleType) + createFilled(getContentsOrEmpty(getter), bottleType) @JvmStatic fun createFilled(potion: Holder, bottleType: HTBottleType): ItemStackTemplate = @@ -102,31 +110,33 @@ data object HTPotionHelper { // Bucket @JvmStatic - fun createBuket(getter: DataComponentGetter): ItemStackTemplate = getContents(getter).let(::createBuket) + fun createBuket(getter: DataComponentGetter): ItemStackTemplate? = getContentsNotEmpty(getter)?.let(::createBuket) @Suppress("DEPRECATION") @JvmStatic - fun createBuket(potion: Holder): ItemStackTemplate = createBuket(PotionContents(potion)) + fun createBuket(potion: Holder): ItemStackTemplate = createBuket(PotionContents(potion))!! @JvmStatic - fun createBuket(contents: PotionContents): ItemStackTemplate = when { + 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))!! + else -> HTPotionFluidAccess.INSTANCE.fluidContent.bucketHolder.toTemplate(patch = createPotionPatch(contents)) } // FluidStack // @JvmStatic - fun createFluid(getter: DataComponentGetter, amount: Int = FluidType.BUCKET_VOLUME): FluidStack = - createFluid(getContents(getter), amount) + fun createFluid(getter: DataComponentGetter, amount: Int = FluidType.BUCKET_VOLUME): FluidStack? = + getContentsNotEmpty(getter)?.let { createFluid(it, amount) } @Suppress("DEPRECATION") @JvmStatic fun createFluid(potion: Holder, amount: Int = FluidType.BUCKET_VOLUME): FluidStack = - createFluid(PotionContents(potion), amount) + createFluid(PotionContents(potion), amount)!! @JvmStatic - fun createFluid(contents: PotionContents, amount: Int = FluidType.BUCKET_VOLUME): FluidStack = when { + 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)) } diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/HTRecipeHolder.kt b/src/lib/kotlin/hiiragi283/lib/recipe/HTRecipeHolder.kt index c307fe95ea..cc9047f802 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/HTRecipeHolder.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/HTRecipeHolder.kt @@ -3,9 +3,7 @@ package hiiragi283.lib.recipe import com.mojang.serialization.Codec import com.mojang.serialization.MapCodec import hiiragi283.lib.HTConstants -import hiiragi283.lib.resource.HTValueWithId import hiiragi283.lib.serialization.codec.HTCodecs -import hiiragi283.lib.util.Ior import net.minecraft.resources.Identifier import net.minecraft.world.item.crafting.Recipe import net.minecraft.world.item.crafting.RecipeHolder @@ -17,7 +15,7 @@ import net.minecraft.world.item.crafting.RecipeHolder * @since 26.1.0 */ @JvmRecord -data class HTRecipeHolder(val key: RecipeKey, val recipe: RECIPE) : HTValueWithId { +data class HTRecipeHolder(val key: RecipeKey, val recipe: RECIPE) { companion object { @JvmStatic fun codec(recipeCodec: MapCodec): Codec> = @@ -45,8 +43,6 @@ data class HTRecipeHolder(val key: RecipeKey, val recipe: RECI } inline fun castAs(): HTRecipeHolder? = mapNotNull { it as? U } - - override fun unwrapWithId(): Ior = Ior.Both(this.id, this.recipe) } // Extensions // diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/HTRecipeType.kt b/src/lib/kotlin/hiiragi283/lib/recipe/HTRecipeType.kt deleted file mode 100644 index f9167341aa..0000000000 --- a/src/lib/kotlin/hiiragi283/lib/recipe/HTRecipeType.kt +++ /dev/null @@ -1,24 +0,0 @@ -package hiiragi283.lib.recipe - -import hiiragi283.lib.registry.createKey -import hiiragi283.lib.resource.HTValueWithKey -import hiiragi283.lib.resource.toLanguageKey -import hiiragi283.lib.text.HTHasText -import hiiragi283.lib.util.Ior -import net.minecraft.core.registries.Registries -import net.minecraft.resources.Identifier -import net.minecraft.resources.ResourceKey -import net.minecraft.world.item.crafting.Recipe -import net.minecraft.world.item.crafting.RecipeType - -@JvmRecord -data class HTRecipeType>(private val id: Identifier) : - RecipeType, - HTValueWithKey, HTRecipeType>, - HTHasText.Translatable { - - override fun unwrapWithKey(): Ior>, HTRecipeType> = - Ior.Both(Registries.RECIPE_TYPE.createKey(id), this) - - override val translationKey: String get() = keyOrThrow.toLanguageKey() -} diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTBasicSingleRecipe.kt b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTBasicSingleRecipe.kt new file mode 100644 index 0000000000..3aa010a53f --- /dev/null +++ b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTBasicSingleRecipe.kt @@ -0,0 +1,81 @@ +package hiiragi283.lib.recipe.base + +import com.mojang.serialization.Codec +import com.mojang.serialization.MapCodec +import hiiragi283.lib.HTConstants +import hiiragi283.lib.recipe.ingredient.HTIngredient +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<*>>( + val ingredient: ING, + val result: RES, + override val progressData: HTProgressData +) : HTProgressRecipe.Simple { + companion object { + @JvmStatic + fun , RES : HTRecipeResult<*>, RECIPE : HTBasicSingleRecipe<*, ING, RES>> codec( + ingredient: Codec, + result: Codec, + factory: Factory + ): MapCodec = HTCodecs.recordMap { instance -> + instance.group( + ingredient.fieldOf(HTConstants.INGREDIENT).forGetter { it.ingredient }, + result.fieldOf(HTConstants.RESULT).forGetter { it.result }, + HTProgressData.CODEC.forGetter { it.progressData } + ).apply(instance, factory::create) + } + + @JvmStatic + fun , RES : HTRecipeResult<*>, RECIPE : HTBasicSingleRecipe<*, ING, RES>> codec( + ingredient: Codec, + result: MapCodec, + factory: Factory + ): MapCodec = HTCodecs.recordMap { instance -> + instance.group( + ingredient.fieldOf(HTConstants.INGREDIENT).forGetter { it.ingredient }, + result.forGetter { it.result }, + HTProgressData.CODEC.forGetter { it.progressData } + ).apply(instance, factory::create) + } + + @JvmStatic + fun , RES : HTRecipeResult<*>, RECIPE : HTBasicSingleRecipe<*, ING, RES>> streamCodec( + ingredient: StreamCodec, + result: StreamCodec, + factory: Factory + ): StreamCodec = StreamCodec.composite( + ingredient, + { it.ingredient }, + result, + { it.result }, + HTProgressData.STREAM_CODEC, + { it.progressData }, + factory::create + ) + } + + // Factory // + + /** + * @param ING レシピの材料を判定するクラス + * @param RES レシピの完成品を提供するクラス + * @param RECIPE 出力するレシピのクラス + * @author Hiiragi Tsubasa + * @since 26.1.8 + */ + fun interface Factory, RES : HTRecipeResult<*>, out RECIPE : Any> { + fun create(ingredient: ING, result: RES, progressData: HTProgressData): RECIPE + } +} diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTFluidToDoubleFluidRecipe.kt b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTFluidToDoubleFluidRecipe.kt new file mode 100644 index 0000000000..37803ee601 --- /dev/null +++ b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTFluidToDoubleFluidRecipe.kt @@ -0,0 +1,88 @@ +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 15bf26d1c8..f577b4699f 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTFluidToRecipe.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTFluidToRecipe.kt @@ -1,15 +1,12 @@ package hiiragi283.lib.recipe.base -import com.mojang.serialization.Codec import com.mojang.serialization.MapCodec -import hiiragi283.lib.HTConstants -import hiiragi283.lib.data.recipe.builder.HTFluidToRecipeBuilder import hiiragi283.lib.recipe.ingredient.HTFluidIngredient import hiiragi283.lib.recipe.input.HTSingleFluidRecipeInput 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 import net.minecraft.network.RegistryFriendlyByteBuf import net.minecraft.network.codec.StreamCodec import net.minecraft.world.item.ItemStack @@ -30,6 +27,13 @@ typealias HTFluidToFluidRecipe = HTFluidToRecipe */ typealias HTFluidToItemRecipe = HTFluidToRecipe +/** + * 1種類の液体から1種類のアイテムと液体を作成するレシピを表すインターフェースです。 + * @author Hiiragi Tsubasa + * @since 26.1.8 + */ +typealias HTFluidToItemAndFluidRecipe = HTFluidToRecipe + /** * 1種類の液体から1種類の完成品を作成するレシピを表すインターフェースです。 * @author Hiiragi Tsubasa @@ -44,90 +48,104 @@ interface HTFluidToRecipe : * @author Hiiragi Tsubasa * @since 26.1.5 */ - open class Basic>( - val ingredient: HTFluidIngredient, - val result: RESULT, - override val progressData: HTProgressData - ) : HTFluidToRecipe, - HTProgressRecipe.Simple { + open class BasicItem(ingredient: HTFluidIngredient, result: HTItemResult, progressData: HTProgressData) : + HTBasicSingleRecipe( + ingredient, + result, + progressData + ), + HTFluidToRecipe { companion object { @JvmStatic - fun , RECIPE : Basic> codec( - resultCodec: Codec, - factory: HTFluidToRecipeBuilder.Factory - ): MapCodec = HTCodecs.recordMap { instance -> - instance.group( - HTFluidIngredient.CODEC - .fieldOf(HTConstants.INGREDIENT) - .forGetter(Basic::ingredient), - resultCodec.fieldOf(HTConstants.RESULT).forGetter(Basic::result), - HTProgressData.CODEC.forGetter(Basic::progressData) - ).apply(instance, factory::create) - } + fun codec( + factory: Factory + ): MapCodec = codec(HTFluidIngredient.CODEC, HTItemResult.CODEC, factory) @JvmStatic - fun , RECIPE : Basic> streamCodec( - resultCodec: StreamCodec, - factory: HTFluidToRecipeBuilder.Factory - ): StreamCodec = StreamCodec.composite( - HTFluidIngredient.STREAM_CODEC, - Basic::ingredient, - resultCodec, - Basic::result, - HTProgressData.STREAM_CODEC, - Basic::progressData, - factory::create - ) + fun streamCodec( + factory: Factory + ): StreamCodec = + streamCodec(HTFluidIngredient.STREAM_CODEC, HTItemResult.STREAM_CODEC, factory) + + @JvmField + val SIMPLE_CODEC: MapCodec = codec(::BasicItem) } override fun test(input: FluidInstance): Boolean = ingredient.test(input) - override fun getMatchingStack(input: FluidInstance): FluidInstance = ingredient.getMatchingStack(input) + override fun apply(input: FluidInstance): ItemStack = result.create() - override fun apply(input: FluidInstance): OUTPUT = result.create() + override fun getMatchingStack(input: FluidInstance): FluidInstance = ingredient.getMatchingStack(input) } /** * @author Hiiragi Tsubasa * @since 26.1.5 */ - open class BasicItem(ingredient: HTFluidIngredient, result: HTItemResult, progressData: HTProgressData) : - Basic(ingredient, result, progressData) { + open class BasicFluid(ingredient: HTFluidIngredient, result: HTFluidResult, progressData: HTProgressData) : + HTBasicSingleRecipe( + ingredient, + result, + progressData + ), + HTFluidToRecipe { companion object { @JvmStatic - fun codec( - factory: HTFluidToRecipeBuilder.Factory - ): MapCodec = codec(HTItemResult.CODEC, factory) + fun codec( + factory: Factory + ): MapCodec = codec(HTFluidIngredient.CODEC, HTFluidResult.CODEC, factory) @JvmStatic - fun streamCodec( - factory: HTFluidToRecipeBuilder.Factory - ): StreamCodec = streamCodec(HTItemResult.STREAM_CODEC, factory) + fun streamCodec( + factory: Factory + ): StreamCodec = + streamCodec(HTFluidIngredient.STREAM_CODEC, HTFluidResult.STREAM_CODEC, factory) @JvmField - val SIMPLE_CODEC: MapCodec = codec(::BasicItem) + val SIMPLE_CODEC: MapCodec = codec(::BasicFluid) } + + override fun test(input: FluidInstance): Boolean = ingredient.test(input) + + override fun apply(input: FluidInstance): FluidStack = result.create() + + override fun getMatchingStack(input: FluidInstance): FluidInstance = ingredient.getMatchingStack(input) } /** * @author Hiiragi Tsubasa - * @since 26.1.5 + * @since 26.1.8 */ - open class BasicFluid(ingredient: HTFluidIngredient, result: HTFluidResult, progressData: HTProgressData) : - Basic(ingredient, result, progressData) { + open class BasicItemAndFluid( + ingredient: HTFluidIngredient, + result: HTItemOrFluidResult, + progressData: HTProgressData + ) : HTBasicSingleRecipe( + ingredient, + result, + progressData + ), + HTFluidToRecipe { companion object { @JvmStatic - fun codec( - factory: HTFluidToRecipeBuilder.Factory - ): MapCodec = codec(HTFluidResult.CODEC, factory) + fun codec( + factory: Factory + ): MapCodec = codec(HTFluidIngredient.CODEC, HTItemOrFluidResult.CODEC, factory) @JvmStatic - fun streamCodec( - factory: HTFluidToRecipeBuilder.Factory - ): StreamCodec = streamCodec(HTFluidResult.STREAM_CODEC, factory) + fun streamCodec( + factory: Factory + ): StreamCodec = + streamCodec(HTFluidIngredient.STREAM_CODEC, HTItemOrFluidResult.STREAM_CODEC, factory) @JvmField - val SIMPLE_CODEC: MapCodec = codec(::BasicFluid) + val SIMPLE_CODEC: MapCodec = codec(::BasicItemAndFluid) } + + override fun test(input: FluidInstance): Boolean = ingredient.test(input) + + override fun apply(input: FluidInstance): HTItemAndFluidStack = result.create() + + override fun getMatchingStack(input: FluidInstance): FluidInstance = ingredient.getMatchingStack(input) } } diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTItemToDoubleItemRecipe.kt b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTItemToDoubleItemRecipe.kt index e46db7e7da..5fb24a418a 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTItemToDoubleItemRecipe.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTItemToDoubleItemRecipe.kt @@ -44,7 +44,7 @@ interface HTItemToDoubleItemRecipe : */ open class Basic( val ingredient: HTItemIngredient, - val result: Nel, + val results: Nel, override val progressData: HTProgressData ) : HTItemToDoubleItemRecipe, HTProgressRecipe.Simple { @@ -56,7 +56,7 @@ interface HTItemToDoubleItemRecipe : HTItemIngredient.CODEC.fieldOf(HTConstants.INGREDIENT).forGetter(Basic::ingredient), HTItemResult.CODEC .compactNelFieldOf(HTConstants.RESULT, HTConstants.RESULTS, 2) - .forGetter(Basic::result), + .forGetter(Basic::results), HTProgressData.CODEC.forGetter(Basic::progressData) ).apply(instance, factory::create) } @@ -71,7 +71,7 @@ interface HTItemToDoubleItemRecipe : HTItemIngredient.STREAM_CODEC, Basic::ingredient, HTItemResult.STREAM_CODEC.nelOf(), - Basic::result, + Basic::results, HTProgressData.STREAM_CODEC, Basic::progressData, factory::create @@ -83,6 +83,6 @@ interface HTItemToDoubleItemRecipe : override fun getMatchingStack(input: ItemInstance): ItemInstance = ingredient.getMatchingStack(input) override fun apply(input: ItemInstance): Pair = - result.head.create() to result.getOrNull(1).createOrEmpty() + results.head.create() to results.getOrNull(1).createOrEmpty() } } diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTItemToItemAndFluidRecipe.kt b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTItemToItemAndFluidRecipe.kt deleted file mode 100644 index 18400bbb12..0000000000 --- a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTItemToItemAndFluidRecipe.kt +++ /dev/null @@ -1,75 +0,0 @@ -package hiiragi283.lib.recipe.base - -import com.mojang.serialization.MapCodec -import hiiragi283.lib.HTConstants -import hiiragi283.lib.recipe.ingredient.HTItemIngredient -import hiiragi283.lib.recipe.result.HTFluidResult -import hiiragi283.lib.recipe.result.HTItemAndFluidResult -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.crafting.SingleRecipeInput - -/** - * 1種類のアイテムから1種類のアイテムと液体を作成するレシピを表すインターフェースです。 - * @author Hiiragi Tsubasa - * @since 26.1.0 - */ -interface HTItemToItemAndFluidRecipe : - HTRecipePredicates.SingleItem, - HTRecipeFactories.SingleItemTo, - HTProgressRecipe { - - /** - * @author Hiiragi Tsubasa - * @since 26.1.0 - */ - open class Basic( - val ingredient: HTItemIngredient, - val itemResult: HTItemResult, - val fluidResult: HTFluidResult, - override val progressData: HTProgressData - ) : HTItemToItemAndFluidRecipe, - HTProgressRecipe.Simple { - companion object { - @JvmStatic - fun codec( - factory: (HTItemIngredient, HTItemResult, HTFluidResult, HTProgressData) -> RECIPE - ): MapCodec = HTCodecs.recordMap { instance -> - instance.group( - HTItemIngredient.CODEC.fieldOf(HTConstants.INGREDIENT).forGetter(Basic::ingredient), - HTItemResult.CODEC.fieldOf(HTConstants.ITEM_RESULT).forGetter(Basic::itemResult), - HTFluidResult.CODEC.fieldOf(HTConstants.FLUID_RESULT).forGetter(Basic::fluidResult), - HTProgressData.CODEC.forGetter(Basic::progressData) - ).apply(instance, factory) - } - - @JvmField - val SIMPLE_CODEC: MapCodec = codec(::Basic) - - @JvmStatic - fun streamCodec( - factory: (HTItemIngredient, HTItemResult, HTFluidResult, HTProgressData) -> RECIPE - ): StreamCodec = StreamCodec.composite( - HTItemIngredient.STREAM_CODEC, - Basic::ingredient, - HTItemResult.STREAM_CODEC, - Basic::itemResult, - HTFluidResult.STREAM_CODEC, - Basic::fluidResult, - HTProgressData.STREAM_CODEC, - Basic::progressData, - factory - ) - } - - override fun test(input: ItemInstance): Boolean = ingredient.test(input) - - override fun getMatchingStack(input: ItemInstance): ItemInstance = ingredient.getMatchingStack(input) - - override fun apply(input: ItemInstance): HTItemAndFluidResult = - HTItemAndFluidResult(itemResult.create(), fluidResult.create()) - } -} diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTItemToRecipe.kt b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTItemToRecipe.kt index 29763d990c..56a3913d06 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTItemToRecipe.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTItemToRecipe.kt @@ -1,14 +1,11 @@ package hiiragi283.lib.recipe.base -import com.mojang.serialization.Codec import com.mojang.serialization.MapCodec -import hiiragi283.lib.HTConstants -import hiiragi283.lib.data.recipe.builder.HTItemToRecipeBuilder import hiiragi283.lib.recipe.ingredient.HTItemIngredient 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 import net.minecraft.network.RegistryFriendlyByteBuf import net.minecraft.network.codec.StreamCodec import net.minecraft.world.item.ItemInstance @@ -30,6 +27,13 @@ typealias HTItemToFluidRecipe = HTItemToRecipe */ typealias HTItemToItemRecipe = HTItemToRecipe +/** + * 1種類のアイテムから1種類のアイテムと液体を作成するレシピを表すインターフェースです。 + * @author Hiiragi Tsubasa + * @since 26.1.8 + */ +typealias HTItemToItemAndFluidRecipe = HTItemToRecipe + /** * 1種類のアイテムから1種類の完成品を作成するレシピを表すインターフェースです。 * @author Hiiragi Tsubasa @@ -42,92 +46,97 @@ interface HTItemToRecipe : /** * @author Hiiragi Tsubasa - * @since 26.1.0 + * @since 26.1.5 */ - open class Basic>( - val ingredient: HTItemIngredient, - val result: RESULT, - override val progressData: HTProgressData - ) : HTItemToRecipe, - HTProgressRecipe.Simple { + open class BasicItem(ingredient: HTItemIngredient, result: HTItemResult, progressData: HTProgressData) : + HTBasicSingleRecipe(ingredient, result, progressData), + HTItemToRecipe { companion object { @JvmStatic - fun , RECIPE : Basic> codec( - resultCodec: Codec, - factory: HTItemToRecipeBuilder.Factory - ): MapCodec = HTCodecs.recordMap { instance -> - instance.group( - HTItemIngredient.CODEC - .fieldOf(HTConstants.INGREDIENT) - .forGetter(Basic::ingredient), - resultCodec.fieldOf(HTConstants.RESULT).forGetter(Basic::result), - HTProgressData.CODEC.forGetter(Basic::progressData) - ).apply(instance, factory::create) - } + fun codec(factory: Factory): MapCodec = + codec(HTItemIngredient.CODEC, HTItemResult.CODEC, factory) @JvmStatic - fun , RECIPE : Basic> streamCodec( - resultCodec: StreamCodec, - factory: HTItemToRecipeBuilder.Factory - ): StreamCodec = StreamCodec.composite( - HTItemIngredient.STREAM_CODEC, - Basic::ingredient, - resultCodec, - Basic::result, - HTProgressData.STREAM_CODEC, - Basic::progressData, - factory::create - ) + fun streamCodec( + factory: Factory + ): StreamCodec = + streamCodec(HTItemIngredient.STREAM_CODEC, HTItemResult.STREAM_CODEC, factory) + + @JvmField + val SIMPLE_CODEC: MapCodec = codec(::BasicItem) } override fun test(input: ItemInstance): Boolean = ingredient.test(input) - override fun getMatchingStack(input: ItemInstance): ItemInstance = ingredient.getMatchingStack(input) + override fun apply(input: ItemInstance): ItemStack = result.create() - override fun apply(input: ItemInstance): OUTPUT = result.create() + override fun getMatchingStack(input: ItemInstance): ItemInstance = ingredient.getMatchingStack(input) } /** * @author Hiiragi Tsubasa * @since 26.1.5 */ - open class BasicItem(ingredient: HTItemIngredient, result: HTItemResult, progressData: HTProgressData) : - Basic(ingredient, result, progressData) { + open class BasicFluid(ingredient: HTItemIngredient, result: HTFluidResult, progressData: HTProgressData) : + HTBasicSingleRecipe( + ingredient, + result, + progressData + ), + HTItemToRecipe { companion object { @JvmStatic - fun codec( - factory: HTItemToRecipeBuilder.Factory - ): MapCodec = codec(HTItemResult.CODEC, factory) + fun codec( + factory: Factory + ): MapCodec = codec(HTItemIngredient.CODEC, HTFluidResult.CODEC, factory) @JvmStatic - fun streamCodec( - factory: HTItemToRecipeBuilder.Factory - ): StreamCodec = streamCodec(HTItemResult.STREAM_CODEC, factory) + fun streamCodec( + factory: Factory + ): StreamCodec = + streamCodec(HTItemIngredient.STREAM_CODEC, HTFluidResult.STREAM_CODEC, factory) @JvmField - val SIMPLE_CODEC: MapCodec = codec(::BasicItem) + val SIMPLE_CODEC: MapCodec = codec(::BasicFluid) } + + override fun test(input: ItemInstance): Boolean = ingredient.test(input) + + override fun apply(input: ItemInstance): FluidStack = result.create() + + override fun getMatchingStack(input: ItemInstance): ItemInstance = ingredient.getMatchingStack(input) } /** * @author Hiiragi Tsubasa - * @since 26.1.5 + * @since 26.1.8 */ - open class BasicFluid(ingredient: HTItemIngredient, result: HTFluidResult, progressData: HTProgressData) : - Basic(ingredient, result, progressData) { + open class BasicItemAndFluid( + ingredient: HTItemIngredient, + result: HTItemOrFluidResult, + progressData: HTProgressData + ) : HTBasicSingleRecipe(ingredient, result, progressData), + HTItemToRecipe { companion object { @JvmStatic - fun codec( - factory: HTItemToRecipeBuilder.Factory - ): MapCodec = codec(HTFluidResult.CODEC, factory) + fun codec( + factory: Factory + ): MapCodec = codec(HTItemIngredient.CODEC, HTItemOrFluidResult.CODEC, factory) @JvmStatic - fun streamCodec( - factory: HTItemToRecipeBuilder.Factory - ): StreamCodec = streamCodec(HTFluidResult.STREAM_CODEC, factory) + fun streamCodec( + factory: Factory + ): StreamCodec = + streamCodec(HTItemIngredient.STREAM_CODEC, HTItemOrFluidResult.STREAM_CODEC, factory) @JvmField - val SIMPLE_CODEC: MapCodec = codec(::BasicFluid) + val SIMPLE_CODEC: MapCodec = codec(::BasicItemAndFluid) } + + override fun test(input: ItemInstance): Boolean = ingredient.test(input) + + override fun apply(input: ItemInstance): HTItemAndFluidStack = result.create() + + override fun getMatchingStack(input: ItemInstance): ItemInstance = ingredient.getMatchingStack(input) } } diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTRecipeFactories.kt b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTRecipeFactories.kt index 612e4e5c23..9a40fea329 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTRecipeFactories.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTRecipeFactories.kt @@ -4,11 +4,13 @@ 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.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 @@ -46,6 +48,17 @@ data object HTRecipeFactories { override fun produce(input: SingleRecipeInput): OUTPUT = apply(input.item()) } + /** + * @since 26.1.8 + */ + interface Located : SingleInput { + override fun produce(input: HTLocationRecipeInput): OUTPUT = apply(input.blockInWorld) + + @Suppress("DeprecatedCallableAddReplaceWith") + @Deprecated("Not used", level = DeprecationLevel.ERROR) + override fun getMatchingStack(input: BlockInWorld): BlockInWorld = input + } + // Double Input // interface DoubleInput : diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTRecipePredicates.kt b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTRecipePredicates.kt index 23f763fb41..900374d298 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTRecipePredicates.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTRecipePredicates.kt @@ -3,11 +3,13 @@ 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.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 @@ -46,6 +48,13 @@ data object HTRecipePredicates { 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) + } + // Double Input // /** diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/handler/HTOutputSlot.kt b/src/lib/kotlin/hiiragi283/lib/recipe/handler/HTOutputSlot.kt index a9d29fa583..e5d723d18b 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/handler/HTOutputSlot.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/handler/HTOutputSlot.kt @@ -40,13 +40,8 @@ interface HTOutputSlot { FULL; /** - * 出力の受け取りに失敗した場合は`true` + * 出力をすべて受け取れた場合は`true` */ - val noneTaken: Boolean get() = this == NONE - - /** - * 出力の受け取りに成功した場合は`true` - */ - val anyTaken: Boolean get() = !noneTaken + val fullOrNoneTaken: Boolean get() = this == NONE || this == FULL } } diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTIngredientHelper.kt b/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTIngredientHelper.kt index 958b924cc9..fb74538775 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTIngredientHelper.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTIngredientHelper.kt @@ -1,5 +1,6 @@ package hiiragi283.lib.recipe.ingredient +import hiiragi283.lib.data.HTDataComponentHelper import hiiragi283.lib.registry.isAir import hiiragi283.lib.registry.isEmpty import net.minecraft.core.TypedInstance @@ -25,7 +26,7 @@ data object HTIngredientHelper { fun unwrap(instance: FluidInstance): FluidStack = when (instance) { is FluidStack -> instance is FluidStackTemplate -> instance.create() - else -> FluidStack(instance.typeHolder(), instance.amount()) + else -> FluidStack(instance.typeHolder(), instance.amount(), HTDataComponentHelper.createPatch(instance)) } /** @@ -57,7 +58,7 @@ data object HTIngredientHelper { fun unwrap(instance: ItemInstance): ItemStack = when (instance) { is ItemStack -> instance is ItemStackTemplate -> instance.create() - else -> ItemStack(instance.typeHolder(), instance.count()) + else -> ItemStack(instance.typeHolder(), instance.count(), HTDataComponentHelper.createPatch(instance)) } /** diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTPotionFluidIngredient.kt b/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTPotionFluidIngredient.kt index 1a313b2543..432e94e7b8 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTPotionFluidIngredient.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTPotionFluidIngredient.kt @@ -19,6 +19,7 @@ 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 import net.neoforged.neoforge.fluids.crafting.FluidIngredientType @@ -48,8 +49,10 @@ data class HTPotionFluidIngredient(val potions: HolderSet) : FluidIngred constructor(potion: Holder) : this(HolderSet.direct(potion)) - override fun test(fluidStack: FluidStack): Boolean = - HTPotionHelper.getContents(fluidStack).potion().fold({ false }, potions::contains) + override fun test(fluidStack: FluidStack): Boolean = when { + fluidStack.`is`(Tags.Fluids.WATER) -> Potions.WATER in potions + else -> HTPotionHelper.getContentsOrEmpty(fluidStack).potion().fold({ false }, potions::contains) + } @Suppress("DEPRECATION") override fun generateFluids(): Stream> = diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/input/HTLocationRecipeInput.kt b/src/lib/kotlin/hiiragi283/lib/recipe/input/HTLocationRecipeInput.kt new file mode 100644 index 0000000000..a6b8d2ea80 --- /dev/null +++ b/src/lib/kotlin/hiiragi283/lib/recipe/input/HTLocationRecipeInput.kt @@ -0,0 +1,20 @@ +package hiiragi283.lib.recipe.input + +import net.minecraft.core.BlockPos +import net.minecraft.server.level.ServerLevel +import net.minecraft.world.item.ItemStack +import net.minecraft.world.item.crafting.RecipeInput +import net.minecraft.world.level.block.state.pattern.BlockInWorld + +/** + * @author Hiiragi Tsubasa + * @since 26.1.8 + */ +@JvmRecord +data class HTLocationRecipeInput(val blockInWorld: BlockInWorld) : RecipeInput { + constructor(level: ServerLevel, pos: BlockPos) : this(BlockInWorld(level, pos, false)) + + override fun getItem(index: Int): ItemStack = error("No item for index: $index") + + override fun size(): Int = 0 +} diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/result/HTFluidResult.kt b/src/lib/kotlin/hiiragi283/lib/recipe/result/HTFluidResult.kt index 2cff7c1f93..22a3bcfcc2 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/result/HTFluidResult.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/result/HTFluidResult.kt @@ -1,6 +1,7 @@ package hiiragi283.lib.recipe.result import com.mojang.serialization.Codec +import com.mojang.serialization.DataResult import com.mojang.serialization.MapCodec import hiiragi283.lib.HTConstants import hiiragi283.lib.fluid.HTFlowingFluidHelper @@ -150,7 +151,14 @@ data class HTFluidResult(val entry: Entry, val amount: Int) : HTRecipeResult = - MapCodec.assumeMapUnsafe(PotionContents.CODEC).xmap(::PotionEntry, PotionEntry::contents) + MapCodec.assumeMapUnsafe( + PotionContents.CODEC.validate { contents: PotionContents -> + when (HTPotionHelper.isEmpty(contents)) { + true -> DataResult.error { "Could not create fluid result with empty potion contents" } + false -> DataResult.success(contents) + } + } + ).xmap(::PotionEntry, PotionEntry::contents) @JvmField val STREAM_CODEC: StreamCodec = @@ -162,7 +170,7 @@ data class HTFluidResult(val entry: Entry, val amount: Int) : HTRecipeResult = TYPE - override fun create(amount: Int): FluidStack = HTPotionHelper.createFluid(contents, amount) + override fun create(amount: Int): FluidStack = HTPotionHelper.createFluid(contents, amount) ?: FluidStack.EMPTY override fun getId(): Identifier? = HTPotionHelper.getPotionId(contents) } diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/result/HTItemAndFluidResult.kt b/src/lib/kotlin/hiiragi283/lib/recipe/result/HTItemAndFluidResult.kt deleted file mode 100644 index 6fb8172e3c..0000000000 --- a/src/lib/kotlin/hiiragi283/lib/recipe/result/HTItemAndFluidResult.kt +++ /dev/null @@ -1,53 +0,0 @@ -package hiiragi283.lib.recipe.result - -import hiiragi283.lib.util.Ior -import net.minecraft.world.item.ItemStack -import net.neoforged.neoforge.fluids.FluidStack -import java.util.Objects - -/** - * アイテムと液体の完成品を保持するクラスです。 - * @author Hiiragi Tsubasa - * @since 26.1.0 - */ -@JvmRecord -data class HTItemAndFluidResult(val item: ItemStack, val fluid: FluidStack) { - companion object { - /** - * @since 26.1.7 - */ - @JvmStatic - fun from(result: HTItemResult?): HTItemAndFluidResult = - HTItemAndFluidResult(result.createOrEmpty(), FluidStack.EMPTY) - - /** - * @since 26.1.7 - */ - @JvmStatic - fun from(result: HTFluidResult?): HTItemAndFluidResult = - HTItemAndFluidResult(ItemStack.EMPTY, result.createOrEmpty()) - - /** - * @since 26.1.7 - */ - @JvmStatic - fun from(item: HTItemResult?, fluid: HTFluidResult?): HTItemAndFluidResult = - HTItemAndFluidResult(item.createOrEmpty(), fluid.createOrEmpty()) - - /** - * @since 26.1.7 - */ - @JvmStatic - fun from(results: Ior): HTItemAndFluidResult { - val (item: HTItemResult?, fluid: HTFluidResult?) = results.toPair() - return from(item, fluid) - } - } - - override fun equals(other: Any?): Boolean = (other as? HTItemAndFluidResult)?.let { - ItemStack.isSameItemSameComponents(it.item, this.item) && FluidStack.isSameFluid(it.fluid, this.fluid) - } ?: false - - override fun hashCode(): Int = - Objects.hash(ItemStack.hashItemAndComponents(item), FluidStack.hashFluidAndComponents(fluid)) -} diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/result/HTItemAndFluidStack.kt b/src/lib/kotlin/hiiragi283/lib/recipe/result/HTItemAndFluidStack.kt new file mode 100644 index 0000000000..1f08b98532 --- /dev/null +++ b/src/lib/kotlin/hiiragi283/lib/recipe/result/HTItemAndFluidStack.kt @@ -0,0 +1,20 @@ +package hiiragi283.lib.recipe.result + +import net.minecraft.world.item.ItemStack +import net.neoforged.neoforge.fluids.FluidStack +import java.util.Objects + +/** + * アイテムと液体の完成品をまとめたクラスです。 + * @author Hiiragi Tsubasa + * @since 26.1.0 + */ +@JvmRecord +data class HTItemAndFluidStack(val item: ItemStack, val fluid: FluidStack) { + override fun equals(other: Any?): Boolean = (other as? HTItemAndFluidStack)?.let { + ItemStack.isSameItemSameComponents(it.item, this.item) && FluidStack.isSameFluid(it.fluid, this.fluid) + } ?: false + + override fun hashCode(): Int = + Objects.hash(ItemStack.hashItemAndComponents(item), FluidStack.hashFluidAndComponents(fluid)) +} diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/result/HTItemOrFluidResult.kt b/src/lib/kotlin/hiiragi283/lib/recipe/result/HTItemOrFluidResult.kt new file mode 100644 index 0000000000..07d26b5fd9 --- /dev/null +++ b/src/lib/kotlin/hiiragi283/lib/recipe/result/HTItemOrFluidResult.kt @@ -0,0 +1,41 @@ +package hiiragi283.lib.recipe.result + +import com.mojang.serialization.MapCodec +import hiiragi283.lib.HTConstants +import hiiragi283.lib.serialization.codec.HTCodecs +import hiiragi283.lib.serialization.network.HTStreamCodecs +import hiiragi283.lib.util.Ior +import net.minecraft.network.RegistryFriendlyByteBuf +import net.minecraft.network.codec.StreamCodec +import net.minecraft.resources.Identifier + +/** + * アイテムまたは液体の完成品を保持するクラスです。 + * @author Hiiragi Tsubasa + * @since 26.1.8 + */ +@JvmRecord +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) + ).xmap(::HTItemOrFluidResult, HTItemOrFluidResult::content) + + @JvmField + val STREAM_CODEC: StreamCodec = HTStreamCodecs + .ior(HTItemResult.STREAM_CODEC, HTFluidResult.STREAM_CODEC) + .map(::HTItemOrFluidResult, HTItemOrFluidResult::content) + } + + override fun getId(): Identifier? = content.fold( + HTItemResult::getId, + HTFluidResult::getId + ) { item: HTItemResult, fluid: HTFluidResult -> item.getId() ?: fluid.getId() } + + override fun create(): HTItemAndFluidStack { + val (item: HTItemResult?, fluid: HTFluidResult?) = content.toPair() + return HTItemAndFluidStack(item.createOrEmpty(), fluid.createOrEmpty()) + } +} diff --git a/src/lib/kotlin/hiiragi283/lib/registry/HTDecorationContent.kt b/src/lib/kotlin/hiiragi283/lib/registry/HTDecorationContent.kt new file mode 100644 index 0000000000..69de08cfce --- /dev/null +++ b/src/lib/kotlin/hiiragi283/lib/registry/HTDecorationContent.kt @@ -0,0 +1,74 @@ +package hiiragi283.lib.registry + +import hiiragi283.lib.data.tag.HTBlockItemTagBuilder +import net.minecraft.resources.ResourceKey +import net.minecraft.tags.BlockTags +import net.minecraft.tags.ItemTags +import net.minecraft.tags.TagKey +import net.minecraft.world.item.Item +import net.minecraft.world.level.block.Block +import net.minecraft.world.level.block.SlabBlock +import net.minecraft.world.level.block.StairBlock +import net.minecraft.world.level.block.WallBlock +import net.minecraft.world.level.block.state.BlockBehaviour + +/** + * Ragiumで使用される,建材ブロックをまとめて管理するクラスです。 + * @author Hiiragi Tsubasa + * @since 26.1.8 + */ +@JvmRecord +data class HTDecorationContent( + val base: HTSimpleDeferredBlockAndItem, + val slab: HTBasicDeferredBlockAndItem, + val stairs: HTBasicDeferredBlockAndItem?, + val wall: HTBasicDeferredBlockAndItem?, + val parent: () -> HTDecorationContent? +) { + companion object { + @JvmStatic + fun copyOf(key: ResourceKey, base: HTSimpleDeferredBlockAndItem): BlockBehaviour.Properties = + BlockBehaviour.Properties.ofFullCopy(base.getOrThrow()).setId(key) + + @JvmStatic + fun create( + register: HTDeferredBlockAndItemRegister, + name: String, + base: HTSimpleDeferredBlockAndItem, + hasStairs: Boolean = true, + hasWall: Boolean = true, + parent: () -> HTDecorationContent? = { null } + ): HTDecorationContent = HTDecorationContent( + base, + register.registerSimple( + "${name}_slab", + blockFactory = { key: ResourceKey -> SlabBlock(copyOf(key, base)) } + ), + when (hasStairs) { + true -> register.registerSimple( + "${name}_stairs", + blockFactory = { key: ResourceKey -> StairBlock(base.defaultState, copyOf(key, base)) } + ) + + false -> null + }, + when (hasWall) { + true -> register.registerSimple( + "${name}_wall", + blockFactory = { key: ResourceKey -> WallBlock(copyOf(key, base)) } + ) + + false -> null + }, + parent + ) + } + + val all: List get() = listOfNotNull(base, slab, stairs, wall) + + fun appendTags(builder: (TagKey, TagKey) -> HTBlockItemTagBuilder) { + builder(BlockTags.SLABS, ItemTags.SLABS).add(slab) + stairs?.let(builder(BlockTags.STAIRS, ItemTags.STAIRS)::add) + wall?.let(builder(BlockTags.WALLS, ItemTags.WALLS)::add) + } +} diff --git a/src/lib/kotlin/hiiragi283/lib/registry/HTDeferredBlock.kt b/src/lib/kotlin/hiiragi283/lib/registry/HTDeferredBlock.kt index 9414e6f431..dadfc476ec 100644 --- a/src/lib/kotlin/hiiragi283/lib/registry/HTDeferredBlock.kt +++ b/src/lib/kotlin/hiiragi283/lib/registry/HTDeferredBlock.kt @@ -1,7 +1,5 @@ package hiiragi283.lib.registry -import hiiragi283.lib.text.HTHasText -import hiiragi283.lib.text.HTHasTranslationKey import hiiragi283.lib.text.Text import net.minecraft.core.registries.Registries import net.minecraft.resources.Identifier @@ -22,10 +20,7 @@ typealias HTSimpleDeferredBlock = HTDeferredBlock * @author Hiiragi Tsubasa * @since 26.1.0 */ -class HTDeferredBlock : - HTDeferredHolder, - HTHasTranslationKey, - HTHasText { +class HTDeferredBlock : HTDeferredHolder.Translatable { constructor(key: ResourceKey) : super(key) constructor(id: Identifier) : super(Registries.BLOCK.createKey(id)) diff --git a/src/lib/kotlin/hiiragi283/lib/registry/HTDeferredFluidType.kt b/src/lib/kotlin/hiiragi283/lib/registry/HTDeferredFluidType.kt index 77def2518f..5ee83b1835 100644 --- a/src/lib/kotlin/hiiragi283/lib/registry/HTDeferredFluidType.kt +++ b/src/lib/kotlin/hiiragi283/lib/registry/HTDeferredFluidType.kt @@ -1,7 +1,5 @@ package hiiragi283.lib.registry -import hiiragi283.lib.text.HTHasText -import hiiragi283.lib.text.HTHasTranslationKey import hiiragi283.lib.text.Text import net.minecraft.resources.Identifier import net.minecraft.resources.ResourceKey @@ -21,10 +19,7 @@ typealias HTSimpleDeferredFluidType = HTDeferredFluidType * @author Hiiragi Tsubasa * @since 26.1.0 */ -class HTDeferredFluidType : - HTDeferredHolder, - HTHasTranslationKey, - HTHasText { +class HTDeferredFluidType : HTDeferredHolder.Translatable { constructor(key: ResourceKey) : super(key) constructor(id: Identifier) : super(NeoForgeRegistries.Keys.FLUID_TYPES, id) diff --git a/src/lib/kotlin/hiiragi283/lib/registry/HTDeferredHolder.kt b/src/lib/kotlin/hiiragi283/lib/registry/HTDeferredHolder.kt index 8997c70ece..fbca13f4fe 100644 --- a/src/lib/kotlin/hiiragi283/lib/registry/HTDeferredHolder.kt +++ b/src/lib/kotlin/hiiragi283/lib/registry/HTDeferredHolder.kt @@ -1,8 +1,9 @@ package hiiragi283.lib.registry import hiiragi283.lib.resource.HTValueWithKey -import hiiragi283.lib.util.Ior -import hiiragi283.lib.util.fold +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 @@ -34,7 +35,34 @@ open class HTDeferredHolder : */ fun isOf(instance: TypedInstance): Boolean = this.isBound && instance.`is`(this) - final override fun unwrapWithKey(): Ior, T> = asOptional().fold({ - Ior.Left(this.key) - }, { Ior.Both(this.key, it) }) + /** + * @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 val keyOrNull: ResourceKey get() = this.key + + final override fun getOrNull(): T? = when (this.isBound) { + true -> get() + false -> null + } + + /** + * @param R レジストリの要素のクラス + * @param T 要素のクラス + * @author Hiiragi Tsubasa + * @since 26.1.8 + */ + open class Translatable : + HTDeferredHolder, + HTHasText.Translatable { + constructor(key: ResourceKey) : super(key) + + constructor(key: RegistryKey, id: Identifier) : super(key, id) + + override val translationKey: String = key.toLanguageKey() + } } diff --git a/src/lib/kotlin/hiiragi283/lib/registry/HTDeferredItem.kt b/src/lib/kotlin/hiiragi283/lib/registry/HTDeferredItem.kt index 13b46717c6..95098c44b3 100644 --- a/src/lib/kotlin/hiiragi283/lib/registry/HTDeferredItem.kt +++ b/src/lib/kotlin/hiiragi283/lib/registry/HTDeferredItem.kt @@ -1,8 +1,6 @@ package hiiragi283.lib.registry import hiiragi283.lib.item.HTItemInstanceLike -import hiiragi283.lib.text.HTHasText -import hiiragi283.lib.text.HTHasTranslationKey import hiiragi283.lib.text.Text import net.minecraft.core.component.DataComponentPatch import net.minecraft.core.registries.Registries @@ -12,7 +10,6 @@ import net.minecraft.world.item.Item import net.minecraft.world.item.ItemStack import net.minecraft.world.item.ItemStackTemplate import net.minecraft.world.level.ItemLike -import kotlin.jvm.optionals.getOrNull /** * シンプルな[HTDeferredItem]のエイリアスです。 @@ -28,9 +25,7 @@ typealias HTSimpleDeferredItem = HTDeferredItem * @since 26.1.0 */ class HTDeferredItem : - HTDeferredHolder, - HTHasTranslationKey, - HTHasText, + HTDeferredHolder.Translatable, ItemLike, HTItemInstanceLike { constructor(key: ResourceKey) : super(key) @@ -43,9 +38,10 @@ class HTDeferredItem : override fun asItem(): ITEM = get() - override fun toTemplate(count: Int, patch: DataComponentPatch): ItemStackTemplate? = asOptional().map { - ItemStackTemplate(it, count, patch) - }.getOrNull() + 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) diff --git a/src/lib/kotlin/hiiragi283/lib/registry/HTDeferredMobEffect.kt b/src/lib/kotlin/hiiragi283/lib/registry/HTDeferredMobEffect.kt index af4d3bb278..ee6b74f98c 100644 --- a/src/lib/kotlin/hiiragi283/lib/registry/HTDeferredMobEffect.kt +++ b/src/lib/kotlin/hiiragi283/lib/registry/HTDeferredMobEffect.kt @@ -1,7 +1,5 @@ package hiiragi283.lib.registry -import hiiragi283.lib.text.HTHasText -import hiiragi283.lib.text.HTHasTranslationKey import hiiragi283.lib.text.Text import net.minecraft.core.registries.Registries import net.minecraft.resources.Identifier @@ -14,10 +12,7 @@ import net.minecraft.world.effect.MobEffect * @author Hiiragi Tsubasa * @since 26.1.0 */ -class HTDeferredMobEffect : - HTDeferredHolder, - HTHasTranslationKey, - HTHasText { +class HTDeferredMobEffect : HTDeferredHolder.Translatable { constructor(key: ResourceKey) : super(key) constructor(id: Identifier) : super(Registries.MOB_EFFECT, id) diff --git a/src/lib/kotlin/hiiragi283/lib/registry/HTDeferredRegister.kt b/src/lib/kotlin/hiiragi283/lib/registry/HTDeferredRegister.kt index d6d5185560..c9fef5c3ee 100644 --- a/src/lib/kotlin/hiiragi283/lib/registry/HTDeferredRegister.kt +++ b/src/lib/kotlin/hiiragi283/lib/registry/HTDeferredRegister.kt @@ -48,4 +48,30 @@ open class HTDeferredRegister(registryKey: RegistryKey, namespace: S override fun register(name: String, func: Function): HTDeferredHolder = super.register(name, func) as HTDeferredHolder + + /** + * @param R レジストリの要素のクラス + * @param registryKey レジストリのキー + * @param namespace 登録する値の名前空間 + * @author Hiiragi Tsubasa + * @since 26.1.8 + */ + open class Translatable(registryKey: RegistryKey, namespace: String) : + HTDeferredRegister(registryKey, namespace) { + override fun createHolder( + registryKey: RegistryKey, + key: Identifier + ): HTDeferredHolder.Translatable = HTDeferredHolder.Translatable(registryKey, key) + + override fun register(name: String, sup: Supplier): HTDeferredHolder.Translatable = + super.register(name, sup) as HTDeferredHolder.Translatable + + override fun register( + name: String, + func: Function + ): HTDeferredHolder.Translatable = super.register(name, func) as HTDeferredHolder.Translatable + + override fun asSequence(): Sequence> = + super.asSequence().filterIsInstance>() + } } diff --git a/src/lib/kotlin/hiiragi283/lib/registry/HTFluidContent.kt b/src/lib/kotlin/hiiragi283/lib/registry/HTFluidContent.kt index bc0fc653cc..b58d04898a 100644 --- a/src/lib/kotlin/hiiragi283/lib/registry/HTFluidContent.kt +++ b/src/lib/kotlin/hiiragi283/lib/registry/HTFluidContent.kt @@ -44,8 +44,10 @@ sealed class HTFluidContent( /** * 新しい[FluidStackTemplate]のインスタンスを作成します。 */ - override fun toTemplate(amount: Int, patch: DataComponentPatch): FluidStackTemplate? = - sourceHolder.getOrNull()?.let { FluidStackTemplate(it, amount, patch) } + override fun toTemplate(amount: Int, patch: DataComponentPatch): FluidStackTemplate? = when { + sourceHolder.isEmpty -> null + else -> sourceHolder.asEither().map { FluidStackTemplate(it, amount, patch) }.getOrNull() + } /** * 新しい[FluidStack]のインスタンスを作成します。 diff --git a/src/lib/kotlin/hiiragi283/lib/resource/HTValueAndKey.kt b/src/lib/kotlin/hiiragi283/lib/resource/HTValueAndKey.kt deleted file mode 100644 index c0836be2c7..0000000000 --- a/src/lib/kotlin/hiiragi283/lib/resource/HTValueAndKey.kt +++ /dev/null @@ -1,20 +0,0 @@ -package hiiragi283.lib.resource - -import hiiragi283.lib.util.Ior -import net.minecraft.resources.ResourceKey - -/** - * 常にキーと値を持つ[HTValueWithKey]の実装クラスです。 - * @param R レジストリの値のクラス - * @param T 提供する値のクラス - * @author Hiiragi Tsubasa - * @since 26.1.7 - */ -@JvmRecord -data class HTValueAndKey(val key: ResourceKey, val value: T) : HTValueWithKey { - override fun unwrapWithKey(): Ior, T> = Ior.Both(key, value) - - override val keyOrNull: ResourceKey get() = key - - override fun getOrNull(): T = value -} diff --git a/src/lib/kotlin/hiiragi283/lib/resource/HTValueWithId.kt b/src/lib/kotlin/hiiragi283/lib/resource/HTValueWithId.kt deleted file mode 100644 index 13e40d6d69..0000000000 --- a/src/lib/kotlin/hiiragi283/lib/resource/HTValueWithId.kt +++ /dev/null @@ -1,39 +0,0 @@ -package hiiragi283.lib.resource - -import hiiragi283.lib.util.Ior -import net.minecraft.resources.Identifier - -/** - * [ID][Identifier]または値を提供するインターフェースです。 - * @param T 提供する値のクラス - * @author Hiiragi Tsubasa - * @since 26.1.2 - */ -fun interface HTValueWithId { - /** - * 保持している値を[Ior]に変換します。 - */ - fun unwrapWithId(): Ior - - /** - * [ID][Identifier]を取得します。 - */ - val idOrNull: Identifier? get() = unwrapWithId().getLeft() - - /** - * [ID][Identifier]を取得します。 - * @throws IllegalStateException [idOrNull]が`null`の場合 - */ - val idOrThrow: Identifier get() = idOrNull ?: error("Unknown id for ${getOrThrow()}") - - /** - * 値を取得します。 - */ - fun getOrNull(): T? = unwrapWithId().getRight() - - /** - * 値を取得します。 - * @throws IllegalStateException [getOrNull]が`null`の場合 - */ - fun getOrThrow(): T = getOrNull() ?: error("Unknown value for $idOrThrow") -} diff --git a/src/lib/kotlin/hiiragi283/lib/resource/HTValueWithKey.kt b/src/lib/kotlin/hiiragi283/lib/resource/HTValueWithKey.kt index 6169725844..edec5195c7 100644 --- a/src/lib/kotlin/hiiragi283/lib/resource/HTValueWithKey.kt +++ b/src/lib/kotlin/hiiragi283/lib/resource/HTValueWithKey.kt @@ -1,6 +1,5 @@ package hiiragi283.lib.resource -import hiiragi283.lib.util.Ior import net.minecraft.resources.Identifier import net.minecraft.resources.ResourceKey @@ -13,22 +12,17 @@ import net.minecraft.resources.ResourceKey typealias HTSimpleValueWithKey = HTValueWithKey /** - * [ID][ResourceKey]または値を提供する[HTValueWithId]の拡張インターフェースです。 + * [ID][ResourceKey]または値を提供するインターフェースです。 * @param R レジストリの値のクラス * @param T 提供する値のクラス * @author Hiiragi Tsubasa * @since 26.1.2 */ -fun interface HTValueWithKey : HTValueWithId { - /** - * 保持している値を[Ior]に変換します。 - */ - fun unwrapWithKey(): Ior, T> - +interface HTValueWithKey { /** * [ID][ResourceKey]を取得します。 */ - val keyOrNull: ResourceKey? get() = unwrapWithKey().getLeft() + val keyOrNull: ResourceKey? /** * [ID][ResourceKey]を取得します。 @@ -36,5 +30,25 @@ fun interface HTValueWithKey : HTValueWithId { */ val keyOrThrow: ResourceKey get() = keyOrNull ?: error("Unregistered value for ${getOrThrow()}") - override fun unwrapWithId(): Ior = unwrapWithKey().mapLeft(ResourceKey::identifier) + /** + * [ID][Identifier]を取得します。 + */ + val idOrNull: Identifier? get() = keyOrNull?.identifier() + + /** + * [ID][Identifier]を取得します。 + * @throws IllegalStateException [idOrNull]が`null`の場合 + */ + val idOrThrow: Identifier get() = idOrNull ?: error("Unknown id for ${getOrThrow()}") + + /** + * 値を取得します。 + */ + fun getOrNull(): T? + + /** + * 値を取得します。 + * @throws IllegalStateException [getOrNull]が`null`の場合 + */ + fun getOrThrow(): T = getOrNull() ?: error("Unknown value for $idOrThrow") } diff --git a/src/lib/kotlin/hiiragi283/lib/tag/HTCommonTags.kt b/src/lib/kotlin/hiiragi283/lib/tag/HTCommonTags.kt index c265ff06e1..00b7526a6a 100644 --- a/src/lib/kotlin/hiiragi283/lib/tag/HTCommonTags.kt +++ b/src/lib/kotlin/hiiragi283/lib/tag/HTCommonTags.kt @@ -16,6 +16,21 @@ import net.minecraft.world.level.material.Fluid * @since 26.1.0 */ data object HTCommonTags { + /** + * @author Hiiragi Tsubasa + * @since 26.1.8 + */ + data object BlockItems { + @JvmField + val GLASS_BLOCKS_QUARTZ: BlockItemTag = create("glass_blocks", "quartz") + + @JvmField + val GLASS_PANES_QUARTZ: BlockItemTag = create("glass_panes", "quartz") + + @JvmStatic + private fun create(vararg path: String): BlockItemTag = BlockItemTag(HTConstants.COMMON.toId(*path)) + } + data object Blocks { @JvmStatic private fun create(vararg path: String): TagKey = BlockTags.create(HTConstants.COMMON.toId(*path)) @@ -57,9 +72,6 @@ data object HTCommonTags { @JvmField val SILICON: TagKey = create("silicon") - @JvmField - val STICKY_BALLS: TagKey = create("sticky_balls") - @JvmStatic private fun create(vararg path: String): TagKey = ItemTags.create(HTConstants.COMMON.toId(*path)) } diff --git a/src/lib/kotlin/hiiragi283/lib/transfer/ExtendedResourceHandler.kt b/src/lib/kotlin/hiiragi283/lib/transfer/ExtendedResourceHandler.kt new file mode 100644 index 0000000000..e90060bc3a --- /dev/null +++ b/src/lib/kotlin/hiiragi283/lib/transfer/ExtendedResourceHandler.kt @@ -0,0 +1,22 @@ +package hiiragi283.lib.transfer + +import net.neoforged.neoforge.transfer.ResourceHandler +import net.neoforged.neoforge.transfer.resource.Resource +import net.neoforged.neoforge.transfer.transaction.TransactionContext + +/** + * Ragiumで使用される[ResourceHandler]の拡張インターフェースです。 + * @author Hiiragi Tsubasa + * @since 26.1.8 + */ +interface ExtendedResourceHandler : ResourceHandler { + fun insert(index: Int, resource: T, amount: Int, transaction: TransactionContext, access: HTTransferAccess): Int + + 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 + + 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/HTResourceHandler.kt b/src/lib/kotlin/hiiragi283/lib/transfer/HTResourceHandler.kt index 2a68161b2a..7c07b7a0b6 100644 --- a/src/lib/kotlin/hiiragi283/lib/transfer/HTResourceHandler.kt +++ b/src/lib/kotlin/hiiragi283/lib/transfer/HTResourceHandler.kt @@ -1,10 +1,9 @@ package hiiragi283.lib.transfer -import net.neoforged.neoforge.transfer.ResourceHandler import net.neoforged.neoforge.transfer.resource.Resource import net.neoforged.neoforge.transfer.transaction.TransactionContext -class HTResourceHandler(val slots: List>) : ResourceHandler { +class HTResourceHandler(val slots: List>) : ExtendedResourceHandler { fun getSlot(index: Int): HTResourceSlot = slots[index] override fun size(): Int = slots.size @@ -23,9 +22,19 @@ class HTResourceHandler(val slots: List>) : Reso override fun isValid(index: Int, resource: T): Boolean = getSlot(index).isValid(resource) - override fun insert(index: Int, resource: T, amount: Int, transaction: TransactionContext): Int = - getSlot(index).insert(resource, amount, transaction, HTTransferAccess.EXTERNAL) - - override fun extract(index: Int, resource: T, amount: Int, transaction: TransactionContext): Int = - getSlot(index).extract(resource, amount, transaction, HTTransferAccess.EXTERNAL) + override fun insert( + index: Int, + resource: T, + amount: Int, + transaction: TransactionContext, + access: HTTransferAccess + ): Int = getSlot(index).insert(resource, amount, transaction, access) + + override fun extract( + index: Int, + resource: T, + amount: Int, + transaction: TransactionContext, + access: HTTransferAccess + ): Int = getSlot(index).extract(resource, amount, transaction, access) } diff --git a/src/lib/kotlin/hiiragi283/lib/transfer/fluid/HTBasicFluidTank.kt b/src/lib/kotlin/hiiragi283/lib/transfer/fluid/HTBasicFluidTank.kt index 0e49b5936a..3b7276d938 100644 --- a/src/lib/kotlin/hiiragi283/lib/transfer/fluid/HTBasicFluidTank.kt +++ b/src/lib/kotlin/hiiragi283/lib/transfer/fluid/HTBasicFluidTank.kt @@ -36,9 +36,13 @@ open class HTBasicFluidTank( listener: Runnable?, canInsert: Predicate = HTTransferPredicates.alwaysTrue(), filter: Predicate = canInsert - ): HTBasicFluidTank = create(capacity, listener, HTTransferPredicates.notExternal(), { resource, _ -> - canInsert.test(resource) - }, filter) + ): HTBasicFluidTank = create( + capacity, + listener, + HTTransferPredicates.notExternal(), + { resource: FluidResource, _ -> canInsert.test(resource) }, + filter + ) @JvmStatic fun output(capacity: Int, listener: Runnable?): HTBasicFluidTank = diff --git a/src/lib/kotlin/hiiragi283/lib/transfer/fluid/HTItemAccessFluidHandler.kt b/src/lib/kotlin/hiiragi283/lib/transfer/fluid/HTItemAccessFluidHandler.kt new file mode 100644 index 0000000000..35e7e5d156 --- /dev/null +++ b/src/lib/kotlin/hiiragi283/lib/transfer/fluid/HTItemAccessFluidHandler.kt @@ -0,0 +1,86 @@ +package hiiragi283.lib.transfer.fluid + +import hiiragi283.lib.transfer.ExtendedResourceHandler +import hiiragi283.lib.transfer.HTTransferAccess +import hiiragi283.lib.transfer.HTTransferPredicates +import hiiragi283.ragium.api.data.RagiumDataComponents +import net.neoforged.neoforge.transfer.access.ItemAccess +import net.neoforged.neoforge.transfer.fluid.FluidResource +import net.neoforged.neoforge.transfer.fluid.ItemAccessFluidHandler +import net.neoforged.neoforge.transfer.transaction.TransactionContext +import java.util.function.BiPredicate +import java.util.function.Predicate + +/** + * Ragiumで使用される[ItemAccessFluidHandler]の拡張クラスです。 + * @author Hiiragi Tsubasa + * @since 26.1.8 + */ +class HTItemAccessFluidHandler( + itemAccess: ItemAccess, + capacity: Int, + private val canExtract: BiPredicate, + private val canInsert: BiPredicate, + private val filter: Predicate +) : ItemAccessFluidHandler(itemAccess, RagiumDataComponents.FLUID, capacity), + ExtendedResourceHandler { + companion object { + @JvmStatic + fun create( + itemAccess: ItemAccess, + capacity: Int, + canExtract: BiPredicate = HTTransferPredicates.alwaysTrueBi(), + canInsert: BiPredicate = HTTransferPredicates.alwaysTrueBi(), + filter: Predicate = HTTransferPredicates.alwaysTrue() + ): HTItemAccessFluidHandler = HTItemAccessFluidHandler(itemAccess, capacity, canExtract, canInsert, filter) + + @JvmStatic + fun input( + itemAccess: ItemAccess, + capacity: Int, + canInsert: Predicate = HTTransferPredicates.alwaysTrue(), + filter: Predicate = canInsert + ): HTItemAccessFluidHandler = create( + itemAccess, + capacity, + HTTransferPredicates.notExternal(), + { resource: FluidResource, _ -> canInsert.test(resource) }, + filter + ) + + @JvmStatic + fun output(itemAccess: ItemAccess, capacity: Int): HTItemAccessFluidHandler = + create(itemAccess, capacity, canInsert = HTTransferPredicates.internalOnly()) + } + + override fun insert( + index: Int, + resource: FluidResource, + amount: Int, + transaction: TransactionContext, + access: HTTransferAccess + ): Int = when { + canInsert.test(resource, access) -> super.insert(index, resource, amount, transaction) + else -> 0 + } + + override fun extract( + index: Int, + resource: FluidResource, + amount: Int, + transaction: TransactionContext, + access: HTTransferAccess + ): Int = when { + canExtract.test(resource, access) -> super.extract(index, resource, amount, transaction) + else -> 0 + } + + override fun isValid(index: Int, resource: FluidResource): Boolean = + super.isValid(index, resource) && filter.test(resource) + + override fun insert(index: Int, resource: FluidResource, amount: Int, transaction: TransactionContext): Int = + this.insert(index, resource, amount, transaction, HTTransferAccess.EXTERNAL) + + override fun extract(index: Int, resource: FluidResource, amount: Int, transaction: TransactionContext): Int = + this.extract(index, resource, amount, transaction, HTTransferAccess.EXTERNAL) +} diff --git a/src/lib/kotlin/hiiragi283/lib/util/Ior.kt b/src/lib/kotlin/hiiragi283/lib/util/Ior.kt index a0ace97ea3..b1790f96b4 100644 --- a/src/lib/kotlin/hiiragi283/lib/util/Ior.kt +++ b/src/lib/kotlin/hiiragi283/lib/util/Ior.kt @@ -2,6 +2,8 @@ package hiiragi283.lib.util +import hiiragi283.lib.collection.Nel +import hiiragi283.lib.collection.nel import java.util.Optional import kotlin.contracts.ExperimentalContracts import kotlin.contracts.InvocationKind @@ -214,3 +216,52 @@ sealed class Ior { */ data class Both(val leftValue: A, val rightValue: B) : Ior() } + +// Extensions // + +/** + * @author Hiiragi Tsubasa + * @since 26.1.8 + */ +inline fun Ior.getOrElse(default: (A) -> B): B { + contract { + callsInPlace(default, InvocationKind.AT_MOST_ONCE) + } + return when (this) { + is Ior.Both -> this.rightValue + is Ior.Left -> default(this.value) + is Ior.Right -> this.value + } +} + +/** + * @author Hiiragi Tsubasa + * @since 26.1.8 + */ +fun Pair.bothIor(): Ior = Ior.Both(this.first, this.second) + +/** + * @author Hiiragi Tsubasa + * @since 26.1.8 + */ +fun A.leftIor(): Ior = Ior.Left(this) + +/** + * @author Hiiragi Tsubasa + * @since 26.1.8 + */ +fun A.rightIor(): Ior = Ior.Right(this) + +// IorNel + +/** + * @author Hiiragi Tsubasa + * @since 26.1.8 + */ +typealias IorNel = Ior, A> + +/** + * @author Hiiragi Tsubasa + * @since 26.1.8 + */ +fun Ior.toIorNel(): IorNel = this.mapLeft { it.nel() } diff --git a/src/lib/kotlin/hiiragi283/ragium/api/RagiumConfig.kt b/src/lib/kotlin/hiiragi283/ragium/api/RagiumConfig.kt index cdf93d6091..2a19135956 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/RagiumConfig.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/RagiumConfig.kt @@ -114,15 +114,15 @@ data object RagiumConfig { @JvmField val melter: HTEnergyConfig = - HTEnergyConfig.createMachine(builder, RagiumConstants.MELTER) + HTEnergyConfig.createMachine(builder, RagiumConstants.MELTER, 64) @JvmField val pyrolyzer: HTEnergyConfig = - HTEnergyConfig.createMachine(builder, RagiumConstants.PYROLYZER) + HTEnergyConfig.createMachine(builder, RagiumConstants.PYROLYZER, 32) @JvmField val refinery: HTEnergyConfig = - HTEnergyConfig.createMachine(builder, RagiumConstants.REFINERY) + HTEnergyConfig.createMachine(builder, RagiumConstants.REFINERY, 32) @JvmField val smelter: HTEnergyConfig = @@ -137,10 +137,6 @@ data object RagiumConfig { val chemicalReactor: HTEnergyConfig = HTEnergyConfig.createMachine(builder, RagiumConstants.CHEMICAL_REACTOR) - @JvmField - val electrolyzer: HTEnergyConfig = - HTEnergyConfig.createMachine(builder, RagiumConstants.ELECTROLYZER) - @JvmField val mixer: HTEnergyConfig = HTEnergyConfig.createMachine(builder, RagiumConstants.MIXER) @@ -155,6 +151,10 @@ data object RagiumConfig { HTEnergyConfig.createMachine(builder, RagiumConstants.PLANTER) // Electronics + @JvmField + val electrolyzer: HTEnergyConfig = + HTEnergyConfig.createMachine(builder, RagiumConstants.ELECTROLYZER, 64) + @JvmField val precisionAssembler: HTEnergyConfig = HTEnergyConfig.createMachine(builder, RagiumConstants.PRECISION_ASSEMBLER, 64) diff --git a/src/lib/kotlin/hiiragi283/ragium/api/RagiumConstants.kt b/src/lib/kotlin/hiiragi283/ragium/api/RagiumConstants.kt index 2016b67c66..f094c63515 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/RagiumConstants.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/RagiumConstants.kt @@ -23,16 +23,18 @@ 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 ELECTROLYZER = "electrolyzer" const val MIXER = "mixer" + const val WASHER = "washer" // Bio const val BREWERY = "brewery" const val PLANTER = "planter" // Electronics + const val ELECTROLYZER = "electrolyzer" const val PRECISION_ASSEMBLER = "precision_assembler" const val SCANNER = "scanner" @@ -60,15 +62,17 @@ data object RagiumConstants { // Chemical const val BATHING = "bathing" - const val ELECTROLYZING = "electrolyzing" + const val CENTRIFUGING = "centrifuging" const val MIXING = "mixing" const val REACTING = "reacting" + const val WASHING = "washing" // Bio const val BREWING = "brewing" const val PLANTING = "planting" // Electronics + const val ELECTROLYZING = "electrolyzing" const val PRINTING = "printing" const val RESOURCE_EXTRACTING = "resource/extracting" diff --git a/src/lib/kotlin/hiiragi283/ragium/api/RagiumRegistries.kt b/src/lib/kotlin/hiiragi283/ragium/api/RagiumRegistries.kt index 1957aa97be..ff557a8232 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/RagiumRegistries.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/RagiumRegistries.kt @@ -1,11 +1,13 @@ package hiiragi283.ragium.api +import hiiragi283.lib.HTConstants import hiiragi283.lib.gui.sync.HTSyncablePayload import hiiragi283.lib.gui.widget.HTWidgetType import hiiragi283.lib.recipe.result.HTFluidResultType import hiiragi283.lib.recipe.result.HTItemResultType import hiiragi283.lib.resource.toId -import hiiragi283.ragium.api.data.oreSlurry.HTOreSlurryData +import hiiragi283.ragium.api.data.chemical.HTChemical +import hiiragi283.ragium.api.data.element.HTElement import net.minecraft.core.Registry import net.minecraft.resources.ResourceKey import net.neoforged.bus.api.SubscribeEvent @@ -21,6 +23,12 @@ import net.neoforged.neoforge.registries.RegistryBuilder */ @EventBusSubscriber data object RagiumRegistries { + /** + * @since 26.1.8 + */ + @JvmField + val CHEMICAL_TYPE: Registry> = createRegistry(Keys.CHEMICAL_TYPE) + @JvmField val FLUID_RESULT_TYPE: Registry> = createRegistry(Keys.FLUID_RESULT_TYPE) @@ -35,6 +43,7 @@ data object RagiumRegistries { @SubscribeEvent fun registerNewRegistry(event: NewRegistryEvent) { + event.register(CHEMICAL_TYPE) event.register(FLUID_RESULT_TYPE) event.register(ITEM_RESULT_TYPE) event.register(SYNCABLE_SLOT_TYPE) @@ -44,9 +53,14 @@ data object RagiumRegistries { @SubscribeEvent fun registerDynamicRegistries(event: DataPackRegistryEvent.NewRegistry) { event.dataPackRegistry( - Keys.ORE_SLURRY_DATA, - HTOreSlurryData.DIRECT_CODEC, - HTOreSlurryData.DIRECT_CODEC + Keys.CHEMICAL, + HTChemical.DISPATCH_CODEC, + HTChemical.DISPATCH_CODEC + ) + event.dataPackRegistry( + Keys.ELEMENT, + HTElement.DIRECT_CODEC, + HTElement.DIRECT_CODEC ) } @@ -61,6 +75,12 @@ data object RagiumRegistries { */ data object Keys { // Static + /** + * @since 26.1.8 + */ + @JvmField + val CHEMICAL_TYPE: ResourceKey>> = createKey("chemical_type") + @JvmField val FLUID_RESULT_TYPE: ResourceKey>> = createKey("fluid_result_type") @@ -76,10 +96,16 @@ data object RagiumRegistries { // Dynamic /** - * @since 26.1.5 + * @since 26.1.8 + */ + @JvmField + val CHEMICAL: ResourceKey> = createKey(HTConstants.CHEMICAL) + + /** + * @since 26.1.8 */ @JvmField - val ORE_SLURRY_DATA: ResourceKey> = createKey("ore_slurry_data") + val ELEMENT: ResourceKey> = createKey(HTConstants.ELEMENT) @JvmStatic private fun createKey(path: String): ResourceKey> = diff --git a/src/lib/kotlin/hiiragi283/ragium/api/data/RagiumDataComponents.kt b/src/lib/kotlin/hiiragi283/ragium/api/data/RagiumDataComponents.kt index ac165d95e4..02c84c37c5 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/data/RagiumDataComponents.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/data/RagiumDataComponents.kt @@ -3,7 +3,7 @@ package hiiragi283.ragium.api.data import hiiragi283.lib.data.DataComponentType import hiiragi283.lib.serialization.codec.HTCodecs import hiiragi283.lib.serialization.network.HTStreamCodecs -import hiiragi283.ragium.api.data.oreSlurry.HTOreSlurryData +import hiiragi283.ragium.api.data.chemical.HTChemical import net.minecraft.core.Holder import net.minecraft.core.component.DataComponentType import net.minecraft.network.codec.ByteBufCodecs @@ -17,7 +17,13 @@ import java.util.UUID * @since 26.1.0 */ data object RagiumDataComponents { - // Item Stack + /** + * @since 26.1.8 + */ + @JvmField + val CHEMICAL: DataComponentType> = + DataComponentType(HTChemical.HOLDER_CODEC, HTChemical.HOLDER_STREAM_CODEC) + @JvmField val ENERGY: DataComponentType = DataComponentType(HTCodecs.NON_NEGATIVE_INT, ByteBufCodecs.VAR_INT) @@ -31,13 +37,6 @@ data object RagiumDataComponents { ItemStackTemplate.STREAM_CODEC ) - /** - * @since 26.1.5 - */ - @JvmField - val ORE_SLURRY_DATA: DataComponentType> = - DataComponentType(HTOreSlurryData.CODEC, HTOreSlurryData.STREAM_CODEC) - /** * @since 26.1.7 */ diff --git a/src/lib/kotlin/hiiragi283/ragium/api/data/chemical/HTChemical.kt b/src/lib/kotlin/hiiragi283/ragium/api/data/chemical/HTChemical.kt new file mode 100644 index 0000000000..2ee2134bd6 --- /dev/null +++ b/src/lib/kotlin/hiiragi283/ragium/api/data/chemical/HTChemical.kt @@ -0,0 +1,69 @@ +package hiiragi283.ragium.api.data.chemical + +import com.mojang.serialization.Codec +import com.mojang.serialization.MapCodec +import hiiragi283.lib.serialization.codec.HTCodecs +import hiiragi283.lib.serialization.network.HTStreamCodecs +import hiiragi283.lib.text.HTHasText +import hiiragi283.lib.text.MutableText +import hiiragi283.lib.text.toText +import hiiragi283.ragium.api.RagiumRegistries +import net.minecraft.core.Holder +import net.minecraft.network.RegistryFriendlyByteBuf +import net.minecraft.network.codec.ByteBufCodecs +import net.minecraft.network.codec.StreamCodec + +/** + * 化学物質を表すクラスです。 + * @author Hiiragi Tsubasa + * @since 26.1.8 + */ +interface HTChemical : HTHasText { + companion object { + @JvmField + val DISPATCH_CODEC: Codec = + RagiumRegistries.CHEMICAL_TYPE.byNameCodec().dispatch(HTChemical::type, Type<*>::codec) + + @JvmField + val HOLDER_CODEC: Codec> = HTCodecs.holder(RagiumRegistries.Keys.CHEMICAL, DISPATCH_CODEC) + + @JvmField + val DISPATCH_STREAM_CODEC: StreamCodec = + ByteBufCodecs.registry(RagiumRegistries.Keys.CHEMICAL_TYPE).dispatch(HTChemical::type, Type<*>::streamCodec) + + @JvmField + val HOLDER_STREAM_CODEC: StreamCodec> = + HTStreamCodecs.holder(RagiumRegistries.Keys.CHEMICAL, DISPATCH_STREAM_CODEC) + + @JvmField + val WEIGHT_CODEC: MapCodec = Codec.intRange(1, 99).optionalFieldOf("weight", 1) + + @JvmStatic + fun format(weight: Int): String = when { + //値が1の場合はパス + weight <= 1 -> "" + + else -> buildString { + //化学式の下付き数字の桁数調整 + val subscript1: Char = '\u2080' + (weight % 10) + val subscript10: Char = '\u2080' + (weight / 10) + //2桁目が0でない場合,下付き数字を2桁にする + this.append( + buildString { + if (subscript10 != '\u2080') this.append(subscript10) + this.append(subscript1) + } + ) + } + } + } + + fun type(): Type + + fun getChemicalFormula(): String + + override fun getText(): MutableText = this.getChemicalFormula().toText() + + @JvmRecord + data class Type(val codec: MapCodec, val streamCodec: StreamCodec) +} diff --git a/src/lib/kotlin/hiiragi283/ragium/api/data/chemical/HTCompoundChemical.kt b/src/lib/kotlin/hiiragi283/ragium/api/data/chemical/HTCompoundChemical.kt new file mode 100644 index 0000000000..96cb9e2b29 --- /dev/null +++ b/src/lib/kotlin/hiiragi283/ragium/api/data/chemical/HTCompoundChemical.kt @@ -0,0 +1,115 @@ +@file:OptIn(ExperimentalContracts::class) + +package hiiragi283.ragium.api.data.chemical + +import com.mojang.serialization.MapCodec +import hiiragi283.lib.HTConstants +import hiiragi283.lib.collection.Nel +import hiiragi283.lib.collection.toNel +import hiiragi283.lib.serialization.codec.HTCodecs +import hiiragi283.lib.serialization.codec.nelOrElement +import hiiragi283.lib.serialization.network.HTStreamCodecs +import hiiragi283.lib.serialization.network.nelOf +import hiiragi283.lib.util.Either +import hiiragi283.ragium.api.RagiumRegistries +import hiiragi283.ragium.api.data.element.HTElement +import it.unimi.dsi.fastutil.objects.ObjectArrayList +import net.minecraft.core.Holder +import net.minecraft.core.HolderGetter +import net.minecraft.data.worldgen.BootstrapContext +import net.minecraft.network.RegistryFriendlyByteBuf +import net.minecraft.network.codec.ByteBufCodecs +import net.minecraft.network.codec.StreamCodec +import net.minecraft.resources.ResourceKey +import kotlin.contracts.ExperimentalContracts +import kotlin.contracts.InvocationKind +import kotlin.contracts.contract + +/** + * 化合物を表す[HTChemical]の実装クラスです。 + * @author Hiiragi Tsubasa + * @since 26.1.8 + */ +@JvmRecord +data class HTCompoundChemical(val composition: Nel, Holder>, Int>>) : + HTChemical { + companion object { + @JvmField + val CODEC: MapCodec = HTCodecs.mapPair( + HTCodecs.mapEither( + HTChemical.HOLDER_CODEC.fieldOf(HTConstants.CHEMICAL), + HTElement.HOLDER_CODEC.fieldOf(HTConstants.ELEMENT) + ), + HTChemical.WEIGHT_CODEC + ).codec().nelOrElement().fieldOf("composition").xmap(::HTCompoundChemical, HTCompoundChemical::composition) + + @JvmField + val STREAM_CODEC: StreamCodec = StreamCodec.composite( + HTStreamCodecs.pair( + HTStreamCodecs.either(HTChemical.HOLDER_STREAM_CODEC, HTElement.HOLDER_STREAM_CODEC), + ByteBufCodecs.VAR_INT + ).nelOf(), + HTCompoundChemical::composition, + ::HTCompoundChemical + ) + + @JvmField + val TYPE: HTChemical.Type = HTChemical.Type(CODEC, STREAM_CODEC) + + @JvmStatic + inline fun build(context: BootstrapContext<*>, builderAction: Builder.() -> Unit): HTCompoundChemical { + contract { + callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) + } + return Builder(context).apply(builderAction).build() + } + } + + override fun type(): HTChemical.Type = TYPE + + override fun getChemicalFormula(): String = composition.joinToString( + separator = "", + transform = { (either: Either, Holder>, weight: Int) -> + buildString { + append( + either.fold( + { chemical: Holder -> + val formula: String = chemical.value().getChemicalFormula() + when { + weight > 1 -> "($formula)" + else -> formula + } + }, + { element: Holder -> element.value().symbol } + ) + ) + append(HTChemical.format(weight)) + } + } + ) + + class Builder( + private val chemicalGetter: HolderGetter, + private val elementGetter: HolderGetter + ) { + constructor(context: BootstrapContext<*>) : this( + context.lookup(RagiumRegistries.Keys.CHEMICAL), + context.lookup(RagiumRegistries.Keys.ELEMENT) + ) + + private val composition: MutableList, Holder>, Int>> = + ObjectArrayList() + + @JvmName("addChemical") + fun add(chemical: ResourceKey, weight: Int): Builder = apply { + composition += Either.Left(chemicalGetter.getOrThrow(chemical)) to weight + } + + @JvmName("addElement") + fun add(element: ResourceKey, weight: Int): Builder = apply { + composition += Either.Right(elementGetter.getOrThrow(element)) to weight + } + + fun build(): HTCompoundChemical = HTCompoundChemical(composition.toNel()) + } +} diff --git a/src/lib/kotlin/hiiragi283/ragium/api/data/chemical/HTMixtureChemical.kt b/src/lib/kotlin/hiiragi283/ragium/api/data/chemical/HTMixtureChemical.kt new file mode 100644 index 0000000000..a413c80b76 --- /dev/null +++ b/src/lib/kotlin/hiiragi283/ragium/api/data/chemical/HTMixtureChemical.kt @@ -0,0 +1,36 @@ +package hiiragi283.ragium.api.data.chemical + +import com.mojang.serialization.MapCodec +import hiiragi283.lib.collection.Nel +import hiiragi283.lib.serialization.codec.compactNelFieldOf +import hiiragi283.lib.serialization.network.nelOf +import hiiragi283.ragium.api.data.element.HTElement +import net.minecraft.core.Holder +import net.minecraft.network.RegistryFriendlyByteBuf +import net.minecraft.network.codec.StreamCodec + +/** + * 混合物を表す[HTChemical]の実装クラスです。 + * @author Hiiragi Tsubasa + * @since 26.1.8 + */ +@JvmRecord +data class HTMixtureChemical(val elements: Nel>) : HTChemical { + companion object { + @JvmField + val CODEC: MapCodec = HTElement.HOLDER_CODEC + .compactNelFieldOf("element", "elements") + .xmap(::HTMixtureChemical, HTMixtureChemical::elements) + + @JvmField + val STREAM_CODEC: StreamCodec = + HTElement.HOLDER_STREAM_CODEC.nelOf().map(::HTMixtureChemical, HTMixtureChemical::elements) + + @JvmField + val TYPE: HTChemical.Type = HTChemical.Type(CODEC, STREAM_CODEC) + } + + override fun type(): HTChemical.Type = TYPE + + override fun getChemicalFormula(): String = elements.joinToString(prefix = "(", postfix = ")") +} diff --git a/src/lib/kotlin/hiiragi283/ragium/api/data/chemical/HTSimpleChemical.kt b/src/lib/kotlin/hiiragi283/ragium/api/data/chemical/HTSimpleChemical.kt new file mode 100644 index 0000000000..b74e43f21a --- /dev/null +++ b/src/lib/kotlin/hiiragi283/ragium/api/data/chemical/HTSimpleChemical.kt @@ -0,0 +1,44 @@ +package hiiragi283.ragium.api.data.chemical + +import com.mojang.serialization.MapCodec +import hiiragi283.lib.HTConstants +import hiiragi283.lib.serialization.codec.HTCodecs +import hiiragi283.ragium.api.data.element.HTElement +import net.minecraft.core.Holder +import net.minecraft.network.RegistryFriendlyByteBuf +import net.minecraft.network.codec.ByteBufCodecs +import net.minecraft.network.codec.StreamCodec + +/** + * 単体を表す[HTChemical]の実装クラスです。 + * @author Hiiragi Tsubasa + * @since 26.1.8 + */ +@JvmRecord +data class HTSimpleChemical(val element: Holder, val weight: Int) : HTChemical { + companion object { + @JvmField + val CODEC: MapCodec = HTCodecs.recordMap { instance -> + instance.group( + HTElement.HOLDER_CODEC.fieldOf(HTConstants.ELEMENT).forGetter(HTSimpleChemical::element), + HTChemical.WEIGHT_CODEC.forGetter(HTSimpleChemical::weight) + ).apply(instance, ::HTSimpleChemical) + } + + @JvmField + val STREAM_CODEC: StreamCodec = StreamCodec.composite( + HTElement.HOLDER_STREAM_CODEC, + HTSimpleChemical::element, + ByteBufCodecs.VAR_INT, + HTSimpleChemical::weight, + ::HTSimpleChemical + ) + + @JvmField + val TYPE: HTChemical.Type = HTChemical.Type(CODEC, STREAM_CODEC) + } + + override fun type(): HTChemical.Type = TYPE + + override fun getChemicalFormula(): String = "${element.value().symbol}${HTChemical.format(weight)}" +} diff --git a/src/lib/kotlin/hiiragi283/ragium/api/data/chemical/RagiumChemicals.kt b/src/lib/kotlin/hiiragi283/ragium/api/data/chemical/RagiumChemicals.kt new file mode 100644 index 0000000000..f4285773bc --- /dev/null +++ b/src/lib/kotlin/hiiragi283/ragium/api/data/chemical/RagiumChemicals.kt @@ -0,0 +1,330 @@ +package hiiragi283.ragium.api.data.chemical + +import hiiragi283.lib.registry.createKey +import hiiragi283.ragium.api.RagiumAPI +import hiiragi283.ragium.api.RagiumRegistries +import hiiragi283.ragium.api.data.element.HTElement +import hiiragi283.ragium.api.data.element.RagiumElements +import net.minecraft.core.HolderGetter +import net.minecraft.data.worldgen.BootstrapContext +import net.minecraft.resources.ResourceKey + +/** + * Ragiumで追加される[化学物質][HTChemical]をまとめたクラスです。 + * @author Hiiragi Tsubasa + * @since 26.1.8 + */ +data object RagiumChemicals { + // Simple Substances // + + // 1st Period + @JvmField + val HYDROGEN: ResourceKey = create("hydrogen") + + // 2nd Period + @JvmField + val CARBON: ResourceKey = create("carbon") + + @JvmField + val DIAMOND: ResourceKey = create("diamond") + + @JvmField + val NITROGEN: ResourceKey = create("nitrogen") + + @JvmField + val OXYGEN: ResourceKey = create("oxygen") + + // 3rd Period + @JvmField + val ALUMINUM: ResourceKey = create("aluminum") + + @JvmField + val SILICON: ResourceKey = create("silicon") + + @JvmField + val SULFUR: ResourceKey = create("sulfur") + + @JvmField + val CHLORINE: ResourceKey = create("chlorine") + + // 4th Period + @JvmField + val IRON: ResourceKey = create("iron") + + @JvmField + val COPPER: ResourceKey = create("copper") + + // 6th Period + @JvmField + val GOLD: ResourceKey = create("gold") + + // Compounds // + + // 1st Period + @JvmField + val HYDROXIDE: ResourceKey = create("hydroxide") + + @JvmField + val WATER: ResourceKey = create("water") + + // 2nd Period + @JvmField + val CARBONATE: ResourceKey = create("carbonate") + + @JvmField + val NITRATE: ResourceKey = create("nitrate") + + @JvmField + val NITRIC_ACID: ResourceKey = create("nitric_acid") + + @JvmField + val HYDROGEN_FLUORIDE: ResourceKey = create("hydrogen_fluoride") + + @JvmField + val FLUORITE: ResourceKey = create("fluorite") + + @JvmField + val CRYOLITE: ResourceKey = create("cryolite") + + // 3rd Period + @JvmField + val SODIUM_HYDROXIDE: ResourceKey = create("sodium_hydroxide") + + @JvmField + val SODIUM_CARBONATE: ResourceKey = create("sodium_carbonate") + + @JvmField + val SODIUM_CHLORIDE: ResourceKey = create("sodium_chloride") + + @JvmField + val ALUMINUM_OXIDE: ResourceKey = create("aluminum_oxide") + + @JvmField + val ALUMINUM_FLUORIDE: ResourceKey = create("aluminum_fluoride") + + @JvmField + val SILICON_DIOXIDE: ResourceKey = create("silicon_dioxide") + + @JvmField + val SULFUR_DIOXIDE: ResourceKey = create("sulfur_dioxide") + + @JvmField + val SULFUR_TRIOXIDE: ResourceKey = create("sulfur_trioxide") + + @JvmField + val SULFATE: ResourceKey = create("sulfate") + + @JvmField + val SULFURIC_ACID: ResourceKey = create("sulfuric_acid") + + @JvmField + val HYDROGEN_CHLORIDE: ResourceKey = create("hydrogen_chloride") + + // 4th Period + @JvmField + val POTASSIUM_NITRATE: ResourceKey = create("potassium_nitrate") + + @JvmField + val CALCIUM_CARBONATE: ResourceKey = create("calcium_carbonate") + + @JvmField + val CALCIUM_OXIDE: ResourceKey = create("calcium_oxide") + + @JvmField + val CALCIUM_SULFATE: ResourceKey = create("calcium_sulfate") + + // Mixtures // + + @JvmStatic + private fun create(name: String): ResourceKey = + RagiumRegistries.Keys.CHEMICAL.createKey(RagiumAPI.id(name)) + + @JvmStatic + fun bootstrap(context: BootstrapContext) { + val getter: HolderGetter = context.lookup(RagiumRegistries.Keys.ELEMENT) + // Simple Substances + context.register(HYDROGEN, HTSimpleChemical(getter.getOrThrow(RagiumElements.HYDROGEN), 2)) + + context.register(CARBON, HTSimpleChemical(getter.getOrThrow(RagiumElements.CARBON), 1)) + context.register(DIAMOND, HTSimpleChemical(getter.getOrThrow(RagiumElements.CARBON), 1)) + context.register(NITROGEN, HTSimpleChemical(getter.getOrThrow(RagiumElements.NITROGEN), 2)) + context.register(OXYGEN, HTSimpleChemical(getter.getOrThrow(RagiumElements.OXYGEN), 2)) + + context.register(ALUMINUM, HTSimpleChemical(getter.getOrThrow(RagiumElements.ALUMINUM), 1)) + context.register(SILICON, HTSimpleChemical(getter.getOrThrow(RagiumElements.SILICON), 1)) + context.register(SULFUR, HTSimpleChemical(getter.getOrThrow(RagiumElements.SULFUR), 1)) + context.register(CHLORINE, HTSimpleChemical(getter.getOrThrow(RagiumElements.CHLORINE), 2)) + + context.register(IRON, HTSimpleChemical(getter.getOrThrow(RagiumElements.IRON), 1)) + context.register(COPPER, HTSimpleChemical(getter.getOrThrow(RagiumElements.COPPER), 1)) + + context.register(GOLD, HTSimpleChemical(getter.getOrThrow(RagiumElements.GOLD), 1)) + + // Compounds + context.register( + HYDROXIDE, + HTCompoundChemical.build(context) { + add(RagiumElements.OXYGEN, 1) + add(RagiumElements.HYDROGEN, 1) + } + ) + context.register( + WATER, + HTCompoundChemical.build(context) { + add(RagiumElements.HYDROGEN, 2) + add(RagiumElements.OXYGEN, 1) + } + ) + + context.register( + CARBONATE, + HTCompoundChemical.build(context) { + add(RagiumElements.CARBON, 1) + add(RagiumElements.OXYGEN, 3) + } + ) + context.register( + NITRATE, + HTCompoundChemical.build(context) { + add(RagiumElements.NITROGEN, 1) + add(RagiumElements.OXYGEN, 3) + } + ) + context.register( + NITRIC_ACID, + HTCompoundChemical.build(context) { + add(RagiumElements.NITROGEN, 1) + add(NITRATE, 1) + } + ) + context.register( + HYDROGEN_FLUORIDE, + HTCompoundChemical.build(context) { + add(RagiumElements.HYDROGEN, 1) + add(RagiumElements.FLUORINE, 1) + } + ) + context.register( + FLUORITE, + HTCompoundChemical.build(context) { + add(RagiumElements.CALCIUM, 1) + add(RagiumElements.FLUORINE, 2) + } + ) + context.register( + CRYOLITE, + HTCompoundChemical.build(context) { + add(RagiumElements.SODIUM, 3) + add(RagiumElements.ALUMINUM, 1) + add(RagiumElements.FLUORINE, 6) + } + ) + + context.register( + SODIUM_HYDROXIDE, + HTCompoundChemical.build(context) { + add(RagiumElements.SODIUM, 1) + add(HYDROXIDE, 1) + } + ) + context.register( + SODIUM_CARBONATE, + HTCompoundChemical.build(context) { + add(RagiumElements.SODIUM, 2) + add(CARBONATE, 1) + } + ) + context.register( + SODIUM_CHLORIDE, + HTCompoundChemical.build(context) { + add(RagiumElements.SODIUM, 1) + add(RagiumElements.CHLORINE, 1) + } + ) + context.register( + ALUMINUM_OXIDE, + HTCompoundChemical.build(context) { + add(RagiumElements.ALUMINUM, 2) + add(RagiumElements.OXYGEN, 3) + } + ) + context.register( + ALUMINUM_FLUORIDE, + HTCompoundChemical.build(context) { + add(RagiumElements.ALUMINUM, 1) + add(RagiumElements.FLUORINE, 3) + } + ) + context.register( + SILICON_DIOXIDE, + HTCompoundChemical.build(context) { + add(RagiumElements.SILICON, 1) + add(RagiumElements.OXYGEN, 2) + } + ) + context.register( + SULFUR_DIOXIDE, + HTCompoundChemical.build(context) { + add(RagiumElements.SULFUR, 1) + add(RagiumElements.OXYGEN, 2) + } + ) + context.register( + SULFUR_TRIOXIDE, + HTCompoundChemical.build(context) { + add(RagiumElements.SULFUR, 1) + add(RagiumElements.OXYGEN, 3) + } + ) + context.register( + SULFATE, + HTCompoundChemical.build(context) { + add(RagiumElements.SULFUR, 1) + add(RagiumElements.OXYGEN, 4) + } + ) + context.register( + SULFURIC_ACID, + HTCompoundChemical.build(context) { + add(RagiumElements.HYDROGEN, 2) + add(SULFATE, 1) + } + ) + context.register( + HYDROGEN_CHLORIDE, + HTCompoundChemical.build(context) { + add(RagiumElements.HYDROGEN, 1) + add(RagiumElements.CHLORINE, 1) + } + ) + + context.register( + POTASSIUM_NITRATE, + HTCompoundChemical.build(context) { + add(RagiumElements.POTASSIUM, 1) + add(NITRATE, 1) + } + ) + context.register( + CALCIUM_CARBONATE, + HTCompoundChemical.build(context) { + add(RagiumElements.CALCIUM, 1) + add(CARBONATE, 1) + } + ) + context.register( + CALCIUM_OXIDE, + HTCompoundChemical.build(context) { + add(RagiumElements.CALCIUM, 1) + add(RagiumElements.OXYGEN, 1) + } + ) + context.register( + CALCIUM_SULFATE, + HTCompoundChemical.build(context) { + add(RagiumElements.CALCIUM, 1) + add(SULFATE, 1) + } + ) + } +} diff --git a/src/lib/kotlin/hiiragi283/ragium/api/data/element/HTElement.kt b/src/lib/kotlin/hiiragi283/ragium/api/data/element/HTElement.kt new file mode 100644 index 0000000000..78c47683fe --- /dev/null +++ b/src/lib/kotlin/hiiragi283/ragium/api/data/element/HTElement.kt @@ -0,0 +1,44 @@ +package hiiragi283.ragium.api.data.element + +import com.mojang.serialization.Codec +import hiiragi283.lib.serialization.codec.HTCodecs +import hiiragi283.lib.serialization.network.HTStreamCodecs +import hiiragi283.ragium.api.RagiumRegistries +import io.netty.buffer.ByteBuf +import net.minecraft.core.Holder +import net.minecraft.network.RegistryFriendlyByteBuf +import net.minecraft.network.codec.ByteBufCodecs +import net.minecraft.network.codec.StreamCodec +import net.minecraft.util.ExtraCodecs + +/** + * 元素を表すクラスです。 + * @param symbol 元素記号 + * @author Hiiragi Tsubasa + * @since 26.1.8 + */ +@JvmRecord +data class HTElement(val symbol: String) { + companion object { + @JvmField + val DIRECT_CODEC: Codec = HTCodecs.record { instance -> + instance.group( + ExtraCodecs.NON_EMPTY_STRING.fieldOf("symbol").forGetter(HTElement::symbol) + ).apply(instance, ::HTElement) + } + + @JvmField + val HOLDER_CODEC: Codec> = HTCodecs.holder(RagiumRegistries.Keys.ELEMENT, DIRECT_CODEC) + + @JvmField + val DIRECT_STREAM_CODEC: StreamCodec = StreamCodec.composite( + ByteBufCodecs.STRING_UTF8, + HTElement::symbol, + ::HTElement + ) + + @JvmField + val HOLDER_STREAM_CODEC: StreamCodec> = + HTStreamCodecs.holder(RagiumRegistries.Keys.ELEMENT, DIRECT_STREAM_CODEC) + } +} diff --git a/src/lib/kotlin/hiiragi283/ragium/api/data/element/RagiumElements.kt b/src/lib/kotlin/hiiragi283/ragium/api/data/element/RagiumElements.kt new file mode 100644 index 0000000000..2e07a21150 --- /dev/null +++ b/src/lib/kotlin/hiiragi283/ragium/api/data/element/RagiumElements.kt @@ -0,0 +1,95 @@ +package hiiragi283.ragium.api.data.element + +import hiiragi283.lib.registry.createKey +import hiiragi283.ragium.api.RagiumAPI +import hiiragi283.ragium.api.RagiumRegistries +import net.minecraft.data.worldgen.BootstrapContext +import net.minecraft.resources.ResourceKey + +/** + * Ragiumで追加される[元素][HTElement]をまとめたクラスです。 + * @author Hiiragi Tsubasa + * @since 26.1.8 + */ +data object RagiumElements { + // 1st Period + @JvmField + val HYDROGEN: ResourceKey = create("hydrogen") + + // 2nd Period + @JvmField + val CARBON: ResourceKey = create("carbon") + + @JvmField + val NITROGEN: ResourceKey = create("nitrogen") + + @JvmField + val OXYGEN: ResourceKey = create("oxygen") + + @JvmField + val FLUORINE: ResourceKey = create("fluorine") + + // 3rd Period + @JvmField + val SODIUM: ResourceKey = create("sodium") + + @JvmField + val ALUMINUM: ResourceKey = create("aluminum") + + @JvmField + val SILICON: ResourceKey = create("silicon") + + @JvmField + val SULFUR: ResourceKey = create("sulfur") + + @JvmField + val CHLORINE: ResourceKey = create("chlorine") + + // 4th Period + @JvmField + val POTASSIUM: ResourceKey = create("potassium") + + @JvmField + val CALCIUM: ResourceKey = create("calcium") + + @JvmField + val IRON: ResourceKey = create("iron") + + @JvmField + val COPPER: ResourceKey = create("copper") + + // 6th Period + @JvmField + val GOLD: ResourceKey = create("gold") + + @JvmStatic + private fun create(name: String): ResourceKey = + RagiumRegistries.Keys.ELEMENT.createKey(RagiumAPI.id(name)) + + @JvmStatic + fun bootstrap(context: BootstrapContext) { + fun register(key: ResourceKey, symbol: String) { + context.register(key, HTElement(symbol)) + } + + register(HYDROGEN, "H") + + register(CARBON, "C") + register(NITROGEN, "N") + register(OXYGEN, "O") + register(FLUORINE, "F") + + register(SODIUM, "Na") + register(ALUMINUM, "Al") + register(SILICON, "Si") + register(SULFUR, "S") + register(CHLORINE, "Cl") + + register(POTASSIUM, "K") + register(CALCIUM, "Ca") + register(IRON, "Fe") + register(COPPER, "Cu") + + register(GOLD, "Au") + } +} diff --git a/src/lib/kotlin/hiiragi283/ragium/api/data/map/RagiumDataMaps.kt b/src/lib/kotlin/hiiragi283/ragium/api/data/map/RagiumDataMaps.kt new file mode 100644 index 0000000000..ae8d819f6e --- /dev/null +++ b/src/lib/kotlin/hiiragi283/ragium/api/data/map/RagiumDataMaps.kt @@ -0,0 +1,35 @@ +package hiiragi283.ragium.api.data.map + +import com.mojang.serialization.Codec +import hiiragi283.ragium.api.RagiumAPI +import net.minecraft.core.registries.BuiltInRegistries +import net.minecraft.core.registries.Registries +import net.minecraft.world.level.block.Block +import net.neoforged.bus.api.SubscribeEvent +import net.neoforged.fml.common.EventBusSubscriber +import net.neoforged.neoforge.registries.datamaps.DataMapType +import net.neoforged.neoforge.registries.datamaps.RegisterDataMapTypesEvent + +/** + * Ragiumで使用される[DataMapType]をまとめたクラスです。 + * @author Hiiragi Tsubasa + * @since 26.1.8 + */ +@EventBusSubscriber +data object RagiumDataMaps { + /** + * モルタルによるブロックの修復 + */ + @JvmField + val MORTAR_REPAIR: DataMapType = run { + val blockCodec: Codec = BuiltInRegistries.BLOCK.byNameCodec() + DataMapType.builder(RagiumAPI.id("mortar_repair"), Registries.BLOCK, blockCodec) + .synced(blockCodec, false) + .build() + } + + @SubscribeEvent + fun registerDataMapType(event: RegisterDataMapTypesEvent) { + event.register(MORTAR_REPAIR) + } +} diff --git a/src/lib/kotlin/hiiragi283/ragium/api/data/oreSlurry/HTOreSlurryData.kt b/src/lib/kotlin/hiiragi283/ragium/api/data/oreSlurry/HTOreSlurryData.kt deleted file mode 100644 index 844915d74f..0000000000 --- a/src/lib/kotlin/hiiragi283/ragium/api/data/oreSlurry/HTOreSlurryData.kt +++ /dev/null @@ -1,50 +0,0 @@ -package hiiragi283.ragium.api.data.oreSlurry - -import com.mojang.serialization.Codec -import hiiragi283.lib.HTConstants -import hiiragi283.lib.recipe.result.HTItemResult -import hiiragi283.lib.serialization.codec.HTCodecs -import hiiragi283.lib.serialization.network.HTStreamCodecs -import hiiragi283.lib.text.Text -import hiiragi283.ragium.api.RagiumRegistries -import net.minecraft.core.Holder -import net.minecraft.network.RegistryFriendlyByteBuf -import net.minecraft.network.codec.ByteBufCodecs -import net.minecraft.network.codec.StreamCodec -import net.minecraft.util.ExtraCodecs - -/** - * @author Hiiragi Tsubasa - * @since 26.1.5 - */ -@JvmRecord -data class HTOreSlurryData(val title: Text, val color: Int, val result: HTItemResult) { - companion object { - @JvmField - val DIRECT_CODEC: Codec = HTCodecs.record { instance -> - instance.group( - HTCodecs.TEXT.fieldOf("title").forGetter(HTOreSlurryData::title), - ExtraCodecs.STRING_RGB_COLOR.fieldOf("color").forGetter(HTOreSlurryData::color), - HTItemResult.CODEC.fieldOf(HTConstants.RESULT).forGetter(HTOreSlurryData::result) - ).apply(instance, ::HTOreSlurryData) - } - - @JvmField - val CODEC: Codec> = HTCodecs.holder(RagiumRegistries.Keys.ORE_SLURRY_DATA, DIRECT_CODEC) - - @JvmField - val DIRECT_STREAM_CODEC: StreamCodec = StreamCodec.composite( - HTStreamCodecs.TEXT, - HTOreSlurryData::title, - ByteBufCodecs.VAR_INT, - HTOreSlurryData::color, - HTItemResult.STREAM_CODEC, - HTOreSlurryData::result, - ::HTOreSlurryData - ) - - @JvmField - val STREAM_CODEC: StreamCodec> = - HTStreamCodecs.holder(RagiumRegistries.Keys.ORE_SLURRY_DATA, DIRECT_STREAM_CODEC) - } -} diff --git a/src/lib/kotlin/hiiragi283/ragium/api/data/oreSlurry/HTOreSlurryDataHelper.kt b/src/lib/kotlin/hiiragi283/ragium/api/data/oreSlurry/HTOreSlurryDataHelper.kt deleted file mode 100644 index 3d31d0f9fd..0000000000 --- a/src/lib/kotlin/hiiragi283/ragium/api/data/oreSlurry/HTOreSlurryDataHelper.kt +++ /dev/null @@ -1,49 +0,0 @@ -package hiiragi283.ragium.api.data.oreSlurry - -import hiiragi283.lib.data.buildDataPatch -import hiiragi283.lib.text.Text -import hiiragi283.ragium.api.data.RagiumDataComponents -import net.minecraft.core.Holder -import net.minecraft.core.component.DataComponentGetter -import net.minecraft.core.component.DataComponentPatch -import net.minecraft.world.item.ItemStack -import net.neoforged.neoforge.fluids.FluidStack -import net.neoforged.neoforge.fluids.FluidType - -/** - * @author Hiiragi Tsubasa - * @since 26.1.5 - */ -data object HTOreSlurryDataHelper { - @JvmStatic - fun getHolder(getter: DataComponentGetter): Holder? = - getter.get(RagiumDataComponents.ORE_SLURRY_DATA) - - @JvmStatic - fun getData(getter: DataComponentGetter): HTOreSlurryData? = getHolder(getter)?.value() - - @JvmStatic - fun getTitle(getter: DataComponentGetter): Text? = getData(getter)?.title - - @JvmStatic - fun createPatch(holder: Holder): DataComponentPatch = - buildDataPatch { set(RagiumDataComponents.ORE_SLURRY_DATA, holder) } - - @JvmStatic - fun copyToPatch(getter: DataComponentGetter): DataComponentPatch? = getHolder(getter)?.let(::createPatch) - - @JvmStatic - fun createFluid(holder: Holder, amount: Int = FluidType.BUCKET_VOLUME): FluidStack = - HTOreSlurryFluidAccess.INSTANCE.fluidContent.toStack(amount, createPatch(holder)) - - @JvmStatic - fun createFluid(getter: DataComponentGetter, amount: Int = FluidType.BUCKET_VOLUME): FluidStack? = - getHolder(getter)?.let { createFluid(it, amount) } - - @JvmStatic - fun createBucket(holder: Holder): ItemStack = - HTOreSlurryFluidAccess.INSTANCE.fluidContent.bucketHolder.toStack(patch = createPatch(holder)) - - @JvmStatic - fun createBucket(getter: DataComponentGetter): ItemStack? = getHolder(getter)?.let(::createBucket) -} diff --git a/src/lib/kotlin/hiiragi283/ragium/api/data/oreSlurry/HTOreSlurryFluidAccess.kt b/src/lib/kotlin/hiiragi283/ragium/api/data/oreSlurry/HTOreSlurryFluidAccess.kt deleted file mode 100644 index 85ec3ac7ce..0000000000 --- a/src/lib/kotlin/hiiragi283/ragium/api/data/oreSlurry/HTOreSlurryFluidAccess.kt +++ /dev/null @@ -1,20 +0,0 @@ -package hiiragi283.ragium.api.data.oreSlurry - -import hiiragi283.lib.registry.HTFluidContent -import hiiragi283.ragium.api.RagiumAPI - -/** - * @author Hiiragi Tsubasa - * @since 26.1.5 - */ -interface HTOreSlurryFluidAccess { - companion object { - @JvmField - val INSTANCE: HTOreSlurryFluidAccess = RagiumAPI.getService() - } - - /** - * Ragiumで登録される鉱石泥のインスタンス - */ - val fluidContent: HTFluidContent -} diff --git a/src/lib/kotlin/hiiragi283/ragium/api/data/oreSlurry/RagiumOreSlurryData.kt b/src/lib/kotlin/hiiragi283/ragium/api/data/oreSlurry/RagiumOreSlurryData.kt deleted file mode 100644 index 90c231191f..0000000000 --- a/src/lib/kotlin/hiiragi283/ragium/api/data/oreSlurry/RagiumOreSlurryData.kt +++ /dev/null @@ -1,78 +0,0 @@ -package hiiragi283.ragium.api.data.oreSlurry - -import hiiragi283.lib.recipe.result.HTItemResult -import hiiragi283.lib.registry.HTSimpleDeferredItem -import hiiragi283.lib.registry.createKey -import hiiragi283.lib.resource.toLanguageKey -import hiiragi283.lib.text.translatableText -import hiiragi283.ragium.api.RagiumAPI -import hiiragi283.ragium.api.RagiumRegistries -import hiiragi283.ragium.api.material.HTItemPart -import hiiragi283.ragium.api.material.RagiumMaterial -import net.minecraft.core.HolderGetter -import net.minecraft.core.registries.Registries -import net.minecraft.data.worldgen.BootstrapContext -import net.minecraft.resources.ResourceKey -import net.minecraft.world.item.Item -import net.minecraft.world.item.ItemStackTemplate -import net.minecraft.world.item.Items - -data object RagiumOreSlurryData { - @JvmField - val COPPER: ResourceKey = create("copper") - - @JvmField - val IRON: ResourceKey = create("iron") - - @JvmField - val GOLD: ResourceKey = create("gold") - - /** - * @since 26.1.7 - */ - @JvmField - val NETHERITE_SCRAP: ResourceKey = create("netherite_scrap") - - @JvmStatic - private fun create(name: String): ResourceKey = - RagiumRegistries.Keys.ORE_SLURRY_DATA.createKey(RagiumAPI.id(name)) - - @JvmStatic - fun bootstrap(context: BootstrapContext) { - val getter: HolderGetter = context.lookup(Registries.ITEM) - - fun register(key: ResourceKey, color: Int, result: HTItemResult) { - context.register( - key, - HTOreSlurryData(translatableText(key.toLanguageKey()), color, result) - ) - } - - fun register( - key: ResourceKey, - color: Int, - part: HTItemPart, - material: RagiumMaterial, - count: Int = 1 - ) { - val tagEntry = HTItemResult.TagEntry(getter.getOrThrow(part.tagPrefix.itemTagKey(material))) - val fallback = HTSimpleDeferredItem(RagiumAPI.id(part.createName(material))) - val entry: HTItemResult.Entry = if (fallback.isBound) { - HTItemResult.WithFallbackEntry(tagEntry, HTItemResult.SimpleEntry(fallback)) - } else { - tagEntry - } - register( - key, - color, - entry.toResult(count) - ) - } - - register(COPPER, 0xc15a36, HTItemPart.DUST, RagiumMaterial.Metal.COPPER, 3) - register(IRON, 0x777777, HTItemPart.DUST, RagiumMaterial.Metal.IRON, 2) - register(GOLD, 0xffcc00, HTItemPart.DUST, RagiumMaterial.Metal.GOLD, 2) - - register(NETHERITE_SCRAP, 0x473e3f, HTItemResult(ItemStackTemplate(Items.NETHERITE_SCRAP, 2))) - } -} diff --git a/src/lib/kotlin/hiiragi283/ragium/api/data/recipe/builder/RTElectrolyzingRecipeBuilder.kt b/src/lib/kotlin/hiiragi283/ragium/api/data/recipe/builder/RTElectrolyzingRecipeBuilder.kt index daa089d8ac..db5a515930 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/data/recipe/builder/RTElectrolyzingRecipeBuilder.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/data/recipe/builder/RTElectrolyzingRecipeBuilder.kt @@ -5,17 +5,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.HTItemIngredientBuilder import hiiragi283.lib.data.recipe.result.HTFluidResultBuilder import hiiragi283.lib.recipe.ingredient.HTFluidIngredient -import hiiragi283.lib.recipe.ingredient.HTItemIngredient import hiiragi283.lib.recipe.result.HTFluidResult import hiiragi283.lib.util.HTDelegates import hiiragi283.ragium.api.RagiumConstants import hiiragi283.ragium.api.recipe.RTElectrolyzingRecipe import it.unimi.dsi.fastutil.objects.ObjectArrayList import net.minecraft.resources.Identifier -import java.util.Optional import kotlin.contracts.ExperimentalContracts import kotlin.contracts.InvocationKind import kotlin.contracts.contract @@ -24,29 +21,16 @@ class RTElectrolyzingRecipeBuilder : HTProgressRecipeBuilder by HTDelegates.optionalInitialize() - @PublishedApi internal var fluidIngredient: HTFluidIngredient by HTDelegates.onceInitialize() - operator fun HTItemIngredient.unaryPlus() { - itemIngredient = Optional.of(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) { + inline fun ingredient(builderAction: HTFluidIngredientBuilder.() -> Unit) { contract { callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) } 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 173b4bb9e5..29c0b75ddf 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 @@ -8,6 +8,7 @@ import hiiragi283.lib.data.recipe.result.HTFluidResultBuilder import hiiragi283.lib.data.recipe.result.HTItemResultBuilder import hiiragi283.lib.recipe.ingredient.HTFluidIngredient 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 @@ -20,10 +21,10 @@ import kotlin.contracts.InvocationKind import kotlin.contracts.contract class RTReactingRecipeBuilder : HTProgressRecipeBuilder(RagiumConstants.REACTING) { - override fun getRecipeId(): Identifier? = results.map(HTItemResult::getId, HTFluidResult::getId) + override fun getRecipeId(): Identifier? = result.getId() override fun createRecipe(): RTReactingRecipe.Basic = - RTReactingRecipe.Basic(primaryIngredient, secondaryIngredient, results, progressData) + RTReactingRecipe.Basic(primaryIngredient, secondaryIngredient, result, progressData) // Ingredient var primaryIngredient: HTFluidIngredient by HTDelegates.onceInitialize() @@ -45,13 +46,13 @@ class RTReactingRecipeBuilder : HTProgressRecipeBuilder( } // Result - @PublishedApi internal var itemResult: Optional by HTDelegates.optionalInitialize() + var itemResult: Optional by HTDelegates.optionalInitialize() - @PublishedApi internal var fluidResult: Optional by HTDelegates.optionalInitialize() + var fluidResult: Optional by HTDelegates.optionalInitialize() - private val results: Ior by lazy { - Ior.fromNullable(itemResult, fluidResult).orElseThrow { error("Either item or fluid result required") } - } + 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) diff --git a/src/lib/kotlin/hiiragi283/ragium/api/data/recipe/builder/RTRefiningRecipeBuilder.kt b/src/lib/kotlin/hiiragi283/ragium/api/data/recipe/builder/RTRefiningRecipeBuilder.kt deleted file mode 100644 index eed2822733..0000000000 --- a/src/lib/kotlin/hiiragi283/ragium/api/data/recipe/builder/RTRefiningRecipeBuilder.kt +++ /dev/null @@ -1,66 +0,0 @@ -@file:OptIn(ExperimentalContracts::class) - -package hiiragi283.ragium.api.data.recipe.builder - -import hiiragi283.lib.data.recipe.builder.HTProgressRecipeBuilder -import hiiragi283.lib.data.recipe.ingredient.HTFluidIngredientBuilder -import hiiragi283.lib.data.recipe.result.HTFluidResultBuilder -import hiiragi283.lib.data.recipe.result.HTItemResultBuilder -import hiiragi283.lib.recipe.ingredient.HTFluidIngredient -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.RTRefiningRecipe -import net.minecraft.resources.Identifier -import java.util.Optional -import kotlin.contracts.ExperimentalContracts -import kotlin.contracts.InvocationKind -import kotlin.contracts.contract - -class RTRefiningRecipeBuilder : HTProgressRecipeBuilder(RagiumConstants.REFINING) { - override fun getRecipeId(): Identifier? = fluidResult.getId() - - override fun createRecipe(): RTRefiningRecipe = RTRefiningRecipe(ingredient, itemResult, fluidResult, progressData) - - // Ingredient - @PublishedApi internal var ingredient: HTFluidIngredient by HTDelegates.onceInitialize() - - operator fun HTFluidIngredient.unaryPlus() { - ingredient = this - } - - inline fun ingredient(builderAction: HTFluidIngredientBuilder.() -> Unit) { - contract { - callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) - } - +HTFluidIngredientBuilder.build(builderAction) - } - - // Result - @PublishedApi internal var itemResult: Optional by HTDelegates.optionalInitialize() - - @PublishedApi internal var fluidResult: HTFluidResult by HTDelegates.onceInitialize() - - operator fun HTItemResult.unaryPlus() { - itemResult = Optional.of(this) - } - - operator fun HTFluidResult.unaryPlus() { - fluidResult = 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/RTWashingRecipeBuilder.kt b/src/lib/kotlin/hiiragi283/ragium/api/data/recipe/builder/RTWashingRecipeBuilder.kt new file mode 100644 index 0000000000..b0678578da --- /dev/null +++ b/src/lib/kotlin/hiiragi283/ragium/api/data/recipe/builder/RTWashingRecipeBuilder.kt @@ -0,0 +1,64 @@ +@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.HTFluidIngredientBuilder +import hiiragi283.lib.data.recipe.ingredient.HTItemIngredientBuilder +import hiiragi283.lib.data.recipe.result.HTItemResultBuilder +import hiiragi283.lib.recipe.ingredient.HTFluidIngredient +import hiiragi283.lib.recipe.ingredient.HTItemIngredient +import hiiragi283.lib.recipe.result.HTItemResult +import hiiragi283.lib.util.HTDelegates +import hiiragi283.ragium.api.RagiumConstants +import hiiragi283.ragium.api.recipe.RTWashingRecipe +import it.unimi.dsi.fastutil.objects.ObjectArrayList +import net.minecraft.resources.Identifier +import kotlin.contracts.ExperimentalContracts +import kotlin.contracts.InvocationKind +import kotlin.contracts.contract + +class RTWashingRecipeBuilder : HTProgressRecipeBuilder(RagiumConstants.WASHING) { + override fun getRecipeId(): Identifier? = results.first().getId() + + override fun createRecipe(): RTWashingRecipe = + RTWashingRecipe(itemIngredient, fluidIngredient, results.toNel(), progressData) + + // Ingredient + 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) + } + + // Result + @PublishedApi internal val results: MutableList = ObjectArrayList() + + inline fun result(builderAction: HTItemResultBuilder.() -> Unit) { + contract { + callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) + } + results += HTItemResultBuilder.build(builderAction) + } +} diff --git a/src/lib/kotlin/hiiragi283/ragium/api/data/recipe/builder/RagiumRecipeBuilders.kt b/src/lib/kotlin/hiiragi283/ragium/api/data/recipe/builder/RagiumRecipeBuilders.kt index 9fd9cbf0d2..01cd1c8211 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,17 +2,22 @@ package hiiragi283.ragium.api.data.recipe.builder -import hiiragi283.lib.data.recipe.builder.HTFluidToRecipeBuilder +import hiiragi283.lib.data.recipe.builder.HTFluidToDoubleFluidRecipeBuilder +import hiiragi283.lib.data.recipe.builder.HTFluidToItemAndFluidRecipeBuilder +import hiiragi283.lib.data.recipe.builder.HTFluidToItemRecipeBuilder import hiiragi283.lib.data.recipe.builder.HTItemAndFluidToRecipeBuilder import hiiragi283.lib.data.recipe.builder.HTItemToDoubleItemRecipeBuilder +import hiiragi283.lib.data.recipe.builder.HTItemToFluidRecipeBuilder import hiiragi283.lib.data.recipe.builder.HTItemToItemAndFluidRecipeBuilder -import hiiragi283.lib.data.recipe.builder.HTItemToRecipeBuilder +import hiiragi283.lib.data.recipe.builder.HTItemToItemRecipeBuilder +import hiiragi283.lib.data.recipe.builder.HTSingleRecipeBuilder import hiiragi283.lib.data.recipe.builder.HTTripleItemToItemRecipeBuilder 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 @@ -24,6 +29,7 @@ import hiiragi283.ragium.api.recipe.RTMeltingRecipe import hiiragi283.ragium.api.recipe.RTMixingRecipe import hiiragi283.ragium.api.recipe.RTPlantingRecipe import hiiragi283.ragium.api.recipe.RTPyrolyzingRecipe +import hiiragi283.ragium.api.recipe.RTRefiningRecipe import kotlin.contracts.ExperimentalContracts import kotlin.contracts.InvocationKind import kotlin.contracts.contract @@ -47,12 +53,12 @@ data object RagiumRecipeBuilders { @JvmStatic inline fun compressing( - builderAction: HTItemToRecipeBuilder.ToItem.() -> Unit - ): HTItemToRecipeBuilder.ToItem { + builderAction: HTItemToItemRecipeBuilder.() -> Unit + ): HTItemToItemRecipeBuilder { contract { callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) } - return HTItemToRecipeBuilder.ToItem(RagiumConstants.COMPRESSING, ::RTCompressingRecipe).apply(builderAction) + return HTSingleRecipeBuilder(RagiumConstants.COMPRESSING, ::RTCompressingRecipe).apply(builderAction) } @JvmStatic @@ -108,22 +114,22 @@ data object RagiumRecipeBuilders { @JvmStatic inline fun freezing( - builderAction: HTFluidToRecipeBuilder.ToItem.() -> Unit - ): HTFluidToRecipeBuilder.ToItem { + builderAction: HTFluidToItemRecipeBuilder.() -> Unit + ): HTFluidToItemRecipeBuilder { contract { callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) } - return HTFluidToRecipeBuilder.ToItem(RagiumConstants.FREEZING, ::RTFreezingRecipe).apply(builderAction) + return HTSingleRecipeBuilder(RagiumConstants.FREEZING, ::RTFreezingRecipe).apply(builderAction) } @JvmStatic inline fun melting( - builderAction: HTItemToRecipeBuilder.ToFluid.() -> Unit - ): HTItemToRecipeBuilder.ToFluid { + builderAction: HTItemToFluidRecipeBuilder.() -> Unit + ): HTItemToFluidRecipeBuilder { contract { callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) } - return HTItemToRecipeBuilder.ToFluid(RagiumConstants.MELTING, ::RTMeltingRecipe).apply(builderAction) + return HTSingleRecipeBuilder(RagiumConstants.MELTING, ::RTMeltingRecipe).apply(builderAction) } @JvmStatic @@ -137,11 +143,13 @@ data object RagiumRecipeBuilders { } @JvmStatic - inline fun refining(builderAction: RTRefiningRecipeBuilder.() -> Unit): RTRefiningRecipeBuilder { + inline fun refining( + builderAction: HTFluidToItemAndFluidRecipeBuilder.() -> Unit + ): HTFluidToItemAndFluidRecipeBuilder { contract { callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) } - return RTRefiningRecipeBuilder().apply(builderAction) + return HTFluidToItemAndFluidRecipeBuilder(RagiumConstants.REFINING, ::RTRefiningRecipe).apply(builderAction) } // Chemical @@ -156,11 +164,14 @@ data object RagiumRecipeBuilders { } @JvmStatic - inline fun electrolyzing(builderAction: RTElectrolyzingRecipeBuilder.() -> Unit): RTElectrolyzingRecipeBuilder { + inline fun centrifuging( + builderAction: HTFluidToDoubleFluidRecipeBuilder.() -> Unit + ): HTFluidToDoubleFluidRecipeBuilder { contract { callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) } - return RTElectrolyzingRecipeBuilder().apply(builderAction) + return HTFluidToDoubleFluidRecipeBuilder(RagiumConstants.CENTRIFUGING, ::RTCentrifugingRecipe) + .apply(builderAction) } @JvmStatic @@ -181,6 +192,14 @@ data object RagiumRecipeBuilders { return RTReactingRecipeBuilder().apply(builderAction) } + @JvmStatic + inline fun washing(builderAction: RTWashingRecipeBuilder.() -> Unit): RTWashingRecipeBuilder { + contract { + callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) + } + return RTWashingRecipeBuilder().apply(builderAction) + } + // Bio @JvmStatic inline fun brewing( @@ -203,6 +222,14 @@ data object RagiumRecipeBuilders { } // Electronics + @JvmStatic + inline fun electrolyzing(builderAction: RTElectrolyzingRecipeBuilder.() -> Unit): RTElectrolyzingRecipeBuilder { + contract { + callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) + } + return RTElectrolyzingRecipeBuilder().apply(builderAction) + } + @JvmStatic inline fun resourceExtracting( builderAction: RTResourceExtractingRecipeBuilder.() -> Unit @@ -216,11 +243,11 @@ data object RagiumRecipeBuilders { // Arcane @JvmStatic inline fun enchanting( - builderAction: HTItemToRecipeBuilder.ToItem.() -> Unit - ): HTItemToRecipeBuilder.ToItem { + builderAction: HTItemToItemRecipeBuilder.() -> Unit + ): HTItemToItemRecipeBuilder { contract { callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) } - return HTItemToRecipeBuilder.ToItem(RagiumConstants.ENCHANTING, ::RTEnchantingRecipe).apply(builderAction) + return HTSingleRecipeBuilder(RagiumConstants.ENCHANTING, ::RTEnchantingRecipe).apply(builderAction) } } diff --git a/src/lib/kotlin/hiiragi283/ragium/api/material/RagiumMaterial.kt b/src/lib/kotlin/hiiragi283/ragium/api/material/RagiumMaterial.kt index e72b74ffd3..4befeeb7ae 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/material/RagiumMaterial.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/material/RagiumMaterial.kt @@ -2,6 +2,9 @@ package hiiragi283.ragium.api.material import hiiragi283.lib.data.lang.HTLangName import hiiragi283.lib.tag.HTMaterialLike +import hiiragi283.ragium.api.data.chemical.HTChemical +import hiiragi283.ragium.api.data.chemical.RagiumChemicals +import net.minecraft.resources.ResourceKey sealed interface RagiumMaterial : HTMaterialLike, @@ -10,16 +13,17 @@ sealed interface RagiumMaterial : @JvmField val entries: Sequence = sequence { yieldAll(Fuel.entries) - yieldAll(Mineral.entries) + yieldAll(DustLike.entries) yieldAll(Gem.entries) - yieldAll(Metal.entries) - yieldAll(Other.entries) + yieldAll(MetalLike.entries) } @JvmField val COMPARATOR: Comparator = compareBy(RagiumMaterial::materialName) } + val chemicalKey: ResourceKey? + enum class Fuel(langName: HTLangName) : RagiumMaterial, HTLangName by langName { @@ -38,50 +42,113 @@ sealed interface RagiumMaterial : constructor(enName: String, jaName: String) : this(HTLangName(enName, jaName)) + override val chemicalKey: ResourceKey = RagiumChemicals.CARBON + override val materialName: String = name.lowercase() } - enum class Mineral(langName: HTLangName) : - RagiumMaterial, + /** + * @since 26.1.8 + */ + sealed interface DustLike : RagiumMaterial { + companion object { + @JvmField + val entries: Sequence = sequence { + yieldAll(Mineral.entries) + yieldAll(Chemicals.entries) + yieldAll(Other.entries) + } + } + } + + enum class Mineral(langName: HTLangName, override val chemicalKey: ResourceKey?) : + DustLike, HTLangName by langName { // Minecraft - REDSTONE("Redstone", "レッドストーン") { - override val isVanilla: Boolean = true - }, - GLOWSTONE("Glowstone", "グロウストーン") { - override val isVanilla: Boolean = true - }, + REDSTONE("Redstone", "レッドストーン"), + GLOWSTONE("Glowstone", "グロウストーン"), // Common - SALT("Salt", "食塩"), - SULFUR("Sulfur", "硫黄"), - NITER("Niter", "硝石"), + SALT("Salt", "食塩", RagiumChemicals.SODIUM_CHLORIDE), + SULFUR("Sulfur", "硫黄", RagiumChemicals.SULFUR), + NITER("Niter", "硝石", RagiumChemicals.POTASSIUM_NITRATE), BORAX("Borax", "ホウ砂"), /** * @since 26.1.7 */ - BAUXITE("Bauxite", "ボーキサイト"), + BAUXITE("Bauxite", "ボーキサイト", RagiumChemicals.ALUMINUM_OXIDE), + + /** + * @since 26.1.8 + */ + GYPSUM("Gypsum", "石膏", RagiumChemicals.CALCIUM_SULFATE), // Ragium RAGINITE("Raginite", "ラギナイト") ; - constructor(enName: String, jaName: String) : this(HTLangName(enName, jaName)) + constructor(enName: String, jaName: String, chemicalKey: ResourceKey? = null) : this( + HTLangName(enName, jaName), + chemicalKey + ) + + val isVanilla: Boolean get() = this == REDSTONE || this == GLOWSTONE + + override val materialName: String = name.lowercase() + } + + /** + * @since 26.1.8 + */ + enum class Chemicals(langName: HTLangName, override val chemicalKey: ResourceKey?) : + DustLike, + HTLangName by langName { + // Common + CARBON("Carbon", "炭素", RagiumChemicals.CARBON), + + /** + * @since 26.1.8 + */ + SODA_ASH("Soda Ash", "ソーダ灰", RagiumChemicals.SODIUM_CARBONATE), + + /** + * @since 26.1.7 + */ + ALUMINA("Alumina", "アルミナ", RagiumChemicals.ALUMINUM_OXIDE), + + /** + * @since 26.1.7 + */ + SILICON("Silicon", "シリコン", RagiumChemicals.SILICON), + + /** + * @since 26.1.8 + */ + LIME("Lime", "石灰", RagiumChemicals.CALCIUM_CARBONATE), + + /** + * @since 26.1.8 + */ + QUICK_LIME("Quick Lime", "生石灰", RagiumChemicals.CALCIUM_OXIDE) + ; - open val isVanilla: Boolean = false + constructor(enName: String, jaName: String, chemicalKey: ResourceKey? = null) : this( + HTLangName(enName, jaName), + chemicalKey + ) override val materialName: String = name.lowercase() } - enum class Gem(langName: HTLangName) : + enum class Gem(langName: HTLangName, override val chemicalKey: ResourceKey?) : RagiumMaterial, HTLangName by langName { // Minecraft LAPIS("Lapis", "ラピス"), - QUARTZ("Quartz", "水晶"), - AMETHYST("Amethyst", "アメジスト"), - DIAMOND("Diamond", "ダイヤモンド"), + QUARTZ("Quartz", "水晶", RagiumChemicals.SILICON_DIOXIDE), + AMETHYST("Amethyst", "アメジスト", RagiumChemicals.SILICON_DIOXIDE), + DIAMOND("Diamond", "ダイヤモンド", RagiumChemicals.DIAMOND), EMERALD("Emerald", "エメラルド"), ECHO("Echo", "残響"), PRISMARINE("Prismarine", "プリズマリン"), @@ -91,92 +158,106 @@ sealed interface RagiumMaterial : /** * @since 26.1.7 */ - FLUORITE("Fluorite", "蛍石"), - - /** - * @since 26.1.7 - */ - CRYOLITE("Cryolite", "氷晶石") + FLUORITE("Fluorite", "蛍石", RagiumChemicals.FLUORITE) ; - constructor(enName: String, jaName: String) : this(HTLangName(enName, jaName)) + constructor(enName: String, jaName: String, chemicalKey: ResourceKey? = null) : this( + HTLangName(enName, jaName), + chemicalKey + ) override val materialName: String = name.lowercase() } - enum class Metal(langName: HTLangName) : - RagiumMaterial, + /** + * @since 26.1.8 + */ + sealed interface MetalLike : RagiumMaterial { + companion object { + @JvmField + val entries: Sequence = sequence { + yieldAll(Metal.entries) + yieldAll(Alloy.entries) + } + } + } + + enum class Metal(langName: HTLangName, override val chemicalKey: ResourceKey?) : + MetalLike, HTLangName by langName { // Minecraft - COPPER("Copper", "銅"), - IRON("Iron", "鉄"), - GOLD("Gold", "金"), - NETHERITE("Netherite", "ネザライト") { - override val hasRawVariant: Boolean = false - }, + COPPER("Copper", "銅", RagiumChemicals.COPPER), + IRON("Iron", "鉄", RagiumChemicals.IRON), + GOLD("Gold", "金", RagiumChemicals.GOLD), // Common /** * @since 26.1.7 */ - ALUMINUM("Aluminum", "アルミニウム"), + ALUMINUM("Aluminum", "アルミニウム", RagiumChemicals.ALUMINUM) + ; + + constructor(enName: String, jaName: String, chemicalKey: ResourceKey? = null) : this( + HTLangName(enName, jaName), + chemicalKey + ) + + override val materialName: String = name.lowercase() + } + + enum class Alloy(langName: HTLangName, override val chemicalKey: ResourceKey?) : + MetalLike, + HTLangName by langName { + // Minecraft + NETHERITE("Netherite", "ネザライト"), // Ragium /** * @since 26.1.3 */ - SOOTY_IRON("Sooty Iron", "煤鉄") { - override val hasRawVariant: Boolean = false - }, + SOOTY_IRON("Sooty Iron", "煤鉄"), /** * @since 26.1.3 */ - BLACK_STEEL("Black Steel", "黒鋼") { - override val hasRawVariant: Boolean = false - }, + BLACK_STEEL("Black Steel", "黒鋼"), /** * @since 26.1.4 */ - VOID_METAL("Void Metal", "虚金") { - override val hasRawVariant: Boolean = false - } + VOID_METAL("Void Metal", "虚金") ; - constructor(enName: String, jaName: String) : this(HTLangName(enName, jaName)) - - open val hasRawVariant: Boolean = true + constructor(enName: String, jaName: String, chemicalKey: ResourceKey? = null) : this( + HTLangName(enName, jaName), + chemicalKey + ) override val materialName: String = name.lowercase() } - enum class Other(val isPulp: Boolean, langName: HTLangName) : - RagiumMaterial, + enum class Other(langName: HTLangName, override val chemicalKey: ResourceKey?) : + DustLike, HTLangName by langName { // Minecraft - WOOD(true, "Wood", "木"), - GLASS(false, "Glass", "ガラス"), - OBSIDIAN(false, "Obsidian", "黒曜石"), - PAPER(true, "Paper", "紙"), - - // Common - CARBON(false, "Carbon", "炭素"), - - /** - * @since 26.1.7 - */ - ALUMINA(false, "Alumina", "アルミナ"), - - /** - * @since 26.1.7 - */ - SILICON(false, "Silicon", "シリコン") + WOOD("Wood", "木") { + override val isPulp: Boolean = true + }, + GLASS("Glass", "ガラス", RagiumChemicals.SILICON_DIOXIDE), + OBSIDIAN("Obsidian", "黒曜石"), + PAPER("Paper", "紙") { + override val isPulp: Boolean = true + } ; - constructor(isPulp: Boolean, enName: String, jaName: String) : this(isPulp, HTLangName(enName, jaName)) + constructor(enName: String, jaName: String, chemicalKey: ResourceKey? = null) : this( + HTLangName(enName, jaName), + chemicalKey + ) + + open val isPulp: Boolean = false override val materialName: String = name.lowercase() } diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTAlloyingRecipe.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTAlloyingRecipe.kt index 3cd15ddfd1..5a83b52f88 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTAlloyingRecipe.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTAlloyingRecipe.kt @@ -1,7 +1,6 @@ package hiiragi283.ragium.api.recipe import hiiragi283.lib.collection.Nel -import hiiragi283.lib.recipe.HTRecipeType import hiiragi283.lib.recipe.HTSerializableRecipe import hiiragi283.lib.recipe.base.HTProgressData import hiiragi283.lib.recipe.base.HTTripleItemToItemRecipe @@ -9,6 +8,7 @@ import hiiragi283.lib.recipe.ingredient.HTItemIngredient 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 class RTAlloyingRecipe( ingredient: HTItemIngredient, @@ -25,5 +25,5 @@ class RTAlloyingRecipe( override fun getSerializer(): RecipeSerializer = RagiumRecipeSerializers.ALLOYING - override fun getType(): HTRecipeType = RagiumRecipeTypes.ALLOYING + override fun getType(): RecipeType = RagiumRecipeTypes.ALLOYING } diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTAssemblingRecipe.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTAssemblingRecipe.kt index 4d864d0739..0a15fe49f4 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTAssemblingRecipe.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTAssemblingRecipe.kt @@ -1,7 +1,6 @@ package hiiragi283.ragium.api.recipe import hiiragi283.lib.collection.Nel -import hiiragi283.lib.recipe.HTRecipeType import hiiragi283.lib.recipe.HTSerializableRecipe import hiiragi283.lib.recipe.base.HTProgressData import hiiragi283.lib.recipe.base.HTTripleItemToItemRecipe @@ -9,6 +8,7 @@ import hiiragi283.lib.recipe.ingredient.HTItemIngredient 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 class RTAssemblingRecipe( ingredient: HTItemIngredient, @@ -25,5 +25,5 @@ class RTAssemblingRecipe( override fun getSerializer(): RecipeSerializer = RagiumRecipeSerializers.ASSEMBLING - override fun getType(): HTRecipeType = RagiumRecipeTypes.ASSEMBLING + override fun getType(): RecipeType = RagiumRecipeTypes.ASSEMBLING } diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTBathingRecipe.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTBathingRecipe.kt index 164b4b4646..195f5c10d4 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTBathingRecipe.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTBathingRecipe.kt @@ -1,6 +1,5 @@ package hiiragi283.ragium.api.recipe -import hiiragi283.lib.recipe.HTRecipeType import hiiragi283.lib.recipe.HTSerializableRecipe import hiiragi283.lib.recipe.base.HTItemAndFluidToRecipe import hiiragi283.lib.recipe.base.HTProgressData @@ -9,6 +8,7 @@ import hiiragi283.lib.recipe.ingredient.HTItemIngredient import hiiragi283.lib.recipe.input.HTItemAndFluidRecipeInput import hiiragi283.lib.recipe.result.HTItemResult import net.minecraft.world.item.crafting.RecipeSerializer +import net.minecraft.world.item.crafting.RecipeType class RTBathingRecipe( itemIngredient: HTItemIngredient, @@ -25,5 +25,5 @@ class RTBathingRecipe( override fun getSerializer(): RecipeSerializer = RagiumRecipeSerializers.BATHING - override fun getType(): HTRecipeType = RagiumRecipeTypes.BATHING + override fun getType(): RecipeType = RagiumRecipeTypes.BATHING } diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTBrewingRecipe.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTBrewingRecipe.kt index 6ba3a1982c..4a82b82f36 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTBrewingRecipe.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTBrewingRecipe.kt @@ -1,6 +1,5 @@ package hiiragi283.ragium.api.recipe -import hiiragi283.lib.recipe.HTRecipeType import hiiragi283.lib.recipe.HTSerializableRecipe import hiiragi283.lib.recipe.base.HTItemAndFluidToRecipe import hiiragi283.lib.recipe.base.HTProgressData @@ -9,6 +8,7 @@ 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, @@ -25,5 +25,5 @@ class RTBrewingRecipe( override fun getSerializer(): RecipeSerializer = RagiumRecipeSerializers.BREWING - override fun getType(): HTRecipeType = RagiumRecipeTypes.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 new file mode 100644 index 0000000000..8783ef87d0 --- /dev/null +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTCentrifugingRecipe.kt @@ -0,0 +1,25 @@ +package hiiragi283.ragium.api.recipe + +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.result.HTFluidResult +import net.minecraft.world.item.crafting.RecipeSerializer +import net.minecraft.world.item.crafting.RecipeType + +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)) + } + + 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 ccb7add892..98e81857bf 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTCompressingRecipe.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTCompressingRecipe.kt @@ -1,12 +1,12 @@ package hiiragi283.ragium.api.recipe -import hiiragi283.lib.recipe.HTRecipeType 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.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) : @@ -20,5 +20,5 @@ class RTCompressingRecipe(ingredient: HTItemIngredient, result: HTItemResult, pr override fun getSerializer(): RecipeSerializer = RagiumRecipeSerializers.COMPRESSING - override fun getType(): HTRecipeType = RagiumRecipeTypes.COMPRESSING + override fun getType(): RecipeType = RagiumRecipeTypes.COMPRESSING } diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTCrushingRecipe.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTCrushingRecipe.kt index 5f413883fb..1d1f33ad34 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTCrushingRecipe.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTCrushingRecipe.kt @@ -1,13 +1,13 @@ package hiiragi283.ragium.api.recipe import hiiragi283.lib.collection.Nel -import hiiragi283.lib.recipe.HTRecipeType 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.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) : @@ -21,5 +21,5 @@ class RTCrushingRecipe(ingredient: HTItemIngredient, result: Nel, override fun getSerializer(): RecipeSerializer = RagiumRecipeSerializers.CRUSHING - override fun getType(): HTRecipeType = RagiumRecipeTypes.CRUSHING + override fun getType(): RecipeType = RagiumRecipeTypes.CRUSHING } diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTCuttingRecipe.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTCuttingRecipe.kt index fc4b53e52a..5358c9080d 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTCuttingRecipe.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTCuttingRecipe.kt @@ -1,13 +1,13 @@ package hiiragi283.ragium.api.recipe import hiiragi283.lib.collection.Nel -import hiiragi283.lib.recipe.HTRecipeType 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.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) : @@ -21,5 +21,5 @@ class RTCuttingRecipe(ingredient: HTItemIngredient, result: Nel, p override fun getSerializer(): RecipeSerializer = RagiumRecipeSerializers.CUTTING - override fun getType(): HTRecipeType = RagiumRecipeTypes.CUTTING + override fun getType(): RecipeType = RagiumRecipeTypes.CUTTING } diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTDrainingRecipe.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTDrainingRecipe.kt index f15d0ed860..2c5bdf00f7 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTDrainingRecipe.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTDrainingRecipe.kt @@ -1,21 +1,16 @@ package hiiragi283.ragium.api.recipe -import hiiragi283.lib.recipe.HTRecipeType import hiiragi283.lib.recipe.HTSerializableRecipe -import hiiragi283.lib.recipe.base.HTItemToItemAndFluidRecipe +import hiiragi283.lib.recipe.base.HTItemToRecipe import hiiragi283.lib.recipe.base.HTProgressData import hiiragi283.lib.recipe.ingredient.HTItemIngredient -import hiiragi283.lib.recipe.result.HTFluidResult -import hiiragi283.lib.recipe.result.HTItemResult +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, - itemResult: HTItemResult, - fluidResult: HTFluidResult, - progressData: HTProgressData -) : HTItemToItemAndFluidRecipe.Basic(ingredient, itemResult, fluidResult, progressData), +class RTDrainingRecipe(ingredient: HTItemIngredient, result: HTItemOrFluidResult, progressData: HTProgressData) : + HTItemToRecipe.BasicItemAndFluid(ingredient, result, progressData), HTSerializableRecipe { companion object { @JvmField @@ -25,5 +20,5 @@ class RTDrainingRecipe( override fun getSerializer(): RecipeSerializer = RagiumRecipeSerializers.DRAINING - override fun getType(): HTRecipeType = RagiumRecipeTypes.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 9c2f742687..bd574513b4 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTElectrolyzingRecipe.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTElectrolyzingRecipe.kt @@ -3,52 +3,41 @@ package hiiragi283.ragium.api.recipe import com.mojang.serialization.MapCodec import hiiragi283.lib.HTConstants import hiiragi283.lib.collection.Nel -import hiiragi283.lib.recipe.HTRecipeType import hiiragi283.lib.recipe.HTSerializableRecipe import hiiragi283.lib.recipe.base.HTProgressData import hiiragi283.lib.recipe.base.HTProgressRecipe import hiiragi283.lib.recipe.base.HTRecipeFactories import hiiragi283.lib.recipe.base.HTRecipePredicates import hiiragi283.lib.recipe.ingredient.HTFluidIngredient -import hiiragi283.lib.recipe.ingredient.HTItemIngredient -import hiiragi283.lib.recipe.ingredient.test -import hiiragi283.lib.recipe.input.HTItemAndFluidRecipeInput +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.HTStreamCodecs import hiiragi283.lib.serialization.network.nelOf -import hiiragi283.lib.util.fold 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.RecipeSerializer +import net.minecraft.world.item.crafting.RecipeType import net.neoforged.neoforge.fluids.FluidInstance import net.neoforged.neoforge.fluids.FluidStack -import java.util.Optional @JvmRecord data class RTElectrolyzingRecipe( - val itemIngredient: Optional, - val fluidIngredient: HTFluidIngredient, + val ingredient: HTFluidIngredient, val results: Nel, override val progressData: HTProgressData -) : HTRecipePredicates.ItemAndFluid, - HTRecipeFactories.ItemAndFluid>, - HTProgressRecipe.Simple, - HTSerializableRecipe { +) : HTRecipePredicates.SingleFluid, + HTRecipeFactories.SingleFluidTo, + HTProgressRecipe.Simple, + HTSerializableRecipe { companion object { @JvmField val CODEC: MapCodec = HTCodecs.recordMap { instance -> instance.group( - HTItemIngredient.CODEC - .optionalFieldOf(HTConstants.ITEM_INGREDIENT) - .forGetter(RTElectrolyzingRecipe::itemIngredient), HTFluidIngredient.CODEC - .fieldOf(HTConstants.FLUID_INGREDIENT) - .forGetter(RTElectrolyzingRecipe::fluidIngredient), + .fieldOf(HTConstants.INGREDIENT) + .forGetter(RTElectrolyzingRecipe::ingredient), HTFluidResult.CODEC .compactNelFieldOf(HTConstants.RESULT, HTConstants.RESULTS, 3) .forGetter(RTElectrolyzingRecipe::results), @@ -58,10 +47,8 @@ data class RTElectrolyzingRecipe( @JvmField val STREAM_CODEC: StreamCodec = StreamCodec.composite( - HTStreamCodecs.optional(HTItemIngredient.STREAM_CODEC), - RTElectrolyzingRecipe::itemIngredient, HTFluidIngredient.STREAM_CODEC, - RTElectrolyzingRecipe::fluidIngredient, + RTElectrolyzingRecipe::ingredient, HTFluidResult.STREAM_CODEC.nelOf(), RTElectrolyzingRecipe::results, HTProgressData.STREAM_CODEC, @@ -73,15 +60,11 @@ data class RTElectrolyzingRecipe( val SERIALIZER: RecipeSerializer = RecipeSerializer(CODEC, STREAM_CODEC) } - override fun test(first: ItemInstance, second: FluidInstance): Boolean = - itemIngredient.test(first) && fluidIngredient.test(second) + override fun test(input: FluidInstance): Boolean = ingredient.test(input) - override fun getMatchingStack(first: ItemInstance, second: FluidInstance): Pair = Pair( - itemIngredient.fold(ItemStack::EMPTY) { it.getMatchingStack(first) }, - fluidIngredient.getMatchingStack(second) - ) + override fun getMatchingStack(input: FluidInstance): FluidInstance = ingredient.getMatchingStack(input) - override fun apply(first: ItemInstance, second: FluidInstance): Triple = Triple( + override fun apply(input: FluidInstance): ElectrolyzedResult = ElectrolyzedResult( results.head.create(), results.getOrNull(1).createOrEmpty(), results.getOrNull(2).createOrEmpty() @@ -89,5 +72,8 @@ data class RTElectrolyzingRecipe( override fun getSerializer(): RecipeSerializer = RagiumRecipeSerializers.ELECTROLYZING - override fun getType(): HTRecipeType = RagiumRecipeTypes.ELECTROLYZING + override fun getType(): RecipeType = RagiumRecipeTypes.ELECTROLYZING + + @JvmRecord + data class ElectrolyzedResult(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 2a0fac445c..7a7c29631a 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTEnchantingRecipe.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTEnchantingRecipe.kt @@ -2,7 +2,6 @@ package hiiragi283.ragium.api.recipe import com.mojang.serialization.MapCodec import hiiragi283.lib.HTConstants -import hiiragi283.lib.recipe.HTRecipeType import hiiragi283.lib.recipe.HTSerializableRecipe import hiiragi283.lib.recipe.base.HTDoubleItemToItemRecipe import hiiragi283.lib.recipe.base.HTProgressData @@ -18,6 +17,7 @@ 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 @JvmRecord data class RTEnchantingRecipe( @@ -65,5 +65,5 @@ data class RTEnchantingRecipe( override fun getSerializer(): RecipeSerializer = RagiumRecipeSerializers.ENCHANTING - override fun getType(): HTRecipeType = RagiumRecipeTypes.ENCHANTING + override fun getType(): RecipeType = RagiumRecipeTypes.ENCHANTING } diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTFillingRecipe.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTFillingRecipe.kt index 168902f358..1125a54a61 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTFillingRecipe.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTFillingRecipe.kt @@ -1,6 +1,5 @@ package hiiragi283.ragium.api.recipe -import hiiragi283.lib.recipe.HTRecipeType import hiiragi283.lib.recipe.HTSerializableRecipe import hiiragi283.lib.recipe.base.HTItemAndFluidToRecipe import hiiragi283.lib.recipe.base.HTProgressData @@ -9,6 +8,7 @@ import hiiragi283.lib.recipe.ingredient.HTItemIngredient import hiiragi283.lib.recipe.input.HTItemAndFluidRecipeInput import hiiragi283.lib.recipe.result.HTItemResult import net.minecraft.world.item.crafting.RecipeSerializer +import net.minecraft.world.item.crafting.RecipeType class RTFillingRecipe( itemIngredient: HTItemIngredient, @@ -25,5 +25,5 @@ class RTFillingRecipe( override fun getSerializer(): RecipeSerializer = RagiumRecipeSerializers.FILLING - override fun getType(): HTRecipeType = RagiumRecipeTypes.FILLING + override fun getType(): RecipeType = RagiumRecipeTypes.FILLING } diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTFreezingRecipe.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTFreezingRecipe.kt index 0fe42add07..a83ddf3d9f 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTFreezingRecipe.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTFreezingRecipe.kt @@ -1,6 +1,5 @@ package hiiragi283.ragium.api.recipe -import hiiragi283.lib.recipe.HTRecipeType import hiiragi283.lib.recipe.HTSerializableRecipe import hiiragi283.lib.recipe.base.HTFluidToRecipe import hiiragi283.lib.recipe.base.HTProgressData @@ -8,6 +7,7 @@ import hiiragi283.lib.recipe.ingredient.HTFluidIngredient import hiiragi283.lib.recipe.input.HTSingleFluidRecipeInput import hiiragi283.lib.recipe.result.HTItemResult import net.minecraft.world.item.crafting.RecipeSerializer +import net.minecraft.world.item.crafting.RecipeType class RTFreezingRecipe(ingredient: HTFluidIngredient, result: HTItemResult, progressData: HTProgressData) : HTFluidToRecipe.BasicItem(ingredient, result, progressData), @@ -20,5 +20,5 @@ class RTFreezingRecipe(ingredient: HTFluidIngredient, result: HTItemResult, prog override fun getSerializer(): RecipeSerializer = RagiumRecipeSerializers.FREEZING - override fun getType(): HTRecipeType = RagiumRecipeTypes.FREEZING + override fun getType(): RecipeType = RagiumRecipeTypes.FREEZING } diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTMeltingRecipe.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTMeltingRecipe.kt index ff26fecb87..af526cb5b3 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTMeltingRecipe.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTMeltingRecipe.kt @@ -1,12 +1,12 @@ package hiiragi283.ragium.api.recipe -import hiiragi283.lib.recipe.HTRecipeType 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.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) : @@ -20,5 +20,5 @@ class RTMeltingRecipe(ingredient: HTItemIngredient, result: HTFluidResult, progr override fun getSerializer(): RecipeSerializer = RagiumRecipeSerializers.MELTING - override fun getType(): HTRecipeType = RagiumRecipeTypes.MELTING + override fun getType(): RecipeType = RagiumRecipeTypes.MELTING } diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTMixingRecipe.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTMixingRecipe.kt index d4456bdad9..ed86d8e48e 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTMixingRecipe.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTMixingRecipe.kt @@ -1,6 +1,5 @@ package hiiragi283.ragium.api.recipe -import hiiragi283.lib.recipe.HTRecipeType import hiiragi283.lib.recipe.HTSerializableRecipe import hiiragi283.lib.recipe.base.HTItemAndFluidToRecipe import hiiragi283.lib.recipe.base.HTProgressData @@ -9,6 +8,7 @@ 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 RTMixingRecipe( itemIngredient: HTItemIngredient, @@ -25,5 +25,5 @@ class RTMixingRecipe( override fun getSerializer(): RecipeSerializer = RagiumRecipeSerializers.MIXING - override fun getType(): HTRecipeType = RagiumRecipeTypes.MIXING + override fun getType(): RecipeType = RagiumRecipeTypes.MIXING } diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTPlantingRecipe.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTPlantingRecipe.kt index 8ed2209e36..b440b19ad2 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTPlantingRecipe.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTPlantingRecipe.kt @@ -1,13 +1,13 @@ package hiiragi283.ragium.api.recipe import hiiragi283.lib.collection.Nel -import hiiragi283.lib.recipe.HTRecipeType 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.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) : @@ -21,5 +21,5 @@ class RTPlantingRecipe(ingredient: HTItemIngredient, result: Nel, override fun getSerializer(): RecipeSerializer = RagiumRecipeSerializers.PLANTING - override fun getType(): HTRecipeType = RagiumRecipeTypes.PLANTING + override fun getType(): RecipeType = RagiumRecipeTypes.PLANTING } diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTPyrolyzingRecipe.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTPyrolyzingRecipe.kt index d50b9956f1..1f5dab5f4f 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTPyrolyzingRecipe.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTPyrolyzingRecipe.kt @@ -1,21 +1,16 @@ package hiiragi283.ragium.api.recipe -import hiiragi283.lib.recipe.HTRecipeType import hiiragi283.lib.recipe.HTSerializableRecipe -import hiiragi283.lib.recipe.base.HTItemToItemAndFluidRecipe +import hiiragi283.lib.recipe.base.HTItemToRecipe import hiiragi283.lib.recipe.base.HTProgressData import hiiragi283.lib.recipe.ingredient.HTItemIngredient -import hiiragi283.lib.recipe.result.HTFluidResult -import hiiragi283.lib.recipe.result.HTItemResult +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, - itemResult: HTItemResult, - fluidResult: HTFluidResult, - progressData: HTProgressData -) : HTItemToItemAndFluidRecipe.Basic(ingredient, itemResult, fluidResult, progressData), +class RTPyrolyzingRecipe(ingredient: HTItemIngredient, result: HTItemOrFluidResult, progressData: HTProgressData) : + HTItemToRecipe.BasicItemAndFluid(ingredient, result, progressData), HTSerializableRecipe { companion object { @JvmField @@ -25,5 +20,5 @@ class RTPyrolyzingRecipe( override fun getSerializer(): RecipeSerializer = RagiumRecipeSerializers.PYROLYZING - override fun getType(): HTRecipeType = RagiumRecipeTypes.PYROLYZING + override fun getType(): RecipeType = RagiumRecipeTypes.PYROLYZING } diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTReactingRecipe.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTReactingRecipe.kt index 7f71ef89f8..8930c5fcce 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTReactingRecipe.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTReactingRecipe.kt @@ -2,7 +2,6 @@ package hiiragi283.ragium.api.recipe import com.mojang.serialization.MapCodec import hiiragi283.lib.HTConstants -import hiiragi283.lib.recipe.HTRecipeType import hiiragi283.lib.recipe.HTSerializableRecipe import hiiragi283.lib.recipe.base.HTProgressData import hiiragi283.lib.recipe.base.HTProgressRecipe @@ -10,27 +9,25 @@ 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.result.HTFluidResult -import hiiragi283.lib.recipe.result.HTItemAndFluidResult -import hiiragi283.lib.recipe.result.HTItemResult +import hiiragi283.lib.recipe.result.HTItemAndFluidStack +import hiiragi283.lib.recipe.result.HTItemOrFluidResult import hiiragi283.lib.serialization.codec.HTCodecs -import hiiragi283.lib.serialization.network.HTStreamCodecs -import hiiragi283.lib.util.Ior import net.minecraft.network.RegistryFriendlyByteBuf import net.minecraft.network.codec.StreamCodec 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, + HTRecipeFactories.DoubleFluid, HTProgressRecipe { @JvmRecord data class Basic( val primary: HTFluidIngredient, val secondary: HTFluidIngredient, - val results: Ior, + val result: HTItemOrFluidResult, override val progressData: HTProgressData ) : RTReactingRecipe, HTProgressRecipe.Simple, @@ -41,10 +38,7 @@ interface RTReactingRecipe : instance.group( HTFluidIngredient.CODEC.fieldOf(HTConstants.PRIMARY_INGREDIENT).forGetter(Basic::primary), HTFluidIngredient.CODEC.fieldOf(HTConstants.SECONDARY_INGREDIENT).forGetter(Basic::secondary), - HTCodecs.ior( - HTItemResult.CODEC.fieldOf(HTConstants.ITEM_RESULT), - HTFluidResult.CODEC.fieldOf(HTConstants.FLUID_RESULT) - ).forGetter(Basic::results), + HTItemOrFluidResult.CODEC.forGetter(Basic::result), HTProgressData.CODEC.forGetter(Basic::progressData) ).apply(instance, ::Basic) } @@ -55,8 +49,8 @@ interface RTReactingRecipe : Basic::primary, HTFluidIngredient.STREAM_CODEC, Basic::secondary, - HTStreamCodecs.ior(HTItemResult.STREAM_CODEC, HTFluidResult.STREAM_CODEC), - Basic::results, + HTItemOrFluidResult.STREAM_CODEC, + Basic::result, HTProgressData.STREAM_CODEC, Basic::progressData, ::Basic @@ -69,14 +63,13 @@ interface RTReactingRecipe : override fun test(first: FluidInstance, second: FluidInstance): Boolean = primary.test(first) && secondary.test(second) - override fun apply(first: FluidInstance, second: FluidInstance): HTItemAndFluidResult = - HTItemAndFluidResult.from(results) + override fun apply(first: FluidInstance, second: FluidInstance): HTItemAndFluidStack = result.create() override fun getMatchingStack(first: FluidInstance, second: FluidInstance): Pair = primary.getMatchingStack(first) to secondary.getMatchingStack(second) override fun getSerializer(): RecipeSerializer = RagiumRecipeSerializers.REACTING - override fun getType(): HTRecipeType = RagiumRecipeTypes.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 0a1798c58a..36c7e51bc8 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTRefiningRecipe.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTRefiningRecipe.kt @@ -1,74 +1,23 @@ package hiiragi283.ragium.api.recipe -import com.mojang.serialization.MapCodec -import hiiragi283.lib.HTConstants import hiiragi283.lib.recipe.HTSerializableRecipe +import hiiragi283.lib.recipe.base.HTFluidToRecipe 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.HTSingleFluidRecipeInput -import hiiragi283.lib.recipe.result.HTFluidResult -import hiiragi283.lib.recipe.result.HTItemAndFluidResult -import hiiragi283.lib.recipe.result.HTItemResult -import hiiragi283.lib.serialization.codec.HTCodecs -import hiiragi283.lib.serialization.network.HTStreamCodecs -import hiiragi283.lib.util.fold -import net.minecraft.network.RegistryFriendlyByteBuf -import net.minecraft.network.codec.StreamCodec +import hiiragi283.lib.recipe.result.HTItemOrFluidResult import net.minecraft.world.item.crafting.RecipeSerializer import net.minecraft.world.item.crafting.RecipeType -import net.neoforged.neoforge.fluids.FluidInstance -import java.util.Optional -@JvmRecord -data class RTRefiningRecipe( - val ingredient: HTFluidIngredient, - val itemResult: Optional, - val fluidResult: HTFluidResult, - override val progressData: HTProgressData -) : HTRecipePredicates.SingleFluid, - HTRecipeFactories.SingleFluidTo, - HTProgressRecipe.Simple, +class RTRefiningRecipe(ingredient: HTFluidIngredient, result: HTItemOrFluidResult, progressData: HTProgressData) : + HTFluidToRecipe.BasicItemAndFluid(ingredient, result, progressData), HTSerializableRecipe { companion object { @JvmField - val CODEC: MapCodec = HTCodecs.recordMap { instance -> - instance.group( - HTFluidIngredient.CODEC.fieldOf(HTConstants.INGREDIENT).forGetter(RTRefiningRecipe::ingredient), - HTItemResult.CODEC.optionalFieldOf(HTConstants.ITEM_RESULT).forGetter(RTRefiningRecipe::itemResult), - HTFluidResult.CODEC.fieldOf(HTConstants.FLUID_RESULT).forGetter(RTRefiningRecipe::fluidResult), - HTProgressData.CODEC.forGetter(RTRefiningRecipe::progressData) - ).apply(instance, ::RTRefiningRecipe) - } - - @JvmField - val STREAM_CODEC: StreamCodec = StreamCodec.composite( - HTFluidIngredient.STREAM_CODEC, - RTRefiningRecipe::ingredient, - HTStreamCodecs.optional(HTItemResult.STREAM_CODEC), - RTRefiningRecipe::itemResult, - HTFluidResult.STREAM_CODEC, - RTRefiningRecipe::fluidResult, - HTProgressData.STREAM_CODEC, - RTRefiningRecipe::progressData, - ::RTRefiningRecipe - ) - - @JvmField - val SERIALIZER: RecipeSerializer = RecipeSerializer(CODEC, STREAM_CODEC) + val SERIALIZER: RecipeSerializer = + RecipeSerializer(codec(::RTRefiningRecipe), streamCodec(::RTRefiningRecipe)) } - override fun test(input: FluidInstance): Boolean = ingredient.test(input) - - override fun getMatchingStack(input: FluidInstance): FluidInstance = ingredient.getMatchingStack(input) - - override fun apply(input: FluidInstance): HTItemAndFluidResult = itemResult.fold( - { HTItemAndFluidResult.from(fluidResult) }, - { HTItemAndFluidResult.from(it, fluidResult) } - ) - override fun getSerializer(): RecipeSerializer = RagiumRecipeSerializers.REFINING override fun getType(): RecipeType = RagiumRecipeTypes.REFINING diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTResourceExtractingRecipe.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTResourceExtractingRecipe.kt index 78c5943148..abe2041138 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTResourceExtractingRecipe.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTResourceExtractingRecipe.kt @@ -2,34 +2,30 @@ 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.HTRecipeType 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 import hiiragi283.lib.serialization.codec.HTCodecs -import net.minecraft.core.BlockPos -import net.minecraft.core.Holder import net.minecraft.network.RegistryFriendlyByteBuf import net.minecraft.network.codec.StreamCodec -import net.minecraft.world.item.ItemStack -import net.minecraft.world.item.crafting.RecipeInput import net.minecraft.world.item.crafting.RecipeSerializer -import net.minecraft.world.level.Level -import net.minecraft.world.level.biome.Biome +import net.minecraft.world.item.crafting.RecipeType +import net.minecraft.world.level.block.state.pattern.BlockInWorld import net.neoforged.neoforge.fluids.FluidStack class RTResourceExtractingRecipe( val condition: HTBiomeCondition, val result: HTFluidResult, override val progressData: HTProgressData -) : HTRecipePredicate, - HTRecipeFactory, - HTProgressRecipe.Simple, - HTSerializableRecipe { +) : HTRecipePredicates.Located, + HTRecipeFactories.Located, + HTProgressRecipe.Simple, + HTSerializableRecipe { companion object { @JvmField val CODEC: MapCodec = HTCodecs.recordMap { instance -> @@ -55,21 +51,12 @@ class RTResourceExtractingRecipe( val SERIALIZER: RecipeSerializer = RecipeSerializer(CODEC, STREAM_CODEC) } - override fun matches(input: Input): Boolean = condition.test(input.biome) + override fun test(input: BlockInWorld): Boolean = condition.test(input.level.getBiome(input.pos)) - override fun produce(input: Input): FluidStack = result.create() + override fun apply(input: BlockInWorld): FluidStack = result.create() override fun getSerializer(): RecipeSerializer = RagiumRecipeSerializers.RESOURCE_EXTRACTING - override fun getType(): HTRecipeType = RagiumRecipeTypes.RESOURCE_EXTRACTING - - @JvmRecord - data class Input(val biome: Holder) : RecipeInput { - constructor(getter: Level, pos: BlockPos) : this(getter.getBiome(pos)) - - override fun getItem(index: Int): ItemStack = error("No item for index: $index") - - override fun size(): Int = 0 - } + override fun getType(): RecipeType = RagiumRecipeTypes.RESOURCE_EXTRACTING } diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTWashingRecipe.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTWashingRecipe.kt new file mode 100644 index 0000000000..4f6c214ba5 --- /dev/null +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTWashingRecipe.kt @@ -0,0 +1,81 @@ +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.HTItemAndFluidToRecipe +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.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.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.FluidInstance + +@JvmRecord +data class RTWashingRecipe( + val itemIngredient: HTItemIngredient, + val fluidIngredient: HTFluidIngredient, + val results: Nel, + override val progressData: HTProgressData +) : HTItemAndFluidToRecipe>, + 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), + HTItemResult.CODEC + .compactNelFieldOf(HTConstants.RESULT, HTConstants.RESULTS, 2) + .forGetter(RTWashingRecipe::results), + HTProgressData.CODEC.forGetter(RTWashingRecipe::progressData) + ).apply(instance, ::RTWashingRecipe) + } + + @JvmField + val STREAM_CODEC: StreamCodec = StreamCodec.composite( + HTItemIngredient.STREAM_CODEC, + RTWashingRecipe::itemIngredient, + HTFluidIngredient.STREAM_CODEC, + RTWashingRecipe::fluidIngredient, + HTItemResult.STREAM_CODEC.nelOf(), + RTWashingRecipe::results, + HTProgressData.STREAM_CODEC, + RTWashingRecipe::progressData, + ::RTWashingRecipe + ) + + @JvmField + val SERIALIZER: RecipeSerializer = RecipeSerializer(CODEC, STREAM_CODEC) + } + + override fun test(first: ItemInstance, second: FluidInstance): Boolean = + itemIngredient.test(first) && fluidIngredient.test(second) + + override fun apply(first: ItemInstance, second: FluidInstance): Pair = + results.head.create() to results.getOrNull(1).createOrEmpty() + + override fun getMatchingStack(first: ItemInstance, second: FluidInstance): Pair = + itemIngredient.getMatchingStack(first) to fluidIngredient.getMatchingStack(second) + + override fun getSerializer(): RecipeSerializer = RagiumRecipeSerializers.WASHING + + override fun getType(): RecipeType = RagiumRecipeTypes.WASHING +} diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeLookups.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeLookups.kt index ae8e51d504..bed76220f8 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeLookups.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeLookups.kt @@ -1,6 +1,8 @@ package hiiragi283.ragium.api.recipe -import hiiragi283.lib.recipe.HTRecipeType +import hiiragi283.lib.recipe.base.HTFluidToDoubleFluidRecipe +import hiiragi283.lib.recipe.base.HTFluidToItemAndFluidRecipe +import hiiragi283.lib.recipe.base.HTFluidToItemRecipe import hiiragi283.lib.recipe.base.HTItemAndFluidToFluidRecipe import hiiragi283.lib.recipe.base.HTItemAndFluidToItemRecipe import hiiragi283.lib.recipe.base.HTItemToDoubleItemRecipe @@ -15,6 +17,7 @@ import hiiragi283.ragium.api.RagiumAPI import hiiragi283.ragium.api.RagiumConstants import net.minecraft.world.item.crafting.Recipe import net.minecraft.world.item.crafting.RecipeInput +import net.minecraft.world.item.crafting.RecipeType /** * Ragiumで使用される[HTRecipeLookup]をまとめたクラスです。 @@ -28,7 +31,7 @@ data object RagiumRecipeLookups { @JvmStatic private fun > create( - recipeType: HTRecipeType + recipeType: RecipeType ): HTRecipeLookup = HTVanillaRecipeLookup(recipeType) // Mechanical @@ -55,7 +58,7 @@ data object RagiumRecipeLookups { val ALLOYING: HTCompoundRecipeLookup = create(RagiumConstants.ALLOYING) @JvmField - val FREEZING: HTCompoundRecipeLookup = create(RagiumConstants.FREEZING) + val FREEZING: HTCompoundRecipeLookup = create(RagiumConstants.FREEZING) @JvmField val MELTING: HTCompoundRecipeLookup = create(RagiumConstants.MELTING) @@ -64,14 +67,14 @@ data object RagiumRecipeLookups { val PYROLYZING: HTCompoundRecipeLookup = create(RagiumConstants.PYROLYZING) @JvmField - val REFINING: HTRecipeLookup = create(RagiumRecipeTypes.REFINING) + val REFINING: HTCompoundRecipeLookup = create(RagiumConstants.REFINING) // Chemical @JvmField val BATHING: HTCompoundRecipeLookup = create(RagiumConstants.BATHING) @JvmField - val ELECTROLYZING: HTRecipeLookup = create(RagiumRecipeTypes.ELECTROLYZING) + val CENTRIFUGING: HTCompoundRecipeLookup = create(RagiumConstants.CENTRIFUGING) @JvmField val MIXING: HTCompoundRecipeLookup = create(RagiumConstants.MIXING) @@ -79,6 +82,9 @@ data object RagiumRecipeLookups { @JvmField val REACTING: HTCompoundRecipeLookup = create(RagiumConstants.REACTING) + @JvmField + val WASHING: HTRecipeLookup = create(RagiumRecipeTypes.WASHING) + // Bio @JvmField val BREWING: HTCompoundRecipeLookup = create(RagiumConstants.BREWING) @@ -87,6 +93,9 @@ data object RagiumRecipeLookups { val PLANTING: HTCompoundRecipeLookup = create(RagiumConstants.PLANTING) // Electronics + @JvmField + val ELECTROLYZING: HTRecipeLookup = create(RagiumRecipeTypes.ELECTROLYZING) + @JvmField val RESOURCE_EXTRACTING: HTRecipeLookup = create(RagiumRecipeTypes.RESOURCE_EXTRACTING) diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeSerializers.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeSerializers.kt index 73d98844eb..6e7fdccceb 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeSerializers.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeSerializers.kt @@ -88,8 +88,8 @@ data object RagiumRecipeSerializers { register(RagiumConstants.BATHING, RTBathingRecipe.SERIALIZER) @JvmField - val ELECTROLYZING: RecipeSerializer = - register(RagiumConstants.ELECTROLYZING, RTElectrolyzingRecipe.SERIALIZER) + val CENTRIFUGING: RecipeSerializer = + register(RagiumConstants.CENTRIFUGING, RTCentrifugingRecipe.SERIALIZER) @JvmField val MIXING: RecipeSerializer = @@ -99,6 +99,10 @@ data object RagiumRecipeSerializers { val REACTING: RecipeSerializer = register(RagiumConstants.REACTING, RTReactingRecipe.Basic.SERIALIZER) + @JvmField + val WASHING: RecipeSerializer = + register(RagiumConstants.WASHING, RTWashingRecipe.SERIALIZER) + // Bio @JvmField val BREWING: RecipeSerializer = @@ -109,6 +113,10 @@ data object RagiumRecipeSerializers { register(RagiumConstants.PLANTING, RTPlantingRecipe.SERIALIZER) // Electronics + @JvmField + val ELECTROLYZING: RecipeSerializer = + register(RagiumConstants.ELECTROLYZING, RTElectrolyzingRecipe.SERIALIZER) + @JvmField val RESOURCE_EXTRACTING: RecipeSerializer = register(RagiumConstants.RESOURCE_EXTRACTING, RTResourceExtractingRecipe.SERIALIZER) diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeTypes.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeTypes.kt index 3a44487c4f..7d604f07c0 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeTypes.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeTypes.kt @@ -1,93 +1,105 @@ package hiiragi283.ragium.api.recipe -import hiiragi283.lib.recipe.HTRecipeType import hiiragi283.ragium.api.RagiumAPI import hiiragi283.ragium.api.RagiumConstants -import it.unimi.dsi.fastutil.objects.ObjectLinkedOpenHashSet +import it.unimi.dsi.fastutil.objects.Object2ObjectLinkedOpenHashMap +import net.minecraft.resources.Identifier import net.minecraft.world.item.crafting.Recipe +import net.minecraft.world.item.crafting.RecipeType import net.neoforged.bus.api.SubscribeEvent import net.neoforged.fml.common.EventBusSubscriber import net.neoforged.neoforge.event.OnDatapackSyncEvent /** - * Ragiumで使用される[HTRecipeType]をまとめたクラスです。 + * Ragiumで使用される[RecipeType]をまとめたクラスです。 * @author Hiiragi Tsubasa * @since 26.1.0 */ @EventBusSubscriber data object RagiumRecipeTypes { @JvmStatic - val allTypes: Set> field: MutableSet> = ObjectLinkedOpenHashSet() + val allTypes: Map> + field: MutableMap> = Object2ObjectLinkedOpenHashMap() @JvmStatic - private fun > create(name: String): HTRecipeType = - HTRecipeType(RagiumAPI.id(name)).also(allTypes::add) + private fun > create(name: String): RecipeType { + val id: Identifier = RagiumAPI.id(name) + val recipeType: RecipeType = RecipeType.simple(id) + allTypes[id] = recipeType + return recipeType + } @SubscribeEvent fun onDatapackSync(event: OnDatapackSyncEvent) { - event.sendRecipes(allTypes) + event.sendRecipes(allTypes.values) } // Mechanical @JvmField - val ASSEMBLING: HTRecipeType = create(RagiumConstants.ASSEMBLING) + val ASSEMBLING: RecipeType = create(RagiumConstants.ASSEMBLING) @JvmField - val COMPRESSING: HTRecipeType = create(RagiumConstants.COMPRESSING) + val COMPRESSING: RecipeType = create(RagiumConstants.COMPRESSING) @JvmField - val CRUSHING: HTRecipeType = create(RagiumConstants.CRUSHING) + val CRUSHING: RecipeType = create(RagiumConstants.CRUSHING) @JvmField - val CUTTING: HTRecipeType = create(RagiumConstants.CUTTING) + val CUTTING: RecipeType = create(RagiumConstants.CUTTING) @JvmField - val DRAINING: HTRecipeType = create(RagiumConstants.DRAINING) + val DRAINING: RecipeType = create(RagiumConstants.DRAINING) @JvmField - val FILLING: HTRecipeType = create(RagiumConstants.FILLING) + val FILLING: RecipeType = create(RagiumConstants.FILLING) // Heat @JvmField - val ALLOYING: HTRecipeType = create(RagiumConstants.ALLOYING) + val ALLOYING: RecipeType = create(RagiumConstants.ALLOYING) @JvmField - val FREEZING: HTRecipeType = create(RagiumConstants.FREEZING) + val FREEZING: RecipeType = create(RagiumConstants.FREEZING) @JvmField - val MELTING: HTRecipeType = create(RagiumConstants.MELTING) + val MELTING: RecipeType = create(RagiumConstants.MELTING) @JvmField - val PYROLYZING: HTRecipeType = create(RagiumConstants.PYROLYZING) + val PYROLYZING: RecipeType = create(RagiumConstants.PYROLYZING) @JvmField - val REFINING: HTRecipeType = create(RagiumConstants.REFINING) + val REFINING: RecipeType = create(RagiumConstants.REFINING) // Chemical @JvmField - val BATHING: HTRecipeType = create(RagiumConstants.BATHING) + val BATHING: RecipeType = create(RagiumConstants.BATHING) + + @JvmField + val CENTRIFUGING: RecipeType = create(RagiumConstants.CENTRIFUGING) @JvmField - val ELECTROLYZING: HTRecipeType = create(RagiumConstants.ELECTROLYZING) + val MIXING: RecipeType = create(RagiumConstants.MIXING) @JvmField - val MIXING: HTRecipeType = create(RagiumConstants.MIXING) + val REACTING: RecipeType = create(RagiumConstants.REACTING) @JvmField - val REACTING: HTRecipeType = create(RagiumConstants.REACTING) + val WASHING: RecipeType = create(RagiumConstants.WASHING) // Bio @JvmField - val BREWING: HTRecipeType = create(RagiumConstants.BREWING) + val BREWING: RecipeType = create(RagiumConstants.BREWING) @JvmField - val PLANTING: HTRecipeType = create(RagiumConstants.PLANTING) + val PLANTING: RecipeType = create(RagiumConstants.PLANTING) // Electronics @JvmField - val RESOURCE_EXTRACTING: HTRecipeType = create(RagiumConstants.RESOURCE_EXTRACTING) + val ELECTROLYZING: RecipeType = create(RagiumConstants.ELECTROLYZING) + + @JvmField + val RESOURCE_EXTRACTING: RecipeType = create(RagiumConstants.RESOURCE_EXTRACTING) // Arcane @JvmField - val ENCHANTING: HTRecipeType = create(RagiumConstants.ENCHANTING) + val ENCHANTING: RecipeType = create(RagiumConstants.ENCHANTING) } diff --git a/src/lib/kotlin/hiiragi283/ragium/api/tag/RagiumTags.kt b/src/lib/kotlin/hiiragi283/ragium/api/tag/RagiumTags.kt index dce7951a7d..6880e9da87 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/tag/RagiumTags.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/tag/RagiumTags.kt @@ -18,7 +18,7 @@ data object RagiumTags { * @author Hiiragi Tsubasa * @since 26.1.5 */ - data object BlockItem { + data object BlockItems { @JvmField val QUARTZ_BLOCKS: BlockItemTag = create("quartz_blocks") @@ -43,6 +43,18 @@ data object RagiumTags { @JvmField val RESINS: TagKey = create("resins") + /** + * @since 26.1.8 + */ + @JvmField + val ALCOHOLS: TagKey = create("alcohols") + + /** + * @since 26.1.8 + */ + @JvmField + val ALDEHYDES: TagKey = create("aldehydes") + @JvmStatic private fun create(vararg path: String): TagKey = FluidTags.create(RagiumAPI.id(*path)) } diff --git a/src/lib/kotlin/hiiragi283/ragium/api/util/HTStorageHelper.kt b/src/lib/kotlin/hiiragi283/ragium/api/util/HTStorageHelper.kt index 452ca5fcf9..a67d878478 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/util/HTStorageHelper.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/util/HTStorageHelper.kt @@ -12,9 +12,10 @@ import hiiragi283.lib.transfer.energy.HTEnergyHandler import hiiragi283.lib.util.fixedFraction import hiiragi283.ragium.api.data.RagiumDataComponents import net.minecraft.ChatFormatting +import net.minecraft.core.component.DataComponentGetter +import net.minecraft.core.component.DataComponentMap import net.minecraft.core.component.DataComponentPatch import net.minecraft.util.Mth -import net.minecraft.world.entity.player.Player import net.minecraft.world.item.Item import net.minecraft.world.item.ItemStack import net.minecraft.world.item.TooltipFlag @@ -86,7 +87,7 @@ data object HTStorageHelper { } @JvmStatic - fun getEnergy(container: ItemStack): Int = container.getOrDefault(RagiumDataComponents.ENERGY, 0) + fun getEnergy(container: DataComponentGetter): Int = container.getOrDefault(RagiumDataComponents.ENERGY, 0) @JvmStatic fun updateEnergy(container: ItemStack, newAmount: Int) { @@ -97,6 +98,14 @@ data object HTStorageHelper { } } + /** + * @since 26.1.8 + */ + @JvmStatic + fun updateEnergy(container: DataComponentMap.Builder, newAmount: Int) { + container.set(RagiumDataComponents.ENERGY, newAmount.takeIf { it > 0 }) + } + @JvmStatic fun addEnergyTooltip(handler: HTEnergyHandler, consumer: Consumer, isCreative: Boolean) { // Empty name if amount is not positive @@ -142,7 +151,7 @@ data object HTStorageHelper { } @JvmStatic - fun getFluid(container: ItemStack): FluidStack = + fun getFluid(container: DataComponentGetter): FluidStack = container.getOrDefault(RagiumDataComponents.FLUID, SimpleFluidContent.EMPTY).copy() @JvmStatic @@ -154,12 +163,22 @@ data object HTStorageHelper { } } + /** + * @since 26.1.8 + */ + @JvmStatic + fun updateFluid(container: DataComponentMap.Builder, newStack: FluidStack) { + container.set( + RagiumDataComponents.FLUID, + newStack.takeUnless(FluidStack::isEmpty)?.let(SimpleFluidContent::copyOf) + ) + } + @JvmStatic fun addFluidTooltip( stack: FluidStack, consumer: Consumer, context: Item.TooltipContext, - player: Player?, flag: TooltipFlag, isCreative: Boolean ) { @@ -175,7 +194,7 @@ data object HTStorageHelper { HTCommonTranslation.STORED_MB.translate(stack, stack.amount) }.let(consumer::accept) // Default Fluid Tooltips - val tooltips: MutableList = stack.getTooltipLines(context, player, flag) + val tooltips: MutableList = stack.getTooltipLines(context, context.player(), flag) tooltips.removeFirst() // remove fluid name tooltips.forEach(consumer) // Mod Name @@ -197,8 +216,7 @@ data object HTStorageHelper { @JvmStatic private fun getFluidDurability(container: ItemStack): Double { - val bestRatio: Double = - HTFluidCapabilities.getSlot(ItemAccess.forStack(container), 0)?.currentFilledLevel?.toDouble() ?: 0.0 + val bestRatio: Double = HTFluidCapabilities.getSlot(container, 0)?.currentFilledLevel?.toDouble() ?: 0.0 return 1 - bestRatio } diff --git a/src/libClient/kotlin/hiiragi283/lib/gui/HTGuiRenderHelper.kt b/src/libClient/kotlin/hiiragi283/lib/gui/HTGuiRenderHelper.kt index 4a44c1bb70..35a62d4af8 100644 --- a/src/libClient/kotlin/hiiragi283/lib/gui/HTGuiRenderHelper.kt +++ b/src/libClient/kotlin/hiiragi283/lib/gui/HTGuiRenderHelper.kt @@ -7,8 +7,9 @@ import net.minecraft.client.renderer.block.FluidModel import net.minecraft.client.renderer.texture.SpriteContents import net.minecraft.client.renderer.texture.TextureAtlasSprite import net.minecraft.client.resources.metadata.gui.GuiSpriteScaling -import net.minecraft.core.TypedInstance -import net.minecraft.world.level.material.Fluid +import net.minecraft.world.item.Item +import net.minecraft.world.item.TooltipFlag +import net.neoforged.neoforge.client.ClientTooltipFlag import net.neoforged.neoforge.fluids.FluidStack /** @@ -16,25 +17,26 @@ import net.neoforged.neoforge.fluids.FluidStack * @since 26.1.7 */ data object HTGuiRenderHelper { - @JvmStatic - fun getModel(instance: TypedInstance): FluidModel = Minecraft.getInstance() - .modelManager - .fluidStateModelSet - .get(instance.typeHolder().value().defaultFluidState()) - - @Suppress("RedundantNullableReturnType") - @JvmStatic - fun getSprite(instance: TypedInstance): TextureAtlasSprite? = getModel(instance) - .stillMaterial() - .sprite() + // Fluid // + /** + * @since 26.1.8 + */ + @Suppress("UNNECESSARY_SAFE_CALL") @JvmStatic - fun getColor(stack: FluidStack): Int = getModel(stack).fluidTintSource()?.colorAsStack(stack) ?: 0xffffffff.toInt() + fun getSpriteAndColor(stack: FluidStack): Pair? { + val model: FluidModel = Minecraft.getInstance() + .modelManager + .fluidStateModelSet + .get(stack.fluid.defaultFluidState()) + val color: Int = model.fluidTintSource()?.colorAsStack(stack) ?: 0xffffffff.toInt() + return model.stillMaterial().sprite()?.let { it to color } + } @JvmStatic fun renderFluid(graphics: GuiGraphicsExtractor, stack: FluidStack, x: Int, y: Int, width: Int, height: Int) { if (stack.isEmpty) return - getSprite(stack)?.let { sprite: TextureAtlasSprite -> + getSpriteAndColor(stack)?.let { (sprite: TextureAtlasSprite, color: Int) -> val spriteContents: SpriteContents = sprite.contents() val tileScaling = GuiSpriteScaling.Tile(spriteContents.width(), spriteContents.height()) @@ -52,9 +54,28 @@ data object HTGuiRenderHelper { tileScaling.height, tileScaling.width, tileScaling.height, - getColor(stack) + color ) graphics.disableScissor() } } + + // Tooltip // + + /** + * @since 26.1.8 + */ + fun getTooltipContext(): Item.TooltipContext = + Minecraft.getInstance().let { Item.TooltipContext.of(it.level, it.player) } + + /** + * @since 26.1.8 + */ + @JvmStatic + fun getTooltipFlag(): TooltipFlag = ClientTooltipFlag.of( + when (Minecraft.getInstance().options.advancedItemTooltips) { + true -> TooltipFlag.ADVANCED + false -> TooltipFlag.NORMAL + } + ) } diff --git a/src/libClient/kotlin/hiiragi283/lib/integration/jei/HTJeiRecipeType.kt b/src/libClient/kotlin/hiiragi283/lib/integration/jei/HTJeiRecipeType.kt index bd4aa682d5..169ae3030a 100644 --- a/src/libClient/kotlin/hiiragi283/lib/integration/jei/HTJeiRecipeType.kt +++ b/src/libClient/kotlin/hiiragi283/lib/integration/jei/HTJeiRecipeType.kt @@ -2,12 +2,14 @@ package hiiragi283.lib.integration.jei import hiiragi283.lib.item.HTItemInstanceLike import hiiragi283.lib.recipe.HTRecipeHolder -import hiiragi283.lib.resource.HTValueWithId import hiiragi283.lib.text.HTHasText +import hiiragi283.lib.text.translatableText import hiiragi283.lib.util.Either import mezz.jei.api.recipe.types.IRecipeType +import net.minecraft.core.registries.BuiltInRegistries import net.minecraft.resources.Identifier import net.minecraft.world.item.ItemStack +import net.minecraft.world.item.crafting.RecipeType /** * [HTRecipeHolder]向けの[HTJeiRecipeType]のエイリアスです。 @@ -49,18 +51,13 @@ inline fun HTJeiRecipeType( /** * @author Hiiragi Tsubasa - * @since 26.1.0 + * @since 26.1.8 */ -inline fun HTJeiRecipeType( - id: U, - icon: ItemStack -): HTJeiRecipeType where U : HTValueWithId<*>, U : HTHasText = HTJeiRecipeType(id.idOrThrow, id, Either.Right(icon)) - -/** - * @author Hiiragi Tsubasa - * @since 26.1.0 - */ -inline fun HTJeiRecipeType( - id: U, - icon: HTItemInstanceLike -): HTJeiRecipeType where U : HTValueWithId<*>, U : HTHasText = HTJeiRecipeType(id, icon.toStack()) +inline fun HTJeiRecipeType(type: RecipeType<*>, icon: HTItemInstanceLike): HTJeiRecipeType { + val id: Identifier = BuiltInRegistries.RECIPE_TYPE.getKeyOrNull(type) ?: error("Unregistered recipe type: $type") + return HTJeiRecipeType( + id, + HTHasText { translatableText(id.toLanguageKey("recipe_type")) }, + Either.Right(icon.toStack()) + ) +} diff --git a/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTFluidToItemAndFluidRecipeCategory.kt b/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTFluidToItemAndFluidRecipeCategory.kt new file mode 100644 index 0000000000..a3f1a0b005 --- /dev/null +++ b/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTFluidToItemAndFluidRecipeCategory.kt @@ -0,0 +1,51 @@ +package hiiragi283.lib.integration.jei.category + +import hiiragi283.lib.gui.HTBackgroundType +import hiiragi283.lib.integration.jei.HTHolderJeiRecipeType +import hiiragi283.lib.integration.jei.add +import hiiragi283.lib.recipe.base.HTFluidToRecipe +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 HTFluidToItemAndFluidRecipeCategory( + guiHelper: IGuiHelper, + recipeType: HTHolderJeiRecipeType +) : HTHolderRecipeCategory( + guiHelper, + recipeType, + 18 * 6, + 18 * 1, + HTFluidToRecipe.BasicItemAndFluid.SIMPLE_CODEC +) { + override fun setupRecipe( + builder: IRecipeLayoutBuilder, + recipe: HTFluidToRecipe.BasicItemAndFluid, + focuses: IFocusGroup + ) { + // input + builder + .addInputSlot(getPosition(0), getPosition(0)) + .add(recipe.ingredient) + .setSlotBackground(HTBackgroundType.INPUT) + // output + val itemOutput: IRecipeSlotBuilder = builder + .addOutputSlot(getPosition(3), getPosition(0)) + .setSlotBackground(HTBackgroundType.OUTPUT) + val fluidOutput: IRecipeSlotBuilder = builder + .addOutputSlot(getPosition(5), getPosition(0)) + .setSlotBackground(HTBackgroundType.OUTPUT) + recipe.result.content.mapLeft(itemOutput::add).mapRight(fluidOutput::add) + } + + override fun setupRecipeExtras( + builder: IRecipeExtrasBuilder, + recipe: HTFluidToRecipe.BasicItemAndFluid, + focuses: IFocusGroup + ) { + builder.addRecipeArrow(recipe).setPosition(getPosition(1.25), getPosition(0)) + builder.addRecipePlus(getPosition(4)) + } +} diff --git a/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTItemAndFluidToItemRecipeCategory.kt b/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTItemAndFluidToItemRecipeCategory.kt index c77df37a94..297c56d54a 100644 --- a/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTItemAndFluidToItemRecipeCategory.kt +++ b/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTItemAndFluidToItemRecipeCategory.kt @@ -24,7 +24,7 @@ class HTItemAndFluidToItemRecipeCategory( recipe: HTItemAndFluidToRecipe.BasicItem, focuses: IFocusGroup ) { - // input + // inputs builder .addInputSlot(getPosition(0), getPosition(0)) .add(recipe.fluidIngredient) diff --git a/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTItemToDoubleItemRecipeCategory.kt b/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTItemToDoubleItemRecipeCategory.kt index dfe2070df7..8ca08995c9 100644 --- a/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTItemToDoubleItemRecipeCategory.kt +++ b/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTItemToDoubleItemRecipeCategory.kt @@ -30,16 +30,16 @@ class HTItemToDoubleItemRecipeCategory( .addInputSlot(getPosition(0), getPosition(0)) .add(recipe.ingredient) .setSlotBackground(HTBackgroundType.INPUT) - // output + // outputs builder .addOutputSlot(getPosition(3), getPosition(0)) - .add(recipe.result.head) + .add(recipe.results.head) .setSlotBackground(HTBackgroundType.OUTPUT) val slot: IRecipeSlotBuilder = builder .addOutputSlot(getPosition(5), getPosition(0)) .setSlotBackground(HTBackgroundType.EXTRA_OUTPUT) - recipe.result.getOrNull(1)?.let(slot::add) + recipe.results.getOrNull(1)?.let(slot::add) } override fun setupRecipeExtras( diff --git a/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTItemToItemAndFluidRecipeCategory.kt b/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTItemToItemAndFluidRecipeCategory.kt index 4f0280f4da..9b413678e6 100644 --- a/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTItemToItemAndFluidRecipeCategory.kt +++ b/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTItemToItemAndFluidRecipeCategory.kt @@ -3,25 +3,26 @@ package hiiragi283.lib.integration.jei.category import hiiragi283.lib.gui.HTBackgroundType import hiiragi283.lib.integration.jei.HTHolderJeiRecipeType import hiiragi283.lib.integration.jei.add -import hiiragi283.lib.recipe.base.HTItemToItemAndFluidRecipe +import hiiragi283.lib.recipe.base.HTItemToRecipe 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 HTItemToItemAndFluidRecipeCategory( guiHelper: IGuiHelper, - recipeType: HTHolderJeiRecipeType -) : HTHolderRecipeCategory( + recipeType: HTHolderJeiRecipeType +) : HTHolderRecipeCategory( guiHelper, recipeType, 18 * 6, 18 * 1, - HTItemToItemAndFluidRecipe.Basic.SIMPLE_CODEC + HTItemToRecipe.BasicItemAndFluid.SIMPLE_CODEC ) { override fun setupRecipe( builder: IRecipeLayoutBuilder, - recipe: HTItemToItemAndFluidRecipe.Basic, + recipe: HTItemToRecipe.BasicItemAndFluid, focuses: IFocusGroup ) { // input @@ -30,19 +31,18 @@ class HTItemToItemAndFluidRecipeCategory( .add(recipe.ingredient) .setSlotBackground(HTBackgroundType.INPUT) // output - builder + val itemOutput: IRecipeSlotBuilder = builder .addOutputSlot(getPosition(3), getPosition(0)) - .add(recipe.itemResult) .setSlotBackground(HTBackgroundType.OUTPUT) - builder + val fluidOutput: IRecipeSlotBuilder = builder .addOutputSlot(getPosition(5), getPosition(0)) - .add(recipe.fluidResult) .setSlotBackground(HTBackgroundType.OUTPUT) + recipe.result.content.mapLeft(itemOutput::add).mapRight(fluidOutput::add) } override fun setupRecipeExtras( builder: IRecipeExtrasBuilder, - recipe: HTItemToItemAndFluidRecipe.Basic, + recipe: HTItemToRecipe.BasicItemAndFluid, focuses: IFocusGroup ) { builder.addRecipeArrow(recipe).setPosition(getPosition(1.25), getPosition(0)) diff --git a/src/libClient/kotlin/hiiragi283/ragium/api/data/chemical/HTClientChemicalHelper.kt b/src/libClient/kotlin/hiiragi283/ragium/api/data/chemical/HTClientChemicalHelper.kt new file mode 100644 index 0000000000..8aefbfb37d --- /dev/null +++ b/src/libClient/kotlin/hiiragi283/ragium/api/data/chemical/HTClientChemicalHelper.kt @@ -0,0 +1,25 @@ +package hiiragi283.ragium.api.data.chemical + +import hiiragi283.lib.resource.toLanguageKey +import hiiragi283.lib.text.Text +import hiiragi283.lib.text.translatableText +import hiiragi283.ragium.api.data.RagiumDataComponents +import net.minecraft.ChatFormatting +import net.minecraft.client.Minecraft +import net.minecraft.core.Holder +import net.minecraft.core.component.DataComponentGetter + +/** + * @author Hiiragi Tsubasa + * @since 26.1.8 + */ +data object HTClientChemicalHelper { + @JvmStatic + fun addToTooltip(getter: DataComponentGetter, acceptor: (Text) -> Unit) { + val holder: Holder = getter.get(RagiumDataComponents.CHEMICAL) ?: return + when { + Minecraft.getInstance().hasShiftDown() -> holder.key?.toLanguageKey()?.let(::translatableText) + else -> holder.value().getText() + }?.withStyle(ChatFormatting.YELLOW)?.let(acceptor) + } +} diff --git a/src/main/kotlin/hiiragi283/ragium/common/Ragium.kt b/src/main/kotlin/hiiragi283/ragium/common/Ragium.kt index 19b1882712..69e56a77eb 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/Ragium.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/Ragium.kt @@ -4,11 +4,9 @@ import hiiragi283.lib.HTConstants import hiiragi283.lib.gui.sync.HTFluidSyncPayload import hiiragi283.lib.gui.sync.HTIntSyncPayload import hiiragi283.lib.gui.sync.HTItemSyncPayload -import hiiragi283.lib.gui.widget.HTWidgetType import hiiragi283.lib.item.HTCreativeModeTabHelper import hiiragi283.lib.mod.HTCommonMod import hiiragi283.lib.network.HTPayloadHandlers -import hiiragi283.lib.recipe.HTRecipeType import hiiragi283.lib.recipe.ingredient.HTMaterialTagsIngredient import hiiragi283.lib.recipe.ingredient.HTPotionFluidIngredient import hiiragi283.lib.recipe.result.HTFluidResult @@ -17,6 +15,9 @@ import hiiragi283.ragium.api.RagiumAPI import hiiragi283.ragium.api.RagiumConfig import hiiragi283.ragium.api.RagiumRegistries import hiiragi283.ragium.api.data.RagiumDataComponents +import hiiragi283.ragium.api.data.chemical.HTCompoundChemical +import hiiragi283.ragium.api.data.chemical.HTMixtureChemical +import hiiragi283.ragium.api.data.chemical.HTSimpleChemical import hiiragi283.ragium.api.recipe.RagiumRecipeSerializers import hiiragi283.ragium.api.recipe.RagiumRecipeTypes import hiiragi283.ragium.api.text.RagiumTranslation @@ -56,6 +57,8 @@ data object Ragium : HTCommonMod() { RagiumMobEffects.register(eventBus) RagiumPotions.register(eventBus) + RagiumWidgetTypes.REGISTER.register(eventBus) + container.registerConfig(ModConfig.Type.COMMON, RagiumConfig.COMMON_SPEC) container.registerConfig(ModConfig.Type.SERVER, RagiumConfig.SERVER_SPEC) } @@ -86,10 +89,10 @@ data object Ragium : HTCommonMod() { ) } event.register(Registries.DATA_COMPONENT_TYPE) { helper -> + helper.register(RagiumAPI.id(HTConstants.CHEMICAL), RagiumDataComponents.CHEMICAL) helper.register(RagiumAPI.id(HTConstants.ENERGY), RagiumDataComponents.ENERGY) helper.register(RagiumAPI.id(HTConstants.FLUID), RagiumDataComponents.FLUID) helper.register(RagiumAPI.id("memory_disc_data"), RagiumDataComponents.MEMORY_DISC_DATA) - helper.register(RagiumAPI.id("ore_slurry_data"), RagiumDataComponents.ORE_SLURRY_DATA) helper.register(RagiumAPI.id("owner_id"), RagiumDataComponents.OWNER_ID) } event.register(Registries.MENU) { helper -> @@ -103,9 +106,7 @@ data object Ragium : HTCommonMod() { RagiumRecipeSerializers.allSerializers.forEach(helper::register) } event.register(Registries.RECIPE_TYPE) { helper -> - for (recipeType: HTRecipeType<*> in RagiumRecipeTypes.allTypes) { - helper.register(recipeType.keyOrThrow, recipeType) - } + RagiumRecipeTypes.allTypes.forEach(helper::register) } event.register(NeoForgeRegistries.Keys.INGREDIENT_TYPES) { helper -> @@ -115,6 +116,11 @@ data object Ragium : HTCommonMod() { helper.register(RagiumAPI.id(HTConstants.POTION), HTPotionFluidIngredient.TYPE) } + event.register(RagiumRegistries.Keys.CHEMICAL_TYPE) { helper -> + helper.register(RagiumAPI.id("simple"), HTSimpleChemical.TYPE) + helper.register(RagiumAPI.id("compound"), HTCompoundChemical.TYPE) + helper.register(RagiumAPI.id("mixture"), HTMixtureChemical.TYPE) + } event.register(RagiumRegistries.Keys.FLUID_RESULT_TYPE) { helper -> helper.register(RagiumAPI.id("simple"), HTFluidResult.SimpleEntry.TYPE) helper.register(RagiumAPI.id(HTConstants.POTION), HTFluidResult.PotionEntry.TYPE) @@ -130,11 +136,6 @@ data object Ragium : HTCommonMod() { helper.register(RagiumAPI.id(HTConstants.ITEM), HTItemSyncPayload.TYPE) helper.register(RagiumAPI.id(HTConstants.FLUID), HTFluidSyncPayload.TYPE) } - event.register(RagiumRegistries.Keys.WIDGET_TYPE) { helper -> - for (widgetType: HTWidgetType<*> in RagiumWidgetTypes.allTypes) { - helper.register(widgetType.keyOrThrow, widgetType) - } - } } override fun commonSetup(event: FMLCommonSetupEvent) { diff --git a/src/main/kotlin/hiiragi283/ragium/common/RagiumCommon.kt b/src/main/kotlin/hiiragi283/ragium/common/RagiumCommon.kt index fac9ba6330..18286f8d28 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/RagiumCommon.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/RagiumCommon.kt @@ -10,26 +10,32 @@ import hiiragi283.lib.recipe.RecipeKey import hiiragi283.lib.recipe.ingredient.HTPotionFluidIngredient import hiiragi283.lib.recipe.lookup.fromRecipeType import hiiragi283.lib.registry.HTFluidContent +import hiiragi283.lib.registry.createKey import hiiragi283.lib.registry.getKeyOrThrow import hiiragi283.lib.registry.getOrNull import hiiragi283.lib.resource.modifyPath +import hiiragi283.lib.resource.vanillaId import hiiragi283.lib.util.identity import hiiragi283.ragium.api.RagiumAPI import hiiragi283.ragium.api.RagiumConstants +import hiiragi283.ragium.api.data.RagiumDataComponents +import hiiragi283.ragium.api.data.chemical.HTChemical +import hiiragi283.ragium.api.data.chemical.RagiumChemicals 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.RTOreSlurryWashingRecipe -import hiiragi283.ragium.common.recipe.RTOreSolvingRecipe import hiiragi283.ragium.common.recipe.RTPotionBottleDrainingRecipe import hiiragi283.ragium.common.recipe.RTPotionBottleFillingRecipe import it.unimi.dsi.fastutil.objects.ObjectArrayList import net.minecraft.core.Holder import net.minecraft.core.HolderGetter +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.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 @@ -50,6 +56,7 @@ import net.neoforged.neoforge.registries.datamaps.builtin.Waxable internal data object RagiumCommon { fun initialize(event: FMLCommonSetupEvent) { event.enqueueWork(::initFluidInteractions) + event.enqueueWork(::initFluidComponents) event.enqueueWork(::initRecipeLookups) } @@ -71,6 +78,42 @@ internal data object RagiumCommon { } } + private fun initFluidComponents() { + fun setChemical(content: HTFluidContent, key: ResourceKey) { + BuiltInRegistries.DATA_COMPONENT_INITIALIZERS.add( + content.keyOrThrow + ) { builder: DataComponentMap.Builder, provider: HolderLookup.Provider, _ -> + builder.set(RagiumDataComponents.CHEMICAL, provider.getOrThrow(key)) + } + } + + BuiltInRegistries.DATA_COMPONENT_INITIALIZERS.add( + Registries.FLUID.createKey(vanillaId("water")) + ) { builder: DataComponentMap.Builder, provider: HolderLookup.Provider, _ -> + builder.set(RagiumDataComponents.CHEMICAL, provider.getOrThrow(RagiumChemicals.WATER)) + } + + setChemical(RagiumFluids.MOLTEN_GLASS, RagiumChemicals.SILICON_DIOXIDE) + + setChemical(RagiumFluids.HYDROGEN, RagiumChemicals.HYDROGEN) + setChemical(RagiumFluids.NITROGEN, RagiumChemicals.NITROGEN) + setChemical(RagiumFluids.OXYGEN, RagiumChemicals.OXYGEN) + setChemical(RagiumFluids.CHLORINE, RagiumChemicals.CHLORINE) + + setChemical(RagiumFluids.NITRIC_ACID, RagiumChemicals.NITRIC_ACID) + setChemical(RagiumFluids.HYDROGEN_FLUORIDE, RagiumChemicals.HYDROGEN_FLUORIDE) + setChemical(RagiumFluids.HYDROFLUORIC_ACID, RagiumChemicals.HYDROGEN_FLUORIDE) + + setChemical(RagiumFluids.SALT_WATER, RagiumChemicals.SODIUM_CHLORIDE) + setChemical(RagiumFluids.NAOH_SOLUTION, RagiumChemicals.SODIUM_HYDROXIDE) + setChemical(RagiumFluids.ALUMINA_SOLUTION, RagiumChemicals.ALUMINUM_OXIDE) + setChemical(RagiumFluids.SULFUR_DIOXIDE, RagiumChemicals.SULFUR_DIOXIDE) + setChemical(RagiumFluids.SULFUR_TRIOXIDE, RagiumChemicals.SULFUR_TRIOXIDE) + setChemical(RagiumFluids.SULFURIC_ACID, RagiumChemicals.SULFURIC_ACID) + setChemical(RagiumFluids.HYDROGEN_CHLORIDE, RagiumChemicals.HYDROGEN_CHLORIDE) + setChemical(RagiumFluids.HYDROCHLORIC_ACID, RagiumChemicals.HYDROGEN_CHLORIDE) + } + private fun initRecipeLookups() { // from recipe types RagiumRecipeLookups.ASSEMBLING.fromRecipeType(RagiumRecipeTypes.ASSEMBLING, identity()) @@ -84,8 +127,10 @@ internal data object RagiumCommon { RagiumRecipeLookups.FREEZING.fromRecipeType(RagiumRecipeTypes.FREEZING, identity()) RagiumRecipeLookups.MELTING.fromRecipeType(RagiumRecipeTypes.MELTING, identity()) RagiumRecipeLookups.PYROLYZING.fromRecipeType(RagiumRecipeTypes.PYROLYZING, identity()) + RagiumRecipeLookups.REFINING.fromRecipeType(RagiumRecipeTypes.REFINING, identity()) RagiumRecipeLookups.BATHING.fromRecipeType(RagiumRecipeTypes.BATHING, identity()) + RagiumRecipeLookups.CENTRIFUGING.fromRecipeType(RagiumRecipeTypes.CENTRIFUGING, identity()) RagiumRecipeLookups.MIXING.fromRecipeType(RagiumRecipeTypes.MIXING, identity()) RagiumRecipeLookups.REACTING.fromRecipeType(RagiumRecipeTypes.REACTING, identity()) @@ -189,13 +234,6 @@ internal data object RagiumCommon { }.build() } } - - RagiumRecipeLookups.MIXING.addRecipes( - RecipeKey(RagiumAPI.id("/${RagiumConstants.MIXING}", "ore_solvation")) to RTOreSolvingRecipe - ) - RagiumRecipeLookups.REACTING.addRecipes( - RecipeKey(RagiumAPI.id("/${RagiumConstants.REACTING}", "ore_slurry_washing")) to RTOreSlurryWashingRecipe - ) } private fun HolderGetter.Provider.getOrNull(content: HTFluidContent): HolderSet? = diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt b/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt index bf74266fd5..66466290a7 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt @@ -8,30 +8,36 @@ import hiiragi283.lib.collection.buildSetMultiMap import hiiragi283.lib.collection.buildTable import hiiragi283.lib.collection.flatMapTable import hiiragi283.lib.collection.mutableEnumMapOf +import hiiragi283.lib.item.alchemy.HTPotionHelper import hiiragi283.lib.registry.HTBasicDeferredBlockAndItem +import hiiragi283.lib.registry.HTDecorationContent import hiiragi283.lib.registry.HTDeferredBlockAndItem import hiiragi283.lib.registry.HTDeferredBlockAndItemRegister import hiiragi283.lib.registry.HTDeferredBlockEntityType import hiiragi283.lib.registry.HTDeferredBlockRegister import hiiragi283.lib.registry.HTSimpleDeferredBlockAndItem import hiiragi283.lib.registry.ItemWithContextFactory +import hiiragi283.lib.transfer.fluid.HTItemAccessFluidHandler import hiiragi283.ragium.api.RagiumAPI 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.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.storage.HTPotionTankBlock import hiiragi283.ragium.common.block.storage.HTTankBlock import hiiragi283.ragium.common.block.storage.HTVoidTankBlock import hiiragi283.ragium.common.item.block.HTCreativeTankBlockItem +import hiiragi283.ragium.common.item.block.HTPotionTankBlockItem import net.minecraft.core.component.DataComponentMap import net.minecraft.core.component.DataComponents -import net.minecraft.resources.ResourceKey import net.minecraft.util.valueproviders.UniformInt import net.minecraft.world.item.Item import net.minecraft.world.item.ItemStack @@ -40,9 +46,9 @@ import net.minecraft.world.level.ItemLike import net.minecraft.world.level.block.Block import net.minecraft.world.level.block.Blocks import net.minecraft.world.level.block.DropExperienceBlock -import net.minecraft.world.level.block.SlabBlock +import net.minecraft.world.level.block.IronBarsBlock import net.minecraft.world.level.block.SoundType -import net.minecraft.world.level.block.StairBlock +import net.minecraft.world.level.block.TransparentBlock import net.minecraft.world.level.block.state.BlockBehaviour import net.minecraft.world.level.material.MapColor import net.neoforged.bus.api.IEventBus @@ -51,7 +57,6 @@ import net.neoforged.neoforge.event.ModifyDefaultComponentsEvent import net.neoforged.neoforge.transfer.InfiniteResourceHandler import net.neoforged.neoforge.transfer.energy.InfiniteEnergyHandler import net.neoforged.neoforge.transfer.fluid.FluidResource -import net.neoforged.neoforge.transfer.fluid.ItemAccessFluidHandler data object RagiumBlocks { @JvmStatic @@ -137,7 +142,11 @@ data object RagiumBlocks { material, REGISTER.registerSimple( part.createName(material), - blockFactory = { DropExperienceBlock(UniformInt.of(0, 2), properties.setId(it)) } + blockFactory = { DropExperienceBlock(UniformInt.of(0, 2), properties.setId(it)) }, + itemProp = { prop: Item.Properties -> + material.chemicalKey?.let { prop.delayedHolderComponent(RagiumDataComponents.CHEMICAL, it) } + prop + } ) ) } @@ -149,9 +158,9 @@ data object RagiumBlocks { RagiumMaterial.Fuel.COAL_COKE to copyOf(Blocks.COAL_BLOCK).mapColor(MapColor.COLOR_GRAY), RagiumMaterial.Fuel.PITCH_COKE to copyOf(Blocks.COAL_BLOCK).mapColor(MapColor.COLOR_BLUE), RagiumMaterial.Metal.ALUMINUM to copyOf(Blocks.COPPER_BLOCK).mapColor(MapColor.COLOR_PINK), - RagiumMaterial.Metal.SOOTY_IRON to copyOf(Blocks.IRON_BLOCK).mapColor(MapColor.COLOR_GRAY), - RagiumMaterial.Metal.BLACK_STEEL to copyOf(Blocks.IRON_BLOCK).mapColor(MapColor.COLOR_BLACK), - RagiumMaterial.Metal.VOID_METAL to copyOf(Blocks.IRON_BLOCK).mapColor(MapColor.TERRACOTTA_BLUE) + RagiumMaterial.Alloy.SOOTY_IRON to copyOf(Blocks.IRON_BLOCK).mapColor(MapColor.COLOR_GRAY), + RagiumMaterial.Alloy.BLACK_STEEL to copyOf(Blocks.IRON_BLOCK).mapColor(MapColor.COLOR_BLACK), + RagiumMaterial.Alloy.VOID_METAL to copyOf(Blocks.IRON_BLOCK).mapColor(MapColor.TERRACOTTA_BLUE) ).associateTo( sortedMapOf(RagiumMaterial.COMPARATOR) ) { (material: RagiumMaterial, properties: BlockBehaviour.Properties) -> @@ -185,42 +194,48 @@ data object RagiumBlocks { // Fluorite @JvmField - val FLUORITE_BLOCK: HTSimpleDeferredBlockAndItem = - REGISTER.registerSimple("fluorite_block", copyOf(Blocks.QUARTZ_BLOCK).mapColor(MapColor.COLOR_GREEN)) - - @JvmField - val FLUORITE_SLAB: HTBasicDeferredBlockAndItem = REGISTER.registerSimple( - "fluorite_slab", - copyOf(Blocks.QUARTZ_SLAB), - ::SlabBlock + val FLUORITE_BLOCK: HTSimpleDeferredBlockAndItem = REGISTER.registerSimple( + "fluorite_block", + copyOf(Blocks.QUARTZ_BLOCK).mapColor(MapColor.COLOR_GREEN), + itemProp = { it.delayedHolderComponent(RagiumDataComponents.CHEMICAL, RagiumChemicals.FLUORITE) } ) @JvmField - val FLUORITE_STAIRS: HTBasicDeferredBlockAndItem = REGISTER.registerSimple( - "fluorite_stairs", - blockFactory = { key: ResourceKey -> - StairBlock(FLUORITE_BLOCK.defaultState, copyOf(FLUORITE_BLOCK.getOrThrow()).setId(key)) - } + val FLUORITE_DECORATION: HTDecorationContent = HTDecorationContent.create( + REGISTER, + RagiumMaterial.Gem.FLUORITE.materialName, + FLUORITE_BLOCK ) // Cryolite + /*@JvmField + val CRYOLITE_BLOCK: HTSimpleDeferredBlockAndItem = REGISTER.registerSimple( + "cryolite_block", + copyOf(Blocks.QUARTZ_BLOCK), + itemProp = { it.delayedHolderComponent(RagiumDataComponents.CHEMICAL, RagiumChemicals.CRYOLITE) } + ) + @JvmField - val CRYOLITE_BLOCK: HTSimpleDeferredBlockAndItem = - REGISTER.registerSimple("cryolite_block", copyOf(Blocks.QUARTZ_BLOCK)) + val CRYOLITE_DECORATION: HTDecorationContent = HTDecorationContent.create( + REGISTER, + RagiumMaterial.Gem.CRYOLITE.materialName, + CRYOLITE_BLOCK + )*/ + // Glass @JvmField - val CRYOLITE_SLAB: HTBasicDeferredBlockAndItem = REGISTER.registerSimple( - "cryolite_slab", - copyOf(Blocks.QUARTZ_SLAB), - ::SlabBlock - ) + val QUARTZ_GLASS: HTBasicDeferredBlockAndItem = + REGISTER.registerSimple("quartz_glass", copyOf(Blocks.GLASS), ::TransparentBlock) @JvmField - val CRYOLITE_STAIRS: HTBasicDeferredBlockAndItem = REGISTER.registerSimple( - "cryolite_stairs", - blockFactory = { key: ResourceKey -> - StairBlock(CRYOLITE_BLOCK.defaultState, copyOf(CRYOLITE_BLOCK.getOrThrow()).setId(key)) - } + val QUARTZ_GLASS_PANE: HTBasicDeferredBlockAndItem = + REGISTER.registerSimple("quartz_glass_pane", copyOf(Blocks.GLASS_PANE), ::IronBarsBlock) + + // Helper + @JvmField + val ALL_DECORATIONS: List = listOf( + FLUORITE_DECORATION + // CRYOLITE_DECORATION ) // Machine // @@ -276,10 +291,6 @@ data object RagiumBlocks { val CHEMICAL_REACTOR: HTBasicDeferredBlockAndItem = registerFakeMachine(RagiumConstants.CHEMICAL_REACTOR) - @JvmField - val ELECTROLYZER: HTBasicDeferredBlockAndItem = - registerFakeMachine(RagiumConstants.ELECTROLYZER) - @JvmField val MIXER: HTBasicDeferredBlockAndItem = registerMachine(RagiumBlockEntityTypes.MIXER) @@ -294,6 +305,10 @@ data object RagiumBlocks { registerMachine(RagiumBlockEntityTypes.PLANTER) // Electronics + @JvmField + val ELECTROLYZER: HTBasicDeferredBlockAndItem = + registerMachine(RagiumBlockEntityTypes.ELECTROLYZER) + @JvmField val PRECISION_ASSEMBLER: HTBasicDeferredBlockAndItem = registerMachine(RagiumBlockEntityTypes.PRECISION_ASSEMBLER) @@ -326,12 +341,12 @@ data object RagiumBlocks { put(HTMachineType.CHEMICAL, CHEMICAL_BATH) put(HTMachineType.CHEMICAL, CHEMICAL_REACTOR) - put(HTMachineType.CHEMICAL, ELECTROLYZER) put(HTMachineType.CHEMICAL, MIXER) put(HTMachineType.BIO, BREWERY) put(HTMachineType.BIO, PLANTER) + put(HTMachineType.ELECTRONICS, ELECTROLYZER) put(HTMachineType.ELECTRONICS, PRECISION_ASSEMBLER) put(HTMachineType.ELECTRONICS, SCANNER) @@ -339,8 +354,17 @@ data object RagiumBlocks { } ) + // Bus // + + @JvmField + val FLUID_OUTPUT_BUS: HTBasicDeferredBlockAndItem = registerMachine( + RagiumBlockEntityTypes.FLUID_OUTPUT_BUS, + ::HTFluidStorageBlock + ) + // Storage // + // Tank @JvmField val TANK: HTBasicDeferredBlockAndItem = registerMachine( RagiumBlockEntityTypes.TANK, @@ -348,7 +372,14 @@ data object RagiumBlocks { machine().noOcclusion() ) - // Void + @JvmField + val POTION_TANK: HTDeferredBlockAndItem = registerMachine( + RagiumBlockEntityTypes.POTION_TANK, + ::HTPotionTankBlock, + ::HTPotionTankBlockItem, + machine().noOcclusion() + ) + @JvmField val VOID_TANK: HTBasicDeferredBlockAndItem = REGISTER.registerSimple( "void_tank", @@ -356,11 +387,6 @@ data object RagiumBlocks { ::HTVoidTankBlock ) - // Creative - @JvmField - val CREATIVE_BATTERY: HTBasicDeferredBlockAndItem = - registerMachine(RagiumBlockEntityTypes.CREATIVE_BATTERY, ::HTBasicEntityBlock) - @JvmField val CREATIVE_TANK: HTDeferredBlockAndItem = registerMachine( RagiumBlockEntityTypes.CREATIVE_TANK, @@ -369,6 +395,14 @@ data object RagiumBlocks { machine().noOcclusion() ) + @JvmField + val TANKS: List = listOf(TANK, POTION_TANK, VOID_TANK, CREATIVE_TANK) + + // Battery + @JvmField + val CREATIVE_BATTERY: HTBasicDeferredBlockAndItem = + registerMachine(RagiumBlockEntityTypes.CREATIVE_BATTERY, ::HTBasicEntityBlock) + // Decoration // @JvmField @@ -391,13 +425,28 @@ data object RagiumBlocks { event.registerItem( HTFluidCapabilities.item, { _, access -> - ItemAccessFluidHandler( + HTItemAccessFluidHandler.output(access, RagiumConfig.SERVER.tankCapacity.asInt) + }, + FLUID_OUTPUT_BUS + ) + + event.registerItem( + HTFluidCapabilities.item, + { _, access -> + HTItemAccessFluidHandler.create(access, RagiumConfig.SERVER.tankCapacity.asInt) + }, + TANK + ) + event.registerItem( + HTFluidCapabilities.item, + { _, access -> + HTItemAccessFluidHandler.create( access, - RagiumDataComponents.FLUID, - RagiumConfig.SERVER.tankCapacity.asInt + RagiumConfig.SERVER.tankCapacity.asInt, + filter = HTPotionHelper::hasAnyEffect ) }, - TANK + POTION_TANK ) event.registerItem( HTFluidCapabilities.item, @@ -425,17 +474,17 @@ data object RagiumBlocks { private fun modifyDefaultComponents(event: ModifyDefaultComponentsEvent) { // Block setOf( - RagiumMaterial.Metal.BLACK_STEEL to Rarity.UNCOMMON, - RagiumMaterial.Metal.VOID_METAL to Rarity.RARE + RagiumMaterial.Alloy.BLACK_STEEL to Rarity.UNCOMMON, + RagiumMaterial.Alloy.VOID_METAL to Rarity.RARE ).forEach { (material: RagiumMaterial, rarity: Rarity) -> for (part: HTBlockPart in HTBlockPart.entries) { - val block: ItemLike = RagiumBlocks.MATERIAL_BLOCKS[part, material] ?: continue + val block: ItemLike = MATERIAL_BLOCKS[part, material] ?: continue event.modify(block) { builder: DataComponentMap.Builder, _, _ -> builder.set(DataComponents.RARITY, rarity) } } } - event.modify(RagiumBlocks.CREATIVE_BATTERY) { builder: DataComponentMap.Builder, _, _ -> + event.modify(CREATIVE_BATTERY) { builder: DataComponentMap.Builder, _, _ -> builder.set(DataComponents.RARITY, Rarity.EPIC) } } 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 aff07609dc..2fb94841bd 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTBaseMachineBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTBaseMachineBlockEntity.kt @@ -7,8 +7,10 @@ import hiiragi283.lib.gui.widget.HTWidgetHolder import hiiragi283.lib.transfer.fluid.HTBasicFluidTank import hiiragi283.lib.transfer.item.HTBasicItemSlot import hiiragi283.ragium.api.RagiumConfig +import hiiragi283.ragium.common.block.HTHorizontalEntityBlock import hiiragi283.ragium.common.block.HTMachineBlock import net.minecraft.core.BlockPos +import net.minecraft.core.Direction import net.minecraft.server.level.ServerLevel import net.minecraft.world.level.block.entity.BlockEntityType import net.minecraft.world.level.block.state.BlockState @@ -19,6 +21,8 @@ abstract class HTBaseMachineBlockEntity(type: BlockEntityType<*>, pos: BlockPos, HTBlockEntityWithMenu { protected fun getTankCapacity(): IntSupplier = RagiumConfig.SERVER.machine.tankCapacity + fun getFront(): Direction = this.blockState.getValue(HTHorizontalEntityBlock.FACING) + fun isActive(): Boolean = isActive(this.blockState) fun isActive(state: BlockState): Boolean = state.getOptionalValue(HTMachineBlock.IS_ACTIVE).orElseGet { false } diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTFluidStorageBlock.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTFluidStorageBlock.kt new file mode 100644 index 0000000000..41de89b722 --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTFluidStorageBlock.kt @@ -0,0 +1,51 @@ +package hiiragi283.ragium.common.block.entity + +import hiiragi283.lib.registry.HTDeferredBlockEntityType +import hiiragi283.lib.transfer.fluid.HTFluidTank +import hiiragi283.lib.world.getTypedBlockEntity +import hiiragi283.ragium.common.block.HTBasicEntityBlock +import hiiragi283.ragium.common.block.entity.storage.base.HTBaseTankBlockEntity +import net.minecraft.core.BlockPos +import net.minecraft.world.InteractionHand +import net.minecraft.world.InteractionResult +import net.minecraft.world.entity.player.Player +import net.minecraft.world.item.ItemStack +import net.minecraft.world.level.Level +import net.minecraft.world.level.block.state.BlockState +import net.minecraft.world.phys.BlockHitResult +import net.neoforged.neoforge.transfer.fluid.FluidUtil + +open class HTFluidStorageBlock(type: HTDeferredBlockEntityType<*>, properties: Properties) : + HTBasicEntityBlock(type, properties) { + override fun useItemOn( + itemStack: ItemStack, + state: BlockState, + level: Level, + pos: BlockPos, + player: Player, + hand: InteractionHand, + hitResult: BlockHitResult + ): InteractionResult { + val result: InteractionResult = super.useItemOn(itemStack, state, level, pos, player, hand, hitResult) + if (itemStack.isEmpty) return result + if (!player.isShiftKeyDown) { + val tank: HTFluidTank = + level.getTypedBlockEntity(pos)?.tank ?: return InteractionResult.FAIL + if (interactTank(itemStack, state, level, pos, player, hand, hitResult, tank)) { + return InteractionResult.SUCCESS + } + } + return result + } + + protected open fun interactTank( + itemStack: ItemStack, + state: BlockState, + level: Level, + pos: BlockPos, + player: Player, + hand: InteractionHand, + hitResult: BlockHitResult, + tank: HTFluidTank + ): Boolean = FluidUtil.interactWithFluidHandler(player, hand, level, pos, hitResult.direction, null) +} 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 d354f3c0e2..60a46c28dc 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/RagiumBlockEntityTypes.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/RagiumBlockEntityTypes.kt @@ -19,6 +19,7 @@ import hiiragi283.ragium.common.block.entity.machine.HTChemicalBathBlockEntity import hiiragi283.ragium.common.block.entity.machine.HTCompressorBlockEntity import hiiragi283.ragium.common.block.entity.machine.HTCrusherBlockEntity import hiiragi283.ragium.common.block.entity.machine.HTCuttingMachineBlockEntity +import hiiragi283.ragium.common.block.entity.machine.HTElectrolyzerBlockEntity import hiiragi283.ragium.common.block.entity.machine.HTEnchanterBlockEntity import hiiragi283.ragium.common.block.entity.machine.HTFreezerBlockEntity import hiiragi283.ragium.common.block.entity.machine.HTMelterBlockEntity @@ -29,6 +30,8 @@ import hiiragi283.ragium.common.block.entity.machine.HTProcessorBlockEntity import hiiragi283.ragium.common.block.entity.machine.HTSmelterBlockEntity 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 @@ -112,6 +115,10 @@ data object RagiumBlockEntityTypes { registerTick(RagiumConstants.PLANTER, ::HTPlanterBlockEntity) // Electronics + @JvmField + val ELECTROLYZER: HTDeferredBlockEntityType = + registerTick(RagiumConstants.ELECTROLYZER, ::HTElectrolyzerBlockEntity) + @JvmField val PRECISION_ASSEMBLER: HTDeferredBlockEntityType = registerTick(RagiumConstants.PRECISION_ASSEMBLER, ::HTPrecisionAssemblerBlockEntity) @@ -121,12 +128,22 @@ data object RagiumBlockEntityTypes { val ENCHANTER: HTDeferredBlockEntityType = registerTick(RagiumConstants.ENCHANTER, ::HTEnchanterBlockEntity) + // Bus // + + @JvmField + val FLUID_OUTPUT_BUS: HTDeferredBlockEntityType = + registerTick("fluid_output_bus", ::HTFluidOutputBusBlockEntity) + // Storage // @JvmField val TANK: HTDeferredBlockEntityType = registerTick(HTConstants.TANK, ::HTTankBlockEntity) + @JvmField + val POTION_TANK: HTDeferredBlockEntityType = + registerTick("potion_tank", ::HTPotionTankBlockEntity) + @JvmField val CREATIVE_BATTERY: HTDeferredBlockEntityType = registerTick("creative_battery", ::HTCreativeBatteryBlockEntity) @@ -182,11 +199,15 @@ data object RagiumBlockEntityTypes { registerProcessor(BREWERY.get()) registerProcessor(PLANTER.get()) + registerProcessor(ELECTROLYZER.get()) registerProcessor(PRECISION_ASSEMBLER.get()) registerProcessor(ENCHANTER.get()) + // Bus + registerBlockEntity(FLUID_OUTPUT_BUS.get()) // Storage registerBlockEntity(TANK.get()) + registerBlockEntity(POTION_TANK.get()) event.registerBlock( HTFluidCapabilities.block, 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 new file mode 100644 index 0000000000..1e7a03f10f --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTElectrolyzerBlockEntity.kt @@ -0,0 +1,151 @@ +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.HTOutputSlot +import hiiragi283.lib.recipe.handler.HTOutputSlotHelper +import hiiragi283.lib.recipe.input.HTSingleFluidRecipeInput +import hiiragi283.lib.recipe.lookup.HTRecipeCache +import hiiragi283.lib.transfer.fluid.HTBasicFluidTank +import hiiragi283.lib.transfer.useTransaction +import hiiragi283.lib.world.getTypedBlockEntity +import hiiragi283.ragium.api.RagiumConfig +import hiiragi283.ragium.api.config.HTEnergyConfig +import hiiragi283.ragium.api.recipe.RTElectrolyzingRecipe +import hiiragi283.ragium.api.recipe.RagiumRecipeLookups +import hiiragi283.ragium.common.block.entity.RagiumBlockEntityTypes +import hiiragi283.ragium.common.block.entity.storage.HTFluidOutputBusBlockEntity +import hiiragi283.ragium.common.gui.widget.HTFluidWidget +import hiiragi283.ragium.common.transfer.fluid.HTVariableFluidTank +import hiiragi283.ragium.common.transfer.holder.HTBasicFluidTankHolder +import hiiragi283.ragium.common.transfer.holder.HTSlotInfo +import net.minecraft.core.BlockPos +import net.minecraft.core.Direction +import net.minecraft.server.level.ServerLevel +import net.minecraft.sounds.SoundEvents +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 HTElectrolyzerBlockEntity(pos: BlockPos, state: BlockState) : + HTProcessorBlockEntity.Energized(RagiumBlockEntityTypes.ELECTROLYZER.get(), pos, state) { + private val cache: HTRecipeCache = + HTRecipeCache(RagiumRecipeLookups.ELECTROLYZING) + + 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< + HTSingleFluidRecipeInput, + RTElectrolyzingRecipe.ElectrolyzedResult, + RTElectrolyzingRecipe + >() { + private val machine: HTElectrolyzerBlockEntity = this@HTElectrolyzerBlockEntity + private val front: Direction get() = machine.getFront() + private val inputTank: HTFluidInputTank by lazy { HTFluidInputTank(machine.inputTank) } + + private val outputTank: HTOutputSlot by lazy { HTOutputSlotHelper.forFluid(machine.outputTank) } + private val rightOutputTank: HTOutputSlot? get() = level + ?.getTypedBlockEntity(blockPos.relative(front.clockWise)) + ?.tank + ?.let(HTOutputSlotHelper::forFluid) + private val leftOutputTank: HTOutputSlot? get() = level + ?.getTypedBlockEntity(blockPos.relative(front.counterClockWise)) + ?.tank + ?.let(HTOutputSlotHelper::forFluid) + + override fun createInput(): HTSingleFluidRecipeInput = HTSingleFluidRecipeInput(inputTank.getStoredInput()) + + override fun findRecipe(level: ServerLevel, input: HTSingleFluidRecipeInput): RTElectrolyzingRecipe? = + cache.findFirstRecipe(input, level) + + override fun canComplete( + recipe: RTElectrolyzingRecipe, + input: HTSingleFluidRecipeInput, + output: RTElectrolyzingRecipe.ElectrolyzedResult + ): Boolean = + rightOutputTank != null && leftOutputTank != null && useTransaction { transaction: Transaction -> + val inputConsume: FluidInstance = recipe.getMatchingStack(input.fluid) + when { + inputTank.use(inputConsume, transaction).failed -> false + + else -> { + val (right: FluidStack, left: FluidStack, main: FluidStack) = output + when { + rightOutputTank!!.take(right, transaction) != HTOutputSlot.TakeResult.FULL -> false + leftOutputTank!!.take(left, transaction) != HTOutputSlot.TakeResult.FULL -> false + else -> outputTank.take(main, transaction).fullOrNoneTaken + } + } + } + } + + override fun onComplete( + recipe: RTElectrolyzingRecipe, + input: HTSingleFluidRecipeInput, + output: RTElectrolyzingRecipe.ElectrolyzedResult + ) { + useTransaction { transaction: Transaction -> + val inputConsume: FluidInstance = recipe.getMatchingStack(input.fluid) + inputTank.use(inputConsume, transaction) + val (right: FluidStack, left: FluidStack, main: FluidStack) = output + outputTank.take(main, transaction) + rightOutputTank?.take(right, transaction) + leftOutputTank?.take(left, transaction) + transaction.commit() + } + playSound(SoundEvents.FIREWORK_ROCKET_TWINKLE) + } + } + } + + private lateinit var inputTank: HTBasicFluidTank + private lateinit var outputTank: HTBasicFluidTank + + 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)) + } + + override fun setupMenu(widgetHolder: HTWidgetHolder) { + super.setupMenu(widgetHolder) + addEnergySlot(widgetHolder, HTSlotHelper.getSlotPosX(3.75), HTSlotHelper.getSlotPosY(2)) + // progress + addProgressBar(widgetHolder) + // inputs + widgetHolder += HTFluidWidget.Tank( + inputTank, + HTSlotHelper.getSlotPosX(2), + HTSlotHelper.getSlotPosY(0), + HTBackgroundType.INPUT, + false + ) + widgetHolder.track(inputTank) + // output + widgetHolder += HTFluidWidget.Tank( + outputTank, + HTSlotHelper.getSlotPosX(6), + HTSlotHelper.getSlotPosY(0), + HTBackgroundType.OUTPUT, + false + ) + widgetHolder.track(outputTank) + } + + override fun getConfig(): HTEnergyConfig = RagiumConfig.SERVER.machine.electrolyzer +} 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 36f9fd2387..3028074667 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 @@ -1,18 +1,124 @@ package hiiragi283.ragium.common.block.entity.machine -import hiiragi283.lib.sounds.HTSoundInstance +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.HTFluidToItemRecipe +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.lookup.HTRecipeCache +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.block.entity.machine.base.HTItemAndFluidToItemBlockEntity +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.transfer.transaction.Transaction class HTFreezerBlockEntity(pos: BlockPos, state: BlockState) : - HTItemAndFluidToItemBlockEntity(RagiumBlockEntityTypes.FREEZER.get(), RagiumRecipeLookups.FREEZING, pos, state) { - override fun getCompletedSound(): HTSoundInstance = HTSoundInstance(SoundEvents.BUCKET_FILL_POWDER_SNOW) + HTProcessorBlockEntity.Energized(RagiumBlockEntityTypes.FREEZER.get(), pos, state) { + private val cache: HTRecipeCache = + HTRecipeCache(RagiumRecipeLookups.FREEZING) + + override fun writeValue(output: ValueOutput) { + super.writeValue(output) + output.putChild(HTConstants.LAST_RECIPE, cache) + } + + override fun readValue(input: ValueInput) { + super.readValue(input) + input.readChild(HTConstants.LAST_RECIPE, cache) + } + + override fun initializeVariables(listener: Runnable) { + super.initializeVariables(listener) + recipeHandler = object : EnergizedHandler() { + private val inputTank: HTFluidInputTank by lazy { HTFluidInputTank(this@HTFreezerBlockEntity.inputTank) } + private val outputSlot: HTOutputSlot by lazy { + HTOutputSlotHelper.forItem(this@HTFreezerBlockEntity.outputSlot) + } + + override fun createInput(): HTSingleFluidRecipeInput = HTSingleFluidRecipeInput(inputTank.getStoredInput()) + + override fun findRecipe(level: ServerLevel, input: HTSingleFluidRecipeInput): HTFluidToItemRecipe? = + cache.findFirstRecipe(input, level) + + override fun canComplete( + recipe: HTFluidToItemRecipe, + input: HTSingleFluidRecipeInput, + output: ItemStack + ): Boolean = useTransaction { transaction: Transaction -> + val inputConsume: FluidInstance = recipe.getMatchingStack(input.fluid) + when { + inputTank.use(inputConsume, transaction).failed -> false + else -> outputSlot.take(output, transaction) == HTOutputSlot.TakeResult.FULL + } + } + + override fun onComplete(recipe: HTFluidToItemRecipe, input: HTSingleFluidRecipeInput, output: ItemStack) { + useTransaction { transaction: Transaction -> + inputTank.use(recipe.getMatchingStack(input.fluid), transaction) + outputSlot.take(output, transaction) + transaction.commit() + } + playSound(SoundEvents.BUCKET_FILL_POWDER_SNOW) + } + } + } + + private lateinit var inputTank: HTVariableFluidTank + + override fun createFluidTanks(builder: HTBasicFluidTankHolder.Builder, listener: Runnable) { + inputTank = builder.addSlot(HTSlotInfo.INPUT, HTVariableFluidTank.input(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) + // output + widgetHolder += HTItemWidget.Container( + outputSlot, + 0, + HTSlotHelper.getSlotPosX(6), + HTSlotHelper.getSlotPosY(1), + HTBackgroundType.OUTPUT + ) + widgetHolder.track(outputSlot) + } override fun getConfig(): HTEnergyConfig = RagiumConfig.SERVER.machine.freezer } 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 2de31fd35a..42069ac88d 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemAndFluidToFluidBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemAndFluidToFluidBlockEntity.kt @@ -83,10 +83,8 @@ abstract class HTItemAndFluidToFluidBlockEntity( input: HTItemAndFluidRecipeInput, output: FluidStack ): Boolean = useTransaction { transaction: Transaction -> - val (itemInput: ItemInstance, fluidInput: FluidInstance) = recipe.getMatchingStack( - input.item, - input.fluid - ) + val (itemInput: ItemInstance, fluidInput: FluidInstance) = + recipe.getMatchingStack(input.item, input.fluid) when { inputSlot.use(itemInput, transaction).failed -> false inputTank.use(fluidInput, transaction).failed -> false @@ -100,10 +98,8 @@ abstract class HTItemAndFluidToFluidBlockEntity( output: FluidStack ) { useTransaction { transaction: Transaction -> - val (itemInput: ItemInstance, fluidInput: FluidInstance) = recipe.getMatchingStack( - input.item, - input.fluid - ) + val (itemInput: ItemInstance, fluidInput: FluidInstance) = + recipe.getMatchingStack(input.item, input.fluid) 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 3c6b7d0374..313f51698b 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemAndFluidToItemBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemAndFluidToItemBlockEntity.kt @@ -80,10 +80,8 @@ abstract class HTItemAndFluidToItemBlockEntity( input: HTItemAndFluidRecipeInput, output: ItemStack ): Boolean = useTransaction { transaction: Transaction -> - val (itemInput: ItemInstance, fluidInput: FluidInstance) = recipe.getMatchingStack( - input.item, - input.fluid - ) + val (itemInput: ItemInstance, fluidInput: FluidInstance) = + recipe.getMatchingStack(input.item, input.fluid) when { inputSlot.use(itemInput, transaction).failed -> false inputTank.use(fluidInput, transaction).failed -> false @@ -97,10 +95,8 @@ abstract class HTItemAndFluidToItemBlockEntity( output: ItemStack ) { useTransaction { transaction: Transaction -> - val (itemInput: ItemInstance, fluidInput: FluidInstance) = recipe.getMatchingStack( - input.item, - input.fluid - ) + val (itemInput: ItemInstance, fluidInput: FluidInstance) = + recipe.getMatchingStack(input.item, input.fluid) 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 511f0332fd..5c2f676b11 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 @@ -79,7 +79,7 @@ abstract class HTItemToDoubleItemBlockEntity( when { inputSlot.use(inputConsume, transaction).failed -> false primarySlot.take(output.first, transaction) != HTOutputSlot.TakeResult.FULL -> false - else -> secondarySlot.take(output.second, transaction) == HTOutputSlot.TakeResult.FULL + else -> secondarySlot.take(output.second, transaction).fullOrNoneTaken } } diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTCreativeTankBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTCreativeTankBlockEntity.kt index 19aa9a1a61..92ecf209a6 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTCreativeTankBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTCreativeTankBlockEntity.kt @@ -1,37 +1,35 @@ package hiiragi283.ragium.common.block.entity.storage -import hiiragi283.ragium.api.data.RagiumDataComponents +import hiiragi283.ragium.api.util.HTStorageHelper import hiiragi283.ragium.common.block.entity.RagiumBlockEntityTypes import hiiragi283.ragium.common.block.entity.storage.base.HTBaseTankBlockEntity import hiiragi283.ragium.common.transfer.fluid.HTCreativeFluidTank +import hiiragi283.ragium.common.transfer.holder.HTBasicFluidTankHolder +import hiiragi283.ragium.common.transfer.holder.HTSlotInfo import net.minecraft.core.BlockPos import net.minecraft.core.component.DataComponentGetter import net.minecraft.core.component.DataComponentMap import net.minecraft.world.level.block.state.BlockState -import net.neoforged.neoforge.fluids.SimpleFluidContent import net.neoforged.neoforge.transfer.fluid.FluidResource class HTCreativeTankBlockEntity(pos: BlockPos, state: BlockState) : HTBaseTankBlockEntity(RagiumBlockEntityTypes.CREATIVE_TANK.get(), pos, state) { - override val tank: HTCreativeFluidTank = HTCreativeFluidTank() + override lateinit var tank: HTCreativeFluidTank + private set - override fun initTank(listener: Runnable) {} + override fun createFluidTanks(builder: HTBasicFluidTankHolder.Builder, listener: Runnable) { + tank = builder.addSlot(HTSlotInfo.INPUT, HTCreativeFluidTank()) + } // Sync // override fun applyImplicitComponents(components: DataComponentGetter) { super.applyImplicitComponents(components) - components.get(RagiumDataComponents.FLUID) - ?.copy() - ?.let(FluidResource::of) - ?.let(tank::resource::set) + tank.resource = HTStorageHelper.getFluid(components).let(FluidResource::of) } override fun collectImplicitComponents(components: DataComponentMap.Builder) { super.collectImplicitComponents(components) - val content: SimpleFluidContent = tank.resource.toStack(1).let(SimpleFluidContent::copyOf) - if (!content.isEmpty) { - components.set(RagiumDataComponents.FLUID, content) - } + HTStorageHelper.updateFluid(components, tank.resource.toStack(1)) } } diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTFluidOutputBusBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTFluidOutputBusBlockEntity.kt new file mode 100644 index 0000000000..a7976a0ef5 --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTFluidOutputBusBlockEntity.kt @@ -0,0 +1,39 @@ +package hiiragi283.ragium.common.block.entity.storage + +import hiiragi283.lib.transfer.fluid.HTBasicFluidTank +import hiiragi283.ragium.api.RagiumConfig +import hiiragi283.ragium.api.util.HTStorageHelper +import hiiragi283.ragium.common.block.entity.RagiumBlockEntityTypes +import hiiragi283.ragium.common.block.entity.storage.base.HTBaseTankBlockEntity +import hiiragi283.ragium.common.transfer.fluid.HTVariableFluidTank +import hiiragi283.ragium.common.transfer.holder.HTBasicFluidTankHolder +import hiiragi283.ragium.common.transfer.holder.HTSlotInfo +import net.minecraft.core.BlockPos +import net.minecraft.core.component.DataComponentGetter +import net.minecraft.core.component.DataComponentMap +import net.minecraft.world.level.block.state.BlockState + +class HTFluidOutputBusBlockEntity(pos: BlockPos, state: BlockState) : + HTBaseTankBlockEntity(RagiumBlockEntityTypes.FLUID_OUTPUT_BUS.get(), pos, state) { + override lateinit var tank: HTBasicFluidTank + private set + + override fun createFluidTanks(builder: HTBasicFluidTankHolder.Builder, listener: Runnable) { + tank = builder.addSlot( + HTSlotInfo.OUTPUT, + HTVariableFluidTank.output(RagiumConfig.SERVER.tankCapacity, listener) + ) + } + + // Sync // + + override fun applyImplicitComponents(components: DataComponentGetter) { + super.applyImplicitComponents(components) + tank.setStack(HTStorageHelper.getFluid(components)) + } + + override fun collectImplicitComponents(components: DataComponentMap.Builder) { + super.collectImplicitComponents(components) + HTStorageHelper.updateFluid(components, tank.getStackCopy()) + } +} diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTPotionTankBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTPotionTankBlockEntity.kt new file mode 100644 index 0000000000..7c3cffd235 --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTPotionTankBlockEntity.kt @@ -0,0 +1,44 @@ +package hiiragi283.ragium.common.block.entity.storage + +import hiiragi283.lib.item.alchemy.HTPotionHelper +import hiiragi283.lib.transfer.fluid.HTBasicFluidTank +import hiiragi283.ragium.api.RagiumConfig +import hiiragi283.ragium.api.util.HTStorageHelper +import hiiragi283.ragium.common.block.entity.RagiumBlockEntityTypes +import hiiragi283.ragium.common.block.entity.storage.base.HTBaseTankBlockEntity +import hiiragi283.ragium.common.transfer.fluid.HTVariableFluidTank +import hiiragi283.ragium.common.transfer.holder.HTBasicFluidTankHolder +import hiiragi283.ragium.common.transfer.holder.HTSlotInfo +import net.minecraft.core.BlockPos +import net.minecraft.core.component.DataComponentGetter +import net.minecraft.core.component.DataComponentMap +import net.minecraft.world.level.block.state.BlockState + +class HTPotionTankBlockEntity(pos: BlockPos, state: BlockState) : + HTBaseTankBlockEntity(RagiumBlockEntityTypes.POTION_TANK.get(), pos, state) { + override lateinit var tank: HTBasicFluidTank + private set + + override fun createFluidTanks(builder: HTBasicFluidTankHolder.Builder, listener: Runnable) { + tank = builder.addSlot( + HTSlotInfo.INPUT, + HTVariableFluidTank.create( + RagiumConfig.SERVER.tankCapacity, + listener, + filter = HTPotionHelper::hasAnyEffect + ) + ) + } + + // Sync // + + override fun applyImplicitComponents(components: DataComponentGetter) { + super.applyImplicitComponents(components) + tank.setStack(HTStorageHelper.getFluid(components)) + } + + override fun collectImplicitComponents(components: DataComponentMap.Builder) { + super.collectImplicitComponents(components) + HTStorageHelper.updateFluid(components, tank.getStackCopy()) + } +} diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTTankBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTTankBlockEntity.kt index 72f8e12820..6daf328790 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTTankBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTTankBlockEntity.kt @@ -2,37 +2,38 @@ package hiiragi283.ragium.common.block.entity.storage import hiiragi283.lib.transfer.fluid.HTBasicFluidTank import hiiragi283.ragium.api.RagiumConfig -import hiiragi283.ragium.api.data.RagiumDataComponents +import hiiragi283.ragium.api.util.HTStorageHelper import hiiragi283.ragium.common.block.entity.RagiumBlockEntityTypes import hiiragi283.ragium.common.block.entity.storage.base.HTBaseTankBlockEntity import hiiragi283.ragium.common.transfer.fluid.HTVariableFluidTank +import hiiragi283.ragium.common.transfer.holder.HTBasicFluidTankHolder +import hiiragi283.ragium.common.transfer.holder.HTSlotInfo import net.minecraft.core.BlockPos import net.minecraft.core.component.DataComponentGetter import net.minecraft.core.component.DataComponentMap import net.minecraft.world.level.block.state.BlockState -import net.neoforged.neoforge.fluids.SimpleFluidContent class HTTankBlockEntity(pos: BlockPos, state: BlockState) : HTBaseTankBlockEntity(RagiumBlockEntityTypes.TANK.get(), pos, state) { override lateinit var tank: HTBasicFluidTank private set - override fun initTank(listener: Runnable) { - tank = HTVariableFluidTank.create(RagiumConfig.SERVER.tankCapacity, listener) + override fun createFluidTanks(builder: HTBasicFluidTankHolder.Builder, listener: Runnable) { + tank = builder.addSlot( + HTSlotInfo.INPUT, + HTVariableFluidTank.create(RagiumConfig.SERVER.tankCapacity, listener) + ) } // Sync // override fun applyImplicitComponents(components: DataComponentGetter) { super.applyImplicitComponents(components) - components.get(RagiumDataComponents.FLUID)?.copy()?.let(tank::setStack) + tank.setStack(HTStorageHelper.getFluid(components)) } override fun collectImplicitComponents(components: DataComponentMap.Builder) { super.collectImplicitComponents(components) - val content: SimpleFluidContent = tank.getStackCopy().let(SimpleFluidContent::copyOf) - if (!content.isEmpty) { - components.set(RagiumDataComponents.FLUID, content) - } + HTStorageHelper.updateFluid(components, tank.getStackCopy()) } } diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/base/HTBaseTankBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/base/HTBaseTankBlockEntity.kt index 311257a9bb..60a2645939 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/base/HTBaseTankBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/base/HTBaseTankBlockEntity.kt @@ -4,8 +4,8 @@ import hiiragi283.lib.transfer.fluid.HTFluidTank import hiiragi283.lib.transfer.holder.HTResourceSlotHolder import hiiragi283.ragium.api.util.HTStorageHelper import hiiragi283.ragium.common.block.entity.HTConfigurableBlockEntity +import hiiragi283.ragium.common.transfer.holder.HTBasicFluidTankHolder import net.minecraft.core.BlockPos -import net.minecraft.core.Direction import net.minecraft.server.level.ServerLevel import net.minecraft.world.level.Level import net.minecraft.world.level.block.entity.BlockEntityType @@ -17,18 +17,13 @@ abstract class HTBaseTankBlockEntity(type: BlockEntityType<*>, pos: BlockPos, st HTConfigurableBlockEntity(type, pos, state) { abstract val tank: HTFluidTank - override fun createFluidHandler(listener: Runnable): HTResourceSlotHolder { - initTank(listener) - return object : HTResourceSlotHolder { - override fun getSlots(side: Direction?): List = listOf(tank) - - override fun canInsert(side: Direction?): Boolean = true - - override fun canExtract(side: Direction?): Boolean = true - } + final override fun createFluidHandler(listener: Runnable): HTResourceSlotHolder? { + val builder: HTBasicFluidTankHolder.Builder = HTBasicFluidTankHolder.builder(this) + createFluidTanks(builder, listener) + return builder.build() } - protected abstract fun initTank(listener: Runnable) + protected open fun createFluidTanks(builder: HTBasicFluidTankHolder.Builder, listener: Runnable) {} override fun markDirtyComparator() { level?.updateNeighbourForOutputSignal(blockPos, blockState.block) diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/storage/HTPotionTankBlock.kt b/src/main/kotlin/hiiragi283/ragium/common/block/storage/HTPotionTankBlock.kt new file mode 100644 index 0000000000..f9f8bd35c7 --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/block/storage/HTPotionTankBlock.kt @@ -0,0 +1,70 @@ +package hiiragi283.ragium.common.block.storage + +import hiiragi283.lib.item.HTItemDropHelper +import hiiragi283.lib.item.alchemy.HTBottleType +import hiiragi283.lib.item.alchemy.HTPotionHelper +import hiiragi283.lib.registry.HTDeferredBlockEntityType +import hiiragi283.lib.registry.HTSimpleDeferredItem +import hiiragi283.lib.transfer.HTTransferAccess +import hiiragi283.lib.transfer.fluid.HTFluidTank +import hiiragi283.lib.transfer.fluid.toResourcePair +import hiiragi283.lib.transfer.useTransaction +import net.minecraft.core.BlockPos +import net.minecraft.core.component.DataComponents +import net.minecraft.world.InteractionHand +import net.minecraft.world.entity.player.Player +import net.minecraft.world.item.ItemStack +import net.minecraft.world.level.Level +import net.minecraft.world.level.block.state.BlockState +import net.minecraft.world.phys.BlockHitResult +import net.neoforged.neoforge.fluids.FluidStack +import net.neoforged.neoforge.transfer.fluid.FluidResource +import net.neoforged.neoforge.transfer.transaction.Transaction + +class HTPotionTankBlock(type: HTDeferredBlockEntityType<*>, properties: Properties) : + HTTankBlock(type, properties) { + override fun interactTank( + itemStack: ItemStack, + state: BlockState, + level: Level, + pos: BlockPos, + player: Player, + hand: InteractionHand, + hitResult: BlockHitResult, + tank: HTFluidTank + ): Boolean = handlePotionBottle(itemStack, player, tank) || + super.interactTank(itemStack, state, level, pos, player, hand, hitResult, tank) + + private fun handlePotionBottle(itemStack: ItemStack, player: Player, tank: HTFluidTank): Boolean { + useTransaction { transaction: Transaction -> + // ポーション瓶 -> 液体ポーション + 瓶 + 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() + if (tank.insert(resource, amount, transaction, HTTransferAccess.EXTERNAL) == amount) { + val newStack: ItemStack = itemStack.transmuteCopy(emptyBottle, 1) + newStack.remove(DataComponents.POTION_CONTENTS) + HTItemDropHelper.giveStackTo(player, newStack) + itemStack.shrink(1) + transaction.commit() + return true + } + } + } + // 液体ポーション + 瓶 -> ポーション瓶 + val resourceIn: FluidResource = tank.resource + if (resourceIn.isEmpty) return false + 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)) + itemStack.shrink(1) + transaction.commit() + return true + } + return false + } + } +} diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/storage/HTTankBlock.kt b/src/main/kotlin/hiiragi283/ragium/common/block/storage/HTTankBlock.kt index 7138717eb7..d57b307685 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/storage/HTTankBlock.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/storage/HTTankBlock.kt @@ -1,46 +1,20 @@ package hiiragi283.ragium.common.block.storage import hiiragi283.lib.registry.HTDeferredBlockEntityType -import hiiragi283.ragium.common.block.HTBasicEntityBlock +import hiiragi283.ragium.common.block.entity.HTFluidStorageBlock import net.minecraft.core.BlockPos -import net.minecraft.world.InteractionHand -import net.minecraft.world.InteractionResult -import net.minecraft.world.entity.player.Player -import net.minecraft.world.item.ItemStack import net.minecraft.world.level.BlockGetter -import net.minecraft.world.level.Level import net.minecraft.world.level.block.state.BlockState -import net.minecraft.world.phys.BlockHitResult import net.minecraft.world.phys.shapes.CollisionContext import net.minecraft.world.phys.shapes.VoxelShape -import net.neoforged.neoforge.transfer.fluid.FluidUtil -class HTTankBlock(type: HTDeferredBlockEntityType<*>, properties: Properties) : HTBasicEntityBlock(type, properties) { +open class HTTankBlock(type: HTDeferredBlockEntityType<*>, properties: Properties) : + HTFluidStorageBlock(type, properties) { companion object { @JvmField val SHAPE: VoxelShape = box(2.0, 0.0, 2.0, 14.0, 16.0, 14.0) } - override fun useItemOn( - itemStack: ItemStack, - state: BlockState, - level: Level, - pos: BlockPos, - player: Player, - hand: InteractionHand, - hitResult: BlockHitResult - ): InteractionResult { - val result: InteractionResult = super.useItemOn(itemStack, state, level, pos, player, hand, hitResult) - if (itemStack.isEmpty) return result - if (!player.isShiftKeyDown) { - val moved: Boolean = FluidUtil.interactWithFluidHandler(player, hand, level, pos, hitResult.direction, null) - if (moved) { - return InteractionResult.SUCCESS - } - } - return result - } - override fun getShape(state: BlockState, level: BlockGetter, pos: BlockPos, context: CollisionContext): VoxelShape = SHAPE } diff --git a/src/main/kotlin/hiiragi283/ragium/common/data/oreSlurry/RagiumOreSlurryFluidAccess.kt b/src/main/kotlin/hiiragi283/ragium/common/data/oreSlurry/RagiumOreSlurryFluidAccess.kt deleted file mode 100644 index fff47b235d..0000000000 --- a/src/main/kotlin/hiiragi283/ragium/common/data/oreSlurry/RagiumOreSlurryFluidAccess.kt +++ /dev/null @@ -1,9 +0,0 @@ -package hiiragi283.ragium.common.data.oreSlurry - -import hiiragi283.lib.registry.HTFluidContent -import hiiragi283.ragium.api.data.oreSlurry.HTOreSlurryFluidAccess -import hiiragi283.ragium.common.fluid.RagiumFluids - -class RagiumOreSlurryFluidAccess : HTOreSlurryFluidAccess { - override val fluidContent: HTFluidContent get() = RagiumFluids.ORE_SLURRY -} diff --git a/src/main/kotlin/hiiragi283/ragium/common/fluid/HTOreSlurryFluidType.kt b/src/main/kotlin/hiiragi283/ragium/common/fluid/HTOreSlurryFluidType.kt deleted file mode 100644 index a37302eb11..0000000000 --- a/src/main/kotlin/hiiragi283/ragium/common/fluid/HTOreSlurryFluidType.kt +++ /dev/null @@ -1,15 +0,0 @@ -package hiiragi283.ragium.common.fluid - -import hiiragi283.lib.fluid.HTFluidType -import hiiragi283.ragium.api.data.oreSlurry.HTOreSlurryDataHelper -import net.minecraft.network.chat.Component -import net.minecraft.world.item.ItemStack -import net.neoforged.neoforge.fluids.FluidStack - -class HTOreSlurryFluidType(properties: Properties) : HTFluidType(properties) { - override fun getDescription(stack: FluidStack): Component = - HTOreSlurryDataHelper.getTitle(stack) ?: super.getDescription(stack) - - override fun getBucket(stack: FluidStack): ItemStack = - HTOreSlurryDataHelper.createBucket(stack) ?: super.getBucket(stack) -} diff --git a/src/main/kotlin/hiiragi283/ragium/common/fluid/HTPotionFluidType.kt b/src/main/kotlin/hiiragi283/ragium/common/fluid/HTPotionFluidType.kt index fe89e331c2..cc2b211b21 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/fluid/HTPotionFluidType.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/fluid/HTPotionFluidType.kt @@ -10,5 +10,6 @@ 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() + override fun getBucket(stack: FluidStack): ItemStack = + HTPotionHelper.createBuket(stack)?.create() ?: super.getBucket(stack) } diff --git a/src/main/kotlin/hiiragi283/ragium/common/fluid/RagiumFluids.kt b/src/main/kotlin/hiiragi283/ragium/common/fluid/RagiumFluids.kt index f8be09857c..9f00bddb56 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/fluid/RagiumFluids.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/fluid/RagiumFluids.kt @@ -8,7 +8,6 @@ import hiiragi283.lib.resource.toId import hiiragi283.lib.resource.vanillaId import hiiragi283.lib.util.Identity import hiiragi283.ragium.api.RagiumAPI -import hiiragi283.ragium.common.item.HTOreSlurryBucketItem import hiiragi283.ragium.common.item.HTPotionBucketItem import hiiragi283.ragium.common.item.component.RagiumConsumables import net.minecraft.core.component.DataComponents @@ -130,6 +129,9 @@ data object RagiumFluids { val HYDROGEN: HTFluidContent.Virtual = REGISTER.registerVirtual("hydrogen") { properties = gaseous() } // 3rd + @JvmField + val NITROGEN: HTFluidContent.Virtual = REGISTER.registerVirtual("nitrogen") { properties = gaseous() } + @JvmField val OXYGEN: HTFluidContent.Virtual = REGISTER.registerVirtual("oxygen") { properties = gaseous() } @@ -148,6 +150,12 @@ data object RagiumFluids { @JvmField val COAL_TAR: HTFluidContent.Virtual = REGISTER.registerVirtual("coal_tar") { properties = liquid() } + @JvmField + val ALCOHOL: HTFluidContent.Virtual = REGISTER.registerVirtual("alcohol") { properties = liquid() } + + @JvmField + val ALDEHYDE: HTFluidContent.Virtual = REGISTER.registerVirtual("aldehyde") { properties = liquid() } + @JvmField val AROMATIC_COMPOUND: HTFluidContent.Flowing = REGISTER.registerFlowing("aromatic_compound") { properties = liquid() @@ -182,6 +190,9 @@ data object RagiumFluids { @JvmField val ANTI_RUST_OIL: HTFluidContent.Virtual = REGISTER.registerVirtual("anti_rust_oil") { properties = liquid() } + @JvmField + val MOLTEN_PLASTIC: HTFluidContent.Virtual = REGISTER.registerVirtual("molten_plastic") { properties = molten() } + @JvmField val SYNTHETIC_RESIN: HTFluidContent.Virtual = REGISTER.registerVirtual("synthetic_resin") { properties = liquid() } @@ -207,6 +218,9 @@ data object RagiumFluids { } // Na + @JvmField + val SALT_WATER: HTFluidContent.Flowing = REGISTER.registerFlowing("salt_water") { properties = liquid() } + @JvmField val NAOH_SOLUTION: HTFluidContent.Flowing = REGISTER.registerFlowing("sodium_hydroxide_solution") { properties = liquid() @@ -244,12 +258,4 @@ data object RagiumFluids { @JvmField val BLEACH: HTFluidContent.Virtual = REGISTER.registerVirtual("bleach") { properties = liquid() } - - // Other - @JvmField - val ORE_SLURRY: HTFluidContent.Virtual = REGISTER.registerVirtual("ore_slurry") { - properties = liquid() - typeFactory = ::HTOreSlurryFluidType - bucketFactory = ::HTOreSlurryBucketItem - } } 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 1fbc523410..ff57885c40 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/gui/widget/HTEnergySlotWidget.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/gui/widget/HTEnergySlotWidget.kt @@ -7,7 +7,7 @@ import hiiragi283.lib.transfer.energy.HTEnergyHandler class HTEnergySlotWidget(handler: HTEnergyHandler, x: Int, y: Int) : HTAbstractWidget(x, y, 18, 18), HTEnergyHandler by handler { - override fun getType(): HTWidgetType = RagiumWidgetTypes.ENERGY + override fun getType(): HTWidgetType = RagiumWidgetTypes.ENERGY.get() override fun toString(): String = "HTEnergySlotWidget(bounds=$bounds, amount=$amount, capacity=$capacity)" } diff --git a/src/main/kotlin/hiiragi283/ragium/common/gui/widget/HTFluidWidget.kt b/src/main/kotlin/hiiragi283/ragium/common/gui/widget/HTFluidWidget.kt index 126ac42df6..9f9ca3faba 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/gui/widget/HTFluidWidget.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/gui/widget/HTFluidWidget.kt @@ -27,7 +27,7 @@ sealed class HTFluidWidget( HTGhostWidget, HTIngredientWidget, HTFluidView by view { - final override fun getType(): HTWidgetType<*> = RagiumWidgetTypes.FLUID + final override fun getType(): HTWidgetType<*> = RagiumWidgetTypes.FLUID.get() final override fun mouseClicked(access: HTWidget.Access, mouseX: Double, mouseY: Double, button: Int) { if (isGhost) { diff --git a/src/main/kotlin/hiiragi283/ragium/common/gui/widget/HTItemWidget.kt b/src/main/kotlin/hiiragi283/ragium/common/gui/widget/HTItemWidget.kt index 160e4d5922..a67d249a78 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/gui/widget/HTItemWidget.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/gui/widget/HTItemWidget.kt @@ -18,7 +18,7 @@ sealed class HTItemWidget(val backgroundType: HTBackgroundType) : HTIngredientWidget { abstract fun getStack(): ItemStack - final override fun getType(): HTWidgetType<*> = RagiumWidgetTypes.ITEM + final override fun getType(): HTWidgetType<*> = RagiumWidgetTypes.ITEM.get() final override fun getIngredient(): ItemStack = getStack() diff --git a/src/main/kotlin/hiiragi283/ragium/common/gui/widget/HTProgressWidget.kt b/src/main/kotlin/hiiragi283/ragium/common/gui/widget/HTProgressWidget.kt index 65635a8424..793e3b716f 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/gui/widget/HTProgressWidget.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/gui/widget/HTProgressWidget.kt @@ -40,7 +40,7 @@ class HTProgressWidget : HTAbstractWidget { fun getProgress(): Float = progressGetter() - override fun getType(): HTWidgetType<*> = RagiumWidgetTypes.PROGRESS + override fun getType(): HTWidgetType<*> = RagiumWidgetTypes.PROGRESS.get() override fun toString(): String = "HTProgressWidget(bounds=$bounds, progress=${getProgress()}, fillDirection=$fillDirection)" diff --git a/src/main/kotlin/hiiragi283/ragium/common/gui/widget/RagiumWidgetTypes.kt b/src/main/kotlin/hiiragi283/ragium/common/gui/widget/RagiumWidgetTypes.kt index c15137ef2e..59666b5376 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/gui/widget/RagiumWidgetTypes.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/gui/widget/RagiumWidgetTypes.kt @@ -1,28 +1,30 @@ package hiiragi283.ragium.common.gui.widget import hiiragi283.lib.HTConstants -import hiiragi283.lib.gui.widget.HTWidget import hiiragi283.lib.gui.widget.HTWidgetType +import hiiragi283.lib.registry.HTDeferredHolder +import hiiragi283.lib.registry.HTDeferredRegister import hiiragi283.ragium.api.RagiumAPI -import it.unimi.dsi.fastutil.objects.ObjectLinkedOpenHashSet +import hiiragi283.ragium.api.RagiumRegistries data object RagiumWidgetTypes { - @JvmStatic - val allTypes: Set> field: MutableSet> = ObjectLinkedOpenHashSet() - - @JvmStatic - private fun create(name: String): HTWidgetType = - HTWidgetType(RagiumAPI.id(name)).also(allTypes::add) + @JvmField + val REGISTER: HTDeferredRegister> = + HTDeferredRegister(RagiumRegistries.Keys.WIDGET_TYPE, RagiumAPI.MOD_ID) @JvmField - val ENERGY: HTWidgetType = create(HTConstants.ENERGY) + val ENERGY: HTDeferredHolder, HTWidgetType> = + REGISTER.register(HTConstants.ENERGY, HTWidgetType.Companion::simple) @JvmField - val FLUID: HTWidgetType = create(HTConstants.FLUID) + val FLUID: HTDeferredHolder, HTWidgetType> = + REGISTER.register(HTConstants.FLUID, HTWidgetType.Companion::simple) @JvmField - val ITEM: HTWidgetType = create(HTConstants.ITEM) + val ITEM: HTDeferredHolder, HTWidgetType> = + REGISTER.register(HTConstants.ITEM, HTWidgetType.Companion::simple) @JvmField - val PROGRESS: HTWidgetType = create("progress") + val PROGRESS: HTDeferredHolder, HTWidgetType> = + REGISTER.register("progress", HTWidgetType.Companion::simple) } diff --git a/src/main/kotlin/hiiragi283/ragium/common/item/HTMortarItem.kt b/src/main/kotlin/hiiragi283/ragium/common/item/HTMortarItem.kt new file mode 100644 index 0000000000..e146e75e62 --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/item/HTMortarItem.kt @@ -0,0 +1,46 @@ +package hiiragi283.ragium.common.item + +import hiiragi283.ragium.api.data.map.RagiumDataMaps +import net.minecraft.advancements.CriteriaTriggers +import net.minecraft.core.BlockPos +import net.minecraft.server.level.ServerPlayer +import net.minecraft.sounds.SoundEvents +import net.minecraft.sounds.SoundSource +import net.minecraft.world.InteractionResult +import net.minecraft.world.entity.player.Player +import net.minecraft.world.item.Item +import net.minecraft.world.item.ItemStack +import net.minecraft.world.item.context.UseOnContext +import net.minecraft.world.level.Level +import net.minecraft.world.level.block.state.BlockState +import net.minecraft.world.level.gameevent.GameEvent + +/** + * @see net.minecraft.world.item.HoneycombItem + */ +class HTMortarItem(properties: Properties) : Item(properties) { + companion object { + @JvmStatic + fun getRepaired(oldState: BlockState): BlockState? = oldState.typeHolder() + .getData(RagiumDataMaps.MORTAR_REPAIR) + ?.withPropertiesOf(oldState) + } + + override fun useOn(context: UseOnContext): InteractionResult { + val level: Level = context.level + val pos: BlockPos = context.clickedPos + val oldState: BlockState = level.getBlockState(pos) + return getRepaired(oldState)?.let { repairedState: BlockState -> + val player: Player? = context.player + val itemInHand: ItemStack = context.itemInHand + if (player is ServerPlayer) { + CriteriaTriggers.ITEM_USED_ON_BLOCK.trigger(player, pos, itemInHand) + } + itemInHand.shrink(1) + level.setBlock(pos, repairedState, 11) + level.gameEvent(GameEvent.BLOCK_CHANGE, pos, GameEvent.Context.of(player, repairedState)) + level.playLocalSound(pos, SoundEvents.GRASS_PLACE, SoundSource.BLOCKS, 1f, 1f, false) + InteractionResult.SUCCESS + } ?: InteractionResult.PASS + } +} diff --git a/src/main/kotlin/hiiragi283/ragium/common/item/HTOreSlurryBucketItem.kt b/src/main/kotlin/hiiragi283/ragium/common/item/HTOreSlurryBucketItem.kt deleted file mode 100644 index 8f9ae32b42..0000000000 --- a/src/main/kotlin/hiiragi283/ragium/common/item/HTOreSlurryBucketItem.kt +++ /dev/null @@ -1,51 +0,0 @@ -package hiiragi283.ragium.common.item - -import hiiragi283.lib.item.HTSubCreativeTabContents -import hiiragi283.lib.text.Text -import hiiragi283.lib.text.translatableText -import hiiragi283.ragium.api.RagiumRegistries -import hiiragi283.ragium.api.data.oreSlurry.HTOreSlurryDataHelper -import hiiragi283.ragium.common.transfer.item.HTCustomBucketItemHandler -import net.minecraft.core.Holder -import net.minecraft.network.chat.Component -import net.minecraft.world.item.CreativeModeTab -import net.minecraft.world.item.Item -import net.minecraft.world.item.ItemStack -import net.minecraft.world.level.material.Fluid -import net.neoforged.neoforge.transfer.access.ItemAccess -import net.neoforged.neoforge.transfer.fluid.FluidResource -import net.neoforged.neoforge.transfer.item.ItemResource - -class HTOreSlurryBucketItem(properties: Properties) : - Item(properties), - HTSubCreativeTabContents { - constructor(content: Fluid, properties: Properties) : this(properties) - - override fun getName(itemStack: ItemStack): Component { - val oreSlurryName: Text = HTOreSlurryDataHelper.getTitle(itemStack) ?: return super.getName(itemStack) - return translatableText(super.descriptionId, oreSlurryName) - } - - // HTSubCreativeTabContents // - - override fun addItems( - baseItem: Holder, - parameters: CreativeModeTab.ItemDisplayParameters, - output: CreativeModeTab.Output - ) { - parameters.holders() - .lookupOrThrow(RagiumRegistries.Keys.ORE_SLURRY_DATA) - .listElements() - .map(HTOreSlurryDataHelper::createBucket) - .forEach(output::accept) - } - - override fun shouldAddDefault(): Boolean = false - - // BucketHandler // - - class BucketHandler(itemAccess: ItemAccess) : HTCustomBucketItemHandler(itemAccess) { - override fun getResourceFrom(accessResource: ItemResource, index: Int): FluidResource = - HTOreSlurryDataHelper.createFluid(accessResource)?.let(FluidResource::of) ?: FluidResource.EMPTY - } -} diff --git a/src/main/kotlin/hiiragi283/ragium/common/item/HTPotionBucketItem.kt b/src/main/kotlin/hiiragi283/ragium/common/item/HTPotionBucketItem.kt index 593d12ebad..af469aab1b 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) + HTPotionHelper.createFluid(accessResource)?.let(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 9d0aa3b27c..ba0377208a 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt @@ -9,34 +9,28 @@ import hiiragi283.lib.item.component.HTToolCollection import hiiragi283.lib.item.component.HTToolType import hiiragi283.lib.registry.HTDeferredItemRegister import hiiragi283.lib.registry.HTSimpleDeferredItem -import hiiragi283.lib.text.HTCommonTranslation -import hiiragi283.lib.text.Text -import hiiragi283.lib.transfer.fluid.HTFluidView import hiiragi283.ragium.api.RagiumAPI import hiiragi283.ragium.api.data.RagiumDataComponents -import hiiragi283.ragium.api.data.oreSlurry.RagiumOreSlurryData +import hiiragi283.ragium.api.data.chemical.RagiumChemicals 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.component.RagiumToolMaterials -import net.minecraft.ChatFormatting +import net.minecraft.core.Holder import net.minecraft.core.HolderLookup import net.minecraft.core.component.DataComponentMap +import net.minecraft.core.component.DataComponentType +import net.minecraft.resources.ResourceKey import net.minecraft.world.item.HoneycombItem import net.minecraft.world.item.Item -import net.minecraft.world.item.ItemStack import net.minecraft.world.item.Items import net.minecraft.world.item.Rarity +import net.minecraft.world.level.ItemLike import net.neoforged.bus.api.IEventBus import net.neoforged.neoforge.capabilities.RegisterCapabilitiesEvent -import net.neoforged.neoforge.common.tooltip.TooltipLocation import net.neoforged.neoforge.event.ModifyDefaultComponentsEvent -import net.neoforged.neoforge.event.RegisterTooltipAppendersEvent import net.neoforged.neoforge.transfer.access.ItemAccess -import net.neoforged.neoforge.transfer.fluid.FluidResource -import java.util.function.Consumer data object RagiumItems { @JvmField @@ -48,8 +42,8 @@ data object RagiumItems { REGISTER.addAlias("steel_ingot", "sooty_iron_ingot") REGISTER.addAlias("steel_nugget", "sooty_iron_nugget") REGISTER.addAlias("coal_coke_dust", "carbon_dust") + REGISTER.addAlias("circuit_chip", "silicon_chip") - eventBus.addListener(::registerTooltipAppenders) eventBus.addListener(::registerCapabilities) eventBus.addListener(::modifyDefaultComponents) @@ -69,10 +63,9 @@ data object RagiumItems { putAll(RagiumMaterial.Fuel.COAL_COKE, HTItemPart.TINY) putAll(RagiumMaterial.Fuel.PITCH_COKE, HTItemPart.TINY) // Mineral - for (mineral: RagiumMaterial.Mineral in RagiumMaterial.Mineral.entries) { - if (!mineral.isVanilla) { - putAll(mineral, HTItemPart.DUST) - } + for (dustLike: RagiumMaterial.DustLike in RagiumMaterial.DustLike.entries) { + if (dustLike is RagiumMaterial.Mineral && dustLike.isVanilla) continue + putAll(dustLike, HTItemPart.DUST) } // Gem putAll(RagiumMaterial.Gem.LAPIS, HTItemPart.DUST) @@ -83,24 +76,19 @@ data object RagiumItems { putAll(RagiumMaterial.Gem.ECHO, HTItemPart.DUST) putAll(RagiumMaterial.Gem.PRISMARINE, HTItemPart.DUST) putAll(RagiumMaterial.Gem.FLUORITE, HTItemPart.DUST, HTItemPart.GEM) - putAll(RagiumMaterial.Gem.CRYOLITE, HTItemPart.DUST, HTItemPart.GEM) + // putAll(RagiumMaterial.Gem.CRYOLITE, HTItemPart.DUST, HTItemPart.GEM) // Metal putAll(RagiumMaterial.Metal.COPPER, HTItemPart.DUST, HTItemPart.GEAR) putAll(RagiumMaterial.Metal.IRON, HTItemPart.DUST, HTItemPart.GEAR) putAll(RagiumMaterial.Metal.GOLD, HTItemPart.DUST, HTItemPart.GEAR) - putAll(RagiumMaterial.Metal.NETHERITE, HTItemPart.DUST, HTItemPart.GEAR, HTItemPart.NUGGET) putAll(RagiumMaterial.Metal.ALUMINUM, HTItemPart.INGOT, HTItemPart.NUGGET) - putAll(RagiumMaterial.Metal.SOOTY_IRON, HTItemPart.INGOT, HTItemPart.NUGGET) - putAll(RagiumMaterial.Metal.BLACK_STEEL, HTItemPart.INGOT, HTItemPart.NUGGET) - putAll(RagiumMaterial.Metal.VOID_METAL, HTItemPart.INGOT, HTItemPart.NUGGET) + // Alloy + putAll(RagiumMaterial.Alloy.NETHERITE, HTItemPart.DUST, HTItemPart.GEAR, HTItemPart.NUGGET) + putAll(RagiumMaterial.Alloy.SOOTY_IRON, HTItemPart.INGOT, HTItemPart.NUGGET) + putAll(RagiumMaterial.Alloy.BLACK_STEEL, HTItemPart.INGOT, HTItemPart.NUGGET) + putAll(RagiumMaterial.Alloy.VOID_METAL, HTItemPart.INGOT, HTItemPart.NUGGET) // Other - putAll(RagiumMaterial.Other.WOOD, HTItemPart.DUST, HTItemPart.GEAR) - putAll(RagiumMaterial.Other.GLASS, HTItemPart.DUST) - putAll(RagiumMaterial.Other.OBSIDIAN, HTItemPart.DUST) - putAll(RagiumMaterial.Other.PAPER, HTItemPart.DUST) - putAll(RagiumMaterial.Other.CARBON, HTItemPart.DUST) - putAll(RagiumMaterial.Other.ALUMINA, HTItemPart.DUST) - putAll(RagiumMaterial.Other.SILICON, HTItemPart.DUST) + putAll(RagiumMaterial.Other.WOOD, HTItemPart.GEAR) }, ::sortedSetOf ).flatMapTable { (material: RagiumMaterial, parts: Collection) -> @@ -111,13 +99,16 @@ data object RagiumItems { REGISTER.registerSimpleItem(part.createName(material)) { properties: Item.Properties -> when (material) { RagiumMaterial.Mineral.RAGINITE -> Rarity.EPIC - RagiumMaterial.Metal.BLACK_STEEL -> Rarity.UNCOMMON - RagiumMaterial.Metal.VOID_METAL -> Rarity.RARE + RagiumMaterial.Alloy.BLACK_STEEL -> Rarity.UNCOMMON + RagiumMaterial.Alloy.VOID_METAL -> Rarity.RARE else -> null }?.let(properties::rarity) - if (material == RagiumMaterial.Metal.NETHERITE) { + if (material == RagiumMaterial.Alloy.NETHERITE) { properties.fireResistant() } + material.chemicalKey?.let { + properties.delayedHolderComponent(RagiumDataComponents.CHEMICAL, it) + } properties } ) @@ -132,20 +123,33 @@ data object RagiumItems { @JvmField val BAMBOO_CHARCOAL: HTSimpleDeferredItem = REGISTER.registerSimpleItem("bamboo_charcoal") + @JvmField + val PARTICLE_BOARD: HTSimpleDeferredItem = REGISTER.registerSimpleItem("particle_board") + + @JvmField + val CEMENT: HTSimpleDeferredItem = REGISTER.registerSimpleItem("cement") + + @JvmField + val MORTAR: HTSimpleDeferredItem = REGISTER.registerItem("mortar", ::HTMortarItem) + // Heat @JvmField - val COAL_COKE: HTSimpleDeferredItem = REGISTER.registerSimpleItem(RagiumMaterial.Fuel.COAL_COKE.materialName) + val COAL_COKE: HTSimpleDeferredItem = REGISTER.registerSimpleItem(RagiumMaterial.Fuel.COAL_COKE.materialName) { + it.delayedHolderComponent(RagiumDataComponents.CHEMICAL, RagiumChemicals.CARBON) + } @JvmField val TAR: HTSimpleDeferredItem = REGISTER.registerSimpleItem("tar") @JvmField - val PITCH_COKE: HTSimpleDeferredItem = REGISTER.registerSimpleItem(RagiumMaterial.Fuel.PITCH_COKE.materialName) + val PITCH_COKE: HTSimpleDeferredItem = REGISTER.registerSimpleItem(RagiumMaterial.Fuel.PITCH_COKE.materialName) { + it.delayedHolderComponent(RagiumDataComponents.CHEMICAL, RagiumChemicals.CARBON) + } - // Chemical @JvmField - val PARTICLE_BOARD: HTSimpleDeferredItem = REGISTER.registerSimpleItem("particle_board") + val STICKY_BALL: HTSimpleDeferredItem = REGISTER.registerSimpleItem("sticky_ball") + // Chemical @JvmField val PLASTIC_PLATE: HTSimpleDeferredItem = REGISTER.registerSimpleItem("plastic_plate") @@ -158,6 +162,14 @@ data object RagiumItems { @JvmField val SYNTHETIC_FIBER: HTSimpleDeferredItem = REGISTER.registerSimpleItem("synthetic_fiber") + @JvmField + val CARBON_FIBER: HTSimpleDeferredItem = REGISTER.registerSimpleItem("carbon_fiber") + + @JvmField + val CFRP_PLATE: HTSimpleDeferredItem = REGISTER.registerSimpleItem("cfrp_plate") + + // val ALCLAD_PLATE: HTSimpleDeferredItem = REGISTER.registerSimpleItem("alclad_plate") + // Bio @JvmField val BEESWAX: HTSimpleDeferredItem = REGISTER.registerItem("beeswax", ::HoneycombItem) @@ -170,13 +182,15 @@ data object RagiumItems { // Electronics @JvmField - val CRUDE_SILICON: HTSimpleDeferredItem = REGISTER.registerSimpleItem("crude_silicon") + val CRUDE_SILICON: HTSimpleDeferredItem = REGISTER.registerSimpleItem("crude_silicon") { + it.delayedHolderComponent(RagiumDataComponents.CHEMICAL, RagiumChemicals.SILICON) + } @JvmField val SILICON_WAFER: HTSimpleDeferredItem = REGISTER.registerSimpleItem("silicon_wafer") @JvmField - val CIRCUIT_CHIP: HTSimpleDeferredItem = REGISTER.registerSimpleItem("circuit_chip") + val SILICON_CHIP: HTSimpleDeferredItem = REGISTER.registerSimpleItem("silicon_chip") @JvmField val CIRCUIT_BOARD: HTSimpleDeferredItem = REGISTER.registerSimpleItem("circuit_board") @@ -224,57 +238,13 @@ data object RagiumItems { @JvmField val SOOTY_IRON_TOOLS: HTToolCollection = HTToolCollection { toolType: HTToolType -> REGISTER.registerItem( - toolType.createPath(RagiumMaterial.Metal.SOOTY_IRON), + toolType.createPath(RagiumMaterial.Alloy.SOOTY_IRON), { prop: Item.Properties -> toolType.createItem(prop, RagiumToolMaterials.SOOTY_IRON, 6f, -3.1f, -2f, -1f) } ) } // Events // - @JvmStatic - private fun registerTooltipAppenders(event: RegisterTooltipAppendersEvent) { - event.registerAppender( - TooltipLocation.HEAD - ) { stack: ItemStack, _, _, _, _, builder: Consumer -> - if (!stack.`is`(RagiumTags.Items.SHOW_FLUID_TOOLTIPS)) return@registerAppender - val view: HTFluidView = HTFluidCapabilities.getSlot(stack, 0) ?: return@registerAppender - val isCreative: Boolean = stack.`is`(RagiumTags.BlockItem.STORAGES_CREATIVE.item) - // Fluid Name - val resource: FluidResource = view.resource - when { - resource.isEmpty -> HTCommonTranslation.EMPTY.translateColored(ChatFormatting.RED) - - isCreative -> HTCommonTranslation.STORED.translateColored( - ChatFormatting.LIGHT_PURPLE, - resource.hoverName, - ChatFormatting.GRAY, - HTCommonTranslation.INFINITE - ) - - else -> HTCommonTranslation.STORED_MB.translateColored( - ChatFormatting.LIGHT_PURPLE, - resource.hoverName, - ChatFormatting.GRAY, - view.amount - ) - }.let(builder::accept) - // Tank Capacity - when (isCreative) { - true -> HTCommonTranslation.CAPACITY.translateColored( - ChatFormatting.BLUE, - ChatFormatting.GRAY, - HTCommonTranslation.INFINITE - ) - - false -> HTCommonTranslation.CAPACITY_MB.translateColored( - ChatFormatting.BLUE, - ChatFormatting.GRAY, - view.currentCapacity - ) - }.let(builder::accept) - } - } - @JvmStatic private fun registerCapabilities(event: RegisterCapabilitiesEvent) { // Fluid @@ -283,28 +253,46 @@ data object RagiumItems { { _, access: ItemAccess -> HTPotionBucketItem.BucketHandler(access) }, RagiumFluids.POTION.bucketHolder ) - event.registerItem( - HTFluidCapabilities.item, - { _, access: ItemAccess -> HTOreSlurryBucketItem.BucketHandler(access) }, - RagiumFluids.ORE_SLURRY.bucketHolder - ) // Item } @JvmStatic private fun modifyDefaultComponents(event: ModifyDefaultComponentsEvent) { - // Item - event.modify(Items.RAW_COPPER) { builder: DataComponentMap.Builder, provider: HolderLookup.Provider, _ -> - builder.set(RagiumDataComponents.ORE_SLURRY_DATA, provider.getOrThrow(RagiumOreSlurryData.COPPER)) - } - event.modify(Items.RAW_IRON) { builder: DataComponentMap.Builder, provider: HolderLookup.Provider, _ -> - builder.set(RagiumDataComponents.ORE_SLURRY_DATA, provider.getOrThrow(RagiumOreSlurryData.IRON)) - } - event.modify(Items.RAW_GOLD) { builder: DataComponentMap.Builder, provider: HolderLookup.Provider, _ -> - builder.set(RagiumDataComponents.ORE_SLURRY_DATA, provider.getOrThrow(RagiumOreSlurryData.GOLD)) - } - event.modify(Items.ANCIENT_DEBRIS) { builder: DataComponentMap.Builder, provider: HolderLookup.Provider, _ -> - builder.set(RagiumDataComponents.ORE_SLURRY_DATA, provider.getOrThrow(RagiumOreSlurryData.NETHERITE_SCRAP)) + fun setHolder(item: ItemLike, type: DataComponentType>, key: ResourceKey) { + event.modify(item) { builder: DataComponentMap.Builder, provider: HolderLookup.Provider, _ -> + builder.set(type, provider.getOrThrow(key)) + } } + // Chemical + setHolder(Items.COAL_BLOCK, RagiumDataComponents.CHEMICAL, RagiumChemicals.CARBON) + setHolder(Items.COAL, RagiumDataComponents.CHEMICAL, RagiumChemicals.CARBON) + setHolder(Items.CHARCOAL, RagiumDataComponents.CHEMICAL, RagiumChemicals.CARBON) + + setHolder(Items.DIAMOND_BLOCK, RagiumDataComponents.CHEMICAL, RagiumChemicals.DIAMOND) + setHolder(Items.DIAMOND, RagiumDataComponents.CHEMICAL, RagiumChemicals.DIAMOND) + + setHolder(Items.IRON_BLOCK, RagiumDataComponents.CHEMICAL, RagiumChemicals.IRON) + setHolder(Items.IRON_INGOT, RagiumDataComponents.CHEMICAL, RagiumChemicals.IRON) + setHolder(Items.IRON_NUGGET, RagiumDataComponents.CHEMICAL, RagiumChemicals.IRON) + + setHolder(Items.COPPER_BLOCK, RagiumDataComponents.CHEMICAL, RagiumChemicals.COPPER) + setHolder(Items.COPPER_INGOT, RagiumDataComponents.CHEMICAL, RagiumChemicals.COPPER) + setHolder(Items.COPPER_NUGGET, RagiumDataComponents.CHEMICAL, RagiumChemicals.COPPER) + + setHolder(Items.GOLD_BLOCK, RagiumDataComponents.CHEMICAL, RagiumChemicals.GOLD) + setHolder(Items.GOLD_INGOT, RagiumDataComponents.CHEMICAL, RagiumChemicals.GOLD) + setHolder(Items.GOLD_NUGGET, RagiumDataComponents.CHEMICAL, RagiumChemicals.GOLD) + + setHolder(Items.SNOWBALL, RagiumDataComponents.CHEMICAL, RagiumChemicals.WATER) + setHolder(Items.SNOW_BLOCK, RagiumDataComponents.CHEMICAL, RagiumChemicals.WATER) + setHolder(Items.ICE, RagiumDataComponents.CHEMICAL, RagiumChemicals.WATER) + setHolder(Items.PACKED_ICE, RagiumDataComponents.CHEMICAL, RagiumChemicals.WATER) + setHolder(Items.BLUE_ICE, RagiumDataComponents.CHEMICAL, RagiumChemicals.WATER) + + setHolder(Items.AMETHYST_BLOCK, RagiumDataComponents.CHEMICAL, RagiumChemicals.SILICON_DIOXIDE) + setHolder(Items.AMETHYST_SHARD, RagiumDataComponents.CHEMICAL, RagiumChemicals.SILICON_DIOXIDE) + + setHolder(Items.QUARTZ_BLOCK, RagiumDataComponents.CHEMICAL, RagiumChemicals.SILICON_DIOXIDE) + setHolder(Items.QUARTZ, RagiumDataComponents.CHEMICAL, RagiumChemicals.SILICON_DIOXIDE) } } diff --git a/src/main/kotlin/hiiragi283/ragium/common/item/block/HTCreativeTankBlockItem.kt b/src/main/kotlin/hiiragi283/ragium/common/item/block/HTCreativeTankBlockItem.kt index 8d5ca061fe..4c15b6587e 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/item/block/HTCreativeTankBlockItem.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/item/block/HTCreativeTankBlockItem.kt @@ -1,11 +1,10 @@ package hiiragi283.ragium.common.item.block -import hiiragi283.lib.data.buildDataPatch import hiiragi283.lib.fluid.FluidStack import hiiragi283.lib.fluid.HTFlowingFluidHelper import hiiragi283.lib.item.HTSubCreativeTabContents import hiiragi283.lib.registry.asHolderSequence -import hiiragi283.ragium.api.data.RagiumDataComponents +import hiiragi283.ragium.api.util.HTStorageHelper import net.minecraft.core.Holder import net.minecraft.core.registries.Registries import net.minecraft.world.item.BlockItem @@ -13,7 +12,6 @@ import net.minecraft.world.item.CreativeModeTab import net.minecraft.world.item.Item import net.minecraft.world.item.ItemStack import net.minecraft.world.level.block.Block -import net.neoforged.neoforge.fluids.SimpleFluidContent class HTCreativeTankBlockItem(block: Block, properties: Properties) : BlockItem(block, properties), @@ -26,13 +24,13 @@ class HTCreativeTankBlockItem(block: Block, properties: Properties) : parameters.holders .lookupOrThrow(Registries.FLUID) .asHolderSequence() - .mapNotNull { fluid -> - if (!HTFlowingFluidHelper.isSource(fluid)) return@mapNotNull null - val content: SimpleFluidContent = FluidStack(fluid).let(SimpleFluidContent::copyOf) - if (content.isEmpty) return@mapNotNull null - ItemStack(baseItem, 1, buildDataPatch { set(RagiumDataComponents.FLUID, content) }) - }.forEach(output::accept) + .forEach { fluid -> + if (!HTFlowingFluidHelper.isSource(fluid)) return@forEach + val fluidStack = FluidStack(fluid) + if (fluidStack.isEmpty) return@forEach + val stack = ItemStack(baseItem) + HTStorageHelper.updateFluid(stack, fluidStack) + output.accept(stack) + } } - - override fun shouldAddDefault(): Boolean = false } diff --git a/src/main/kotlin/hiiragi283/ragium/common/item/block/HTPotionTankBlockItem.kt b/src/main/kotlin/hiiragi283/ragium/common/item/block/HTPotionTankBlockItem.kt new file mode 100644 index 0000000000..fa400aeaf7 --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/item/block/HTPotionTankBlockItem.kt @@ -0,0 +1,35 @@ +package hiiragi283.ragium.common.item.block + +import hiiragi283.lib.item.HTSubCreativeTabContents +import hiiragi283.lib.item.alchemy.HTPotionHelper +import hiiragi283.ragium.api.RagiumConfig +import hiiragi283.ragium.api.util.HTStorageHelper +import net.minecraft.core.Holder +import net.minecraft.core.registries.Registries +import net.minecraft.world.item.BlockItem +import net.minecraft.world.item.CreativeModeTab +import net.minecraft.world.item.Item +import net.minecraft.world.item.ItemStack +import net.minecraft.world.item.alchemy.Potion +import net.minecraft.world.item.alchemy.Potions +import net.minecraft.world.level.block.Block + +class HTPotionTankBlockItem(block: Block, properties: Properties) : + BlockItem(block, properties), + HTSubCreativeTabContents { + override fun addItems( + baseItem: Holder, + parameters: CreativeModeTab.ItemDisplayParameters, + output: CreativeModeTab.Output + ) { + 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) + ) + output.accept(stack) + } + } +} diff --git a/src/main/kotlin/hiiragi283/ragium/common/material/RagiumMaterialHelper.kt b/src/main/kotlin/hiiragi283/ragium/common/material/RagiumMaterialHelper.kt index a04e052d4e..8cffa6999e 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/material/RagiumMaterialHelper.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/material/RagiumMaterialHelper.kt @@ -2,15 +2,52 @@ package hiiragi283.ragium.common.material import hiiragi283.lib.registry.HTSimpleDeferredItem import hiiragi283.lib.resource.vanillaId +import hiiragi283.ragium.api.material.HTItemPart import hiiragi283.ragium.api.material.RagiumMaterial import hiiragi283.ragium.common.item.RagiumItems data object RagiumMaterialHelper { @JvmStatic - fun getFuelBase(fuel: RagiumMaterial.Fuel): HTSimpleDeferredItem = when (fuel) { + fun getBase(fuel: RagiumMaterial.Fuel): HTSimpleDeferredItem = when (fuel) { RagiumMaterial.Fuel.COAL -> HTSimpleDeferredItem(vanillaId("coal")) RagiumMaterial.Fuel.CHARCOAL -> HTSimpleDeferredItem(vanillaId("charcoal")) RagiumMaterial.Fuel.COAL_COKE -> RagiumItems.COAL_COKE RagiumMaterial.Fuel.PITCH_COKE -> RagiumItems.PITCH_COKE } + + @JvmStatic + fun getDust(dustLike: RagiumMaterial.DustLike): HTSimpleDeferredItem = when (dustLike) { + RagiumMaterial.Mineral.REDSTONE -> HTSimpleDeferredItem(vanillaId("redstone")) + RagiumMaterial.Mineral.GLOWSTONE -> HTSimpleDeferredItem(vanillaId("glowstone_dust")) + else -> RagiumItems.getOrThrow(HTItemPart.DUST, dustLike) + } + + @JvmStatic + fun getGem(gem: RagiumMaterial.Gem): HTSimpleDeferredItem = when (gem) { + RagiumMaterial.Gem.LAPIS -> HTSimpleDeferredItem(vanillaId("lapis_lazuri")) + RagiumMaterial.Gem.QUARTZ -> HTSimpleDeferredItem(vanillaId("quartz")) + RagiumMaterial.Gem.AMETHYST -> HTSimpleDeferredItem(vanillaId("amethyst_shard")) + RagiumMaterial.Gem.DIAMOND -> HTSimpleDeferredItem(vanillaId("diamond")) + RagiumMaterial.Gem.EMERALD -> HTSimpleDeferredItem(vanillaId("emerald")) + RagiumMaterial.Gem.ECHO -> HTSimpleDeferredItem(vanillaId("echo_shard")) + RagiumMaterial.Gem.PRISMARINE -> HTSimpleDeferredItem(vanillaId("prismarine_crystals")) + else -> RagiumItems.getOrThrow(HTItemPart.GEM, gem) + } + + @JvmStatic + fun getIngot(metalLike: RagiumMaterial.MetalLike): HTSimpleDeferredItem = when (metalLike) { + RagiumMaterial.Metal.COPPER -> HTSimpleDeferredItem(vanillaId("copper_ingot")) + RagiumMaterial.Metal.IRON -> HTSimpleDeferredItem(vanillaId("iron_ingot")) + RagiumMaterial.Metal.GOLD -> HTSimpleDeferredItem(vanillaId("gold_ingot")) + RagiumMaterial.Alloy.NETHERITE -> HTSimpleDeferredItem(vanillaId("netherite_ingot")) + else -> RagiumItems.getOrThrow(HTItemPart.INGOT, metalLike) + } + + @JvmStatic + fun getNugget(metalLike: RagiumMaterial.MetalLike): HTSimpleDeferredItem = when (metalLike) { + RagiumMaterial.Metal.COPPER -> HTSimpleDeferredItem(vanillaId("copper_nugget")) + RagiumMaterial.Metal.IRON -> HTSimpleDeferredItem(vanillaId("iron_nugget")) + RagiumMaterial.Metal.GOLD -> HTSimpleDeferredItem(vanillaId("gold_nugget")) + else -> RagiumItems.getOrThrow(HTItemPart.NUGGET, metalLike) + } } diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/RTOreSlurryWashingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/RTOreSlurryWashingRecipe.kt deleted file mode 100644 index 1efc431272..0000000000 --- a/src/main/kotlin/hiiragi283/ragium/common/recipe/RTOreSlurryWashingRecipe.kt +++ /dev/null @@ -1,34 +0,0 @@ -package hiiragi283.ragium.common.recipe - -import hiiragi283.lib.recipe.base.HTProgressData -import hiiragi283.lib.recipe.base.HTProgressRecipe -import hiiragi283.lib.recipe.ingredient.HTIngredientHelper -import hiiragi283.lib.recipe.input.HTFluidRecipeInput -import hiiragi283.lib.recipe.result.HTItemAndFluidResult -import hiiragi283.ragium.api.data.oreSlurry.HTOreSlurryDataHelper -import hiiragi283.ragium.api.recipe.RTReactingRecipe -import net.neoforged.neoforge.common.Tags -import net.neoforged.neoforge.fluids.FluidInstance -import net.neoforged.neoforge.fluids.FluidType - -data object RTOreSlurryWashingRecipe : - RTReactingRecipe, - HTProgressRecipe.Simple { - override fun test(first: FluidInstance, second: FluidInstance): Boolean { - // Water - if (!second.`is`(Tags.Fluids.WATER) || second.amount() < FluidType.BUCKET_VOLUME) return false - // Ore Slurry - return HTOreSlurryDataHelper.getHolder(first) != null - } - - override fun apply(first: FluidInstance, second: FluidInstance): HTItemAndFluidResult = - HTOreSlurryDataHelper.getData(first)?.result.let(HTItemAndFluidResult.Companion::from) - - override fun getMatchingStack(first: FluidInstance, second: FluidInstance): Pair = - Pair( - HTIngredientHelper.copyWithAmount(first, FluidType.BUCKET_VOLUME), - HTIngredientHelper.copyWithAmount(second, FluidType.BUCKET_VOLUME) - ) - - override val progressData: HTProgressData = HTProgressData.time(200) -} diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/RTOreSolvingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/RTOreSolvingRecipe.kt deleted file mode 100644 index e0de1baa61..0000000000 --- a/src/main/kotlin/hiiragi283/ragium/common/recipe/RTOreSolvingRecipe.kt +++ /dev/null @@ -1,32 +0,0 @@ -package hiiragi283.ragium.common.recipe - -import hiiragi283.lib.recipe.base.HTItemAndFluidToFluidRecipe -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.ragium.api.data.oreSlurry.HTOreSlurryDataHelper -import hiiragi283.ragium.common.fluid.RagiumFluids -import net.minecraft.world.item.ItemInstance -import net.neoforged.neoforge.fluids.FluidInstance -import net.neoforged.neoforge.fluids.FluidStack -import net.neoforged.neoforge.fluids.FluidType - -data object RTOreSolvingRecipe : HTItemAndFluidToFluidRecipe, HTProgressRecipe.Simple { - override fun test(first: ItemInstance, second: FluidInstance): Boolean { - // Sulfuric Acid - if (!second.`is`(RagiumFluids.SULFURIC_ACID.fluidTag) || second.amount() < FluidType.BUCKET_VOLUME) return false - // Ore - return HTOreSlurryDataHelper.getHolder(first) != null - } - - override fun apply(first: ItemInstance, second: FluidInstance): FluidStack = - HTOreSlurryDataHelper.createFluid(first) ?: FluidStack.EMPTY - - override fun getMatchingStack(first: ItemInstance, second: FluidInstance): Pair = Pair( - HTIngredientHelper.copyWithCount(first, 1), - HTIngredientHelper.copyWithAmount(second, FluidType.BUCKET_VOLUME) - ) - - override val progressData: HTProgressData = HTProgressData.time(200) -} diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/RTPotionBottleDrainingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/RTPotionBottleDrainingRecipe.kt index 037b4bbdc6..19a2b104da 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/recipe/RTPotionBottleDrainingRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/RTPotionBottleDrainingRecipe.kt @@ -6,10 +6,11 @@ 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.HTItemAndFluidResult +import hiiragi283.lib.recipe.result.HTItemAndFluidStack 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 @JvmRecord data class RTPotionBottleDrainingRecipe(val bottleType: HTBottleType, override val progressData: HTProgressData) : @@ -25,9 +26,9 @@ 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): HTItemAndFluidResult = HTItemAndFluidResult( + override fun apply(input: ItemInstance): HTItemAndFluidStack = HTItemAndFluidStack( bottleType.emptyItem.toStack(), - HTPotionHelper.createFluid(input, HTPotionHelper.BOTTLE_AMOUNT) + HTPotionHelper.createFluid(input, HTPotionHelper.BOTTLE_AMOUNT) ?: FluidStack.EMPTY ) override fun getMatchingStack(input: ItemInstance): ItemInstance = when { diff --git a/src/main/kotlin/hiiragi283/ragium/common/transfer/fluid/HTVariableFluidTank.kt b/src/main/kotlin/hiiragi283/ragium/common/transfer/fluid/HTVariableFluidTank.kt index 740a8452c8..d1577f355b 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/transfer/fluid/HTVariableFluidTank.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/transfer/fluid/HTVariableFluidTank.kt @@ -31,9 +31,13 @@ class HTVariableFluidTank( listener: Runnable?, canInsert: Predicate = HTTransferPredicates.alwaysTrue(), filter: Predicate = canInsert - ): HTVariableFluidTank = create(capacity, listener, HTTransferPredicates.notExternal(), { resource, _ -> - canInsert.test(resource) - }, filter) + ): HTVariableFluidTank = create( + capacity, + listener, + HTTransferPredicates.notExternal(), + { resource: FluidResource, _ -> canInsert.test(resource) }, + filter + ) @JvmStatic fun output(capacity: IntSupplier, listener: Runnable?): HTVariableFluidTank = diff --git a/src/main/resources/META-INF/services/hiiragi283.ragium.api.data.oreSlurry.HTOreSlurryFluidAccess b/src/main/resources/META-INF/services/hiiragi283.ragium.api.data.oreSlurry.HTOreSlurryFluidAccess deleted file mode 100644 index 9d6970eab2..0000000000 --- a/src/main/resources/META-INF/services/hiiragi283.ragium.api.data.oreSlurry.HTOreSlurryFluidAccess +++ /dev/null @@ -1 +0,0 @@ -hiiragi283.ragium.common.data.oreSlurry.RagiumOreSlurryFluidAccess diff --git a/src/generated/resources/assets/ragium/models/block/freezer.json b/src/main/resources/assets/ragium/models/block/freezer.json similarity index 75% rename from src/generated/resources/assets/ragium/models/block/freezer.json rename to src/main/resources/assets/ragium/models/block/freezer.json index 960f9dbdcb..29113042c2 100644 --- a/src/generated/resources/assets/ragium/models/block/freezer.json +++ b/src/main/resources/assets/ragium/models/block/freezer.json @@ -2,7 +2,7 @@ "parent": "minecraft:block/orientable", "textures": { "front": "ragium:block/freezer_front", - "side": "ragium:block/machine/heat_side", + "side": "ragium:block/machine/cryo_side", "top": "ragium:block/machine_casing" } -} \ No newline at end of file +} diff --git a/src/main/resources/assets/ragium/models/block/machine/cryo.json b/src/main/resources/assets/ragium/models/block/machine/cryo.json new file mode 100644 index 0000000000..75478a08d6 --- /dev/null +++ b/src/main/resources/assets/ragium/models/block/machine/cryo.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/orientable", + "textures": { + "front": "ragium:block/machine/cryo_front", + "side": "ragium:block/machine/cryo_side", + "top": "ragium:block/machine_casing" + } +} diff --git a/src/main/resources/assets/ragium/textures/block/alloy_smeler_front.png b/src/main/resources/assets/ragium/textures/block/alloy_smeler_front.png new file mode 100644 index 0000000000..0b65bccb18 Binary files /dev/null and b/src/main/resources/assets/ragium/textures/block/alloy_smeler_front.png differ diff --git a/src/main/resources/assets/ragium/textures/block/assembler_front.png b/src/main/resources/assets/ragium/textures/block/assembler_front.png new file mode 100644 index 0000000000..8b7dbb3d82 Binary files /dev/null and b/src/main/resources/assets/ragium/textures/block/assembler_front.png differ diff --git a/src/main/resources/assets/ragium/textures/block/brewery_front.png b/src/main/resources/assets/ragium/textures/block/brewery_front.png new file mode 100644 index 0000000000..2d5931545f Binary files /dev/null and b/src/main/resources/assets/ragium/textures/block/brewery_front.png differ diff --git a/src/main/resources/assets/ragium/textures/block/chemical_bath_front.png b/src/main/resources/assets/ragium/textures/block/chemical_bath_front.png new file mode 100644 index 0000000000..20e72d70f5 Binary files /dev/null and b/src/main/resources/assets/ragium/textures/block/chemical_bath_front.png differ diff --git a/src/main/resources/assets/ragium/textures/block/compressor_front.png b/src/main/resources/assets/ragium/textures/block/compressor_front.png new file mode 100644 index 0000000000..e2e6139e9a Binary files /dev/null and b/src/main/resources/assets/ragium/textures/block/compressor_front.png differ diff --git a/src/main/resources/assets/ragium/textures/block/crusher_front.png b/src/main/resources/assets/ragium/textures/block/crusher_front.png new file mode 100644 index 0000000000..f944f1e076 Binary files /dev/null and b/src/main/resources/assets/ragium/textures/block/crusher_front.png differ diff --git a/src/main/resources/assets/ragium/textures/block/cutting_machine_front.png b/src/main/resources/assets/ragium/textures/block/cutting_machine_front.png new file mode 100644 index 0000000000..c4e6ce88c1 Binary files /dev/null and b/src/main/resources/assets/ragium/textures/block/cutting_machine_front.png differ diff --git a/src/main/resources/assets/ragium/textures/block/freezer_front.png b/src/main/resources/assets/ragium/textures/block/freezer_front.png new file mode 100644 index 0000000000..49a4f7325d Binary files /dev/null and b/src/main/resources/assets/ragium/textures/block/freezer_front.png differ diff --git a/src/main/resources/assets/ragium/textures/block/gypsum.png b/src/main/resources/assets/ragium/textures/block/gypsum.png new file mode 100644 index 0000000000..8fa149beb3 Binary files /dev/null and b/src/main/resources/assets/ragium/textures/block/gypsum.png differ diff --git a/src/main/resources/assets/ragium/textures/block/machine/bio_front.png b/src/main/resources/assets/ragium/textures/block/machine/bio_front.png new file mode 100644 index 0000000000..158d3c1e56 Binary files /dev/null and b/src/main/resources/assets/ragium/textures/block/machine/bio_front.png differ diff --git a/src/main/resources/assets/ragium/textures/block/machine/chemical_front.png b/src/main/resources/assets/ragium/textures/block/machine/chemical_front.png new file mode 100644 index 0000000000..e2a5863d92 Binary files /dev/null and b/src/main/resources/assets/ragium/textures/block/machine/chemical_front.png differ diff --git a/src/main/resources/assets/ragium/textures/block/machine/cryo_front.png b/src/main/resources/assets/ragium/textures/block/machine/cryo_front.png new file mode 100644 index 0000000000..15936fd41d Binary files /dev/null and b/src/main/resources/assets/ragium/textures/block/machine/cryo_front.png differ diff --git a/src/main/resources/assets/ragium/textures/block/machine/cryo_side.png b/src/main/resources/assets/ragium/textures/block/machine/cryo_side.png new file mode 100644 index 0000000000..ef4618e5e0 Binary files /dev/null and b/src/main/resources/assets/ragium/textures/block/machine/cryo_side.png differ diff --git a/src/main/resources/assets/ragium/textures/block/machine/electronics_front.png b/src/main/resources/assets/ragium/textures/block/machine/electronics_front.png new file mode 100644 index 0000000000..f994b0b293 Binary files /dev/null and b/src/main/resources/assets/ragium/textures/block/machine/electronics_front.png differ diff --git a/src/main/resources/assets/ragium/textures/block/mixer_front.png b/src/main/resources/assets/ragium/textures/block/mixer_front.png new file mode 100644 index 0000000000..1cea06a4c1 Binary files /dev/null and b/src/main/resources/assets/ragium/textures/block/mixer_front.png differ diff --git a/src/main/resources/assets/ragium/textures/block/planter_front.png b/src/main/resources/assets/ragium/textures/block/planter_front.png new file mode 100644 index 0000000000..edff6b40da Binary files /dev/null and b/src/main/resources/assets/ragium/textures/block/planter_front.png differ diff --git a/src/main/resources/assets/ragium/textures/block/potion_tank_side.png b/src/main/resources/assets/ragium/textures/block/potion_tank_side.png new file mode 100644 index 0000000000..48d01f1461 Binary files /dev/null and b/src/main/resources/assets/ragium/textures/block/potion_tank_side.png differ diff --git a/src/main/resources/assets/ragium/textures/block/potion_tank_top.png b/src/main/resources/assets/ragium/textures/block/potion_tank_top.png new file mode 100644 index 0000000000..8107350bab Binary files /dev/null and b/src/main/resources/assets/ragium/textures/block/potion_tank_top.png differ diff --git a/src/main/resources/assets/ragium/textures/block/precision_assembler_front.png b/src/main/resources/assets/ragium/textures/block/precision_assembler_front.png new file mode 100644 index 0000000000..aec928c1c4 Binary files /dev/null and b/src/main/resources/assets/ragium/textures/block/precision_assembler_front.png differ diff --git a/src/main/resources/assets/ragium/textures/block/pyrolyzer_front.png b/src/main/resources/assets/ragium/textures/block/pyrolyzer_front.png new file mode 100644 index 0000000000..2600f5b189 Binary files /dev/null and b/src/main/resources/assets/ragium/textures/block/pyrolyzer_front.png differ diff --git a/src/main/resources/assets/ragium/textures/block/quartz_glass.png b/src/main/resources/assets/ragium/textures/block/quartz_glass.png new file mode 100644 index 0000000000..8616d26d67 Binary files /dev/null and b/src/main/resources/assets/ragium/textures/block/quartz_glass.png differ diff --git a/src/main/resources/assets/ragium/textures/block/refinery_front.png b/src/main/resources/assets/ragium/textures/block/refinery_front.png new file mode 100644 index 0000000000..bc0512d487 Binary files /dev/null and b/src/main/resources/assets/ragium/textures/block/refinery_front.png differ diff --git a/src/main/resources/assets/ragium/textures/block/smooth_gypsum.png b/src/main/resources/assets/ragium/textures/block/smooth_gypsum.png new file mode 100644 index 0000000000..6f81a3366d Binary files /dev/null and b/src/main/resources/assets/ragium/textures/block/smooth_gypsum.png differ diff --git a/src/main/resources/assets/ragium/textures/item/alclad_plate.png b/src/main/resources/assets/ragium/textures/item/alclad_plate.png new file mode 100644 index 0000000000..af3e7500bc Binary files /dev/null and b/src/main/resources/assets/ragium/textures/item/alclad_plate.png differ diff --git a/src/main/resources/assets/ragium/textures/item/artificial_artifact.png b/src/main/resources/assets/ragium/textures/item/artificial_artifact.png deleted file mode 100644 index 20f9d1ea91..0000000000 Binary files a/src/main/resources/assets/ragium/textures/item/artificial_artifact.png and /dev/null differ diff --git a/src/main/resources/assets/ragium/textures/item/carbon_fiber.png b/src/main/resources/assets/ragium/textures/item/carbon_fiber.png new file mode 100644 index 0000000000..54692e0bf7 Binary files /dev/null and b/src/main/resources/assets/ragium/textures/item/carbon_fiber.png differ diff --git a/src/main/resources/assets/ragium/textures/item/cement.png b/src/main/resources/assets/ragium/textures/item/cement.png new file mode 100644 index 0000000000..4be41cebfa Binary files /dev/null and b/src/main/resources/assets/ragium/textures/item/cement.png differ diff --git a/src/main/resources/assets/ragium/textures/item/cfrp_plate.png b/src/main/resources/assets/ragium/textures/item/cfrp_plate.png new file mode 100644 index 0000000000..b9dabf7ed3 Binary files /dev/null and b/src/main/resources/assets/ragium/textures/item/cfrp_plate.png differ diff --git a/src/main/resources/assets/ragium/textures/item/gypsum_dust.png b/src/main/resources/assets/ragium/textures/item/gypsum_dust.png new file mode 100644 index 0000000000..ae8368beb5 Binary files /dev/null and b/src/main/resources/assets/ragium/textures/item/gypsum_dust.png differ diff --git a/src/main/resources/assets/ragium/textures/item/lime_dust.png b/src/main/resources/assets/ragium/textures/item/lime_dust.png new file mode 100644 index 0000000000..07d6322836 Binary files /dev/null and b/src/main/resources/assets/ragium/textures/item/lime_dust.png differ diff --git a/src/main/resources/assets/ragium/textures/item/mortar.png b/src/main/resources/assets/ragium/textures/item/mortar.png new file mode 100644 index 0000000000..4fb340bd99 Binary files /dev/null and b/src/main/resources/assets/ragium/textures/item/mortar.png differ diff --git a/src/main/resources/assets/ragium/textures/item/quick_lime_dust.png b/src/main/resources/assets/ragium/textures/item/quick_lime_dust.png new file mode 100644 index 0000000000..71316781ac Binary files /dev/null and b/src/main/resources/assets/ragium/textures/item/quick_lime_dust.png differ diff --git a/src/main/resources/assets/ragium/textures/item/ragi_crystal.png b/src/main/resources/assets/ragium/textures/item/ragi_crystal.png deleted file mode 100644 index 4417732579..0000000000 Binary files a/src/main/resources/assets/ragium/textures/item/ragi_crystal.png and /dev/null differ diff --git a/src/main/resources/assets/ragium/textures/item/ragi_crystal_dust.png b/src/main/resources/assets/ragium/textures/item/ragi_crystal_dust.png deleted file mode 100644 index 5cc93bbf9b..0000000000 Binary files a/src/main/resources/assets/ragium/textures/item/ragi_crystal_dust.png and /dev/null differ diff --git a/src/main/resources/assets/ragium/textures/item/circuit_chip.png b/src/main/resources/assets/ragium/textures/item/silicon_chip.png similarity index 100% rename from src/main/resources/assets/ragium/textures/item/circuit_chip.png rename to src/main/resources/assets/ragium/textures/item/silicon_chip.png diff --git a/src/main/resources/assets/ragium/textures/item/soda_ash_dust.png b/src/main/resources/assets/ragium/textures/item/soda_ash_dust.png new file mode 100644 index 0000000000..71316781ac Binary files /dev/null and b/src/main/resources/assets/ragium/textures/item/soda_ash_dust.png differ diff --git a/src/main/resources/assets/ragium/textures/item/sticky_ball.png b/src/main/resources/assets/ragium/textures/item/sticky_ball.png new file mode 100644 index 0000000000..641e8185c1 Binary files /dev/null and b/src/main/resources/assets/ragium/textures/item/sticky_ball.png differ