diff --git a/build.gradle.kts b/build.gradle.kts index 389babba5d..928b3328f7 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -70,10 +70,16 @@ scmVersion { base { archivesName = modId group = "io.github.hiiragi283" - version = scmVersion.version + version = "${scmVersion.version}-beta" } val libModule: SourceSet = sourceSets.register("lib").get() +val libClientModule: SourceSet = + sourceSets + .register("libClient") { + compileClasspath += libModule.output + libModule.compileClasspath + runtimeClasspath += libModule.output + libModule.runtimeClasspath + }.get() val mainModule: SourceSet = sourceSets .named("main") { @@ -89,7 +95,9 @@ val clientModule: SourceSet = sourceSets .register("client") { compileClasspath += mainModule.output + mainModule.compileClasspath + compileClasspath += libClientModule.output + libClientModule.compileClasspath runtimeClasspath += mainModule.output + mainModule.runtimeClasspath + runtimeClasspath += libClientModule.output + libClientModule.runtimeClasspath }.get() val dataModule: SourceSet = sourceSets @@ -216,6 +224,7 @@ neoForge { // multi mod projects should define one per mod create(modId) { sourceSet(libModule) + sourceSet(libClientModule) sourceSet(sourceSets.main.get()) sourceSet(clientModule) sourceSet(dataModule) @@ -252,12 +261,15 @@ dependencies { runtimeClasspath.get().extendsFrom(create("localRuntime")) val libCompileClasspath: Configuration = named("libCompileClasspath").get() + val libClientCompileClasspath: Configuration = named("libClientCompileClasspath").get() val compileClasspath: Configuration = named("compileClasspath").get() val clientCompileClasspath: Configuration = named("clientCompileClasspath").get() val dataCompileClasspath: Configuration = named("dataCompileClasspath").get() libCompileClasspath.extendsFrom(compileClasspath) + libCompileClasspath.extendsFrom(libClientCompileClasspath) compileClasspath.extendsFrom(clientCompileClasspath) + libClientCompileClasspath.extendsFrom(clientCompileClasspath) clientCompileClasspath.extendsFrom(dataCompileClasspath) } @@ -267,6 +279,9 @@ dependencies { implementation(libs.bundles.common.impl) compileOnly(libs.bundles.common.compile) "localRuntime"(libs.bundles.common.runtime) + + "libClientCompileOnly"(libs.jei.api) + "clientRuntimeOnly"(libs.jei) } // Example configuration to allow publishing using the maven-publish plugin @@ -336,7 +351,7 @@ dokka { dokkaSourceSets { configureEach { sourceRoots.from( - listOf(libModule, clientModule) + listOf(libModule, libClientModule) .map { it.kotlin } .map { it.srcDirs.filter { "lib" in it.path } } ) @@ -379,12 +394,12 @@ tasks { from("LICENSE") { rename { "${it}_ragium" } } - from(libModule.output, clientModule.output) + from(libModule.output, libClientModule.output, clientModule.output) } named("sourcesJar") { dependsOn("libClasses", "clientClasses") duplicatesStrategy = DuplicatesStrategy.FAIL - from(libModule.allSource, clientModule.allSource) + from(libModule.allSource, libClientModule.allSource) } } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 0230260384..175c782884 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -2,7 +2,7 @@ minecraft = "26.1.2" neo-moddev = "2.0.146" -neo-version = "26.1.2.107" +neo-version = "26.1.2.109" kff-version = "6.3.0" kotlin = "2.4.0" @@ -13,10 +13,10 @@ axion-release = "1.21.2" maven-publish = "0.37.0" mod-publish = "2.1.1" -ae2 = "26.1.11-beta" +ae2 = "26.1.12-beta" curios = "15.0.0+26.1.2" jade = "26.1.10+neoforge" -jei = "29.37.0.98" +jei = "29.37.0.100" [libraries] @@ -32,15 +32,12 @@ jei-api = { group = "mezz.jei", name = "jei-26.1.2-neoforge-api", version.ref = common-impl = [] -common-compile = [ - "jei-api", -] +common-compile = [] common-runtime = [ "ae2", "curios", "jade", - "jei" ] [plugins] diff --git a/src/client/kotlin/hiiragi283/ragium/client/RagiumClient.kt b/src/client/kotlin/hiiragi283/ragium/client/RagiumClient.kt index 6f091271fa..4f8e444835 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/RagiumClient.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/RagiumClient.kt @@ -9,13 +9,16 @@ import hiiragi283.lib.mod.HTClientMod import hiiragi283.lib.network.HTPayloadHandlers import hiiragi283.lib.resource.vanillaId import hiiragi283.ragium.api.RagiumAPI +import hiiragi283.ragium.api.data.oreSlurry.HTOreSlurryDataHelper import hiiragi283.ragium.client.gui.screen.HTWidgetContainerScreen +import hiiragi283.ragium.client.gui.screen.tooltip.HTMemoryDiscClientTooltipComponent import hiiragi283.ragium.client.gui.widget.HTEnergySlotWidgetRenderer import hiiragi283.ragium.client.gui.widget.HTFluidWidgetRenderer import hiiragi283.ragium.client.gui.widget.HTItemWidgetRenderer import hiiragi283.ragium.client.gui.widget.HTProgressWidgetRenderer import hiiragi283.ragium.client.gui.widget.HTWidgetRendererManager -import hiiragi283.ragium.client.render.HTMemoryDiscClientTooltipComponent +import hiiragi283.ragium.client.renderer.HTTankBlockEntityRenderer +import hiiragi283.ragium.common.block.entity.RagiumBlockEntityTypes import hiiragi283.ragium.common.fluid.RagiumFluids import hiiragi283.ragium.common.gui.factory.HTBlockWidgetHolderContext import hiiragi283.ragium.common.gui.widget.RagiumWidgetTypes @@ -23,12 +26,14 @@ import hiiragi283.ragium.common.item.tooltip.HTMemoryDiscTooltipComponent import hiiragi283.ragium.common.network.HTUpdateBlockEntityPacket import hiiragi283.ragium.common.network.HTUpdateMenuPacket import net.minecraft.client.resources.model.sprite.Material +import net.minecraft.util.ARGB import net.minecraft.world.item.DyeColor import net.neoforged.api.distmarker.Dist import net.neoforged.bus.api.IEventBus import net.neoforged.fml.ModContainer import net.neoforged.fml.common.Mod 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.network.event.RegisterClientPayloadHandlersEvent @@ -72,13 +77,14 @@ data object RagiumClient : HTClientMod() { register.register(RagiumFluids.HONEY) { still = Material(vanillaId(HTConstants.BLOCK, "honey_block_top"), true) } + register.register(RagiumFluids.RESIN) { + still = Material(vanillaId(HTConstants.BLOCK, "resin_block")) + } register.register(RagiumFluids.POTION) { dull() - tintSource = - FluidStackTintSource { stack: FluidStack -> - "ff000000".hexToInt() or - HTPotionHelper.getContents(stack).color - } + tintSource = FluidStackTintSource { stack: FluidStack -> + ARGB.opaque(HTPotionHelper.getContents(stack).color) + } } register.register(RagiumFluids.OMINOUS_FLUX) { molten() @@ -116,11 +122,11 @@ data object RagiumClient : HTClientMod() { } register.register(RagiumFluids.WOOD_TAR) { - dull() + molten() colorTint(Color(0x663333)) } register.register(RagiumFluids.COAL_TAR) { - dull() + molten() colorTint(Color(0x333366)) } register.register(RagiumFluids.AROMATIC_COMPOUND) { @@ -128,7 +134,7 @@ data object RagiumClient : HTClientMod() { colorTint(Color(0xffcc99)) } register.register(RagiumFluids.CRUDE_OIL) { - sticky() + molten() colorTint(Color(0x333333)) } register.register(RagiumFluids.NAPHTHA) { @@ -143,6 +149,10 @@ data object RagiumClient : HTClientMod() { dull() colorTint(Color(0xff9933)) } + register.register(RagiumFluids.SYNTHETIC_RESIN) { + molten() + colorTint(Color(0xff6633)) + } register.register(RagiumFluids.NITRIC_ACID) { dull() colorTint(Color(0x9999cc)) @@ -151,10 +161,23 @@ data object RagiumClient : HTClientMod() { dull() colorTint(Color(0xcc3333)) } + register.register(RagiumFluids.HYDROGEN_FLUORIDE) { + transparent() + colorTint(Color(0x33cc66)) + } + register.register(RagiumFluids.HYDROFLUORIC_ACID) { + dull() + colorTint(Color(0x33cc66)) + } + register.register(RagiumFluids.NAOH_SOLUTION) { dull() colorTint(Color(0x003366)) } + register.register(RagiumFluids.ALUMINA_SOLUTION) { + transparent() + colorTint(Color(0xffcccc)) + } register.register(RagiumFluids.SULFUR_DIOXIDE) { transparent() colorTint(Color(0x996600)) @@ -181,12 +204,19 @@ data object RagiumClient : HTClientMod() { } register.register(RagiumFluids.ORE_SLURRY) { - dull() - colorTint(Color(0x3399cc)) + still = Material(vanillaId(HTConstants.BLOCK, "white_concrete_powder")) + tintSource = FluidStackTintSource { stack: FluidStack -> + ARGB.opaque(HTOreSlurryDataHelper.getData(stack)?.color ?: 0x333300) + } } } override fun registerScreens(event: RegisterMenuScreensEvent) { event.register(HTBlockWidgetHolderContext.MENU_TYPE.get(), ::HTWidgetContainerScreen) } + + override fun registerEntityRenderer(event: EntityRenderersEvent.RegisterRenderers) { + event.registerBlockEntityRenderer(RagiumBlockEntityTypes.TANK.get(), ::HTTankBlockEntityRenderer) + event.registerBlockEntityRenderer(RagiumBlockEntityTypes.CREATIVE_TANK.get(), ::HTTankBlockEntityRenderer) + } } diff --git a/src/client/kotlin/hiiragi283/ragium/client/event/RagiumClientEventHandler.kt b/src/client/kotlin/hiiragi283/ragium/client/event/RagiumClientEventHandler.kt index 7f4bcc3b06..5b18ca0607 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/event/RagiumClientEventHandler.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/event/RagiumClientEventHandler.kt @@ -14,7 +14,7 @@ data object RagiumClientEventHandler { @SubscribeEvent fun onFluidTooltip(event: FluidTooltipEvent) { val stack: FluidStack = event.fluidStack - if (stack.`is`(RagiumFluids.POTION.getOrThrow())) { + if (RagiumFluids.POTION.isOf(stack)) { HTPotionHelper.getContents(stack).addToTooltip(event.context, event.toolTip::add, event.flags, stack) } } diff --git a/src/client/kotlin/hiiragi283/ragium/client/render/HTMemoryDiscClientTooltipComponent.kt b/src/client/kotlin/hiiragi283/ragium/client/gui/screen/tooltip/HTMemoryDiscClientTooltipComponent.kt similarity index 96% rename from src/client/kotlin/hiiragi283/ragium/client/render/HTMemoryDiscClientTooltipComponent.kt rename to src/client/kotlin/hiiragi283/ragium/client/gui/screen/tooltip/HTMemoryDiscClientTooltipComponent.kt index 09c7492f9d..697607bc03 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/render/HTMemoryDiscClientTooltipComponent.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/gui/screen/tooltip/HTMemoryDiscClientTooltipComponent.kt @@ -1,4 +1,4 @@ -package hiiragi283.ragium.client.render +package hiiragi283.ragium.client.gui.screen.tooltip import hiiragi283.lib.text.Text import hiiragi283.ragium.api.text.RagiumTranslation 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 a38f2ae9a6..d91fe0c405 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/gui/widget/HTFluidWidgetRenderer.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/gui/widget/HTFluidWidgetRenderer.kt @@ -2,14 +2,13 @@ package hiiragi283.ragium.client.gui.widget import hiiragi283.lib.gui.HTBounds import hiiragi283.lib.gui.HTGuiAccess +import hiiragi283.lib.gui.HTGuiRenderHelper import hiiragi283.lib.text.Text import hiiragi283.lib.transfer.fluid.getFluidStack import hiiragi283.ragium.api.util.HTStorageHelper import hiiragi283.ragium.client.util.HTSpriteRenderHelper import hiiragi283.ragium.common.gui.widget.HTFluidWidget -import net.minecraft.client.Minecraft import net.minecraft.client.gui.GuiGraphicsExtractor -import net.minecraft.client.renderer.block.FluidModel import net.minecraft.client.renderer.texture.TextureAtlasSprite import net.minecraft.resources.Identifier import net.minecraft.world.item.Item @@ -28,14 +27,9 @@ class HTFluidWidgetRenderer(gui: HTGuiAccess, widget: HTFluidWidget) : override fun shouldRender(): Boolean = !widget.isEmpty - private fun getModel(): FluidModel = Minecraft.getInstance() - .modelManager - .fluidStateModelSet - .get(widget.resource.fluid.defaultFluidState()) + override fun getSprite(): TextureAtlasSprite? = HTGuiRenderHelper.getSprite(widget.resource) - override fun getSprite(): TextureAtlasSprite = getModel().stillMaterial().sprite() - - override fun getColor(): Int = getModel().fluidTintSource()?.colorAsStack(widget.getFluidStack()) ?: 0 + override fun getColor(): Int = HTGuiRenderHelper.getColor(widget.getFluidStack()) override fun getLevel(): Float = when (widget) { is HTFluidWidget.Slot -> 1f 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 c9189748e4..34190fceb4 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/gui/widget/HTSpriteWidgetRenderer.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/gui/widget/HTSpriteWidgetRenderer.kt @@ -50,7 +50,7 @@ abstract class HTSpriteWidgetRenderer(gui: HTGuiAccess, widge private fun renderSprite(bounds: HTBounds, graphics: GuiGraphicsExtractor) { if (!shouldRender()) return - val sprite: TextureAtlasSprite = getSprite() + val sprite: TextureAtlasSprite = getSprite() ?: return val color: Int = getColor() val fillLevel: Int = getScaledLevel().toInt() @@ -62,6 +62,7 @@ abstract class HTSpriteWidgetRenderer(gui: HTGuiAccess, widge y++ width -= 2 height -= 2 + graphics.enableScissor(x, y, x + width, y + height) graphics.blitTiledSprite( RenderPipelines.GUI_TEXTURED, sprite, @@ -77,6 +78,7 @@ abstract class HTSpriteWidgetRenderer(gui: HTGuiAccess, widge tileScaling.height, color ) // TODO + graphics.disableScissor() } protected fun getTooltipFlag(): TooltipFlag = ClientTooltipFlag.of( @@ -90,7 +92,7 @@ abstract class HTSpriteWidgetRenderer(gui: HTGuiAccess, widge protected abstract fun shouldRender(): Boolean - protected abstract fun getSprite(): TextureAtlasSprite + protected abstract fun getSprite(): TextureAtlasSprite? protected fun getSprite(atlasId: Identifier, id: Identifier): TextureAtlasSprite = Minecraft .getInstance() 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 e0d3754102..320d59f597 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiPlugin.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiPlugin.kt @@ -3,16 +3,18 @@ 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.HTDoubleItemToRecipeCategory import hiiragi283.lib.integration.jei.category.HTItemAndFluidToFluidRecipeCategory import hiiragi283.lib.integration.jei.category.HTItemAndFluidToItemRecipeCategory import hiiragi283.lib.integration.jei.category.HTItemToDoubleItemRecipeCategory import hiiragi283.lib.integration.jei.category.HTItemToItemAndFluidRecipeCategory import hiiragi283.lib.integration.jei.category.HTSingleRecipeCategory +import hiiragi283.lib.integration.jei.category.HTTripleItemToRecipeCategory +import hiiragi283.lib.integration.jei.ingredient.HTIngredientTypes import hiiragi283.lib.item.HTPotionBasedItem import hiiragi283.lib.item.alchemy.HTBottleType import hiiragi283.lib.item.alchemy.HTPotionHelper import hiiragi283.lib.recipe.ingredient.HTPotionFluidIngredient +import hiiragi283.lib.registry.asHolderSequence import hiiragi283.lib.registry.getKeyOrThrow import hiiragi283.ragium.api.RagiumAPI import hiiragi283.ragium.api.RagiumRegistries @@ -25,8 +27,11 @@ import hiiragi283.ragium.client.integration.jei.category.RTElectrolyzingRecipeCa 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.common.block.RagiumBlocks import hiiragi283.ragium.common.fluid.RagiumFluids +import hiiragi283.ragium.common.recipe.RTPotionBottleDrainingRecipe +import hiiragi283.ragium.common.recipe.RTPotionBottleFillingRecipe import mezz.jei.api.JeiPlugin import mezz.jei.api.constants.RecipeTypes import mezz.jei.api.helpers.IGuiHelper @@ -34,6 +39,7 @@ import mezz.jei.api.helpers.IPlatformFluidHelper import mezz.jei.api.neoforge.NeoForgeTypes import mezz.jei.api.registration.IExtraIngredientRegistration import mezz.jei.api.registration.IGuiHandlerRegistration +import mezz.jei.api.registration.IModIngredientRegistration import mezz.jei.api.registration.IRecipeCatalystRegistration import mezz.jei.api.registration.IRecipeCategoryRegistration import mezz.jei.api.registration.IRecipeRegistration @@ -42,14 +48,12 @@ import net.minecraft.core.Holder import net.minecraft.core.registries.BuiltInRegistries import net.minecraft.world.item.Item import net.minecraft.world.item.ItemStack -import net.minecraft.world.item.ItemStackTemplate 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 -import kotlin.streams.asSequence @JeiPlugin class RagiumJeiPlugin : HTJeiPlugin(RagiumAPI.MOD_ID) { @@ -57,14 +61,12 @@ class RagiumJeiPlugin : HTJeiPlugin(RagiumAPI.MOD_ID) { @JvmStatic private fun listItems(): Sequence> = HTPhysicalSideHelper .filteredLookup(BuiltInRegistries.ITEM) - .listElements() - .asSequence() + .asHolderSequence() @JvmStatic private fun listPotions(): Sequence> = HTPhysicalSideHelper .filteredLookup(BuiltInRegistries.POTION) - .listElements() - .asSequence() + .asHolderSequence() } override fun registerItemSubtypes(registration: ISubtypeRegistration) { @@ -78,6 +80,10 @@ class RagiumJeiPlugin : HTJeiPlugin(RagiumAPI.MOD_ID) { } } } + // Ore Slurry Bucket + registration.registerSubtypeInterpreter(RagiumFluids.ORE_SLURRY.bucketHolder.get()) { stack: ItemStack, _ -> + HTOreSlurryDataHelper.getData(stack) + } } override fun registerFluidSubtypes( @@ -94,6 +100,10 @@ class RagiumJeiPlugin : HTJeiPlugin(RagiumAPI.MOD_ID) { ) { stack: FluidStack, _ -> HTOreSlurryDataHelper.getHolder(stack) } } + override fun registerIngredients(registration: IModIngredientRegistration) { + HTIngredientTypes.register(registration) + } + override fun registerExtraIngredients(registration: IExtraIngredientRegistration) { registration.addExtraIngredients( NeoForgeTypes.FLUID_STACK, @@ -105,7 +115,7 @@ class RagiumJeiPlugin : HTJeiPlugin(RagiumAPI.MOD_ID) { registration.addExtraIngredients( NeoForgeTypes.FLUID_STACK, HTPhysicalSideHelper.registryOrThrow(RagiumRegistries.Keys.ORE_SLURRY_DATA) - .listElements() + .asHolderSequence() .map(HTOreSlurryDataHelper::createFluid) .toList() ) @@ -116,14 +126,14 @@ class RagiumJeiPlugin : HTJeiPlugin(RagiumAPI.MOD_ID) { registration.addRecipeCategories( // Mechanical - HTDoubleItemToRecipeCategory.Basic(guiHelper, RagiumJeiRecipeTypes.ASSEMBLING), + HTTripleItemToRecipeCategory.Basic(guiHelper, RagiumJeiRecipeTypes.ASSEMBLING), HTSingleRecipeCategory.ItemToItem(guiHelper, RagiumJeiRecipeTypes.COMPRESSING), HTItemToDoubleItemRecipeCategory(guiHelper, RagiumJeiRecipeTypes.CRUSHING), HTItemToDoubleItemRecipeCategory(guiHelper, RagiumJeiRecipeTypes.CUTTING), HTItemToItemAndFluidRecipeCategory(guiHelper, RagiumJeiRecipeTypes.DRAINING), HTItemAndFluidToItemRecipeCategory(guiHelper, RagiumJeiRecipeTypes.FILLING), // Heat - HTDoubleItemToRecipeCategory.Basic(guiHelper, RagiumJeiRecipeTypes.ALLOYING), + HTTripleItemToRecipeCategory.Basic(guiHelper, RagiumJeiRecipeTypes.ALLOYING), HTSingleRecipeCategory.FluidToItem(guiHelper, RagiumJeiRecipeTypes.FREEZING), HTSingleRecipeCategory.ItemToFluid(guiHelper, RagiumJeiRecipeTypes.MELTING), HTItemToItemAndFluidRecipeCategory(guiHelper, RagiumJeiRecipeTypes.PYROLYZING), @@ -137,6 +147,7 @@ class RagiumJeiPlugin : HTJeiPlugin(RagiumAPI.MOD_ID) { HTItemAndFluidToFluidRecipeCategory(guiHelper, RagiumJeiRecipeTypes.BREWING), HTItemToDoubleItemRecipeCategory(guiHelper, RagiumJeiRecipeTypes.PLANTING), // Electronics + RTResourceExtractingRecipeCategory(guiHelper), // Arcane RTEnchantingRecipeCategory(guiHelper) ) @@ -169,6 +180,11 @@ class RagiumJeiPlugin : HTJeiPlugin(RagiumAPI.MOD_ID) { HTJeiRecipeHelper.addRecipes(registration, RagiumJeiRecipeTypes.BREWING, RagiumRecipeLookups.BREWING) HTJeiRecipeHelper.addRecipes(registration, RagiumJeiRecipeTypes.PLANTING, RagiumRecipeLookups.PLANTING) // Electronics + HTJeiRecipeHelper.addRecipes( + registration, + RagiumJeiRecipeTypes.RESOURCE_EXTRACTING, + RagiumRecipeLookups.RESOURCE_EXTRACTING + ) // Arcane HTJeiRecipeHelper.addRecipes(registration, RagiumJeiRecipeTypes.ENCHANTING, RagiumRecipeLookups.ENCHANTING) @@ -188,6 +204,7 @@ class RagiumJeiPlugin : HTJeiPlugin(RagiumAPI.MOD_ID) { ) itemResult { +bottleType.emptyItem } fluidResult { from(HTPotionHelper.createFluid(potion, HTPotionHelper.BOTTLE_AMOUNT)) } + progressData = RTPotionBottleDrainingRecipe.PROGRESS_DATA recipeId replace potion.getKeyOrThrow() .identifier() .withPrefix("potion_bottle/${bottleType.serializedName}/") @@ -209,6 +226,7 @@ class RagiumJeiPlugin : HTJeiPlugin(RagiumAPI.MOD_ID) { result { from(bottleType.filledItem.toStack(patch = HTPotionHelper.createPotionPatch(potion))) } + progressData = RTPotionBottleFillingRecipe.PROGRESS_DATA recipeId replace potion.getKeyOrThrow() .identifier() .withPrefix("potion_bottle/${bottleType.serializedName}/") @@ -235,14 +253,12 @@ class RagiumJeiPlugin : HTJeiPlugin(RagiumAPI.MOD_ID) { registration.addRecipes( RagiumJeiRecipeTypes.REACTING, HTPhysicalSideHelper.registryOrThrow(RagiumRegistries.Keys.ORE_SLURRY_DATA) - .listElements() - .asSequence() - .mapNotNull { holder: Holder -> - val template: ItemStackTemplate = holder.value().createTemplate() ?: return@mapNotNull null + .asHolderSequence() + .map { holder: Holder -> RagiumRecipeBuilders.reacting { primaryIngredient = HTJeiRecipeHelper.fakeFluid(HTOreSlurryDataHelper.createFluid(holder)) secondaryIngredient = HTJeiRecipeHelper.fakeFluid(FluidTagSlotDisplay(Tags.Fluids.WATER)) - itemResult { from(template) } + +holder.value().result recipeId replace holder.getKeyOrThrow().identifier().withPrefix("ore_slurry/") }.buildSynthetic() }.toList() @@ -273,7 +289,9 @@ class RagiumJeiPlugin : HTJeiPlugin(RagiumAPI.MOD_ID) { registration.addCraftingStation(RagiumJeiRecipeTypes.BREWING, RagiumBlocks.BREWERY) registration.addCraftingStation(RagiumJeiRecipeTypes.PLANTING, RagiumBlocks.PLANTER) // Electronics + registration.addCraftingStation(RagiumJeiRecipeTypes.ASSEMBLING, RagiumBlocks.PRECISION_ASSEMBLER) // Arcane + registration.addCraftingStation(RagiumJeiRecipeTypes.ENCHANTING, RagiumBlocks.ENCHANTER) } override fun registerGuiHandlers(registration: IGuiHandlerRegistration) { 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 f4da070c5a..e27fd82fb2 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiRecipeTypes.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiRecipeTypes.kt @@ -2,23 +2,24 @@ package hiiragi283.ragium.client.integration.jei import hiiragi283.lib.integration.jei.HTHolderJeiRecipeType import hiiragi283.lib.integration.jei.HTJeiRecipeType -import hiiragi283.lib.recipe.base.HTDoubleItemToItemRecipe 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.RagiumRecipeTypes import hiiragi283.ragium.common.block.RagiumBlocks data object RagiumJeiRecipeTypes { // Mechanical @JvmField - val ASSEMBLING: HTHolderJeiRecipeType = + val ASSEMBLING: HTHolderJeiRecipeType = HTJeiRecipeType(RagiumRecipeTypes.ASSEMBLING, RagiumBlocks.ASSEMBLER) @JvmField @@ -43,7 +44,7 @@ data object RagiumJeiRecipeTypes { // Heat @JvmField - val ALLOYING: HTHolderJeiRecipeType = + val ALLOYING: HTHolderJeiRecipeType = HTJeiRecipeType(RagiumRecipeTypes.ALLOYING, RagiumBlocks.ALLOY_SMELTER) @JvmField @@ -89,9 +90,12 @@ data object RagiumJeiRecipeTypes { HTJeiRecipeType(RagiumRecipeTypes.PLANTING, RagiumBlocks.PLANTER) // Electronics + @JvmField + val RESOURCE_EXTRACTING: HTHolderJeiRecipeType = + HTJeiRecipeType(RagiumRecipeTypes.RESOURCE_EXTRACTING, RagiumBlocks.MACHINE_CASING) // Arcane @JvmField val ENCHANTING: HTHolderJeiRecipeType = - HTJeiRecipeType(RagiumRecipeTypes.ENCHANTING, RagiumBlocks.MACHINE_CASING) + HTJeiRecipeType(RagiumRecipeTypes.ENCHANTING, RagiumBlocks.ENCHANTER) } 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 86c72e9f3e..54949a7bfe 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 @@ -22,12 +22,10 @@ class RTElectrolyzingRecipeCategory(guiHelper: IGuiHelper) : ) { override fun setupRecipe(builder: IRecipeLayoutBuilder, recipe: RTElectrolyzingRecipe, focuses: IFocusGroup) { // inputs - recipe.fluidIngredient.let { - builder - .addInputSlot(getPosition(0), getPosition(0)) - .add(it) - .setSlotBackground(HTBackgroundType.INPUT, it.amount) - } + builder + .addInputSlot(getPosition(0), getPosition(0)) + .add(recipe.fluidIngredient) + .setSlotBackground(HTBackgroundType.INPUT) val itemInput: IRecipeSlotBuilder = builder.addInputSlot( getPosition(2), getPosition(0) @@ -37,11 +35,8 @@ class RTElectrolyzingRecipeCategory(guiHelper: IGuiHelper) : val outputSlots: Array = Array(3) { index: Int -> builder.addOutputSlot(getPosition(5 + index), getPosition(0)).setSlotBackground(HTBackgroundType.OUTPUT) } - for (index: Int in recipe.results.indices) { - val result: HTFluidResult = recipe.results[index] - outputSlots[index] - .add(result) - .setFluidSlot(result.amount) + for ((index: Int, result: HTFluidResult) in recipe.results.withIndex()) { + outputSlots[index].add(result) } } 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 541fd9e259..0d8276847c 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 @@ -23,18 +23,14 @@ class RTReactingRecipeCategory(guiHelper: IGuiHelper) : ) { override fun setupRecipe(builder: IRecipeLayoutBuilder, recipe: RTReactingRecipe.Basic, focuses: IFocusGroup) { // inputs - recipe.primary.let { - builder - .addInputSlot(getPosition(0), getPosition(0)) - .add(it) - .setSlotBackground(HTBackgroundType.INPUT, it.amount) - } - recipe.secondary.let { - builder - .addInputSlot(getPosition(2), getPosition(0)) - .add(it) - .setSlotBackground(HTBackgroundType.EXTRA_INPUT, it.amount) - } + builder + .addInputSlot(getPosition(0), getPosition(0)) + .add(recipe.primary) + .setSlotBackground(HTBackgroundType.INPUT) + builder + .addInputSlot(getPosition(2), getPosition(0)) + .add(recipe.secondary) + .setSlotBackground(HTBackgroundType.EXTRA_INPUT) // outputs val (itemResult: HTItemResult?, fluidResult: HTFluidResult?) = recipe.results.toPair() val fluidOutput: IRecipeSlotBuilder = builder @@ -43,7 +39,7 @@ class RTReactingRecipeCategory(guiHelper: IGuiHelper) : val itemOutput: IRecipeSlotBuilder = builder .addOutputSlot(getPosition(7), getPosition(0)) .setSlotBackground(HTBackgroundType.OUTPUT) - fluidResult?.let { fluidOutput.add(it).setFluidSlot(it.amount) } + fluidResult?.let(fluidOutput::add) itemResult?.let(itemOutput::add) } diff --git a/src/client/kotlin/hiiragi283/ragium/client/integration/jei/category/RTRefiningRecipeCategory.kt b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/category/RTRefiningRecipeCategory.kt index 70977ab8ad..d14512efe1 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/integration/jei/category/RTRefiningRecipeCategory.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/category/RTRefiningRecipeCategory.kt @@ -21,19 +21,15 @@ class RTRefiningRecipeCategory(guiHelper: IGuiHelper) : ) { override fun setupRecipe(builder: IRecipeLayoutBuilder, recipe: RTRefiningRecipe, focuses: IFocusGroup) { // inputs - recipe.ingredient.let { - builder - .addInputSlot(getPosition(0), getPosition(0)) - .add(it) - .setSlotBackground(HTBackgroundType.INPUT, it.amount) - } + builder + .addInputSlot(getPosition(0), getPosition(0)) + .add(recipe.ingredient) + .setSlotBackground(HTBackgroundType.INPUT) // outputs - recipe.fluidResult.let { - builder - .addOutputSlot(getPosition(3), getPosition(0)) - .add(it) - .setSlotBackground(HTBackgroundType.OUTPUT, it.amount) - } + builder + .addOutputSlot(getPosition(3), getPosition(0)) + .add(recipe.fluidResult) + .setSlotBackground(HTBackgroundType.OUTPUT) val itemOutput: IRecipeSlotBuilder = builder .addOutputSlot(getPosition(5), getPosition(0)) .setSlotBackground(HTBackgroundType.OUTPUT) diff --git a/src/client/kotlin/hiiragi283/ragium/client/integration/jei/category/RTResourceExtractingRecipeCategory.kt b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/category/RTResourceExtractingRecipeCategory.kt new file mode 100644 index 0000000000..64ccdcd631 --- /dev/null +++ b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/category/RTResourceExtractingRecipeCategory.kt @@ -0,0 +1,69 @@ +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.ingredient.HTBiomeCondition +import hiiragi283.lib.recipe.ingredient.HTStackPreview +import hiiragi283.ragium.api.recipe.RTResourceExtractingRecipe +import hiiragi283.ragium.client.integration.jei.RagiumJeiRecipeTypes +import mezz.jei.api.gui.builder.IRecipeLayoutBuilder +import mezz.jei.api.gui.widgets.IRecipeExtrasBuilder +import mezz.jei.api.helpers.IGuiHelper +import mezz.jei.api.recipe.IFocusGroup +import mezz.jei.api.recipe.RecipeIngredientRole +import net.minecraft.client.Minecraft +import net.minecraft.client.gui.components.debug.DebugEntryBiome +import net.minecraft.core.Holder +import net.minecraft.core.component.DataComponents +import net.minecraft.util.context.ContextMap +import net.minecraft.world.entity.player.Player +import net.minecraft.world.item.ItemStack +import net.minecraft.world.level.biome.Biome + +class RTResourceExtractingRecipeCategory(guiHelper: IGuiHelper) : + HTHolderRecipeCategory( + guiHelper, + RagiumJeiRecipeTypes.RESOURCE_EXTRACTING, + 18 * 4, + 18 * 1, + RTResourceExtractingRecipe.CODEC + ) { + /** + * @see DebugEntryBiome + */ + override fun setupRecipe(builder: IRecipeLayoutBuilder, recipe: RTResourceExtractingRecipe, focuses: IFocusGroup) { + val player: Player = Minecraft.getInstance().player ?: return + val biomeAt: Holder = player.level().getBiome(player.blockPosition()) + // biome condition + builder + .addSlot(RecipeIngredientRole.RENDER_ONLY, getPosition(0), getPosition(0)) + .add( + HTStackPreview { contextMap: ContextMap -> + val condition: HTBiomeCondition = recipe.condition + condition + .display + .resolveForStacks(contextMap) + .map { stack: ItemStack -> + if (condition.test(biomeAt)) { + stack[DataComponents.ENCHANTMENT_GLINT_OVERRIDE] = true + } + stack + } + } + ) + // output + builder + .addOutputSlot(getPosition(3), getPosition(0)) + .add(recipe.result) + .setSlotBackground(HTBackgroundType.OUTPUT) + } + + override fun setupRecipeExtras( + builder: IRecipeExtrasBuilder, + recipe: RTResourceExtractingRecipe, + focuses: IFocusGroup + ) { + builder.addRecipeArrow(recipe).setPosition(getPosition(1.25), getPosition(0)) + } +} diff --git a/src/client/kotlin/hiiragi283/ragium/client/renderer/HTTankBlockEntityRenderer.kt b/src/client/kotlin/hiiragi283/ragium/client/renderer/HTTankBlockEntityRenderer.kt new file mode 100644 index 0000000000..5b518e3655 --- /dev/null +++ b/src/client/kotlin/hiiragi283/ragium/client/renderer/HTTankBlockEntityRenderer.kt @@ -0,0 +1,57 @@ +package hiiragi283.ragium.client.renderer + +import com.mojang.blaze3d.vertex.PoseStack +import hiiragi283.lib.renderer.HTBlockEntityRenderer +import hiiragi283.lib.renderer.HTRenderHelper +import hiiragi283.lib.renderer.state.HTFluidBERenderState +import hiiragi283.ragium.common.block.entity.storage.base.HTBaseTankBlockEntity +import net.minecraft.client.renderer.Sheets +import net.minecraft.client.renderer.SubmitNodeCollector +import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider +import net.minecraft.client.renderer.feature.ModelFeatureRenderer +import net.minecraft.client.renderer.state.level.CameraRenderState +import net.minecraft.client.renderer.texture.TextureAtlasSprite +import net.minecraft.world.phys.Vec3 +import org.joml.Vector3f + +class HTTankBlockEntityRenderer(context: BlockEntityRendererProvider.Context) : + HTBlockEntityRenderer(context) { + companion object { + @JvmStatic + private val FROM: Vector3f = Vector3f(2 / 16f, 0f, 2 / 16f).add(0.01f, 0.01f, 0.01f) + } + + override fun createRenderState(): HTFluidBERenderState = HTFluidBERenderState() + + override fun extractRenderState( + blockEntity: HTBaseTankBlockEntity, + state: HTFluidBERenderState, + partialTicks: Float, + cameraPosition: Vec3, + breakProgress: ModelFeatureRenderer.CrumblingOverlay? + ) { + super.extractRenderState(blockEntity, state, partialTicks, cameraPosition, breakProgress) + state.extractRenderState(blockEntity.tank) + } + + override fun submit( + state: HTFluidBERenderState, + poseStack: PoseStack, + submitNodeCollector: SubmitNodeCollector, + camera: CameraRenderState + ) { + val sprite: TextureAtlasSprite = state.sprite ?: return + val fillingLevel: Float = state.fillingLevel + if (fillingLevel <= 0f) return + HTRenderHelper.submitCube( + submitNodeCollector, + poseStack, + Sheets.translucentBlockItemSheet(), + FROM, + Vector3f(14 / 16f, fillingLevel, 14 / 16f).add(-0.01f, -0.01f, -0.01f), + sprite, + state.color, + state.lightCoords + ) + } +} diff --git a/src/data/kotlin/hiiragi283/ragium/data/RagiumDataGen.kt b/src/data/kotlin/hiiragi283/ragium/data/RagiumDataGen.kt index 179727f72c..c6559c80a8 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/RagiumDataGen.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/RagiumDataGen.kt @@ -3,6 +3,7 @@ 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.world.RagiumDamageTypes import hiiragi283.ragium.data.advancement.RagiumAdvancementProvider import hiiragi283.ragium.data.lang.RagiumEnglishLangProvider import hiiragi283.ragium.data.lang.RagiumJapaneseLangProvider @@ -20,10 +21,12 @@ import hiiragi283.ragium.data.recipe.RagiumMechanicalRecipeProvider import hiiragi283.ragium.data.recipe.RagiumRecipePriorityProvider import hiiragi283.ragium.data.recipe.RagiumVanillaRecipeProvider import hiiragi283.ragium.data.tag.RagiumBlockTagsProvider +import hiiragi283.ragium.data.tag.RagiumDamageTypeTagsProvider import hiiragi283.ragium.data.tag.RagiumFluidTagsProvider import hiiragi283.ragium.data.tag.RagiumItemTagsProvider import hiiragi283.ragium.data.worldgen.RagiumWorldData import net.minecraft.core.RegistrySetBuilder +import net.minecraft.core.registries.Registries import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets import net.neoforged.bus.api.SubscribeEvent import net.neoforged.fml.common.EventBusSubscriber @@ -35,6 +38,7 @@ data object RagiumDataGen { fun gatherData(event: GatherDataEvent.Client) { event.createDatapackRegistryObjects( RegistrySetBuilder() + .add(Registries.DAMAGE_TYPE, RagiumDamageTypes::bootstrap) .add(RagiumRegistries.Keys.ORE_SLURRY_DATA, RagiumOreSlurryData::bootstrap) .apply(RagiumWorldData::bootstrap) ) @@ -50,7 +54,7 @@ data object RagiumDataGen { ) event.createProvider(::RagiumGlobalLootModifierProvider) - event.createProvider(RagiumVanillaRecipeProvider::Runner) + event.createProvider(::RagiumVanillaRecipeProvider) event.createProvider(::RagiumCommonRecipeProvider) event.createProvider(::RagiumMechanicalRecipeProvider) @@ -65,6 +69,8 @@ data object RagiumDataGen { event.createProvider(::RagiumBlockTagsProvider) event.createProvider(::RagiumFluidTagsProvider) event.createProvider(::RagiumItemTagsProvider) + + event.createProvider(::RagiumDamageTypeTagsProvider) // Client event.createProvider(::RagiumSpriteSourceProvider) diff --git a/src/data/kotlin/hiiragi283/ragium/data/RagiumDataMapProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/RagiumDataMapProvider.kt index f305f7de08..e64fa1b183 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/RagiumDataMapProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/RagiumDataMapProvider.kt @@ -24,14 +24,15 @@ class RagiumDataMapProvider(packOutput: PackOutput, lookupProvider: CompletableF .add(RagiumItems.BAMBOO_CHARCOAL, FurnaceFuel(200 * 6), false) .add(RagiumItems.COAL_COKE, FurnaceFuel(200 * 16), false) .add(RagiumItems.TAR, FurnaceFuel(200 * 4), false) - .add(RagiumItems.PITCH_COKE, FurnaceFuel(200 * 6), false) + .add(RagiumItems.PITCH_COKE, FurnaceFuel(200 * 12), false) for (fuel: RagiumMaterial.Fuel in RagiumMaterial.Fuel.entries) { val time: Int = when (fuel) { - RagiumMaterial.Fuel.COAL -> 1 - RagiumMaterial.Fuel.CHARCOAL -> 1 - RagiumMaterial.Fuel.COAL_COKE -> 2 - } * 200 + RagiumMaterial.Fuel.COAL -> 200 + RagiumMaterial.Fuel.CHARCOAL -> 200 + RagiumMaterial.Fuel.COAL_COKE -> 400 + RagiumMaterial.Fuel.PITCH_COKE -> 300 + } RagiumBlocks.STORAGE_BLOCKS[fuel]?.item?.let { storage: Holder -> builder.add(storage, FurnaceFuel(time * 80), false) } diff --git a/src/data/kotlin/hiiragi283/ragium/data/advancement/RagiumAdvancementProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/advancement/RagiumAdvancementProvider.kt index 1f7760debb..eb764034dd 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/advancement/RagiumAdvancementProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/advancement/RagiumAdvancementProvider.kt @@ -9,8 +9,6 @@ import hiiragi283.lib.registry.HTSimpleDeferredItem import hiiragi283.lib.resource.vanillaId import hiiragi283.ragium.api.RagiumAPI import hiiragi283.ragium.api.material.HTItemPart -import hiiragi283.ragium.api.material.HTMaterialAccess -import hiiragi283.ragium.api.material.HTMaterialContents import hiiragi283.ragium.api.material.RagiumMaterial import hiiragi283.ragium.api.tag.HTMachineType import hiiragi283.ragium.common.advancment.RagiumAdvancementKeys @@ -45,7 +43,7 @@ class RagiumAdvancementProvider(packOutput: PackOutput, future: CompletableFutur HTAdvancementBuilder.create(key) { +parentKey display { +item } - inventory(getHasName(item.block)) { predicate { items { +item } } } + inventory(getHasName(item)) { predicate { items { +item } } } }.save(exporter) } @@ -55,8 +53,7 @@ class RagiumAdvancementProvider(packOutput: PackOutput, future: CompletableFutur part: HTItemPart, material: RagiumMaterial ) { - val item: HTMaterialContents.ItemEntry = - HTMaterialAccess.INSTANCE.getMaterialBlockOrItem(part, material) ?: return + val item: HTSimpleDeferredItem = RagiumItems.getOrThrow(part, material) HTAdvancementBuilder.create(key) { +parentKey display { +item } diff --git a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt index b0b649060a..30609fcef1 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt @@ -22,22 +22,32 @@ class RagiumEnglishLangProvider(output: PackOutput) : addPatternTranslations(this) // Advancement - add(RagiumAdvancementKeys.ROOT, "Ragium", "Welcome to Ragium!") - add(RagiumAdvancementKeys.SOOTY_IRON, "Acquire Blackware", "Craft a Sooty Iron Ingot") + addAdvancement(RagiumAdvancementKeys.ROOT, "Ragium", "Welcome to Ragium!") + addAdvancement(RagiumAdvancementKeys.SOOTY_IRON, "Acquire Blackware", "Craft a Sooty Iron Ingot") - add( + addAdvancement( RagiumAdvancementKeys.MECHANICAL_MACHINE_PARTS, "Mechanical Machines", "Craft a Machine Casing (Mechanical)" ) - add(RagiumAdvancementKeys.ASSEMBLER, "Rava(n)gers, assemble!", "Acquire Assembler") - add(RagiumAdvancementKeys.CRUSHER, "Macerator, Pulverizer, or Crusher?", "Acquire Crusher") + addAdvancement(RagiumAdvancementKeys.ASSEMBLER, "Rava(n)gers, assemble!", "Acquire Assembler") + addAdvancement(RagiumAdvancementKeys.CRUSHER, "Macerator, Pulverizer, or Crusher?", "Acquire Crusher") - add(RagiumAdvancementKeys.HEAT_MACHINE_PARTS, "Heat And Cool", "Craft a Machine Casing (Heat)") - add(RagiumAdvancementKeys.BLACK_STEEL, "Black Roaring", "Craft a Black Steel Ingot") - add(RagiumAdvancementKeys.FREEZER, "My power is 530,000.", "Acquire Freezer") - add(RagiumAdvancementKeys.MELTER, "(S)melter(y)", "Acquire Melter") + addAdvancement(RagiumAdvancementKeys.HEAT_MACHINE_PARTS, "Heat And Cool", "Craft a Machine Casing (Heat)") + addAdvancement(RagiumAdvancementKeys.BLACK_STEEL, "Black Roaring", "Craft a Black Steel Ingot") + 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.ASSEMBLER, "Assembler") add(RagiumBlocks.CRUSHER, "Crusher") add(RagiumBlocks.COMPRESSOR, "Compressor") @@ -58,13 +68,23 @@ class RagiumEnglishLangProvider(output: PackOutput) : add(RagiumBlocks.BREWERY, "Brewery") add(RagiumBlocks.PLANTER, "Planter") + add(RagiumBlocks.PRECISION_ASSEMBLER, "Precision Assembler") add(RagiumBlocks.SCANNER, "Laser Scanner") + add(RagiumBlocks.ENCHANTER, "Enchanter") + + add(RagiumBlocks.TANK, "Variable Tank") + add(RagiumBlocks.VOID_TANK, "Void Tank") add(RagiumBlocks.CREATIVE_BATTERY, "Creative Battery") + add(RagiumBlocks.CREATIVE_TANK, "Creative Tank") add(RagiumBlocks.MACHINE_CASING, "Machine Casing") + // Damage Type + add("death.attack.chemicalBurn", $$"%1$s was injured chemical burn") + add("death.attack.chemicalBurn.player", $$"%1$s was injured chemical burn while fighting %2$s") // Fluid addFluid(RagiumFluids.HONEY, "Honey") + addFluid(RagiumFluids.RESIN, "Resin") // add(RagiumFluids.POTION.getFluidType().descriptionId, "Invalid Potion") add(RagiumFluids.POTION.bucketHolder, $$"%1$s Bucket") addFluid(RagiumFluids.OMINOUS_FLUX, "Ominous Flux") @@ -84,9 +104,13 @@ class RagiumEnglishLangProvider(output: PackOutput) : addFluid(RagiumFluids.NAPHTHA, "Naphtha") addFluid(RagiumFluids.FUEL, "Fuel") addFluid(RagiumFluids.ANTI_RUST_OIL, "Anti-rust Oil") + 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.NAOH_SOLUTION, "Sodium Hydroxide Solution") + addFluid(RagiumFluids.ALUMINA_SOLUTION, "Alumina Solution") addFluid(RagiumFluids.SULFUR_DIOXIDE, "Sulfur Dioxide") addFluid(RagiumFluids.SULFUR_TRIOXIDE, "Sulfur Trioxide") addFluid(RagiumFluids.SULFURIC_ACID, "Sulfuric Acid") @@ -99,7 +123,6 @@ class RagiumEnglishLangProvider(output: PackOutput) : // Item add(RagiumItems.BAMBOO_CHARCOAL, "Bamboo Charcoal") add(RagiumItems.TAR, "Tar") - add(RagiumItems.PITCH_COKE, "Pitch Coke") add(RagiumItems.PARTICLE_BOARD, "Particle Board") add(RagiumItems.PLASTIC_PLATE, "Plastic Plate") add(RagiumItems.SYNTHETIC_FEATHER, "Synthetic Feather") @@ -108,6 +131,11 @@ class RagiumEnglishLangProvider(output: PackOutput) : 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.CIRCUIT_BOARD, "Circuit Board") + add(RagiumItems.ELECTRIC_CIRCUIT, "Electric Circuit") add(RagiumItems.ELDER_HEART, "Elder Heart") add(RagiumItems.WITHER_DOLL, "Wither Doll") add(RagiumItems.WITHER_STAR, "Wither Star") @@ -116,16 +144,22 @@ class RagiumEnglishLangProvider(output: PackOutput) : // Mob Effect 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") + addCustomPotion("nausea", "Nausea") + addCustomPotion("blindness", "Blindness") addCustomPotion("hunger", "Hunger") + addCustomPotion("wither", "Wither") addCustomPotion("darkness", "Darkness") addCustomPotion("golden_apple", "Golden Apple") addCustomPotion("enchanted_golden_apple", "Enchanted Golden Apple") @@ -152,6 +186,8 @@ class RagiumEnglishLangProvider(output: PackOutput) : add(RagiumRecipeTypes.BREWING, "Brewing") add(RagiumRecipeTypes.PLANTING, "Planting") + add(RagiumRecipeTypes.RESOURCE_EXTRACTING, "Resource Extracting") + add(RagiumRecipeTypes.ENCHANTING, "Enchanting") // Text - Lib @@ -173,6 +209,8 @@ class RagiumEnglishLangProvider(output: PackOutput) : add(HTCommonTranslation.PROGRESS, $$"Progress: %1$s %%") add(HTCommonTranslation.SECONDS, $$"%1$s sec (%2$s ticks)") + add(HTCommonTranslation.BIOME, $$"Biome: %1$s") + add(HTCommonTranslation.TOOLTIP_INTRINSIC_ENCHANTMENT, $$"Always has at least %1$s") add(HTCommonTranslation.TOOLTIP_SHOW_DESCRIPTION, "Press Shift to show description") add(HTCommonTranslation.TOOLTIP_SHOW_DETAILS, "Press Ctrl to show details") diff --git a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt index b8f40fc081..1eaf4c1202 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt @@ -22,18 +22,28 @@ class RagiumJapaneseLangProvider(output: PackOutput) : addPatternTranslations(this) // Advancement - add(RagiumAdvancementKeys.ROOT, "ラギウム", "ラギウムへようこそ!") - add(RagiumAdvancementKeys.SOOTY_IRON, "黒鉄(くろがね)を手に入れる", "煤鉄をつくる") + addAdvancement(RagiumAdvancementKeys.ROOT, "ラギウム", "ラギウムへようこそ!") + addAdvancement(RagiumAdvancementKeys.SOOTY_IRON, "黒鉄(くろがね)を手に入れる", "煤鉄をつくる") - add(RagiumAdvancementKeys.MECHANICAL_MACHINE_PARTS, "機械・加工・機械", "マシンケーシング(機械加工)を作る") - add(RagiumAdvancementKeys.ASSEMBLER, "ラヴェ(ン)ジャーズ,アッセンブル!", "組立機を手に入れる") - add(RagiumAdvancementKeys.CRUSHER, "Macerator, Pulverizer, or Crusher?", "粉砕機を手に入れる") + addAdvancement(RagiumAdvancementKeys.MECHANICAL_MACHINE_PARTS, "機械・加工・機械", "マシンケーシング(機械加工)を作る") + addAdvancement(RagiumAdvancementKeys.ASSEMBLER, "ラヴェ(ン)ジャーズ,アッセンブル!", "組立機を手に入れる") + addAdvancement(RagiumAdvancementKeys.CRUSHER, "Macerator, Pulverizer, or Crusher?", "粉砕機を手に入れる") - add(RagiumAdvancementKeys.HEAT_MACHINE_PARTS, "Heat And Cool", "マシンケーシング(熱)を作る") - add(RagiumAdvancementKeys.BLACK_STEEL, "黒い咆哮", "黒鋼をつくる") - add(RagiumAdvancementKeys.FREEZER, "私の消費電力は53万です", "冷凍機を手に入れる") - add(RagiumAdvancementKeys.MELTER, "融けてしまいそう", "溶融炉を手に入れる") + addAdvancement(RagiumAdvancementKeys.HEAT_MACHINE_PARTS, "Heat And Cool", "マシンケーシング(熱)を作る") + addAdvancement(RagiumAdvancementKeys.BLACK_STEEL, "黒い咆哮", "黒鋼をつくる") + 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.ASSEMBLER, "組立機") add(RagiumBlocks.CRUSHER, "破砕機") add(RagiumBlocks.COMPRESSOR, "圧縮機") @@ -54,13 +64,23 @@ class RagiumJapaneseLangProvider(output: PackOutput) : add(RagiumBlocks.BREWERY, "醸造機") add(RagiumBlocks.PLANTER, "栽培機") + add(RagiumBlocks.PRECISION_ASSEMBLER, "精密組立機") add(RagiumBlocks.SCANNER, "レーザースキャナ") + add(RagiumBlocks.ENCHANTER, "エンチャンター") + + add(RagiumBlocks.TANK, "可変タンク") + add(RagiumBlocks.VOID_TANK, "廃棄タンク") add(RagiumBlocks.CREATIVE_BATTERY, "クリエイティブ用バッテリー") + add(RagiumBlocks.CREATIVE_TANK, "クリエイティブ用タンク") add(RagiumBlocks.MACHINE_CASING, "機械ケーシング") + // Damage Type + add("death.attack.chemicalBurn", $$"%1$sは化学火傷を負った") + add("death.attack.chemicalBurn.player", $$"%1$sは%2$sと戦いながら化学火傷を負った") // Fluid addFluid(RagiumFluids.HONEY, "ハチミツ") + addFluid(RagiumFluids.RESIN, "樹脂") // add(RagiumFluids.POTION.getFluidType().descriptionId, "無効なポーション") add(RagiumFluids.POTION.bucketHolder, $$"%1$s入りバケツ") addFluid(RagiumFluids.OMINOUS_FLUX, "不吉な流動体") @@ -80,9 +100,13 @@ class RagiumJapaneseLangProvider(output: PackOutput) : addFluid(RagiumFluids.NAPHTHA, "ナフサ") addFluid(RagiumFluids.FUEL, "燃料油") addFluid(RagiumFluids.ANTI_RUST_OIL, "防錆油") + addFluid(RagiumFluids.SYNTHETIC_RESIN, "合成樹脂") addFluid(RagiumFluids.NITRIC_ACID, "硝酸") addFluid(RagiumFluids.LIQUID_EXPLOSIVE, "液体爆薬") + addFluid(RagiumFluids.HYDROGEN_FLUORIDE, "フッ化水素") + addFluid(RagiumFluids.HYDROFLUORIC_ACID, "フッ化水素酸") addFluid(RagiumFluids.NAOH_SOLUTION, "水酸化ナトリウム水溶液") + addFluid(RagiumFluids.ALUMINA_SOLUTION, "アルミナ水溶液") addFluid(RagiumFluids.SULFUR_DIOXIDE, "二酸化硫黄") addFluid(RagiumFluids.SULFUR_TRIOXIDE, "三酸化硫黄") addFluid(RagiumFluids.SULFURIC_ACID, "硫酸") @@ -95,7 +119,6 @@ class RagiumJapaneseLangProvider(output: PackOutput) : // Item add(RagiumItems.BAMBOO_CHARCOAL, "竹炭") add(RagiumItems.TAR, "タール") - add(RagiumItems.PITCH_COKE, "ピッチコークス") add(RagiumItems.PARTICLE_BOARD, "パーティクルボード") add(RagiumItems.PLASTIC_PLATE, "プラスチック板") add(RagiumItems.SYNTHETIC_FEATHER, "合成羽") @@ -104,6 +127,11 @@ class RagiumJapaneseLangProvider(output: PackOutput) : 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.CIRCUIT_BOARD, "回路基板") + add(RagiumItems.ELECTRIC_CIRCUIT, "電子回路") add(RagiumItems.ELDER_HEART, "エルダーの心臓") add(RagiumItems.WITHER_DOLL, "ウィザー人形") add(RagiumItems.WITHER_STAR, "ウィザースター") @@ -112,16 +140,22 @@ class RagiumJapaneseLangProvider(output: PackOutput) : // Mob Effect 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, "化学火傷") + addCustomPotion("nausea", "吐き気") + addCustomPotion("blindness", "盲目") addCustomPotion("hunger", "空腹") + addCustomPotion("wither", "衰退") addCustomPotion("darkness", "暗闇") addCustomPotion("golden_apple", "金リンゴ") addCustomPotion("enchanted_golden_apple", "エンチャントされた金リンゴ") @@ -148,6 +182,8 @@ class RagiumJapaneseLangProvider(output: PackOutput) : add(RagiumRecipeTypes.BREWING, "醸造") add(RagiumRecipeTypes.PLANTING, "栽培") + add(RagiumRecipeTypes.RESOURCE_EXTRACTING, "資源採集") + add(RagiumRecipeTypes.ENCHANTING, "エンチャント") // Text - Lib @@ -169,6 +205,8 @@ class RagiumJapaneseLangProvider(output: PackOutput) : add(HTCommonTranslation.PROGRESS, $$"進捗率: %1$s %%") add(HTCommonTranslation.SECONDS, $$"%1$s 秒 (%2$s ticks)") + add(HTCommonTranslation.BIOME, $$"バイオーム: %1$s") + add(HTCommonTranslation.TOOLTIP_INTRINSIC_ENCHANTMENT, $$"常に少なくとも%1$sがあります") add(HTCommonTranslation.TOOLTIP_SHOW_DESCRIPTION, "シフトキーを押して説明を表示") add(HTCommonTranslation.TOOLTIP_SHOW_DETAILS, "シフトキーを押して詳細を表示") diff --git a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumLangProvider.kt index de4b3542ed..a4cdde5d38 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumLangProvider.kt @@ -50,6 +50,7 @@ interface RagiumLangProvider { provider.add(item, patternProvider, material) } provider.add(RagiumItems.COAL_COKE, RagiumMaterial.Fuel.COAL_COKE) + provider.add(RagiumItems.PITCH_COKE, RagiumMaterial.Fuel.PITCH_COKE) val partsPattern = HTLangPatternProvider("Machine Parts (%s)", "機械部品 (%s)") for ((machineType: HTLangName, parts: HTHasTranslationKey) in RagiumItems.MACHINE_PARTS) { diff --git a/src/data/kotlin/hiiragi283/ragium/data/loot/RagiumBlockLootTableProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/loot/RagiumBlockLootTableProvider.kt index 963d1fc555..684f271ff4 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/loot/RagiumBlockLootTableProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/loot/RagiumBlockLootTableProvider.kt @@ -1,20 +1,27 @@ package hiiragi283.ragium.data.loot import hiiragi283.lib.data.loot.HTBlockLootTableProvider -import hiiragi283.lib.registry.HTSimpleDeferredBlock +import hiiragi283.lib.registry.HTSimpleDeferredBlockAndItem +import hiiragi283.lib.registry.HTSimpleDeferredItem import hiiragi283.ragium.api.RagiumAPI +import hiiragi283.ragium.api.data.RagiumDataComponents import hiiragi283.ragium.api.material.HTItemPart -import hiiragi283.ragium.api.material.HTMaterialAccess import hiiragi283.ragium.api.material.HTOreBlockPart import hiiragi283.ragium.api.material.RagiumMaterial import hiiragi283.ragium.common.block.RagiumBlocks +import hiiragi283.ragium.common.item.RagiumItems import net.minecraft.core.HolderLookup -import net.minecraft.world.level.ItemLike +import net.minecraft.core.component.DataComponents import net.minecraft.world.level.block.Block +import net.minecraft.world.level.storage.loot.LootPool +import net.minecraft.world.level.storage.loot.LootTable import net.minecraft.world.level.storage.loot.entries.LootItem import net.minecraft.world.level.storage.loot.entries.LootPoolSingletonContainer import net.minecraft.world.level.storage.loot.functions.ApplyBonusCount +import net.minecraft.world.level.storage.loot.functions.CopyComponentsFunction import net.minecraft.world.level.storage.loot.functions.SetItemCountFunction +import net.minecraft.world.level.storage.loot.parameters.LootContextParams +import net.minecraft.world.level.storage.loot.providers.number.ConstantValue import net.minecraft.world.level.storage.loot.providers.number.NumberProvider import net.minecraft.world.level.storage.loot.providers.number.UniformGenerator @@ -27,13 +34,24 @@ class RagiumBlockLootTableProvider(registries: HolderLookup.Provider) : registerOres(RagiumMaterial.Mineral.SULFUR, HTItemPart.DUST, UniformGenerator.between(2f, 5f)) registerOres(RagiumMaterial.Mineral.NITER, HTItemPart.DUST, UniformGenerator.between(2f, 5f)) - RagiumBlocks.STORAGE_BLOCKS.values.forEach { dropSelf(it.block) } + RagiumBlocks.STORAGE_BLOCKS.values.forEach(::dropSelf) + + add(RagiumBlocks.FLUORITE_SLAB, ::createSlabItemTable) + add(RagiumBlocks.CRYOLITE_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) } } + } } private fun registerOres(material: RagiumMaterial, rawPart: HTItemPart, countProvider: NumberProvider? = null) { for (part: HTOreBlockPart in HTOreBlockPart.entries) { - val block: HTSimpleDeferredBlock = RagiumBlocks.MATERIAL_ORES[part, material]?.block ?: continue - val drop: ItemLike = HTMaterialAccess.INSTANCE.getMaterialItem(rawPart, material) ?: continue + val block: HTSimpleDeferredBlockAndItem = RagiumBlocks.MATERIAL_ORES[part, material] ?: continue + val drop: HTSimpleDeferredItem = RagiumItems.MATERIAL_ITEMS[rawPart, material] ?: continue add(block) { block: Block -> val builder: LootPoolSingletonContainer.Builder<*> = LootItem.lootTableItem(drop) countProvider?.let(SetItemCountFunction::setCount)?.let(builder::apply) @@ -42,4 +60,29 @@ class RagiumBlockLootTableProvider(registries: HolderLookup.Provider) : } } } + + private inline fun copyComponent( + block: Block, + builderAction: CopyComponentsFunction.Builder.() -> Unit = {} + ): LootTable.Builder = LootTable + .lootTable() + .withPool( + applyExplosionCondition( + block, + LootPool + .lootPool() + .setRolls(ConstantValue.exactly(1f)) + .add( + LootItem + .lootTableItem(block) + .apply( + CopyComponentsFunction + .copyComponentsFromBlockEntity(LootContextParams.BLOCK_ENTITY) + .include(DataComponents.CUSTOM_NAME) + .include(RagiumDataComponents.OWNER_ID) + .apply(builderAction) + ) + ) + ) + ) } diff --git a/src/data/kotlin/hiiragi283/ragium/data/model/RagiumModelProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/model/RagiumModelProvider.kt index d05b26c30f..450da341df 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/model/RagiumModelProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/model/RagiumModelProvider.kt @@ -2,10 +2,11 @@ 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.HTSimpleBlockItemWithKey import hiiragi283.lib.resource.HTValueWithId import hiiragi283.lib.resource.blockId import hiiragi283.lib.resource.vanillaId @@ -33,6 +34,7 @@ class RagiumModelProvider(output: PackOutput) : HTModelProvider(output, RagiumAP val dripFluids: List = buildList { addAll(RagiumFluids.DYES) add(RagiumFluids.HONEY) + add(RagiumFluids.RESIN) add(RagiumFluids.OMINOUS_FLUX) add(RagiumFluids.MOLTEN_GLASS) add(RagiumFluids.MOLTEN_REDSTONE) @@ -42,6 +44,7 @@ class RagiumModelProvider(output: PackOutput) : HTModelProvider(output, RagiumAP add(RagiumFluids.WOOD_TAR) add(RagiumFluids.COAL_TAR) add(RagiumFluids.CRUDE_OIL) + add(RagiumFluids.SYNTHETIC_RESIN) add(RagiumFluids.SULFURIC_ACID) add(RagiumFluids.ORE_SLURRY) @@ -64,11 +67,22 @@ class RagiumModelProvider(output: PackOutput) : HTModelProvider(output, RagiumAP private fun registerBlockModels(generators: BlockModelGenerators) { sequence { yieldAll(RagiumBlocks.MATERIAL_BLOCKS.values) + yield(RagiumBlocks.ECHO_BLOCK) + yield(RagiumBlocks.FLUORITE_BLOCK) + yield(RagiumBlocks.CRYOLITE_BLOCK) yield(RagiumBlocks.CREATIVE_BATTERY) // TODO yield(RagiumBlocks.MACHINE_CASING) - }.forEach { generators.createTrivialCube(it.block.getOrThrow()) } + }.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) // Machine val inactiveModels: Map = HTMachineType.entries @@ -80,31 +94,41 @@ class RagiumModelProvider(output: PackOutput) : HTModelProvider(output, RagiumAP generators.modelOutput ) } - for ((machineType: HTMachineType, blockItem: HTSimpleBlockItemWithKey) in RagiumBlocks.MACHINES.flatEntries) { - val block: HTValueWithId = blockItem.block - generators.blockStateOutput.accept( - MultiVariantGenerator.dispatch(block.getOrThrow()) - .with( - PropertyDispatch.initial(HTMachineBlock.IS_ACTIVE) - .select(false, BlockModelGenerators.plainVariant(inactiveModels[machineType]!!)) - .select( - true, - BlockModelGenerators.plainVariant(machineModel(generators, machineType, block)) - ) - ).with(BlockModelGenerators.ROTATION_HORIZONTAL_FACING) - ) - } + RagiumBlocks.MACHINES + .entries + .forEach { (machineType: HTMachineType, blockItems: List) -> + val inactiveModel: Identifier = inactiveModels[machineType]!! + for (blockItem: HTSimpleDeferredBlockAndItem in blockItems) { + 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) + ) + ) + ).with(BlockModelGenerators.ROTATION_HORIZONTAL_FACING) + ) + } + } // Decoration - for ((machineType: HTMachineType, block: HTSimpleBlockItemWithKey) in RagiumBlocks.MACHINE_CASINGS) { + for ((machineType: HTMachineType, block: HTSimpleDeferredBlockAndItem) in RagiumBlocks.MACHINE_CASINGS) { generators.createSimple( - block.block.getOrThrow(), + block.getOrThrow(), ModelTemplates.CUBE_TOP.createBlock( - block.block, + block, textureMapping(machineType), generators.modelOutput ) ) } + // 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) } private fun machineModel( @@ -121,7 +145,7 @@ class RagiumModelProvider(output: PackOutput) : HTModelProvider(output, RagiumAP } private fun textureMapping(machineType: HTMachineType): TextureMapping = TextureMapping() - .put(TextureSlot.TOP, Material(RagiumBlocks.MACHINE_CASING.block.idOrThrow.blockId)) + .put(TextureSlot.TOP, Material(RagiumBlocks.MACHINE_CASING.idOrThrow.blockId)) .put( TextureSlot.SIDE, Material(RagiumAPI.id(HTConstants.BLOCK, "machine", "${machineType.materialName}_side")) diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumBioRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumBioRecipeProvider.kt index e052a4a3f8..c1fcee3a4e 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumBioRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumBioRecipeProvider.kt @@ -3,7 +3,6 @@ package hiiragi283.ragium.data.recipe import hiiragi283.lib.data.recipe.HTRecipeProvider import hiiragi283.lib.item.component.PotionContents 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.RagiumMaterial @@ -50,8 +49,30 @@ class RagiumBioRecipeProvider(packOutput: PackOutput, future: CompletableFuture< // Haste // Nausea + RagiumRecipeBuilders.brewing { + itemIngredient { items { +Items.PUFFERFISH } } + fluidIngredient { +HTPotionFluidIngredient(Potions.THICK) } + result { + +PotionContents( + customEffects = listOf(MobEffectInstance(MobEffects.NAUSEA, 900)), + customName = "nausea" + ) + } + recipeId replace id("potion/nausea") + }.save(exporter) // Resistance // Blindness + RagiumRecipeBuilders.brewing { + itemIngredient { +holderSet(Tags.Items.GLASS_BLOCKS_TINTED) } + fluidIngredient { +HTPotionFluidIngredient(Potions.THICK) } + result { + +PotionContents( + customEffects = listOf(MobEffectInstance(MobEffects.BLINDNESS, 900)), + customName = "blindness" + ) + } + recipeId replace id("potion/blindness") + }.save(exporter) // Hunger RagiumRecipeBuilders.brewing { itemIngredient { items { +Items.ROTTEN_FLESH } } @@ -65,6 +86,22 @@ class RagiumBioRecipeProvider(packOutput: PackOutput, future: CompletableFuture< recipeId replace id("potion/hunger") }.save(exporter) // Wither + RagiumRecipeBuilders.brewing { + itemIngredient { + items { + +Items.WITHER_ROSE + +Items.WITHER_SKELETON_SKULL + } + } + fluidIngredient { +HTPotionFluidIngredient(Potions.THICK) } + result { + +PotionContents( + customEffects = listOf(MobEffectInstance(MobEffects.WITHER, 900)), + customName = "wither" + ) + } + recipeId replace id("potion/wither") + }.save(exporter) // Health Boost // Absorption // Saturation @@ -74,7 +111,7 @@ class RagiumBioRecipeProvider(packOutput: PackOutput, future: CompletableFuture< // Unluck // Darkness RagiumRecipeBuilders.brewing { - itemIngredient { +holderSet(CommonTagPrefixes.GEM, RagiumMaterial.Gem.ECHO) } + itemIngredient { +dustOrGem(RagiumMaterial.Gem.ECHO) } fluidIngredient { +HTPotionFluidIngredient(Potions.THICK) } result { +PotionContents( diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumChemicalRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumChemicalRecipeProvider.kt index 14d72ec457..45ec6b191e 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumChemicalRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumChemicalRecipeProvider.kt @@ -44,7 +44,7 @@ class RagiumChemicalRecipeProvider(packOutput: PackOutput, future: CompletableFu // Molten Glass + Amethyst -> Tinted Glass RagiumRecipeBuilders.bathing { - itemIngredient { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Gem.AMETHYST) } + itemIngredient { +dustOrGem(RagiumMaterial.Gem.AMETHYST) } fluidIngredient { +holderSet(RagiumFluids.MOLTEN_GLASS) } result { +Items.TINTED_GLASS diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt index d5a1b94e7b..2eb087236d 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt @@ -1,11 +1,18 @@ package hiiragi283.ragium.data.recipe +import hiiragi283.lib.collection.nelOf +import hiiragi283.lib.color.VanillaColoredCollections import hiiragi283.lib.data.recipe.HTRecipeProvider +import hiiragi283.lib.recipe.ingredient.HTMaterialTagsIngredient +import hiiragi283.lib.registry.HTFluidContent 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 import hiiragi283.ragium.api.material.RagiumMaterial +import hiiragi283.ragium.api.tag.HTMachineType +import hiiragi283.ragium.api.tag.RagiumTags import hiiragi283.ragium.common.block.RagiumBlocks import hiiragi283.ragium.common.fluid.RagiumFluids import hiiragi283.ragium.common.item.RagiumItems @@ -13,9 +20,11 @@ import net.minecraft.core.HolderLookup import net.minecraft.data.PackOutput import net.minecraft.tags.ItemTags import net.minecraft.tags.TagKey +import net.minecraft.world.item.DyeColor import net.minecraft.world.item.Item import net.minecraft.world.item.Items import net.minecraft.world.item.crafting.Ingredient +import net.minecraft.world.level.material.Fluids import net.neoforged.neoforge.common.Tags import net.neoforged.neoforge.common.crafting.DifferenceIngredient import java.util.concurrent.CompletableFuture @@ -25,6 +34,7 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu override fun exportValues() { heat() chemical() + electronics() } override fun getName(): String = "Common Recipes" @@ -78,7 +88,7 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu }.save(exporter) RagiumRecipeBuilders.pyrolyzing { ingredient { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Fuel.COAL) } - itemResult { +RagiumItems.getOrThrow(HTItemPart.DUST, RagiumMaterial.Fuel.COAL_COKE) } + itemResult { +RagiumItems.getOrThrow(HTItemPart.DUST, RagiumMaterial.Other.CARBON) } fluidResult { +RagiumFluids.COAL_TAR amount = 500 @@ -92,8 +102,7 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu +RagiumFluids.COAL_TAR amount = 500 * 9 } - time /= 2 - time *= 9 + time = time / 2 * 9 }.save(exporter) // Coal Tar -> Aromatic Compound + Pitch Coke @@ -149,7 +158,28 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu } recipeId suffix "_from_naphtha" }.save(exporter) - // Naphtha + O2 -> Plastic TODO + // 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 + } + }.save(exporter) // Naphtha + Redstone -> Anti-rust Oil RagiumRecipeBuilders.mixing { itemIngredient { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Mineral.REDSTONE) } @@ -174,18 +204,117 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu } recipeId suffix "_from_tar" }.save(exporter) + + // Aromatic Compound + Water -> Synthetic Resin + RagiumRecipeBuilders.reacting { + primaryIngredient { +holderSet(RagiumFluids.AROMATIC_COMPOUND) } + secondaryIngredient { +waterSet() } + fluidResult { +RagiumFluids.SYNTHETIC_RESIN } + }.save(exporter) + // Aluminum + ??? -> Black Steel + RagiumRecipeBuilders.bathing { + itemIngredient { +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.ALUMINUM) } + /*fluidIngredient { + +holderSet(RagiumFluids.COLORED_RESINS.black) + amount /= 4 + }*/ + result { +RagiumItems.getOrThrow(HTItemPart.INGOT, RagiumMaterial.Metal.BLACK_STEEL) } + } } // Chemical // private fun chemical() { + colored() + chlorine() sulfuricAcid() nitricAcid() explosive() + + fluorine() + aluminum() + } + + private fun colored() { + for (color: DyeColor in DyeColor.entries) { + val dyeContent: HTFluidContent = RagiumFluids.DYES[color] + // Water + Solid Dye -> Liquid Dye + RagiumRecipeBuilders.mixing { + itemIngredient { +holderSet(color.tag) } + fluidIngredient { + +waterSet() + amount /= 4 + } + result { + +dyeContent + amount /= 4 + } + }.save(exporter) + // Liquid Dye -> Solid Dye + RagiumRecipeBuilders.freezing { + ingredient { + +holderSet(dyeContent) + amount /= 4 + } + result { +VanillaColoredCollections.DYE[color] } + recipeId suffix "_from_liquid_dye" + }.save(exporter) + } + + // Lapis + Resin -> Blue Dye + RagiumRecipeBuilders.bathing { + itemIngredient { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Gem.LAPIS) } + fluidIngredient { + +holderSet(RagiumTags.Fluids.RESINS) + amount /= 4 + } + result { +Items.BLUE_DYE } + recipeId suffix "_from_lapis" + }.save(exporter) + // Bauxite + Resin -> Blue Dye + RagiumRecipeBuilders.bathing { + itemIngredient { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Mineral.BAUXITE) } + fluidIngredient { + +holderSet(RagiumTags.Fluids.RESINS) + amount /= 4 + } + result { +Items.BROWN_DYE } + recipeId suffix "_from_bauxite" + }.save(exporter) + // Carbon + Resin -> Black Dye + RagiumRecipeBuilders.bathing { + itemIngredient { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Other.CARBON) } + fluidIngredient { + +holderSet(RagiumTags.Fluids.RESINS) + amount /= 4 + } + result { +Items.BLACK_DYE } + recipeId suffix "_from_carbon" + }.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) } @@ -202,11 +331,14 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu recipeId suffix "_from_salt_water" }.save(exporter) - // H2 + Cl2 -> 2 HCl + // H2 + Cl2 -> 2x HCl RagiumRecipeBuilders.reacting { primaryIngredient { +holderSet(RagiumFluids.HYDROGEN) } secondaryIngredient { +holderSet(RagiumFluids.CHLORINE) } - fluidResult { +RagiumFluids.HYDROGEN_CHLORIDE } + fluidResult { + +RagiumFluids.HYDROGEN_CHLORIDE + amount *= 2 + } }.save(exporter) // HCl + H2O -> HCl(aq) RagiumRecipeBuilders.reacting { @@ -306,4 +438,183 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu }.save(exporter) // Clay + Liquid Explosive -> Plastic Explosive TODO } + + private fun fluorine() { + // CaF2 + H2SO4 -> 2x HF + CaSO4 + RagiumRecipeBuilders.mixing { + itemIngredient { +dustOrGem(RagiumMaterial.Gem.FLUORITE) } + fluidIngredient { +holderSet(RagiumFluids.SULFURIC_ACID) } + result { + +RagiumFluids.HYDROGEN_FLUORIDE + amount *= 2 + } + }.save(exporter) + // HF + H2O -> HF(aq) + RagiumRecipeBuilders.reacting { + primaryIngredient { +holderSet(RagiumFluids.HYDROGEN_FLUORIDE) } + secondaryIngredient { +waterSet() } + fluidResult { +RagiumFluids.HYDROFLUORIC_ACID } + }.save(exporter) + } + + private fun aluminum() { + // Bauxite + NaOH aq -> Alumina Solution + RagiumRecipeBuilders.mixing { + itemIngredient { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Mineral.BAUXITE) } + fluidIngredient { + +holderSet(RagiumFluids.NAOH_SOLUTION) + amount /= 2 + } + result { +RagiumFluids.ALUMINA_SOLUTION } + }.save(exporter) + // Alumina Solution -> 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") + }.save(exporter) + // Alumina Solution + HF aq -> Na3AlF6 + RagiumRecipeBuilders.reacting { + primaryIngredient { +holderSet(RagiumFluids.ALUMINA_SOLUTION) } + secondaryIngredient { + +holderSet(RagiumFluids.HYDROFLUORIC_ACID) + amount *= 6 + } + itemResult { +RagiumItems.getOrThrow(HTItemPart.GEM, RagiumMaterial.Gem.CRYOLITE) } + }.save(exporter) + // Al2O3 + Cokes + Na3AlF6 -> Al + RagiumRecipeBuilders.alloying { + ingredient { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Other.ALUMINA) } + extra { +holderSet(RagiumTags.Items.COKES) } + result { + +RagiumItems.getOrThrow(HTItemPart.INGOT, RagiumMaterial.Metal.ALUMINUM) + count = 2 + } + time *= 4 + }.save(exporter) + RagiumRecipeBuilders.alloying { + ingredient { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Other.ALUMINA) } + extra { +holderSet(RagiumTags.Items.COKES) } + extra { +dustOrGem(RagiumMaterial.Gem.CRYOLITE) } + result { + +RagiumItems.getOrThrow(HTItemPart.INGOT, RagiumMaterial.Metal.ALUMINUM) + count = 3 + } + recipeId suffix "_with_cryolite" + }.save(exporter) + } + + // Electronics // + + private fun electronics() { + silicon() + } + + private fun silicon() { + val dustOrCoke: HTMaterialTagsIngredient = materialTags( + nelOf( + CommonTagPrefixes.DUST.itemTagKey(RagiumMaterial.Fuel.COAL_COKE), + CommonTagPrefixes.DUST.itemTagKey(RagiumMaterial.Fuel.PITCH_COKE), + RagiumTags.Items.COKES + ) + ) + // Quartz + Coal Coke -> Crude Si + RagiumRecipeBuilders.alloying { + ingredient { +dustOrGem(RagiumMaterial.Gem.QUARTZ) } + extra { +dustOrCoke } + result { +RagiumItems.CRUDE_SILICON } + recipeId suffix "_from_quartz" + }.save(exporter) + RagiumRecipeBuilders.alloying { + ingredient { +holderSet(RagiumTags.BlockItem.QUARTZ_BLOCKS.item) } + extra { + +dustOrCoke + count = 4 + } + result { + +RagiumItems.CRUDE_SILICON + count = 4 + } + time *= 4 + recipeId suffix "_from_quartz_block" + }.save(exporter) + // Amethyst + Coal Coke -> Crude Si + RagiumRecipeBuilders.alloying { + ingredient { + +dustOrGem(RagiumMaterial.Gem.AMETHYST) + count = 4 + } + extra { +dustOrCoke } + result { +RagiumItems.CRUDE_SILICON } + recipeId suffix "_from_amethyst" + }.save(exporter) + RagiumRecipeBuilders.alloying { + ingredient { items { +Items.AMETHYST_BLOCK } } + extra { +dustOrCoke } + result { +RagiumItems.CRUDE_SILICON } + recipeId suffix "_from_amethyst_block" + }.save(exporter) + + // Crude Si + HCl -> Si Dust + RagiumRecipeBuilders.bathing { + itemIngredient { +holderSet(HTCommonTags.Items.SILICON) } + fluidIngredient { + +holderSet(RagiumFluids.HYDROCHLORIC_ACID) + amount = 125 + } + result { +RagiumItems.getOrThrow(HTItemPart.DUST, RagiumMaterial.Other.SILICON) } + }.save(exporter) + // Si Dust + Redstone -> Silicon Wafer + RagiumRecipeBuilders.alloying { + ingredient { + +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Other.SILICON) + count = 8 + } + extra { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Mineral.RAGINITE) } + result { +RagiumItems.SILICON_WAFER } + }.save(exporter) + // Silicon Wafer -> Circuit Chip + RagiumRecipeBuilders.cutting { + ingredient { items { +RagiumItems.SILICON_WAFER } } + result { + +RagiumItems.CIRCUIT_CHIP + count = 8 + } + }.save(exporter) + + // Plastic + Gold Dust -> Circuit Board + RagiumRecipeBuilders.alloying { + ingredient { +holderSet(HTCommonTags.Items.PLASTICS) } + extra { +dustOrIngot(RagiumMaterial.Metal.GOLD) } + result { +RagiumItems.CIRCUIT_BOARD } + }.save(exporter) + // Circuit Chip + Circuit Board -> Electric Circuit + RagiumRecipeBuilders.assembling { + ingredient { + items { +RagiumItems.CIRCUIT_CHIP } + count = 2 + } + extra { items { +RagiumItems.CIRCUIT_BOARD } } + result { +RagiumItems.ELECTRIC_CIRCUIT } + }.save(exporter) + // Machine Parts + RagiumRecipeBuilders.assembling { + ingredient { + +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.BLACK_STEEL) + count = 4 + } + extra { items { +RagiumItems.ELECTRIC_CIRCUIT } } + result { +RagiumItems.getParts(HTMachineType.ELECTRONICS) } + recipeId suffix "_by_black_metal" + }.save(exporter) + RagiumRecipeBuilders.assembling { + ingredient { + +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.VOID_METAL) + count = 2 + } + extra { items { +RagiumItems.ELECTRIC_CIRCUIT } } + 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 6ce0cab2a8..8e51cca590 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumElectronicsRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumElectronicsRecipeProvider.kt @@ -2,13 +2,63 @@ package hiiragi283.ragium.data.recipe import hiiragi283.lib.data.recipe.HTRecipeProvider import hiiragi283.ragium.api.RagiumAPI +import hiiragi283.ragium.api.data.recipe.builder.RagiumRecipeBuilders +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() { + resourceExtracting() + } + + private fun resourceExtracting() { + // XX -> Water + RagiumRecipeBuilders.resourceExtracting { + biomes { +holderSet(Tags.Biomes.IS_OCEAN) } + result { + +Fluids.WATER + amount *= 4 + } + recipeId suffix "_at_ocean" + }.save(exporter) + RagiumRecipeBuilders.resourceExtracting { + biomes { +holderSet(Tags.Biomes.IS_RIVER) } + result { + +Fluids.WATER + amount *= 2 + } + recipeId suffix "_at_river" + }.save(exporter) + RagiumRecipeBuilders.resourceExtracting { + biomes { +holderSet(Tags.Biomes.IS_WET) } + result { +Fluids.WATER } + recipeId suffix "_at_wet_biomes" + }.save(exporter) + + // Nether -> Lava + RagiumRecipeBuilders.resourceExtracting { + biomes { +holderSet(Tags.Biomes.IS_NETHER) } + result { + +Fluids.LAVA + amount /= 4 + } + recipeId suffix "_at_nether" + }.save(exporter) + // Soul Sand Valley -> Crude Oil + RagiumRecipeBuilders.resourceExtracting { + biomes { biomes { +registries.getOrThrow(Biomes.SOUL_SAND_VALLEY) } } + result { + +RagiumFluids.CRUDE_OIL + amount /= 4 + } + recipeId suffix "_at_soul_sand_valley" + }.save(exporter) } override fun getName(): String = "Electronics Recipes" diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumHeatRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumHeatRecipeProvider.kt index 49d6f66779..6610f3b0de 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumHeatRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumHeatRecipeProvider.kt @@ -1,5 +1,6 @@ package hiiragi283.ragium.data.recipe +import hiiragi283.lib.collection.nelOf import hiiragi283.lib.data.recipe.HTRecipeProvider import hiiragi283.lib.tag.CommonTagPrefixes import hiiragi283.ragium.api.RagiumAPI @@ -7,11 +8,13 @@ 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.HTMachineType +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.core.component.DataComponents import net.minecraft.data.PackOutput +import net.minecraft.tags.ItemTags import net.minecraft.world.item.Items import net.minecraft.world.item.component.OminousBottleAmplifier import net.neoforged.neoforge.common.Tags @@ -29,35 +32,95 @@ class RagiumHeatRecipeProvider(packOutput: PackOutput, future: CompletableFuture private fun alloying() { // Gold + Netherite Scrap -> Netherite RagiumRecipeBuilders.alloying { - primary { + ingredient { +dustOrIngot(RagiumMaterial.Metal.GOLD) count = 2 } - secondary { + extra { items { +Items.NETHERITE_SCRAP } count = 2 } result { +Items.NETHERITE_INGOT } }.save(exporter) + // Clay + Sand -> Brick + RagiumRecipeBuilders.alloying { + ingredient { items { +Items.CLAY_BALL } } + extra { +holderSet(Tags.Items.SANDS) } + result { + +Items.BRICK + count = 2 + } + }.save(exporter) + // Netherrack + Soul Sand -> Nether Brick + RagiumRecipeBuilders.alloying { + ingredient { +holderSet(Tags.Items.NETHERRACKS) } + extra { +holderSet(ItemTags.SOUL_FIRE_BASE_BLOCKS) } + result { + +Items.NETHER_BRICK + count = 2 + } + }.save(exporter) // Machine Casing RagiumRecipeBuilders.alloying { - primary { + ingredient { +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.BLACK_STEEL) count = 2 } - secondary { +dustOrIngot(RagiumMaterial.Metal.GOLD) } + extra { +dustOrIngot(RagiumMaterial.Metal.GOLD) } result { +RagiumItems.getParts(HTMachineType.CHEMICAL) } }.save(exporter) + // Iron + Coals -> Sooty Iron + RagiumRecipeBuilders.alloying { + ingredient { +dustOrIngot(RagiumMaterial.Metal.IRON) } + extra { + +materialTags( + nelOf( + CommonTagPrefixes.DUST.itemTagKey(RagiumMaterial.Fuel.COAL), + CommonTagPrefixes.DUST.itemTagKey(RagiumMaterial.Fuel.CHARCOAL), + RagiumTags.Items.COALS + ) + ) + } + result { +RagiumItems.getOrThrow(HTItemPart.INGOT, RagiumMaterial.Metal.SOOTY_IRON) } + recipeId suffix "_by_coals" + }.save(exporter) + // 2x Iron + Cokes -> 2x Sooty Iron + RagiumRecipeBuilders.alloying { + ingredient { + +dustOrIngot(RagiumMaterial.Metal.IRON) + count = 2 + } + extra { +holderSet(RagiumTags.Items.COKES) } + result { + +RagiumItems.getOrThrow(HTItemPart.INGOT, RagiumMaterial.Metal.SOOTY_IRON) + count = 2 + } + recipeId suffix "_by_cokes" + }.save(exporter) // Sooty Iron + Obsidian Dust -> Black Steel RagiumRecipeBuilders.alloying { - primary { +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.SOOTY_IRON) } - secondary { + ingredient { +dustOrIngot(RagiumMaterial.Metal.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") + }.save(exporter) } private fun freezing() { @@ -130,7 +193,7 @@ class RagiumHeatRecipeProvider(packOutput: PackOutput, future: CompletableFuture amount /= 8 } recipeId suffix "_from_stone" - }.save(exporter) + } // Magma block -> Lava RagiumRecipeBuilders.melting { ingredient { items { +Items.MAGMA_BLOCK } } @@ -147,6 +210,23 @@ class RagiumHeatRecipeProvider(packOutput: PackOutput, future: CompletableFuture result { +RagiumFluids.HONEY } recipeId suffix "_from_block" }.save(exporter) + // Resin + RagiumRecipeBuilders.melting { + ingredient { +holderSet(Tags.Items.CLUMPS_RESIN) } + result { + +RagiumFluids.RESIN + amount = 90 + } + recipeId suffix "_from_clump" + }.save(exporter) + RagiumRecipeBuilders.melting { + ingredient { +holderSet(Tags.Items.STORAGE_BLOCKS_RESIN) } + result { + +RagiumFluids.RESIN + amount = 90 * 9 + } + recipeId suffix "_from_block" + }.save(exporter) // Ominous Bottle -> Ominous Flux (OminousBottleAmplifier.MIN_AMPLIFIER..OminousBottleAmplifier.MAX_AMPLIFIER).forEach { amplifier: Int -> @@ -169,7 +249,7 @@ class RagiumHeatRecipeProvider(packOutput: PackOutput, future: CompletableFuture // Molten Glass RagiumRecipeBuilders.melting { ingredient { - +holderSet(Tags.Items.GLASS_BLOCKS, CommonTagPrefixes.DUST.itemTagKey(RagiumMaterial.Other.GLASS)) + +holderSet(Tags.Items.GLASS_BLOCKS_CHEAP, CommonTagPrefixes.DUST.itemTagKey(RagiumMaterial.Other.GLASS)) } result { +RagiumFluids.MOLTEN_GLASS } recipeId suffix "_from_block" diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumMechanicalRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumMechanicalRecipeProvider.kt index d9d37f3749..bbdd793e73 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumMechanicalRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumMechanicalRecipeProvider.kt @@ -15,19 +15,23 @@ import hiiragi283.ragium.api.material.HTItemPart import hiiragi283.ragium.api.material.RagiumMaterial import hiiragi283.ragium.api.tag.HTMachineType import hiiragi283.ragium.api.tag.RagiumTags +import hiiragi283.ragium.common.block.RagiumBlocks import hiiragi283.ragium.common.fluid.RagiumFluids import hiiragi283.ragium.common.item.RagiumItems import hiiragi283.ragium.common.material.RagiumMaterialHelper import net.minecraft.core.HolderLookup import net.minecraft.data.PackOutput +import net.minecraft.tags.BlockTags import net.minecraft.tags.ItemTags import net.minecraft.tags.TagKey import net.minecraft.world.item.DyeColor import net.minecraft.world.item.Item import net.minecraft.world.item.Items import net.minecraft.world.item.crafting.Ingredient +import net.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 import java.util.concurrent.CompletableFuture @@ -45,8 +49,8 @@ class RagiumMechanicalRecipeProvider(packOutput: PackOutput, future: Completable private fun assembling() { // Blackstone + Gold -> Gilded Blackstone RagiumRecipeBuilders.assembling { - primary { items { +Items.BLACKSTONE } } - secondary { + ingredient { items { +Items.BLACKSTONE } } + extra { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Metal.GOLD) count = 8 } @@ -54,8 +58,8 @@ class RagiumMechanicalRecipeProvider(packOutput: PackOutput, future: Completable }.save(exporter) // Dirt + Leaves -> Podzol RagiumRecipeBuilders.assembling { - primary { items { +Items.DIRT } } - secondary { + ingredient { items { +Items.DIRT } } + extra { +holderSet(ItemTags.LEAVES) count = 8 } @@ -63,29 +67,29 @@ class RagiumMechanicalRecipeProvider(packOutput: PackOutput, future: Completable }.save(exporter) // Dirt + Mushroom -> Mycelium RagiumRecipeBuilders.assembling { - primary { items { +Items.DIRT } } - secondary { +holderSet(Tags.Items.MUSHROOMS) } + ingredient { items { +Items.DIRT } } + extra { +holderSet(Tags.Items.MUSHROOMS) } result { +Items.MYCELIUM } }.save(exporter) // Crimson Nylium RagiumRecipeBuilders.assembling { - primary { +holderSet(Tags.Items.NETHERRACKS) } - secondary { items { +Items.CRIMSON_FUNGUS } } + ingredient { +holderSet(Tags.Items.NETHERRACKS) } + extra { items { +Items.CRIMSON_FUNGUS } } result { +Items.CRIMSON_NYLIUM } }.save(exporter) // Warped Nylium RagiumRecipeBuilders.assembling { - primary { +holderSet(Tags.Items.NETHERRACKS) } - secondary { items { +Items.WARPED_FUNGUS } } + ingredient { +holderSet(Tags.Items.NETHERRACKS) } + extra { items { +Items.WARPED_FUNGUS } } result { +Items.WARPED_NYLIUM } }.save(exporter) // String + Sticky -> Cobweb RagiumRecipeBuilders.assembling { - primary { + ingredient { +holderSet(Tags.Items.STRINGS) count = 5 } - secondary { +holderSet(HTCommonTags.Items.STICKY_BALLS) } + extra { +holderSet(HTCommonTags.Items.STICKY_BALLS) } result { +Items.COBWEB } }.save(exporter) @@ -95,8 +99,8 @@ class RagiumMechanicalRecipeProvider(packOutput: PackOutput, future: Completable RagiumMaterial.Metal.IRON to Items.IRON_CHAIN ).forEach { (metal: RagiumMaterial.Metal, chain: Item) -> RagiumRecipeBuilders.assembling { - primary { +holderSet(CommonTagPrefixes.INGOT, metal) } - secondary { + ingredient { +holderSet(CommonTagPrefixes.INGOT, metal) } + extra { +holderSet(CommonTagPrefixes.NUGGET, metal) count = 3 } @@ -112,8 +116,8 @@ class RagiumMechanicalRecipeProvider(packOutput: PackOutput, future: Completable RagiumMaterial.Metal.IRON to Items.LANTERN ).forEach { (metal: RagiumMaterial.Metal, lantern: Item) -> RagiumRecipeBuilders.assembling { - primary { +holderSet(CommonTagPrefixes.INGOT, metal) } - secondary { items { +Items.TORCH } } + ingredient { +holderSet(CommonTagPrefixes.INGOT, metal) } + extra { items { +Items.TORCH } } result { +lantern count = 2 @@ -121,35 +125,120 @@ class RagiumMechanicalRecipeProvider(packOutput: PackOutput, future: Completable }.save(exporter) } RagiumRecipeBuilders.assembling { - primary { +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.IRON) } - secondary { items { +Items.SOUL_TORCH } } + ingredient { +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.IRON) } + extra { items { +Items.SOUL_TORCH } } result { +Items.SOUL_LANTERN count = 2 } }.save(exporter) - // Iron Ingot + Chest -> Hopper + // Repeater RagiumRecipeBuilders.assembling { - primary { - +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.IRON) - count = 5 + ingredient { +holderSet(Tags.Items.STONES) } + extra { + items { +Items.REDSTONE_TORCH } + count = 2 + } + extra { + +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Mineral.REDSTONE) + } + result { + +Items.REPEATER + count = 2 } - secondary { +holderSet(Tags.Items.CHESTS_WOODEN) } - result { +Items.HOPPER } }.save(exporter) - // Dropper + Bow -> Dispenser + // Comparator RagiumRecipeBuilders.assembling { - primary { items { +Items.DROPPER } } - secondary { +holderSet(Tags.Items.TOOLS_BOW) } + ingredient { +holderSet(Tags.Items.STONES) } + extra { + items { +Items.REDSTONE_TORCH } + count = 3 + } + extra { + +dustOrGem(RagiumMaterial.Gem.QUARTZ) + } + result { + +Items.COMPARATOR + count = 2 + } + }.save(exporter) + // Dispenser + RagiumRecipeBuilders.assembling { + ingredient { items { +Items.DROPPER } } + extra { +holderSet(Tags.Items.TOOLS_BOW) } result { +Items.DISPENSER } }.save(exporter) + RagiumRecipeBuilders.assembling { + ingredient { items { +Items.DROPPER } } + extra { + +holderSet(Tags.Items.RODS_WOODEN) + count = 3 + } + extra { + +holderSet(Tags.Items.STRINGS) + count = 3 + } + result { +Items.DISPENSER } + recipeId suffix "_stackable" + }.save(exporter) + // Rail + RagiumRecipeBuilders.assembling { + ingredient { + +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.IRON) + count = 6 + } + extra { +holderSet(Tags.Items.RODS_WOODEN) } + result { + +Items.RAIL + count = 24 + } + }.save(exporter) + RagiumRecipeBuilders.assembling { + ingredient { + +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.GOLD) + count = 6 + } + extra { +holderSet(Tags.Items.RODS_WOODEN) } + extra { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Mineral.REDSTONE) } + result { + +Items.POWERED_RAIL + count = 9 + } + }.save(exporter) + RagiumRecipeBuilders.assembling { + ingredient { + +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.IRON) + count = 6 + } + extra { +BlockTagIngredient(BlockTags.STONE_PRESSURE_PLATES) } + extra { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Mineral.REDSTONE) } + result { + +Items.DETECTOR_RAIL + count = 9 + } + }.save(exporter) + RagiumRecipeBuilders.assembling { + ingredient { + +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.IRON) + count = 6 + } + extra { +holderSet(Tags.Items.RODS_WOODEN) } + extra { + items { +Items.REDSTONE_TORCH } + count = 2 + } + result { + +Items.ACTIVATOR_RAIL + count = 9 + } + }.save(exporter) // TNT RagiumRecipeBuilders.assembling { - primary { + ingredient { +holderSet(Tags.Items.SANDS) count = 4 } - secondary { + extra { +holderSet(Tags.Items.GUNPOWDERS) count = 5 } @@ -160,24 +249,24 @@ class RagiumMechanicalRecipeProvider(packOutput: PackOutput, future: Completable }.save(exporter) // Head RagiumRecipeBuilders.assembling { - primary { items { +Items.SKELETON_SKULL } } - secondary { + ingredient { items { +Items.SKELETON_SKULL } } + extra { items { +Items.ROTTEN_FLESH } count = 8 } result { +Items.ZOMBIE_HEAD } }.save(exporter) RagiumRecipeBuilders.assembling { - primary { items { +Items.SKELETON_SKULL } } - secondary { + ingredient { items { +Items.SKELETON_SKULL } } + extra { +holderSet(Tags.Items.GUNPOWDERS) count = 8 } result { +Items.CREEPER_HEAD } }.save(exporter) RagiumRecipeBuilders.assembling { - primary { items { +Items.SKELETON_SKULL } } - secondary { + ingredient { items { +Items.SKELETON_SKULL } } + extra { items { +Items.PORKCHOP } count = 8 } @@ -186,8 +275,8 @@ class RagiumMechanicalRecipeProvider(packOutput: PackOutput, future: Completable // Gold Block + Apple -> Enchanted Golden Apple RagiumRecipeBuilders.assembling { - primary { items { +Items.APPLE } } - secondary { + ingredient { items { +Items.APPLE } } + extra { +holderSet(CommonTagPrefixes.STORAGE_BLOCK, RagiumMaterial.Metal.GOLD) count = 8 } @@ -197,8 +286,8 @@ class RagiumMechanicalRecipeProvider(packOutput: PackOutput, future: Completable // Machine Casing RagiumRecipeBuilders.assembling { - primary { items { +RagiumItems.getParts(HTMachineType.MECHANICAL) } } - secondary { items { +Items.MAGMA_BLOCK } } + ingredient { items { +RagiumItems.getParts(HTMachineType.MECHANICAL) } } + extra { items { +Items.MAGMA_BLOCK } } result { +RagiumItems.getParts(HTMachineType.HEAT) } }.save(exporter) } @@ -293,6 +382,7 @@ class RagiumMechanicalRecipeProvider(packOutput: PackOutput, future: Completable ingredient { +holderSet(CommonTagPrefixes.DUST, fuel) } result { +baseItem } recipeId suffix "_from_dust" + condition { itemTagPresent(CommonTagPrefixes.DUST, fuel) } }.save(exporter) } setOf( @@ -344,19 +434,20 @@ class RagiumMechanicalRecipeProvider(packOutput: PackOutput, future: Completable Items.NETHER_BRICKS to Items.NETHER_BRICK, Items.PRISMARINE to Items.PRISMARINE_SHARD, Items.PURPUR_BLOCK to Items.POPPED_CHORUS_FRUIT, - Items.SNOW_BLOCK to Items.SNOWBALL - ).forEach { (block: Item, base: Item) -> + 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) + ).forEach { (block: ItemLike, base: ItemLike) -> RagiumRecipeBuilders.crushing { - ingredient { items { +block } } + ingredient { items { +block.asItem() } } result { - +base + +base.asItem() count = 4 } }.save(exporter) } setOf( - Tags.Items.SANDSTONE_UNCOLORED_BLOCKS to Items.SAND, - Tags.Items.SANDSTONE_RED_BLOCKS to Items.RED_SAND, RagiumTags.BlockItem.QUARTZ_BLOCKS.item to Items.QUARTZ ).forEach { (block: TagKey, base: Item) -> RagiumRecipeBuilders.crushing { @@ -367,6 +458,39 @@ 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 { @@ -397,18 +521,24 @@ class RagiumMechanicalRecipeProvider(packOutput: PackOutput, future: Completable private fun crushMaterial() { // XX Dust - for (fuel: RagiumMaterial.Fuel in RagiumMaterial.Fuel.entries) { - val baseItem: HTSimpleDeferredItem = RagiumMaterialHelper.getFuelBase(fuel) - RagiumRecipeBuilders.crushing { - ingredient { items { +baseItem } } - result { +RagiumItems.getOrThrow(HTItemPart.DUST, fuel) } - }.save(exporter) - } + RagiumRecipeBuilders.crushing { + ingredient { items { +Items.COAL } } + result { +RagiumItems.getOrThrow(HTItemPart.DUST, RagiumMaterial.Fuel.COAL) } + }.save(exporter) + RagiumRecipeBuilders.crushing { + ingredient { items { +Items.CHARCOAL } } + result { +RagiumItems.getOrThrow(HTItemPart.DUST, RagiumMaterial.Fuel.CHARCOAL) } + }.save(exporter) + RagiumRecipeBuilders.crushing { + ingredient { +holderSet(RagiumTags.Items.COKES) } + result { +RagiumItems.getOrThrow(HTItemPart.DUST, RagiumMaterial.Other.CARBON) } + }.save(exporter) for (gem: RagiumMaterial.Gem in RagiumMaterial.Gem.entries) { + val dust: HTSimpleDeferredItem = RagiumItems.MATERIAL_ITEMS[HTItemPart.DUST, gem] ?: continue RagiumRecipeBuilders.crushing { ingredient { +holderSet(CommonTagPrefixes.GEM, gem) } - result { +RagiumItems.getOrThrow(HTItemPart.DUST, gem) } + result { +dust } recipeId suffix "_from_gem" }.save(exporter) } @@ -601,17 +731,19 @@ class RagiumMechanicalRecipeProvider(packOutput: PackOutput, future: Completable }.save(exporter) // Raw XX -> XX Dust for (metal: RagiumMaterial.Metal in RagiumMaterial.Metal.entries) { - if (!metal.isElement) continue + if (!metal.hasRawVariant) continue + val dust: HTSimpleDeferredItem = RagiumItems.MATERIAL_ITEMS[HTItemPart.DUST, metal] ?: continue RagiumRecipeBuilders.crushing { ingredient { +holderSet(CommonTagPrefixes.RAW_MATERIALS, metal) count = 3 } result { - +RagiumItems.getOrThrow(HTItemPart.DUST, metal) + +dust count = 4 } recipeId suffix "_from_raw" + condition { itemTagPresent(CommonTagPrefixes.RAW_MATERIALS, metal) } }.save(exporter) } diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumRecipePriorityProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumRecipePriorityProvider.kt index 7625dd8a19..0a639cddaf 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumRecipePriorityProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumRecipePriorityProvider.kt @@ -10,6 +10,13 @@ import java.util.concurrent.CompletableFuture class RagiumRecipePriorityProvider(output: PackOutput, registries: CompletableFuture) : RecipePrioritiesProvider(output, registries, RagiumAPI.MOD_ID) { override fun start() { - add("${RagiumConstants.MELTING}/molten_glass_from_panes", 1) + // Heat + add("${RagiumConstants.ALLOYING}/aluminum_ingot_with_cryolite", 100) + add("${RagiumConstants.MELTING}/molten_glass_from_panes", 100) + // Electronics + add("${RagiumConstants.RESOURCE_EXTRACTING}/water_at_ocean", 200) + add("${RagiumConstants.RESOURCE_EXTRACTING}/water_at_river", 100) + + add("${RagiumConstants.RESOURCE_EXTRACTING}/crude_oil_at_soul_sand_valley", 100) } } diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt index 7e6595096a..08d6b9fbc0 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt @@ -1,12 +1,13 @@ package hiiragi283.ragium.data.recipe -import hiiragi283.lib.HTComparators +import hiiragi283.lib.collection.nelOf +import hiiragi283.lib.data.recipe.HTRecipeProvider +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.recipe.RecipeKey import hiiragi283.lib.registry.HTSimpleDeferredBlockAndItem 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 @@ -14,6 +15,7 @@ import hiiragi283.lib.tag.HTMaterialLike import hiiragi283.lib.tag.HTTagPrefix import hiiragi283.ragium.api.RagiumAPI import hiiragi283.ragium.api.material.HTItemPart +import hiiragi283.ragium.api.material.HTStorageBlockPart import hiiragi283.ragium.api.material.RagiumMaterial import hiiragi283.ragium.api.tag.HTMachineType import hiiragi283.ragium.common.block.RagiumBlocks @@ -21,220 +23,96 @@ import hiiragi283.ragium.common.fluid.RagiumFluids import hiiragi283.ragium.common.item.RagiumItems import hiiragi283.ragium.common.item.component.RagiumToolMaterials import hiiragi283.ragium.common.material.RagiumMaterialHelper -import net.minecraft.advancements.Advancement -import net.minecraft.advancements.AdvancementHolder -import net.minecraft.advancements.Criterion -import net.minecraft.advancements.criterion.InventoryChangeTrigger import net.minecraft.core.HolderLookup +import net.minecraft.core.HolderSet import net.minecraft.data.PackOutput -import net.minecraft.data.recipes.RecipeBuilder import net.minecraft.data.recipes.RecipeCategory -import net.minecraft.data.recipes.RecipeOutput -import net.minecraft.data.recipes.RecipeProvider -import net.minecraft.data.recipes.ShapedRecipeBuilder -import net.minecraft.data.recipes.ShapelessRecipeBuilder -import net.minecraft.data.recipes.SimpleCookingRecipeBuilder -import net.minecraft.data.recipes.SingleItemRecipeBuilder -import net.minecraft.data.recipes.SmithingTransformRecipeBuilder import net.minecraft.tags.ItemTags -import net.minecraft.tags.TagKey import net.minecraft.world.item.DyeColor +import net.minecraft.world.item.Item import net.minecraft.world.item.Items import net.minecraft.world.item.ToolMaterial -import net.minecraft.world.item.crafting.CookingBookCategory import net.minecraft.world.item.crafting.Ingredient -import net.minecraft.world.item.crafting.Recipe -import net.minecraft.world.level.ItemLike import net.neoforged.neoforge.common.Tags -import net.neoforged.neoforge.common.conditions.ICondition -import net.neoforged.neoforge.common.crafting.CompoundIngredient import java.util.concurrent.CompletableFuture +import kotlin.collections.forEach -class RagiumVanillaRecipeProvider(registries: HolderLookup.Provider, output: RecipeOutput) : - RecipeProvider(registries, output) { - class Runner(packOutput: PackOutput, registries: CompletableFuture) : - RecipeProvider.Runner(packOutput, registries) { - override fun createRecipeProvider(registries: HolderLookup.Provider, output: RecipeOutput): RecipeProvider = - RagiumVanillaRecipeProvider( - registries, - object : RecipeOutput { - override fun accept( - key: RecipeKey, - recipe: Recipe<*>, - advancement: AdvancementHolder?, - vararg conditions: ICondition - ) { - output.accept( - RecipeKey(RagiumAPI.id(key.identifier().path)), - recipe, - advancement?.let { AdvancementHolder(RagiumAPI.id(it.id().path), it.value()) }, - *conditions - ) - } - - override fun advancement(): Advancement.Builder = output.advancement() - - override fun includeRootAdvancement() { - output.includeRootAdvancement() - } - } - ) - - override fun getName(): String = "Vanilla Recipes" - } - - override fun buildRecipes() { +class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFuture) : + HTRecipeProvider(packOutput, future, RagiumAPI.MOD_ID) { + override fun exportValues() { + vanilla() machine() + storage() material() - // Prismarine Bricks -> 9x Prismarine Shard - shapeless(RecipeCategory.BUILDING_BLOCKS, Items.PRISMARINE_SHARD, 9) - .requires(Items.PRISMARINE_BRICKS) - .group(getItemName(Items.PRISMARINE_SHARD)) - .unlockedBy(getHasName(Items.PRISMARINE_BRICKS), has(Items.PRISMARINE_BRICKS)) - .saveSuffixed(output, "_from_bricks") - // Gunpowder - shapeless(RecipeCategory.MISC, Items.GUNPOWDER, 3) - .requires(CommonTagPrefixes.DUST, RagiumMaterial.Fuel.COAL, RagiumMaterial.Fuel.CHARCOAL) - .requires(CommonTagPrefixes.DUST, RagiumMaterial.Mineral.SULFUR) - .requires(CommonTagPrefixes.DUST, RagiumMaterial.Mineral.NITER) - .group(getItemName(Items.GUNPOWDER)) - .unlockedBy( - getHasName(CommonTagPrefixes.DUST, RagiumMaterial.Mineral.SULFUR), - has(CommonTagPrefixes.DUST, RagiumMaterial.Mineral.SULFUR) - ).unlockedBy( - getHasName(CommonTagPrefixes.DUST, RagiumMaterial.Mineral.NITER), - has(CommonTagPrefixes.DUST, RagiumMaterial.Mineral.NITER) - ) - .save(output) - // Blaze Rod - shaped(RecipeCategory.MISC, Items.BLAZE_ROD) - .pattern("AAA") - .pattern("BBB") - .pattern("CCC") - .define('A', CommonTagPrefixes.DUST, RagiumMaterial.Gem.AMETHYST) - .define('B', Items.MAGMA_BLOCK) - .define('C', CommonTagPrefixes.DUST, RagiumMaterial.Mineral.SULFUR) - .group(getItemName(Items.BLAZE_ROD)) - .unlockedBy( - getHasName(CommonTagPrefixes.DUST, RagiumMaterial.Gem.AMETHYST), - has(CommonTagPrefixes.DUST, RagiumMaterial.Gem.AMETHYST) - ).unlockedBy( - getHasName(Items.MAGMA_BLOCK), - has(Items.MAGMA_BLOCK) - ) - .unlockedBy( - getHasName(CommonTagPrefixes.DUST, RagiumMaterial.Mineral.SULFUR), - has(CommonTagPrefixes.DUST, RagiumMaterial.Mineral.SULFUR) - ) - .save(output) - // Breeze Rod - shaped(RecipeCategory.MISC, Items.BREEZE_ROD) - .pattern("AAA") - .pattern("BBB") - .pattern("CCC") - .define('A', CommonTagPrefixes.DUST, RagiumMaterial.Gem.AMETHYST) - .define('B', Items.ICE) - .define('C', CommonTagPrefixes.DUST, RagiumMaterial.Mineral.NITER) - .group(getItemName(Items.BREEZE_ROD)) - .unlockedBy( - getHasName(CommonTagPrefixes.DUST, RagiumMaterial.Gem.AMETHYST), - has(CommonTagPrefixes.DUST, RagiumMaterial.Gem.AMETHYST) - ).unlockedBy( - getHasName(Items.ICE), - has(Items.ICE) - ) - .unlockedBy( - getHasName(CommonTagPrefixes.DUST, RagiumMaterial.Mineral.NITER), - has(CommonTagPrefixes.DUST, RagiumMaterial.Mineral.NITER) - ) - .save(output) - // Candle - shaped(RecipeCategory.DECORATIONS, Items.CANDLE) - .pattern("A") - .pattern("B") - .define('A', Tags.Items.STRINGS) - .define('B', RagiumItems.BEESWAX) - .unlockedBy(getHasName(Tags.Items.STRINGS), has(Tags.Items.STRINGS)) - .unlockedBy(getHasName(RagiumItems.BEESWAX), has(RagiumItems.BEESWAX)) - .save(output) - // Bamboo Charcoal - SimpleCookingRecipeBuilder.smelting( - Ingredient.of(Items.BAMBOO), - RecipeCategory.MISC, - CookingBookCategory.MISC, - RagiumItems.BAMBOO_CHARCOAL, - 0.5f, - 200 - ).unlockedBy(getHasName(Items.BAMBOO), has(Items.BAMBOO)) - .save(output) + VanillaRecipeBuilders.smelting { + ingredient { items { +Items.BAMBOO } } + result { +RagiumItems.BAMBOO_CHARCOAL } + exp = 0.5f + }.save(exporter) // Particle Board - shaped(RecipeCategory.MISC, RagiumItems.PARTICLE_BOARD, 4) - .pattern("AAA") - .pattern("ABA") - .pattern("AAA") - .define('A', CommonTagPrefixes.DUST, RagiumMaterial.Other.WOOD) - .define('B', HTCommonTags.Items.STICKY_BALLS) - .unlockedBy(getHasName(HTCommonTags.Items.STICKY_BALLS), has(HTCommonTags.Items.STICKY_BALLS)) - .save(output) + VanillaRecipeBuilders.shaped { + hollow8() + define('A') { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Other.WOOD) } + define('B') { +holderSet(HTCommonTags.Items.STICKY_BALLS) } + result { + +RagiumItems.PARTICLE_BOARD + count = 4 + } + }.save(exporter) // Synthetic - for (item: HTSimpleDeferredItem in listOf( + listOf( RagiumItems.SYNTHETIC_FEATHER, RagiumItems.SYNTHETIC_FIBER, RagiumItems.SYNTHETIC_LEATHER - )) { - SingleItemRecipeBuilder.stonecutting( - tag(HTCommonTags.Items.PLASTICS), - RecipeCategory.MISC, - item, - 1 - ).unlockedBy(getHasName(HTCommonTags.Items.PLASTICS), has(HTCommonTags.Items.PLASTICS)) - .save(output) + ).forEach { + VanillaRecipeBuilders.stonecutting { + ingredient { +holderSet(HTCommonTags.Items.PLASTICS) } + result { +it } + }.save(exporter) } // Splash Bottle - shapeless(RecipeCategory.BREWING, RagiumItems.SPLASH_BOTTLE, 4) - .requires(Tags.Items.GUNPOWDERS) - .requires(Items.GLASS_BOTTLE) - .requires(Items.GLASS_BOTTLE) - .requires(Items.GLASS_BOTTLE) - .requires(Items.GLASS_BOTTLE) - .unlockedBy(getHasName(Tags.Items.GUNPOWDERS), has(Tags.Items.GUNPOWDERS)) - .save(output) + VanillaRecipeBuilders.shapeless { + ingredient { +holderSet(Tags.Items.GUNPOWDERS) } + repeat(4) { ingredient { items { +Items.GLASS_BOTTLE } } } + result { + +RagiumItems.SPLASH_BOTTLE + count = 4 + } + }.save(exporter) // Lingering Bottle - shapeless(RecipeCategory.BREWING, RagiumItems.LINGERING_BOTTLE, 4) - .requires(Items.DRAGON_BREATH) - .requires(Items.GLASS_BOTTLE) - .requires(Items.GLASS_BOTTLE) - .requires(Items.GLASS_BOTTLE) - .requires(Items.GLASS_BOTTLE) - .unlockedBy(getHasName(Items.DRAGON_BREATH), has(Items.DRAGON_BREATH)) - .save(output) + VanillaRecipeBuilders.shapeless { + ingredient { items { +Items.DRAGON_BREATH } } + repeat(4) { ingredient { items { +Items.GLASS_BOTTLE } } } + result { + +RagiumItems.LINGERING_BOTTLE + count = 4 + } + }.save(exporter) // XX Tools registerTools(RagiumItems.SOOTY_IRON_TOOLS, RagiumToolMaterials.SOOTY_IRON) // XX Dye Bucket for (color: DyeColor in DyeColor.entries) { - shapeless(RecipeCategory.MISC, RagiumFluids.DYES[color].bucketHolder) - .requires(Tags.Items.BUCKETS_WATER) - .requires(color.tag) - .requires(color.tag) - .requires(color.tag) - .requires(color.tag) - .unlockedBy(getHasName(color.tag), has(color.tag)) - .save(output) + VanillaRecipeBuilders.shapeless { + ingredient { +holderSet(Tags.Items.BUCKETS_WATER) } + repeat(4) { ingredient { +holderSet(color.tag) } } + result { +RagiumFluids.DYES[color].bucketHolder } + }.save(exporter) } } - private fun registerTools(tools: HTToolCollection, material: ToolMaterial) { + private fun registerTools(tools: HTToolCollection, material: ToolMaterial) { fun registerTool(toolType: HTToolType, patterns: Iterable) { - shaped(RecipeCategory.TOOLS, tools[toolType]) - .apply { patterns.forEach(::pattern) } - .define('A', material.repairItems) - .define('B', Tags.Items.RODS_WOODEN) - .unlockedBy(getHasName(material.repairItems), has(material.repairItems)) - .save(output) + VanillaRecipeBuilders.shaped { + this.pattern(patterns) + define('A') { +holderSet(material.repairItems) } + define('B') { +holderSet(Tags.Items.RODS_WOODEN) } + result { +tools[toolType] } + category = RecipeCategory.TOOLS + }.save(exporter) } registerTool(HTToolType.SWORD, listOf("B", "A", "A")) @@ -244,90 +122,193 @@ class RagiumVanillaRecipeProvider(registries: HolderLookup.Provider, output: Rec registerTool(HTToolType.HOE, listOf("B ", "B ", "AA")) } + // Vanilla // + + private fun vanilla() { + // Prismarine Bricks -> 9x Prismarine Shard + VanillaRecipeBuilders.shapeless { + ingredient { items { +Items.PRISMARINE_BRICKS } } + + result { + +Items.PRISMARINE_SHARD + count = 9 + } + category = RecipeCategory.BUILDING_BLOCKS + group = "prismarine_shard" + recipeId suffix "_from_bricks" + }.save(exporter) + // Gunpowder + VanillaRecipeBuilders.shapeless { + ingredient { + +materialTags(CommonTagPrefixes.DUST, nelOf(RagiumMaterial.Fuel.COAL, RagiumMaterial.Fuel.CHARCOAL)) + } + ingredient { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Mineral.SULFUR) } + ingredient { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Mineral.NITER) } + result { + +Items.GUNPOWDER + count = 3 + } + }.save(exporter) + // Blaze Rod + VanillaRecipeBuilders.shaped { + layered() + define('A') { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Gem.AMETHYST) } + define('B') { items { +Items.MAGMA_BLOCK } } + define('C') { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Mineral.SULFUR) } + result { +Items.BLAZE_ROD } + }.save(exporter) + // Breeze Rod + VanillaRecipeBuilders.shaped { + layered() + define('A') { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Gem.AMETHYST) } + define('B') { items { +Items.ICE } } + define('C') { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Mineral.NITER) } + result { +Items.BREEZE_ROD } + }.save(exporter) + // Candle + VanillaRecipeBuilders.shaped { + +"A" + +"B" + define('A') { +holderSet(Tags.Items.STRINGS) } + define('B') { items { +RagiumItems.BEESWAX } } + result { +Items.CANDLE } + category = RecipeCategory.DECORATIONS + }.save(exporter) + // Torch + VanillaRecipeBuilders.shaped { + +"A" + +"B" + define('A') { items { +RagiumItems.TAR } } + define('B') { +holderSet(Tags.Items.RODS_WOODEN) } + result { + +Items.TORCH + count = 3 + } + recipeId suffix "_from_tar" + }.save(exporter) + VanillaRecipeBuilders.shaped { + +"A" + +"B" + define('A') { +holderSet(HTCommonTags.Items.PITCH_COKE) } + define('B') { +holderSet(Tags.Items.RODS_WOODEN) } + result { + +Items.TORCH + count = 6 + } + recipeId suffix "_from_pitch_coke" + }.save(exporter) + VanillaRecipeBuilders.shaped { + +"A" + +"B" + define('A') { +holderSet(HTCommonTags.Items.COAL_COKE) } + define('B') { +holderSet(Tags.Items.RODS_WOODEN) } + result { + +Items.TORCH + count = 8 + } + recipeId suffix "_from_coal_coke" + }.save(exporter) + // Fire Charge + VanillaRecipeBuilders.shapeless { + ingredient { +holderSet(Tags.Items.GUNPOWDERS) } + ingredient { items { +Items.BLAZE_POWDER } } + ingredient { +holderSet(HTCommonTags.Items.PITCH_COKE) } + result { + +Items.FIRE_CHARGE + count = 4 + } + recipeId suffix "_from_pitch_coke" + }.save(exporter) + VanillaRecipeBuilders.shapeless { + ingredient { +holderSet(Tags.Items.GUNPOWDERS) } + ingredient { items { +Items.BLAZE_POWDER } } + ingredient { +holderSet(HTCommonTags.Items.COAL_COKE) } + result { + +Items.FIRE_CHARGE + count = 6 + } + recipeId suffix "_from_coal_coke" + }.save(exporter) + // Hopper + VanillaRecipeBuilders.shaped { + +"A A" + +"ABA" + +" A " + define('A') { +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.SOOTY_IRON) } + define('B') { +holderSet(Tags.Items.CHESTS_WOODEN) } + result { + +Items.HOPPER + count = 2 + } + recipeId suffix "_by_sooty_iron" + }.save(exporter) + VanillaRecipeBuilders.shaped { + +"A A" + +"ABA" + +" A " + define('A') { +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.BLACK_STEEL) } + define('B') { +holderSet(Tags.Items.CHESTS_WOODEN) } + result { + +Items.HOPPER + count = 4 + } + recipeId suffix "_by_black_steel" + }.save(exporter) + } + // Machine // private fun machine() { // Mechanical - shaped(RecipeCategory.MISC, RagiumItems.getParts(HTMachineType.MECHANICAL), 3) - .pattern("AAA") - .pattern("BBB") - .pattern("AAA") - .define('A', CommonTagPrefixes.INGOT, RagiumMaterial.Metal.SOOTY_IRON) - .define('B', CommonTagPrefixes.DUST, RagiumMaterial.Mineral.REDSTONE) - .unlockedBy( - getHasName(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.SOOTY_IRON), - has(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.SOOTY_IRON) - ) - .save(output) - - mechanical(RagiumBlocks.ASSEMBLER) { - define('D', Items.CRAFTER) - unlockedBy(getHasName(Items.CRAFTER), has(Items.CRAFTER)) - } - mechanical(RagiumBlocks.CRUSHER) { - define('D', Items.GRINDSTONE) - unlockedBy(getHasName(Items.GRINDSTONE), has(Items.GRINDSTONE)) - } - mechanical(RagiumBlocks.COMPRESSOR) { - define('D', ItemTags.ANVIL) - unlockedBy(getHasName(ItemTags.ANVIL), has(ItemTags.ANVIL)) - } - mechanical(RagiumBlocks.CUTTING_MACHINE) { - define('D', Items.STONECUTTER) - unlockedBy(getHasName(Items.STONECUTTER), has(Items.STONECUTTER)) - } + VanillaRecipeBuilders.shaped { + layered2() + define('A') { +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.SOOTY_IRON) } + define('B') { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Mineral.REDSTONE) } + result { + +RagiumItems.getParts(HTMachineType.MECHANICAL) + count = 3 + } + }.save(exporter) + + mechanical(RagiumBlocks.ASSEMBLER) { items { +Items.CRAFTER } } + mechanical(RagiumBlocks.CRUSHER) { items { +Items.GRINDSTONE } } + mechanical(RagiumBlocks.COMPRESSOR) { +holderSet(ItemTags.ANVIL) } + mechanical(RagiumBlocks.CUTTING_MACHINE) { items { +Items.STONECUTTER } } // Heat - heat(RagiumBlocks.ALLOY_SMELTER) { - define('D', Items.BLAST_FURNACE) - unlockedBy(getHasName(Items.BLAST_FURNACE), has(Items.BLAST_FURNACE)) - } - heat(RagiumBlocks.FREEZER) { - define('D', Tags.Items.BUCKETS_WATER) - unlockedBy(getHasName(Tags.Items.BUCKETS_WATER), has(Tags.Items.BUCKETS_WATER)) - } - heat(RagiumBlocks.MELTER) { - define('D', Tags.Items.BUCKETS_LAVA) - unlockedBy(getHasName(Tags.Items.BUCKETS_LAVA), has(Tags.Items.BUCKETS_LAVA)) - } + heat(RagiumBlocks.ALLOY_SMELTER) { items { +Items.BLAST_FURNACE } } + heat(RagiumBlocks.FREEZER) { +holderSet(Tags.Items.BUCKETS_WATER) } + heat(RagiumBlocks.MELTER) { +holderSet(Tags.Items.BUCKETS_LAVA) } - heat(RagiumBlocks.SMELTER) { - define('D', Items.FURNACE) - unlockedBy(getHasName(Items.FURNACE), has(Items.FURNACE)) - } + heat(RagiumBlocks.SMELTER) { items { +Items.FURNACE } } // Chemical - chemical(RagiumBlocks.CHEMICAL_BATH) { - define('D', Items.CAULDRON) - unlockedBy(getHasName(Items.CAULDRON), has(Items.CAULDRON)) - } + chemical(RagiumBlocks.CHEMICAL_BATH) { items { +Items.CAULDRON } } + chemical(RagiumBlocks.MIXER) { +holderSet(Tags.Items.BUCKETS_EMPTY) } // Bio - bio(RagiumBlocks.BREWERY) { - define('D', Items.BREWING_STAND) - unlockedBy(getHasName(Items.BREWING_STAND), has(Items.BREWING_STAND)) - } + bio(RagiumBlocks.BREWERY) { items { +Items.BREWING_STAND } } + bio(RagiumBlocks.PLANTER) { items { +Items.FLOWER_POT } } // Electronics + electronics(RagiumBlocks.PRECISION_ASSEMBLER) { items { +RagiumBlocks.ASSEMBLER } } // Arcane + arcane(RagiumBlocks.ENCHANTER) { items { +Items.ENCHANTING_TABLE } } // Decoration - shaped(RecipeCategory.DECORATIONS, RagiumBlocks.MACHINE_CASING, 4) - .pattern("ABA") - .pattern("B B") - .pattern("ABA") - .define('A', CommonTagPrefixes.NUGGET, RagiumMaterial.Metal.SOOTY_IRON) - .define('B', CommonTagPrefixes.INGOT, RagiumMaterial.Metal.SOOTY_IRON) - .unlockedBy( - getHasName(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.SOOTY_IRON), - has(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.SOOTY_IRON) - ) - .save(output) + VanillaRecipeBuilders.shaped { + +"ABA" + +"B B" + +"ABA" + define('A') { +holderSet(CommonTagPrefixes.NUGGET, RagiumMaterial.Metal.SOOTY_IRON) } + define('B') { +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.SOOTY_IRON) } + result { + +RagiumBlocks.MACHINE_CASING + count = 4 + } + }.save(exporter) for (block: HTSimpleDeferredBlockAndItem in RagiumBlocks.MACHINE_CASINGS.values) { - SingleItemRecipeBuilder.stonecutting( - Ingredient.of(RagiumBlocks.MACHINE_CASING), - RecipeCategory.DECORATIONS, - block, - 1 - ).unlockedBy(getHasName(RagiumBlocks.MACHINE_CASING), has(RagiumBlocks.MACHINE_CASING)) - .save(output) + VanillaRecipeBuilders.stonecutting { + ingredient { items { +RagiumBlocks.MACHINE_CASING } } + result { +block } + }.save(exporter) } } @@ -336,20 +317,21 @@ class RagiumVanillaRecipeProvider(registries: HolderLookup.Provider, output: Rec material: HTMaterialLike, gear: HTMaterialLike, result: HTSimpleDeferredBlockAndItem, - builderAction: ShapedRecipeBuilder.() -> Unit + builderAction: IngredientBuilder.() -> Unit ) { - shaped(RecipeCategory.MISC, result) - .pattern("ABA") - .pattern("BCB") - .pattern("ADA") - .define('A', CommonTagPrefixes.NUGGET, material) - .define('B', RagiumItems.getParts(machineType)) - .define('C', CommonTagPrefixes.GEAR, gear) - .apply(builderAction) - .save(output) + VanillaRecipeBuilders.shaped { + +"ABA" + +"BCB" + +"ADA" + define('A') { +holderSet(CommonTagPrefixes.NUGGET, material) } + define('B') { items { +RagiumItems.getParts(machineType) } } + define('C') { +holderSet(CommonTagPrefixes.GEAR, gear) } + define('D', builderAction) + result { +result } + }.save(exporter) } - private inline fun mechanical(result: HTSimpleDeferredBlockAndItem, builderAction: ShapedRecipeBuilder.() -> Unit) { + private inline fun mechanical(result: HTSimpleDeferredBlockAndItem, builderAction: IngredientBuilder.() -> Unit) { machine( HTMachineType.MECHANICAL, RagiumMaterial.Metal.SOOTY_IRON, @@ -359,7 +341,7 @@ class RagiumVanillaRecipeProvider(registries: HolderLookup.Provider, output: Rec ) } - private inline fun heat(result: HTSimpleDeferredBlockAndItem, builderAction: ShapedRecipeBuilder.() -> Unit) { + private inline fun heat(result: HTSimpleDeferredBlockAndItem, builderAction: IngredientBuilder.() -> Unit) { machine( HTMachineType.HEAT, RagiumMaterial.Metal.SOOTY_IRON, @@ -369,7 +351,7 @@ class RagiumVanillaRecipeProvider(registries: HolderLookup.Provider, output: Rec ) } - private inline fun chemical(result: HTSimpleDeferredBlockAndItem, builderAction: ShapedRecipeBuilder.() -> Unit) { + private inline fun chemical(result: HTSimpleDeferredBlockAndItem, builderAction: IngredientBuilder.() -> Unit) { machine( HTMachineType.CHEMICAL, RagiumMaterial.Metal.BLACK_STEEL, @@ -379,7 +361,7 @@ class RagiumVanillaRecipeProvider(registries: HolderLookup.Provider, output: Rec ) } - private inline fun bio(result: HTSimpleDeferredBlockAndItem, builderAction: ShapedRecipeBuilder.() -> Unit) { + private inline fun bio(result: HTSimpleDeferredBlockAndItem, builderAction: IngredientBuilder.() -> Unit) { machine( HTMachineType.BIO, RagiumMaterial.Metal.BLACK_STEEL, @@ -389,10 +371,7 @@ class RagiumVanillaRecipeProvider(registries: HolderLookup.Provider, output: Rec ) } - private inline fun electronics( - result: HTSimpleDeferredBlockAndItem, - builderAction: ShapedRecipeBuilder.() -> Unit - ) { + private inline fun electronics(result: HTSimpleDeferredBlockAndItem, builderAction: IngredientBuilder.() -> Unit) { machine( HTMachineType.ELECTRONICS, RagiumMaterial.Metal.VOID_METAL, @@ -402,7 +381,7 @@ class RagiumVanillaRecipeProvider(registries: HolderLookup.Provider, output: Rec ) } - private inline fun arcane(result: HTSimpleDeferredBlockAndItem, builderAction: ShapedRecipeBuilder.() -> Unit) { + private inline fun arcane(result: HTSimpleDeferredBlockAndItem, builderAction: IngredientBuilder.() -> Unit) { machine( HTMachineType.ARCANE, RagiumMaterial.Metal.VOID_METAL, @@ -412,30 +391,65 @@ class RagiumVanillaRecipeProvider(registries: HolderLookup.Provider, output: Rec ) } + // Machine // + + private fun storage() { + // Tank + VanillaRecipeBuilders.shaped { + hollow8() + define('A') { +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.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('B') { +holderSet(Tags.Items.BUCKETS_EMPTY) } + result { +RagiumBlocks.TANK } + recipeId suffix "_by_black_steel" + }.save(exporter) + // Void Tank + VanillaRecipeBuilders.shaped { + hollow8() + define('A') { +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.VOID_METAL) } + define('B') { +holderSet(Tags.Items.BUCKETS_EMPTY) } + result { +RagiumBlocks.VOID_TANK } + }.save(exporter) + } + // Material // private fun material() { // XX <-> Storage Block - baseToBlock(RagiumMaterial.Gem.ECHO, CommonTagPrefixes.GEM, Items.ECHO_SHARD, size = StorageBlockSize.FOUR) - baseToBlock(RagiumMaterial.Metal.SOOTY_IRON, HTItemPart.INGOT) - baseToBlock(RagiumMaterial.Metal.BLACK_STEEL, HTItemPart.INGOT) - baseToBlock(RagiumMaterial.Metal.VOID_METAL, HTItemPart.INGOT) + 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)) + + 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) // Ingot <-> Nugget - ingotToNugget(RagiumMaterial.Metal.NETHERITE, ingot = Items.NETHERITE_INGOT) + 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) // Gear RagiumItems.getOrThrow(HTItemPart.GEAR, RagiumMaterial.Other.WOOD).let { gear: HTSimpleDeferredItem -> - shaped(RecipeCategory.MISC, gear) - .pattern(" A ") - .pattern("ABA") - .pattern(" A ") - .define('A', ItemTags.PLANKS) - .define('B', ItemTags.WOODEN_BUTTONS) - .group(gear.idOrThrow.path) - .unlockedBy(getHasName(ItemTags.PLANKS), has(ItemTags.PLANKS)) - .save(output) + VanillaRecipeBuilders.shaped { + hollow4() + define('A') { +holderSet(ItemTags.PLANKS) } + define('B') { +holderSet(ItemTags.WOODEN_BUTTONS) } + result { +gear } + }.save(exporter) } gear(CommonTagPrefixes.GEM, RagiumMaterial.Gem.DIAMOND) gear(CommonTagPrefixes.GEM, RagiumMaterial.Gem.EMERALD) @@ -443,18 +457,13 @@ class RagiumVanillaRecipeProvider(registries: HolderLookup.Provider, output: Rec gear(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.IRON) gear(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.GOLD) RagiumItems.MATERIAL_ITEMS[HTItemPart.GEAR, RagiumMaterial.Metal.NETHERITE]?.let { - SmithingTransformRecipeBuilder.smithing( - Ingredient.of(Items.NETHERITE_UPGRADE_SMITHING_TEMPLATE), - tag(CommonTagPrefixes.GEAR, RagiumMaterial.Gem.DIAMOND), - tag(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.NETHERITE), - RecipeCategory.MISC, - it.get() - ).unlocks( - getHasName(CommonTagPrefixes.GEAR, RagiumMaterial.Gem.DIAMOND), - has(CommonTagPrefixes.GEAR, RagiumMaterial.Gem.DIAMOND) - ).save(output, RecipeKey(it.idOrThrow.withSuffix("_smithing"))) + VanillaRecipeBuilders.smithing { + template { items { +Items.NETHERITE_UPGRADE_SMITHING_TEMPLATE } } + base { +holderSet(CommonTagPrefixes.GEAR, RagiumMaterial.Gem.DIAMOND) } + addition { +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.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 @@ -465,237 +474,152 @@ class RagiumVanillaRecipeProvider(registries: HolderLookup.Provider, output: Rec RagiumMaterial.Metal.NETHERITE -> HTSimpleDeferredItem(vanillaId("netherite_ingot")) else -> RagiumItems.MATERIAL_ITEMS[HTItemPart.INGOT, metal] } ?: continue - SimpleCookingRecipeBuilder.smelting( - Ingredient.of(dust), - RecipeCategory.MISC, - CookingBookCategory.MISC, - item, - 0.35f, - 200 - ).group(item.idOrThrow.path) - .unlockedBy(getHasName(dust), has(dust)) - .saveSuffixed(output, "_from_smelting_dust") - SimpleCookingRecipeBuilder.blasting( - Ingredient.of(dust), - RecipeCategory.MISC, - CookingBookCategory.MISC, - item, - 0.35f, - 100 - ).group(item.idOrThrow.path) - .unlockedBy(getHasName(dust), has(dust)) - .saveSuffixed(output, "_from_blasting_dust") + VanillaRecipeBuilders.smeltingAndBlasting(exporter) { + ingredient { items { +dust } } + result { +item } + exp = 0.35f + group = item.id.path + recipeId suffix "_from_dust" + } } - // Fuel for (fuel: RagiumMaterial.Fuel in RagiumMaterial.Fuel.entries) { - val base: ItemLike = RagiumMaterialHelper.getFuelBase(fuel) + val base: HTSimpleDeferredItem = RagiumMaterialHelper.getFuelBase(fuel) // Storage - baseToBlock(fuel, Ingredient.of(base), base, getHasName(base) to has(base)) + nineToBlock(fuel, Ingredient.of(base), base) // Tiny val tiny: HTSimpleDeferredItem = RagiumItems.getOrThrow(HTItemPart.TINY, fuel) - shapeless(RecipeCategory.MISC, tiny, 8) - .requires(base) - .group(tiny.idOrThrow.path) - .unlockedBy(getHasName(base), has(base)) - .save(output) - shaped(RecipeCategory.MISC, base) - .pattern("AAA") - .pattern("A A") - .pattern("AAA") - .define('A', CommonTagPrefixes.TINY, fuel) - .group(getItemName(base)) - .unlockedBy(getHasName(CommonTagPrefixes.TINY, fuel), has(CommonTagPrefixes.TINY, fuel)) - .saveSuffixed(output, "_from_tiny") + VanillaRecipeBuilders.shapeless { + ingredient { items { +base } } + result { + +tiny + count = 8 + } + group = tiny.id.path + }.save(exporter) + VanillaRecipeBuilders.shaped { + hollow() + define('A') { +holderSet(CommonTagPrefixes.TINY, fuel) } + result { +base } + group = base.id.path + recipeId suffix "_from_tiny" + }.save(exporter) } // Sooty Iron - val ironIngot: Ingredient = tag(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.IRON) - val sootyIronIngot: HTSimpleDeferredItem = RagiumItems.getOrThrow( - HTItemPart.INGOT, - RagiumMaterial.Metal.SOOTY_IRON - ) - shaped(RecipeCategory.MISC, sootyIronIngot) - .pattern("AAA") - .pattern("ABA") - .pattern("AAA") - .define('A', CommonTagPrefixes.TINY, RagiumMaterial.Fuel.COAL, RagiumMaterial.Fuel.CHARCOAL) - .define('B', ironIngot) - .group(sootyIronIngot.idOrThrow.path) - .unlockedBy( - getHasName(CommonTagPrefixes.TINY, RagiumMaterial.Fuel.COAL), - has(CommonTagPrefixes.TINY, RagiumMaterial.Fuel.COAL) - ) - .unlockedBy( - getHasName(CommonTagPrefixes.TINY, RagiumMaterial.Fuel.CHARCOAL), - has(CommonTagPrefixes.TINY, RagiumMaterial.Fuel.CHARCOAL) - ) - .save(output) - shaped(RecipeCategory.MISC, sootyIronIngot) - .pattern(" A ") - .pattern("ABA") - .pattern(" A ") - .define('A', CommonTagPrefixes.TINY, RagiumMaterial.Fuel.COAL_COKE) - .define('B', ironIngot) - .group(sootyIronIngot.idOrThrow.path) - .unlockedBy( - getHasName(CommonTagPrefixes.TINY, RagiumMaterial.Fuel.COAL_COKE), - has(CommonTagPrefixes.TINY, RagiumMaterial.Fuel.COAL_COKE) - ) - .saveSuffixed(output, "_from_coke") - shapeless(RecipeCategory.MISC, sootyIronIngot) - .requires(ironIngot) - .requires(CommonTagPrefixes.DUST, RagiumMaterial.Fuel.COAL, RagiumMaterial.Fuel.CHARCOAL) - .group(sootyIronIngot.idOrThrow.path) - .unlockedBy( - getHasName(CommonTagPrefixes.DUST, RagiumMaterial.Fuel.COAL), - has(CommonTagPrefixes.DUST, RagiumMaterial.Fuel.COAL) - ) - .unlockedBy( - getHasName(CommonTagPrefixes.DUST, RagiumMaterial.Fuel.CHARCOAL), - has(CommonTagPrefixes.DUST, RagiumMaterial.Fuel.CHARCOAL) - ) - .saveSuffixed(output, "_by_dust") - shapeless(RecipeCategory.MISC, sootyIronIngot, 2) - .requires(ironIngot) - .requires(ironIngot) - .requires(CommonTagPrefixes.DUST, RagiumMaterial.Fuel.COAL_COKE) - .group(sootyIronIngot.idOrThrow.path) - .unlockedBy( - getHasName(CommonTagPrefixes.DUST, RagiumMaterial.Fuel.COAL_COKE), - has(CommonTagPrefixes.DUST, RagiumMaterial.Fuel.COAL_COKE) - ) - .saveSuffixed(output, "_by_coke_dust") - } - - private fun baseToBlock( - material: RagiumMaterial, - basePrefix: HTTagPrefix, - base: ItemLike, - block: ItemLike? = RagiumBlocks.STORAGE_BLOCKS[material], - size: StorageBlockSize = StorageBlockSize.NINE - ) { - baseToBlock( - material, - tag(basePrefix, material), - base, - getHasName(basePrefix, material) to has(basePrefix, material), - block, - size - ) + val ironIngot: HolderSet = holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.IRON) + val sootyIronIngot: HTSimpleDeferredItem = + RagiumItems.getOrThrow(HTItemPart.INGOT, RagiumMaterial.Metal.SOOTY_IRON) + VanillaRecipeBuilders.shaped { + hollow8() + define('A') { + +materialTags(CommonTagPrefixes.TINY, nelOf(RagiumMaterial.Fuel.COAL, RagiumMaterial.Fuel.CHARCOAL)) + } + define('B') { +ironIngot } + result { +sootyIronIngot } + group = sootyIronIngot.id.path + }.save(exporter) + VanillaRecipeBuilders.shaped { + hollow4() + define('A') { + +materialTags( + CommonTagPrefixes.TINY, + nelOf(RagiumMaterial.Fuel.COAL_COKE, RagiumMaterial.Fuel.PITCH_COKE) + ) + } + define('B') { +ironIngot } + result { +sootyIronIngot } + group = sootyIronIngot.id.path + recipeId suffix "_from_coke" + }.save(exporter) } - private fun baseToBlock( - material: RagiumMaterial, - basePart: HTItemPart, - block: ItemLike? = RagiumBlocks.STORAGE_BLOCKS[material], - size: StorageBlockSize = StorageBlockSize.NINE - ) { - val base: ItemLike = RagiumItems.MATERIAL_ITEMS[basePart, material] ?: return - baseToBlock(material, basePart.tagPrefix, base, block, size) + private fun gemBlock(material: RagiumMaterial, block: HTSimpleDeferredBlockAndItem) { + VanillaRecipeBuilders.shaped { + +"AA" + +"AA" + define('A') { +holderSet(CommonTagPrefixes.GEM, material) } + result { +block } + category = RecipeCategory.BUILDING_BLOCKS + group = block.idOrThrow.path + }.save(exporter) } - private fun baseToBlock( - material: RagiumMaterial, - baseInput: Ingredient, - base: ItemLike, - criterion: Pair>, - block: ItemLike? = RagiumBlocks.STORAGE_BLOCKS[material], - size: StorageBlockSize = StorageBlockSize.NINE - ) { - if (block == null) return - shapeless(RecipeCategory.MISC, base, size.count) - .requires(CommonTagPrefixes.STORAGE_BLOCK, material) - .group(getItemName(base)) - .unlockedBy( - getHasName(CommonTagPrefixes.STORAGE_BLOCK, material), - has(CommonTagPrefixes.STORAGE_BLOCK, material) - ).saveSuffixed(output, "_from_block") - shaped(RecipeCategory.BUILDING_BLOCKS, block) - .apply { size.pattern.forEach(::pattern) } - .define('A', baseInput) - .define('B', base) - .group(getItemName(block)) - .unlockedBy(criterion.first, criterion.second) - .save(output) + private fun nineToBlock(material: RagiumMaterial, basePart: HTItemPart) { + val base: HTSimpleDeferredItem = RagiumItems.getOrThrow(basePart, material) + val block: HTSimpleDeferredBlockAndItem = RagiumBlocks.getOrThrow(HTStorageBlockPart.DEFAULT, material) + VanillaRecipeBuilders.shapeless { + ingredient { +holderSet(CommonTagPrefixes.STORAGE_BLOCK, material) } + result { + +base + count = 9 + } + group = base.id.path + recipeId suffix "_from_block" + }.save(exporter) + VanillaRecipeBuilders.shaped { + hollow8() + define('A') { +holderSet(basePart.tagPrefix, material) } + define('B') { items { +base } } + result { +block } + category = RecipeCategory.BUILDING_BLOCKS + group = block.item.id.path + }.save(exporter) } - private enum class StorageBlockSize(val count: Int, val pattern: List) { - FOUR(4, listOf("AA", "AB")), - NINE(9, listOf("AAA", "ABA", "AAA")) + private fun nineToBlock(material: RagiumMaterial, baseInput: Ingredient, base: HTSimpleDeferredItem) { + val block: HTSimpleDeferredBlockAndItem = RagiumBlocks.STORAGE_BLOCKS[material] ?: return + VanillaRecipeBuilders.shapeless { + ingredient { +holderSet(CommonTagPrefixes.STORAGE_BLOCK, material) } + result { + +base + count = 9 + } + group = base.id.path + recipeId suffix "_from_block" + }.save(exporter) + VanillaRecipeBuilders.shaped { + hollow8() + define('A') { +baseInput } + define('B') { items { +base } } + result { +block } + category = RecipeCategory.BUILDING_BLOCKS + group = block.item.id.path + }.save(exporter) } private fun ingotToNugget( material: RagiumMaterial, - ingot: ItemLike? = RagiumItems.MATERIAL_ITEMS[HTItemPart.INGOT, material], - nugget: ItemLike? = RagiumItems.MATERIAL_ITEMS[HTItemPart.NUGGET, material] + ingot: HTSimpleDeferredItem? = RagiumItems.MATERIAL_ITEMS[HTItemPart.INGOT, material], + nugget: HTSimpleDeferredItem? = RagiumItems.MATERIAL_ITEMS[HTItemPart.NUGGET, material] ) { if (ingot == null || nugget == null) return - shapeless(RecipeCategory.MISC, nugget, 9) - .requires(CommonTagPrefixes.INGOT, material) - .group(getItemName(nugget)) - .unlockedBy(getHasName(CommonTagPrefixes.INGOT, material), has(CommonTagPrefixes.INGOT, material)) - .saveSuffixed(output, "_from_ingot") - shaped(RecipeCategory.MISC, ingot) - .pattern("AAA") - .pattern("ABA") - .pattern("AAA") - .define('A', CommonTagPrefixes.NUGGET, material) - .define('B', nugget) - .group(getItemName(ingot)) - .unlockedBy(getHasName(CommonTagPrefixes.NUGGET, material), has(CommonTagPrefixes.NUGGET, material)) - .saveSuffixed(output, "_from_nugget") + VanillaRecipeBuilders.shapeless { + ingredient { +holderSet(CommonTagPrefixes.INGOT, material) } + result { + +nugget + count = 9 + } + group = nugget.id.path + recipeId suffix "_from_ingot" + }.save(exporter) + VanillaRecipeBuilders.shaped { + hollow8() + define('A') { +holderSet(CommonTagPrefixes.NUGGET, material) } + define('B') { items { +nugget } } + result { +ingot } + group = ingot.id.path + recipeId suffix "_from_nugget" + }.save(exporter) } private fun gear(basePrefix: HTTagPrefix, material: RagiumMaterial) { - val gear: ItemLike = RagiumItems.getOrThrow(HTItemPart.GEAR, material) - shaped(RecipeCategory.MISC, gear) - .pattern(" A ") - .pattern("ABA") - .pattern(" A ") - .define('A', basePrefix, material) - .define('B', CommonTagPrefixes.GEAR, RagiumMaterial.Other.WOOD) - .group(getItemName(gear)) - .unlockedBy(getHasName(basePrefix, material), has(basePrefix, material)) - .save(output) - } - - // Extensions // - - fun tag(prefix: HTTagPrefix, material: HTMaterialLike): Ingredient = tag(prefix.itemTagKey(material)) - - fun getHasName(tagKey: TagKey<*>): String = "has_${tagKey.location().debugPath}" - - fun getHasName(prefix: HTTagPrefix, material: HTMaterialLike): String = getHasName(prefix.itemTagKey(material)) - - fun has(prefix: HTTagPrefix, material: HTMaterialLike): Criterion = - has(prefix.itemTagKey(material)) - - fun RecipeBuilder.saveSuffixed(output: RecipeOutput, suffix: String) { - this.save(output, RecipeKey(this.defaultId().identifier().withSuffix(suffix))) + VanillaRecipeBuilders.shaped { + hollow4() + define('A') { +holderSet(basePrefix, material) } + define('B') { +holderSet(CommonTagPrefixes.GEAR, RagiumMaterial.Other.WOOD) } + result { +RagiumItems.getOrThrow(HTItemPart.GEAR, material) } + }.save(exporter) } - fun ShapedRecipeBuilder.define(symbol: Char, prefix: HTTagPrefix, material: HTMaterialLike): ShapedRecipeBuilder = - this.define(symbol, prefix.itemTagKey(material)) - - fun ShapedRecipeBuilder.define( - symbol: Char, - prefix: HTTagPrefix, - vararg materials: HTMaterialLike - ): ShapedRecipeBuilder = materials.map(prefix::itemTagKey) - .let(HTComparators::sortTagKeys) - .map(::tag) - .let(::CompoundIngredient) - .toVanilla() - .let { this.define(symbol, it) } - - fun ShapelessRecipeBuilder.requires(prefix: HTTagPrefix, material: HTMaterialLike): ShapelessRecipeBuilder = - this.requires(prefix.itemTagKey(material)) - - fun ShapelessRecipeBuilder.requires(prefix: HTTagPrefix, vararg materials: HTMaterialLike): ShapelessRecipeBuilder = - materials.map(prefix::itemTagKey) - .let(HTComparators::sortTagKeys) - .map(::tag) - .let(::CompoundIngredient) - .toVanilla() - .let(this::requires) + override fun getName(): String = "Vanilla Recipes" } diff --git a/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumBlockItemTagsProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumBlockItemTagsProvider.kt index 730a545e06..07703b6075 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumBlockItemTagsProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumBlockItemTagsProvider.kt @@ -26,9 +26,13 @@ class RagiumBlockItemTagsProvider(factory: (BlockItemTag) -> HTBlockItemTagBuild .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) // Machine for (machineType: HTMachineType in HTMachineType.entries) { - for (block: HTSimpleDeferredBlockAndItem in RagiumBlocks.MACHINES[machineType]) { + for (block: HTSimpleDeferredBlockAndItem in RagiumBlocks.MACHINES[machineType] ?: listOf()) { builder(HTMachineType.PREFIX, machineType).add(block) } } diff --git a/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumBlockTagsProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumBlockTagsProvider.kt index 06a6e23dd2..a458c40f2c 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumBlockTagsProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumBlockTagsProvider.kt @@ -20,15 +20,34 @@ class RagiumBlockTagsProvider(output: PackOutput, lookupProvider: CompletableFut HTBlockItemTagsProvider.forBlock(builder(block)) }.run() - val pickaxe: HTTagBuilder = builder(BlockTags.MINEABLE_WITH_PICKAXE) // Mineable + val pickaxe: HTTagBuilder = builder(BlockTags.MINEABLE_WITH_PICKAXE) sequence { yieldAll(RagiumBlocks.MATERIAL_ORES.values) yieldAll(RagiumBlocks.STORAGE_BLOCKS.values) - yieldAll(RagiumBlocks.MACHINES.values) - yieldAll(RagiumBlocks.MACHINE_CASINGS.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) + yieldAll(RagiumBlocks.MACHINES.values.flatten()) yield(RagiumBlocks.MACHINE_CASING) - }.forEach { pickaxe.add(it.block) } + yieldAll(RagiumBlocks.MACHINE_CASINGS.values) + + yield(RagiumBlocks.TANK) + yield(RagiumBlocks.VOID_TANK) + 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/RagiumDamageTypeTagsProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumDamageTypeTagsProvider.kt new file mode 100644 index 0000000000..cd6e2f5a89 --- /dev/null +++ b/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumDamageTypeTagsProvider.kt @@ -0,0 +1,20 @@ +package hiiragi283.ragium.data.tag + +import hiiragi283.lib.data.tag.HTTagsProvider +import hiiragi283.ragium.api.RagiumAPI +import hiiragi283.ragium.api.world.RagiumDamageTypes +import net.minecraft.core.HolderLookup +import net.minecraft.core.registries.Registries +import net.minecraft.data.PackOutput +import net.minecraft.tags.DamageTypeTags +import net.minecraft.world.damagesource.DamageType +import java.util.concurrent.CompletableFuture + +class RagiumDamageTypeTagsProvider(output: PackOutput, lookupProvider: CompletableFuture) : + HTTagsProvider(output, Registries.DAMAGE_TYPE, lookupProvider, RagiumAPI.MOD_ID) { + override fun appendTags(registries: HolderLookup.Provider) { + builder(DamageTypeTags.BYPASSES_ARMOR).add(RagiumDamageTypes.CHEMICAL_BURN) + builder(DamageTypeTags.NO_KNOCKBACK).add(RagiumDamageTypes.CHEMICAL_BURN) + builder(DamageTypeTags.PANIC_CAUSES).add(RagiumDamageTypes.CHEMICAL_BURN) + } +} diff --git a/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumFluidTagsProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumFluidTagsProvider.kt index 61d1e4347c..5cfa624005 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumFluidTagsProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumFluidTagsProvider.kt @@ -2,6 +2,7 @@ package hiiragi283.ragium.data.tag import hiiragi283.lib.data.tag.HTFluidTagsProvider import hiiragi283.ragium.api.RagiumAPI +import hiiragi283.ragium.api.tag.RagiumTags import hiiragi283.ragium.common.fluid.RagiumFluids import net.minecraft.core.HolderLookup import net.minecraft.data.PackOutput @@ -11,5 +12,9 @@ class RagiumFluidTagsProvider(output: PackOutput, lookupProvider: CompletableFut HTFluidTagsProvider(output, lookupProvider, RagiumAPI.MOD_ID) { override fun appendTags(registries: HolderLookup.Provider) { addContents(RagiumFluids.REGISTER.asSequence()) + + builder(RagiumTags.Fluids.RESINS) + .addContentTag(RagiumFluids.RESIN) + .addContentTag(RagiumFluids.SYNTHETIC_RESIN) } } diff --git a/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumItemTagsProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumItemTagsProvider.kt index 4b7fc5efa7..42c47d2e5d 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumItemTagsProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumItemTagsProvider.kt @@ -6,12 +6,14 @@ import hiiragi283.lib.data.tag.HTItemTagsProvider import hiiragi283.lib.item.component.HTToolType import hiiragi283.lib.registry.HTFluidContent import hiiragi283.lib.resource.HTSimpleValueWithKey +import hiiragi283.lib.resource.vanillaId import hiiragi283.lib.tag.CommonTagPrefixes import hiiragi283.lib.tag.HTCommonTags import hiiragi283.ragium.api.RagiumAPI import hiiragi283.ragium.api.material.HTItemPart import hiiragi283.ragium.api.material.RagiumMaterial import hiiragi283.ragium.api.tag.RagiumTags +import hiiragi283.ragium.common.block.RagiumBlocks import hiiragi283.ragium.common.fluid.RagiumFluids import hiiragi283.ragium.common.item.RagiumItems import net.minecraft.core.HolderLookup @@ -19,7 +21,6 @@ import net.minecraft.data.PackOutput import net.minecraft.tags.ItemTags import net.minecraft.tags.TagKey import net.minecraft.world.item.Item -import net.minecraft.world.item.Items import net.neoforged.neoforge.common.Tags import java.util.concurrent.CompletableFuture @@ -30,14 +31,18 @@ class RagiumItemTagsProvider(output: PackOutput, lookupProvider: CompletableFutu HTBlockItemTagsProvider.forItem(builder(item)) }.run() // Material - builder(CommonTagPrefixes.GEM, RagiumMaterial.Gem.ECHO).addItem(Items.ECHO_SHARD) + builder(CommonTagPrefixes.GEM, RagiumMaterial.Gem.ECHO).add(createKey(vanillaId("echo_shard"))) - RagiumItems.MATERIAL_ITEMS.forEach { (part: HTItemPart, material, item: HTSimpleValueWithKey) -> - builder(part.tagPrefix, material).add(item) - if (part == HTItemPart.NUGGET) { - builder(ItemTags.METAL_NUGGETS).add(item) + RagiumItems.MATERIAL_ITEMS + .forEach { (part: HTItemPart, material: RagiumMaterial, item: HTSimpleValueWithKey) -> + builder(part.tagPrefix, material).add(item) + if (part == HTItemPart.GEM || part == HTItemPart.INGOT) { + builder(ItemTags.BEACON_PAYMENT_ITEMS).add(item) + } + if (part == HTItemPart.NUGGET) { + builder(ItemTags.METAL_NUGGETS).add(item) + } } - } // Buckets for (content: HTFluidContent in RagiumFluids.REGISTER.asSequence()) { builders(Tags.Items.BUCKETS, content.bucketTag).add(content.bucketHolder) @@ -50,14 +55,36 @@ class RagiumItemTagsProvider(output: PackOutput, lookupProvider: CompletableFutu builder(RagiumTags.Items.SOOTY_IRON_TOOL_MATERIALS) .addTag(CommonTagPrefixes.INGOT.itemTagKey(RagiumMaterial.Metal.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(HTCommonTags.Items.PAPER).addItem(Items.PAPER) + builder(HTCommonTags.Items.COAL_COKE).add(RagiumItems.COAL_COKE) + builder(HTCommonTags.Items.PAPER).add(createKey(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"))) + 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) } } diff --git a/src/data/kotlin/hiiragi283/ragium/data/worldgen/RagiumWorldData.kt b/src/data/kotlin/hiiragi283/ragium/data/worldgen/RagiumWorldData.kt index 2bfb1f8d05..fbb94c1bb6 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/worldgen/RagiumWorldData.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/worldgen/RagiumWorldData.kt @@ -74,7 +74,7 @@ data object RagiumWorldData { fun oreConfiguration(material: RagiumMaterial, size: Int): OreConfiguration = RagiumBlocks.MATERIAL_ORES .column(material) .map { (part: HTOreBlockPart, block: HTSimpleDeferredBlockAndItem) -> - val state: BlockState = block.block.defaultState + val state: BlockState = block.defaultState when (part) { HTOreBlockPart.STONE -> BlockTags.STONE_ORE_REPLACEABLES HTOreBlockPart.DEEPSLATE -> BlockTags.DEEPSLATE_ORE_REPLACEABLES diff --git a/src/generated/resources/assets/ragium/blockstates/aluminum_block.json b/src/generated/resources/assets/ragium/blockstates/aluminum_block.json new file mode 100644 index 0000000000..fc16eed267 --- /dev/null +++ b/src/generated/resources/assets/ragium/blockstates/aluminum_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "ragium:block/aluminum_block" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/blockstates/creative_tank.json b/src/generated/resources/assets/ragium/blockstates/creative_tank.json new file mode 100644 index 0000000000..b4a1459c11 --- /dev/null +++ b/src/generated/resources/assets/ragium/blockstates/creative_tank.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "ragium:block/creative_tank" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/blockstates/cryolite_block.json b/src/generated/resources/assets/ragium/blockstates/cryolite_block.json new file mode 100644 index 0000000000..401a31da57 --- /dev/null +++ b/src/generated/resources/assets/ragium/blockstates/cryolite_block.json @@ -0,0 +1,7 @@ +{ + "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 new file mode 100644 index 0000000000..785eb35090 --- /dev/null +++ b/src/generated/resources/assets/ragium/blockstates/cryolite_slab.json @@ -0,0 +1,13 @@ +{ + "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 new file mode 100644 index 0000000000..2bf5534649 --- /dev/null +++ b/src/generated/resources/assets/ragium/blockstates/cryolite_stairs.json @@ -0,0 +1,209 @@ +{ + "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/enchanter.json b/src/generated/resources/assets/ragium/blockstates/enchanter.json new file mode 100644 index 0000000000..87417fb001 --- /dev/null +++ b/src/generated/resources/assets/ragium/blockstates/enchanter.json @@ -0,0 +1,34 @@ +{ + "variants": { + "facing=east,is_active=false": { + "model": "ragium:block/machine/arcane", + "y": 90 + }, + "facing=east,is_active=true": { + "model": "ragium:block/enchanter", + "y": 90 + }, + "facing=north,is_active=false": { + "model": "ragium:block/machine/arcane" + }, + "facing=north,is_active=true": { + "model": "ragium:block/enchanter" + }, + "facing=south,is_active=false": { + "model": "ragium:block/machine/arcane", + "y": 180 + }, + "facing=south,is_active=true": { + "model": "ragium:block/enchanter", + "y": 180 + }, + "facing=west,is_active=false": { + "model": "ragium:block/machine/arcane", + "y": 270 + }, + "facing=west,is_active=true": { + "model": "ragium:block/enchanter", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/blockstates/fluorite_block.json b/src/generated/resources/assets/ragium/blockstates/fluorite_block.json new file mode 100644 index 0000000000..4230a75c56 --- /dev/null +++ b/src/generated/resources/assets/ragium/blockstates/fluorite_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "ragium:block/fluorite_block" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/blockstates/fluorite_slab.json b/src/generated/resources/assets/ragium/blockstates/fluorite_slab.json new file mode 100644 index 0000000000..805281194b --- /dev/null +++ b/src/generated/resources/assets/ragium/blockstates/fluorite_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=bottom": { + "model": "ragium:block/fluorite_slab" + }, + "type=double": { + "model": "ragium:block/fluorite_block" + }, + "type=top": { + "model": "ragium:block/fluorite_slab_top" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/blockstates/fluorite_stairs.json b/src/generated/resources/assets/ragium/blockstates/fluorite_stairs.json new file mode 100644 index 0000000000..9184c5a685 --- /dev/null +++ b/src/generated/resources/assets/ragium/blockstates/fluorite_stairs.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "ragium:block/fluorite_stairs_inner", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "ragium:block/fluorite_stairs_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "ragium:block/fluorite_stairs_outer", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "ragium:block/fluorite_stairs_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "ragium:block/fluorite_stairs" + }, + "facing=east,half=top,shape=inner_left": { + "model": "ragium:block/fluorite_stairs_inner", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=inner_right": { + "model": "ragium:block/fluorite_stairs_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=outer_left": { + "model": "ragium:block/fluorite_stairs_outer", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=outer_right": { + "model": "ragium:block/fluorite_stairs_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=straight": { + "model": "ragium:block/fluorite_stairs", + "uvlock": true, + "x": 180 + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "ragium:block/fluorite_stairs_inner", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "ragium:block/fluorite_stairs_inner", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "ragium:block/fluorite_stairs_outer", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "ragium:block/fluorite_stairs_outer", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=straight": { + "model": "ragium:block/fluorite_stairs", + "uvlock": true, + "y": 270 + }, + "facing=north,half=top,shape=inner_left": { + "model": "ragium:block/fluorite_stairs_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=inner_right": { + "model": "ragium:block/fluorite_stairs_inner", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=outer_left": { + "model": "ragium:block/fluorite_stairs_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=outer_right": { + "model": "ragium:block/fluorite_stairs_outer", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=straight": { + "model": "ragium:block/fluorite_stairs", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "ragium:block/fluorite_stairs_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "ragium:block/fluorite_stairs_inner", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "ragium:block/fluorite_stairs_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "ragium:block/fluorite_stairs_outer", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=straight": { + "model": "ragium:block/fluorite_stairs", + "uvlock": true, + "y": 90 + }, + "facing=south,half=top,shape=inner_left": { + "model": "ragium:block/fluorite_stairs_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=inner_right": { + "model": "ragium:block/fluorite_stairs_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=outer_left": { + "model": "ragium:block/fluorite_stairs_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=outer_right": { + "model": "ragium:block/fluorite_stairs_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=straight": { + "model": "ragium:block/fluorite_stairs", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "ragium:block/fluorite_stairs_inner", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "ragium:block/fluorite_stairs_inner", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "ragium:block/fluorite_stairs_outer", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "ragium:block/fluorite_stairs_outer", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=straight": { + "model": "ragium:block/fluorite_stairs", + "uvlock": true, + "y": 180 + }, + "facing=west,half=top,shape=inner_left": { + "model": "ragium:block/fluorite_stairs_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=inner_right": { + "model": "ragium:block/fluorite_stairs_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=outer_left": { + "model": "ragium:block/fluorite_stairs_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=outer_right": { + "model": "ragium:block/fluorite_stairs_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=straight": { + "model": "ragium:block/fluorite_stairs", + "uvlock": true, + "x": 180, + "y": 180 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/blockstates/hydrofluoric_acid.json b/src/generated/resources/assets/ragium/blockstates/hydrofluoric_acid.json new file mode 100644 index 0000000000..22e559c457 --- /dev/null +++ b/src/generated/resources/assets/ragium/blockstates/hydrofluoric_acid.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "ragium:block/hydrofluoric_acid" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/blockstates/pitch_coke_block.json b/src/generated/resources/assets/ragium/blockstates/pitch_coke_block.json new file mode 100644 index 0000000000..f44fb4e390 --- /dev/null +++ b/src/generated/resources/assets/ragium/blockstates/pitch_coke_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "ragium:block/pitch_coke_block" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/blockstates/precision_assembler.json b/src/generated/resources/assets/ragium/blockstates/precision_assembler.json new file mode 100644 index 0000000000..494ccf3079 --- /dev/null +++ b/src/generated/resources/assets/ragium/blockstates/precision_assembler.json @@ -0,0 +1,34 @@ +{ + "variants": { + "facing=east,is_active=false": { + "model": "ragium:block/machine/electronics", + "y": 90 + }, + "facing=east,is_active=true": { + "model": "ragium:block/precision_assembler", + "y": 90 + }, + "facing=north,is_active=false": { + "model": "ragium:block/machine/electronics" + }, + "facing=north,is_active=true": { + "model": "ragium:block/precision_assembler" + }, + "facing=south,is_active=false": { + "model": "ragium:block/machine/electronics", + "y": 180 + }, + "facing=south,is_active=true": { + "model": "ragium:block/precision_assembler", + "y": 180 + }, + "facing=west,is_active=false": { + "model": "ragium:block/machine/electronics", + "y": 270 + }, + "facing=west,is_active=true": { + "model": "ragium:block/precision_assembler", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/blockstates/resin.json b/src/generated/resources/assets/ragium/blockstates/resin.json new file mode 100644 index 0000000000..d263721bfe --- /dev/null +++ b/src/generated/resources/assets/ragium/blockstates/resin.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "ragium:block/resin" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/blockstates/tank.json b/src/generated/resources/assets/ragium/blockstates/tank.json new file mode 100644 index 0000000000..0db855a980 --- /dev/null +++ b/src/generated/resources/assets/ragium/blockstates/tank.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "ragium:block/tank" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/blockstates/void_tank.json b/src/generated/resources/assets/ragium/blockstates/void_tank.json new file mode 100644 index 0000000000..ef35168579 --- /dev/null +++ b/src/generated/resources/assets/ragium/blockstates/void_tank.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "ragium:block/void_tank" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/items/coal_coke_dust.json b/src/generated/resources/assets/ragium/items/alumina_dust.json similarity index 54% rename from src/generated/resources/assets/ragium/items/coal_coke_dust.json rename to src/generated/resources/assets/ragium/items/alumina_dust.json index 760ebefae5..d205c7d88b 100644 --- a/src/generated/resources/assets/ragium/items/coal_coke_dust.json +++ b/src/generated/resources/assets/ragium/items/alumina_dust.json @@ -1,6 +1,6 @@ { "model": { "type": "minecraft:model", - "model": "ragium:item/coal_coke_dust" + "model": "ragium:item/alumina_dust" } } \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/items/alumina_solution_bucket.json b/src/generated/resources/assets/ragium/items/alumina_solution_bucket.json new file mode 100644 index 0000000000..ef41c7ecbc --- /dev/null +++ b/src/generated/resources/assets/ragium/items/alumina_solution_bucket.json @@ -0,0 +1,12 @@ +{ + "model": { + "type": "neoforge:fluid_container", + "apply_fluid_luminosity": false, + "fluid": "ragium:alumina_solution", + "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/aluminum_block.json b/src/generated/resources/assets/ragium/items/aluminum_block.json new file mode 100644 index 0000000000..1817fbe1df --- /dev/null +++ b/src/generated/resources/assets/ragium/items/aluminum_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "ragium:block/aluminum_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/items/aluminum_ingot.json b/src/generated/resources/assets/ragium/items/aluminum_ingot.json new file mode 100644 index 0000000000..4b3a1bef66 --- /dev/null +++ b/src/generated/resources/assets/ragium/items/aluminum_ingot.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "ragium:item/aluminum_ingot" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/items/aluminum_nugget.json b/src/generated/resources/assets/ragium/items/aluminum_nugget.json new file mode 100644 index 0000000000..708e30c219 --- /dev/null +++ b/src/generated/resources/assets/ragium/items/aluminum_nugget.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "ragium:item/aluminum_nugget" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/items/bauxite_dust.json b/src/generated/resources/assets/ragium/items/bauxite_dust.json new file mode 100644 index 0000000000..8b32aab139 --- /dev/null +++ b/src/generated/resources/assets/ragium/items/bauxite_dust.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "ragium:item/bauxite_dust" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/items/carbon_dust.json b/src/generated/resources/assets/ragium/items/carbon_dust.json new file mode 100644 index 0000000000..62ae472dbf --- /dev/null +++ b/src/generated/resources/assets/ragium/items/carbon_dust.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "ragium:item/carbon_dust" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/items/chloride_bucket.json b/src/generated/resources/assets/ragium/items/chlorine_bucket.json similarity index 89% rename from src/generated/resources/assets/ragium/items/chloride_bucket.json rename to src/generated/resources/assets/ragium/items/chlorine_bucket.json index 28514cab02..1ebeed7d66 100644 --- a/src/generated/resources/assets/ragium/items/chloride_bucket.json +++ b/src/generated/resources/assets/ragium/items/chlorine_bucket.json @@ -3,7 +3,7 @@ "type": "neoforge:fluid_container", "apply_fluid_luminosity": false, "flip_gas": true, - "fluid": "ragium:chloride", + "fluid": "ragium:chlorine", "textures": { "base": "minecraft:item/bucket", "fluid": "neoforge:item/mask/bucket_fluid", diff --git a/src/generated/resources/assets/ragium/items/circuit_board.json b/src/generated/resources/assets/ragium/items/circuit_board.json new file mode 100644 index 0000000000..8ee04d3701 --- /dev/null +++ b/src/generated/resources/assets/ragium/items/circuit_board.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "ragium:item/circuit_board" + } +} \ 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/circuit_chip.json new file mode 100644 index 0000000000..2557a36f8a --- /dev/null +++ b/src/generated/resources/assets/ragium/items/circuit_chip.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "ragium:item/circuit_chip" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/items/creative_tank.json b/src/generated/resources/assets/ragium/items/creative_tank.json new file mode 100644 index 0000000000..70f0d052ac --- /dev/null +++ b/src/generated/resources/assets/ragium/items/creative_tank.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "ragium:block/creative_tank" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/items/crude_silicon.json b/src/generated/resources/assets/ragium/items/crude_silicon.json new file mode 100644 index 0000000000..fd25aeadac --- /dev/null +++ b/src/generated/resources/assets/ragium/items/crude_silicon.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "ragium:item/crude_silicon" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/items/cryolite.json b/src/generated/resources/assets/ragium/items/cryolite.json new file mode 100644 index 0000000000..e24430fe02 --- /dev/null +++ b/src/generated/resources/assets/ragium/items/cryolite.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "ragium:item/cryolite" + } +} \ 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/cryolite_block.json new file mode 100644 index 0000000000..db77e8f7d3 --- /dev/null +++ b/src/generated/resources/assets/ragium/items/cryolite_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "ragium:block/cryolite_block" + } +} \ 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/cryolite_dust.json new file mode 100644 index 0000000000..6aea72d9b2 --- /dev/null +++ b/src/generated/resources/assets/ragium/items/cryolite_dust.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "ragium:item/cryolite_dust" + } +} \ 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/cryolite_slab.json new file mode 100644 index 0000000000..38ef6ed7a0 --- /dev/null +++ b/src/generated/resources/assets/ragium/items/cryolite_slab.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "ragium:block/cryolite_slab" + } +} \ 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 new file mode 100644 index 0000000000..9aa78038be --- /dev/null +++ b/src/generated/resources/assets/ragium/items/cryolite_stairs.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "ragium:block/cryolite_stairs" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/items/electric_circuit.json b/src/generated/resources/assets/ragium/items/electric_circuit.json new file mode 100644 index 0000000000..0b3682edb2 --- /dev/null +++ b/src/generated/resources/assets/ragium/items/electric_circuit.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "ragium:item/electric_circuit" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/items/enchanter.json b/src/generated/resources/assets/ragium/items/enchanter.json new file mode 100644 index 0000000000..cd85771617 --- /dev/null +++ b/src/generated/resources/assets/ragium/items/enchanter.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "ragium:block/enchanter" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/items/fluorite.json b/src/generated/resources/assets/ragium/items/fluorite.json new file mode 100644 index 0000000000..08b2ec7893 --- /dev/null +++ b/src/generated/resources/assets/ragium/items/fluorite.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "ragium:item/fluorite" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/items/fluorite_block.json b/src/generated/resources/assets/ragium/items/fluorite_block.json new file mode 100644 index 0000000000..54cb8fd10c --- /dev/null +++ b/src/generated/resources/assets/ragium/items/fluorite_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "ragium:block/fluorite_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/items/fluorite_dust.json b/src/generated/resources/assets/ragium/items/fluorite_dust.json new file mode 100644 index 0000000000..e8e35550f2 --- /dev/null +++ b/src/generated/resources/assets/ragium/items/fluorite_dust.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "ragium:item/fluorite_dust" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/items/fluorite_slab.json b/src/generated/resources/assets/ragium/items/fluorite_slab.json new file mode 100644 index 0000000000..df4b33e713 --- /dev/null +++ b/src/generated/resources/assets/ragium/items/fluorite_slab.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "ragium:block/fluorite_slab" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/items/fluorite_stairs.json b/src/generated/resources/assets/ragium/items/fluorite_stairs.json new file mode 100644 index 0000000000..5cda40b5b0 --- /dev/null +++ b/src/generated/resources/assets/ragium/items/fluorite_stairs.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "ragium:block/fluorite_stairs" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/items/hydrofluoric_acid_bucket.json b/src/generated/resources/assets/ragium/items/hydrofluoric_acid_bucket.json new file mode 100644 index 0000000000..c694d01167 --- /dev/null +++ b/src/generated/resources/assets/ragium/items/hydrofluoric_acid_bucket.json @@ -0,0 +1,12 @@ +{ + "model": { + "type": "neoforge:fluid_container", + "apply_fluid_luminosity": false, + "fluid": "ragium:hydrofluoric_acid", + "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/hydrogen_fluoride_bucket.json b/src/generated/resources/assets/ragium/items/hydrogen_fluoride_bucket.json new file mode 100644 index 0000000000..3932dd29bf --- /dev/null +++ b/src/generated/resources/assets/ragium/items/hydrogen_fluoride_bucket.json @@ -0,0 +1,13 @@ +{ + "model": { + "type": "neoforge:fluid_container", + "apply_fluid_luminosity": false, + "flip_gas": true, + "fluid": "ragium:hydrogen_fluoride", + "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/pitch_coke_block.json b/src/generated/resources/assets/ragium/items/pitch_coke_block.json new file mode 100644 index 0000000000..c0dca263f4 --- /dev/null +++ b/src/generated/resources/assets/ragium/items/pitch_coke_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "ragium:block/pitch_coke_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/items/precision_assembler.json b/src/generated/resources/assets/ragium/items/precision_assembler.json new file mode 100644 index 0000000000..5dbb522a88 --- /dev/null +++ b/src/generated/resources/assets/ragium/items/precision_assembler.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "ragium:block/precision_assembler" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/items/resin_bucket.json b/src/generated/resources/assets/ragium/items/resin_bucket.json new file mode 100644 index 0000000000..1bbb04f284 --- /dev/null +++ b/src/generated/resources/assets/ragium/items/resin_bucket.json @@ -0,0 +1,12 @@ +{ + "model": { + "type": "neoforge:fluid_container", + "apply_fluid_luminosity": false, + "fluid": "ragium:resin", + "textures": { + "base": "minecraft:item/bucket", + "fluid": "neoforge:item/mask/bucket_fluid_drip", + "particle": "minecraft:item/bucket" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/items/silicon_dust.json b/src/generated/resources/assets/ragium/items/silicon_dust.json new file mode 100644 index 0000000000..94cec53dd6 --- /dev/null +++ b/src/generated/resources/assets/ragium/items/silicon_dust.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "ragium:item/silicon_dust" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/items/silicon_wafer.json b/src/generated/resources/assets/ragium/items/silicon_wafer.json new file mode 100644 index 0000000000..48940be386 --- /dev/null +++ b/src/generated/resources/assets/ragium/items/silicon_wafer.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "ragium:item/silicon_wafer" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/items/synthetic_resin_bucket.json b/src/generated/resources/assets/ragium/items/synthetic_resin_bucket.json new file mode 100644 index 0000000000..5e74895a47 --- /dev/null +++ b/src/generated/resources/assets/ragium/items/synthetic_resin_bucket.json @@ -0,0 +1,12 @@ +{ + "model": { + "type": "neoforge:fluid_container", + "apply_fluid_luminosity": false, + "fluid": "ragium:synthetic_resin", + "textures": { + "base": "minecraft:item/bucket", + "fluid": "neoforge:item/mask/bucket_fluid_drip", + "particle": "minecraft:item/bucket" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/items/tank.json b/src/generated/resources/assets/ragium/items/tank.json new file mode 100644 index 0000000000..4e221ee029 --- /dev/null +++ b/src/generated/resources/assets/ragium/items/tank.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "ragium:block/tank" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/items/tiny_pitch_coke.json b/src/generated/resources/assets/ragium/items/tiny_pitch_coke.json new file mode 100644 index 0000000000..e9e806c5e2 --- /dev/null +++ b/src/generated/resources/assets/ragium/items/tiny_pitch_coke.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "ragium:item/tiny_pitch_coke" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/items/void_tank.json b/src/generated/resources/assets/ragium/items/void_tank.json new file mode 100644 index 0000000000..6a51c9231d --- /dev/null +++ b/src/generated/resources/assets/ragium/items/void_tank.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "ragium:block/void_tank" + } +} \ 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 3115df6f99..d0dee0cd12 100644 --- a/src/generated/resources/assets/ragium/lang/en_us.json +++ b/src/generated/resources/assets/ragium/lang/en_us.json @@ -18,6 +18,8 @@ "advancement.ragium.sooty_iron.desc": "Craft a Sooty Iron Ingot", "advancement.ragium.sooty_iron.title": "Acquire Blackware", "block.ragium.alloy_smelter": "Alloy Smelter", + "block.ragium.alumina_solution": "Alumina Solution", + "block.ragium.aluminum_block": "Block of Aluminum", "block.ragium.anti_rust_oil": "Anti-rust Oil", "block.ragium.arcane_machine_casing": "Machine Casing (Arcane)", "block.ragium.aromatic_compound": "Aromatic Compound", @@ -33,13 +35,17 @@ "block.ragium.chemical_bath": "Chemical Bath", "block.ragium.chemical_machine_casing": "Machine Casing (Chemical)", "block.ragium.chemical_reactor": "Chemical Reactor", - "block.ragium.chloride": "Chlorine", + "block.ragium.chlorine": "Chlorine", "block.ragium.coal_coke_block": "Block of Coal Coke", "block.ragium.coal_tar": "Coal Tar", "block.ragium.compressor": "Compressor", "block.ragium.creative_battery": "Creative Battery", + "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", @@ -47,6 +53,10 @@ "block.ragium.echo_block": "Block of Echo", "block.ragium.electrolyzer": "Electrolyzer", "block.ragium.electronics_machine_casing": "Machine Casing (Electronics)", + "block.ragium.enchanter": "Enchanter", + "block.ragium.fluorite_block": "Block of Fluorite", + "block.ragium.fluorite_slab": "Fluorite Slab", + "block.ragium.fluorite_stairs": "Fluorite Stairs", "block.ragium.freezer": "Freezer", "block.ragium.fuel": "Fuel", "block.ragium.gray_dye": "Gray Dye", @@ -54,8 +64,10 @@ "block.ragium.heat_machine_casing": "Machine Casing (Heat)", "block.ragium.honey": "Honey", "block.ragium.hydrochloric_acid": "Hydrochloric Acid", + "block.ragium.hydrofluoric_acid": "Hydrofluoric Acid", "block.ragium.hydrogen": "Hydrogen", "block.ragium.hydrogen_chloride": "Hydrogen Chloride", + "block.ragium.hydrogen_fluoride": "Hydrogen Fluoride", "block.ragium.light_blue_dye": "Light Blue Dye", "block.ragium.light_gray_dye": "Light Gray Dye", "block.ragium.lime_dye": "Lime Dye", @@ -79,11 +91,14 @@ "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.precision_assembler": "Precision Assembler", "block.ragium.purple_dye": "Purple Dye", "block.ragium.pyrolyzer": "Pyrolyzer", "block.ragium.red_dye": "Red Dye", "block.ragium.refinery": "Refinery", + "block.ragium.resin": "Resin", "block.ragium.scanner": "Laser Scanner", "block.ragium.smelter": "Smelter", "block.ragium.sodium_hydroxide_solution": "Sodium Hydroxide Solution", @@ -92,7 +107,10 @@ "block.ragium.sulfur_ore": "Sulfur Ore", "block.ragium.sulfur_trioxide": "Sulfur Trioxide", "block.ragium.sulfuric_acid": "Sulfuric Acid", + "block.ragium.synthetic_resin": "Synthetic Resin", + "block.ragium.tank": "Variable Tank", "block.ragium.void_metal_block": "Block of Void Metal", + "block.ragium.void_tank": "Void Tank", "block.ragium.white_dye": "White Dye", "block.ragium.wood_tar": "Wood Tar", "block.ragium.yellow_dye": "Yellow Dye", @@ -106,15 +124,19 @@ "constants.ragium.none": "None", "constants.ragium.true": "True", "datapack.ragium.work_in_progress": "Enables work in progress contents", + "death.attack.chemicalBurn": "%1$s was injured chemical burn", + "death.attack.chemicalBurn.player": "%1$s was injured chemical burn while fighting %2$s", "direction.ragium.down": "Down", "direction.ragium.east": "East", "direction.ragium.north": "North", "direction.ragium.south": "South", "direction.ragium.up": "Up", "direction.ragium.west": "West", + "effect.ragium.chemical_burn": "Chemical Burn", "effect.ragium.frostbite": "Frostbite", "error.ragium.invalid_packet.c2s": "Invalid packet received from client side: %1$s", "error.ragium.invalid_packet.s2c": "Invalid packet received from server side: %1$s", + "gui.ragium.biome": "Biome: %1$s", "gui.ragium.capacity": "Capacity: %1$s", "gui.ragium.capacity.fe": "Capacity: %1$s FE", "gui.ragium.capacity.mb": "Capacity: %1$s mB", @@ -127,31 +149,52 @@ "gui.ragium.stored.fe": "%1$s FE", "gui.ragium.stored.mb": "%1$s: %2$s mB", "gui.ragium.tick": "%1$s ticks", + "item.minecraft.lingering_potion.effect.blindness": "Lingering Potion of Blindness", + "item.minecraft.lingering_potion.effect.chemical_burn": "Lingering Potion of Chemical Burn", "item.minecraft.lingering_potion.effect.darkness": "Lingering Potion of Darkness", "item.minecraft.lingering_potion.effect.enchanted_golden_apple": "Lingering Potion of Enchanted Golden Apple", "item.minecraft.lingering_potion.effect.frostbite": "Lingering Potion of Frostbite", "item.minecraft.lingering_potion.effect.golden_apple": "Lingering Potion of Golden Apple", "item.minecraft.lingering_potion.effect.hunger": "Lingering Potion of Hunger", + "item.minecraft.lingering_potion.effect.nausea": "Lingering Potion of Nausea", + "item.minecraft.lingering_potion.effect.wither": "Lingering Potion of Wither", + "item.minecraft.potion.effect.blindness": "Potion of Blindness", + "item.minecraft.potion.effect.chemical_burn": "Potion of Chemical Burn", "item.minecraft.potion.effect.darkness": "Potion of Darkness", "item.minecraft.potion.effect.enchanted_golden_apple": "Potion of Enchanted Golden Apple", "item.minecraft.potion.effect.frostbite": "Potion of Frostbite", "item.minecraft.potion.effect.golden_apple": "Potion of Golden Apple", "item.minecraft.potion.effect.hunger": "Potion of Hunger", + "item.minecraft.potion.effect.nausea": "Potion of Nausea", + "item.minecraft.potion.effect.wither": "Potion of Wither", + "item.minecraft.splash_potion.effect.blindness": "Splash Potion of Blindness", + "item.minecraft.splash_potion.effect.chemical_burn": "Splash Potion of Chemical Burn", "item.minecraft.splash_potion.effect.darkness": "Splash Potion of Darkness", "item.minecraft.splash_potion.effect.enchanted_golden_apple": "Splash Potion of Enchanted Golden Apple", "item.minecraft.splash_potion.effect.frostbite": "Splash Potion of Frostbite", "item.minecraft.splash_potion.effect.golden_apple": "Splash Potion of Golden Apple", "item.minecraft.splash_potion.effect.hunger": "Splash Potion of Hunger", + "item.minecraft.splash_potion.effect.nausea": "Splash Potion of Nausea", + "item.minecraft.splash_potion.effect.wither": "Splash Potion of Wither", + "item.minecraft.tipped_arrow.effect.blindness": "Arrow of Blindness", + "item.minecraft.tipped_arrow.effect.chemical_burn": "Arrow of Chemical Burn", "item.minecraft.tipped_arrow.effect.darkness": "Arrow of Darkness", "item.minecraft.tipped_arrow.effect.enchanted_golden_apple": "Arrow of Enchanted Golden Apple", "item.minecraft.tipped_arrow.effect.frostbite": "Arrow of Frostbite", "item.minecraft.tipped_arrow.effect.golden_apple": "Arrow of Golden Apple", "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.alumina_dust": "Alumina Dust", + "item.ragium.alumina_solution_bucket": "Alumina Solution Bucket", + "item.ragium.aluminum_ingot": "Aluminum Ingot", + "item.ragium.aluminum_nugget": "Aluminum Nugget", "item.ragium.amethyst_dust": "Amethyst Dust", "item.ragium.anti_rust_oil_bucket": "Anti-rust Oil Bucket", "item.ragium.arcane_machine_parts": "Machine Parts (Arcane)", "item.ragium.aromatic_compound_bucket": "Aromatic Compound Bucket", "item.ragium.bamboo_charcoal": "Bamboo Charcoal", + "item.ragium.bauxite_dust": "Bauxite Dust", "item.ragium.beeswax": "Beeswax", "item.ragium.bio_machine_parts": "Machine Parts (Bio)", "item.ragium.black_dye_bucket": "Black Dye Bucket", @@ -161,24 +204,32 @@ "item.ragium.blue_dye_bucket": "Blue Dye Bucket", "item.ragium.borax_dust": "Borax Dust", "item.ragium.brown_dye_bucket": "Brown Dye Bucket", + "item.ragium.carbon_dust": "Carbon Dust", "item.ragium.charcoal_dust": "Charcoal Dust", "item.ragium.chemical_machine_parts": "Machine Parts (Chemical)", - "item.ragium.chloride_bucket": "Chlorine Bucket", + "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_coke_dust": "Coal Coke Dust", "item.ragium.coal_dust": "Coal Dust", "item.ragium.coal_tar_bucket": "Coal Tar Bucket", "item.ragium.copper_dust": "Copper Dust", "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", "item.ragium.echo_dust": "Echo Dust", "item.ragium.elder_heart": "Elder Heart", + "item.ragium.electric_circuit": "Electric Circuit", "item.ragium.electronics_machine_parts": "Machine Parts (Electronics)", "item.ragium.emerald_dust": "Emerald Dust", "item.ragium.emerald_gear": "Emerald Gear", + "item.ragium.fluorite": "Fluorite", + "item.ragium.fluorite_dust": "Fluorite Dust", "item.ragium.fuel_bucket": "Fuel Bucket", "item.ragium.glass_dust": "Glass Dust", "item.ragium.gold_dust": "Gold Dust", @@ -188,8 +239,10 @@ "item.ragium.heat_machine_parts": "Machine Parts (Heat)", "item.ragium.honey_bucket": "Honey Bucket", "item.ragium.hydrochloric_acid_bucket": "Hydrochloric Acid Bucket", + "item.ragium.hydrofluoric_acid_bucket": "Hydrofluoric Acid Bucket", "item.ragium.hydrogen_bucket": "Hydrogen Bucket", "item.ragium.hydrogen_chloride_bucket": "Hydrogen Chloride Bucket", + "item.ragium.hydrogen_fluoride_bucket": "Hydrogen Fluoride Bucket", "item.ragium.iron_dust": "Iron Dust", "item.ragium.iron_gear": "Iron Gear", "item.ragium.lapis_dust": "Lapis Dust", @@ -227,7 +280,10 @@ "item.ragium.quartz_dust": "Quartz 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.silicon_dust": "Silicon Dust", + "item.ragium.silicon_wafer": "Silicon Wafer", "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", @@ -244,10 +300,12 @@ "item.ragium.synthetic_feather": "Synthetic Feather", "item.ragium.synthetic_fiber": "Synthetic Fiber", "item.ragium.synthetic_leather": "Synthetic Leather", + "item.ragium.synthetic_resin_bucket": "Synthetic Resin Bucket", "item.ragium.tar": "Tar", "item.ragium.tiny_charcoal": "Tiny Charcoal", "item.ragium.tiny_coal": "Tiny Coal", "item.ragium.tiny_coal_coke": "Tiny Coal Coke", + "item.ragium.tiny_pitch_coke": "Tiny Pitch Coke", "item.ragium.void_metal_ingot": "Void Metal Ingot", "item.ragium.void_metal_nugget": "Void Metal Nugget", "item.ragium.white_dye_bucket": "White Dye Bucket", @@ -257,9 +315,10 @@ "item.ragium.wood_gear": "Wood Gear", "item.ragium.wood_tar_bucket": "Wood Tar Bucket", "item.ragium.yellow_dye_bucket": "Yellow Dye Bucket", - "ore_slurry_data.ragium.copper": "Copper Ore Slurry", - "ore_slurry_data.ragium.gold": "Gold Ore Slurry", - "ore_slurry_data.ragium.iron": "Iron Ore Slurry", + "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", "recipe_type.ragium.alloying": "Alloying", "recipe_type.ragium.assembling": "Assembling", "recipe_type.ragium.bathing": "Chemical Bathing", @@ -278,10 +337,12 @@ "recipe_type.ragium.pyrolyzing": "Pyrolyzing", "recipe_type.ragium.reacting": "Chemical Reacting", "recipe_type.ragium.refining": "Refining", + "recipe_type.ragium.resource.extracting": "Resource Extracting", + "tag.fluid.c.alumina_solution": "Alumina Solution", "tag.fluid.c.anti_rust_oil": "Anti-rust Oil", "tag.fluid.c.aromatic_compound": "Aromatic Compound", "tag.fluid.c.bleach": "Bleach", - "tag.fluid.c.chloride": "Chlorine", + "tag.fluid.c.chlorine": "Chlorine", "tag.fluid.c.coal_tar": "Coal Tar", "tag.fluid.c.crude_oil": "Crude Oil", "tag.fluid.c.dyes.black": "Black Dye", @@ -303,8 +364,10 @@ "tag.fluid.c.fuel": "Fuel", "tag.fluid.c.honey": "Honey", "tag.fluid.c.hydrochloric_acid": "Hydrochloric Acid", + "tag.fluid.c.hydrofluoric_acid": "Hydrofluoric Acid", "tag.fluid.c.hydrogen": "Hydrogen", "tag.fluid.c.hydrogen_chloride": "Hydrogen Chloride", + "tag.fluid.c.hydrogen_fluoride": "Hydrogen Fluoride", "tag.fluid.c.liquid_explosive": "Liquid Explosive", "tag.fluid.c.molten_ender": "Resonant Ender", "tag.fluid.c.molten_glass": "Molten Glass", @@ -314,15 +377,18 @@ "tag.fluid.c.nitric_acid": "Nitric Acid", "tag.fluid.c.ominous_flux": "Ominous Flux", "tag.fluid.c.oxygen": "Oxygen", + "tag.fluid.c.resin": "Resin", "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.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", "tag.item.c.buckets.bleach": "Bleach Bucket", - "tag.item.c.buckets.chloride": "Chlorine Bucket", + "tag.item.c.buckets.chlorine": "Chlorine Bucket", "tag.item.c.buckets.coal_tar": "Coal Tar Bucket", "tag.item.c.buckets.crude_oil": "Crude Oil Bucket", "tag.item.c.buckets.dye.black": "Black Dye Bucket", @@ -344,8 +410,10 @@ "tag.item.c.buckets.fuel": "Fuel Bucket", "tag.item.c.buckets.honey": "Honey Bucket", "tag.item.c.buckets.hydrochloric_acid": "Hydrochloric Acid Bucket", + "tag.item.c.buckets.hydrofluoric_acid": "Hydrofluoric Acid Bucket", "tag.item.c.buckets.hydrogen": "Hydrogen Bucket", "tag.item.c.buckets.hydrogen_chloride": "Hydrogen Chloride Bucket", + "tag.item.c.buckets.hydrogen_fluoride": "Hydrogen Fluoride Bucket", "tag.item.c.buckets.liquid_explosive": "Liquid Explosive Bucket", "tag.item.c.buckets.molten_ender": "Resonant Ender Bucket", "tag.item.c.buckets.molten_glass": "Molten Glass Bucket", @@ -355,10 +423,12 @@ "tag.item.c.buckets.nitric_acid": "Nitric Acid 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.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", "tag.item.c.buckets.sulfuric_acid": "Sulfuric Acid Bucket", + "tag.item.c.buckets.synthetic_resin": "Synthetic Resin Bucket", "tag.item.c.buckets.wood_tar": "Wood Tar Bucket", "tooltip.ragium.intrinsic_enchantment": "Always has at least %1$s", "tooltip.ragium.memory_disc_data": "Scanned Item: %1$s", diff --git a/src/generated/resources/assets/ragium/lang/ja_jp.json b/src/generated/resources/assets/ragium/lang/ja_jp.json index 5a3d699f30..fae291e3f8 100644 --- a/src/generated/resources/assets/ragium/lang/ja_jp.json +++ b/src/generated/resources/assets/ragium/lang/ja_jp.json @@ -18,6 +18,8 @@ "advancement.ragium.sooty_iron.desc": "煤鉄をつくる", "advancement.ragium.sooty_iron.title": "黒鉄(くろがね)を手に入れる", "block.ragium.alloy_smelter": "合金炉", + "block.ragium.alumina_solution": "アルミナ水溶液", + "block.ragium.aluminum_block": "アルミニウムブロック", "block.ragium.anti_rust_oil": "防錆油", "block.ragium.arcane_machine_casing": "機械筐体 (神秘)", "block.ragium.aromatic_compound": "芳香族化合物", @@ -33,13 +35,17 @@ "block.ragium.chemical_bath": "化学浴槽", "block.ragium.chemical_machine_casing": "機械筐体 (化学)", "block.ragium.chemical_reactor": "化学反応槽", - "block.ragium.chloride": "塩素", + "block.ragium.chlorine": "塩素", "block.ragium.coal_coke_block": "石炭コークスブロック", "block.ragium.coal_tar": "石炭タール", "block.ragium.compressor": "圧縮機", "block.ragium.creative_battery": "クリエイティブ用バッテリー", + "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": "深層硝石鉱石", @@ -47,6 +53,10 @@ "block.ragium.echo_block": "残響ブロック", "block.ragium.electrolyzer": "電解機", "block.ragium.electronics_machine_casing": "機械筐体 (電子)", + "block.ragium.enchanter": "エンチャンター", + "block.ragium.fluorite_block": "蛍石ブロック", + "block.ragium.fluorite_slab": "蛍石のハーフブロック", + "block.ragium.fluorite_stairs": "蛍石の階段", "block.ragium.freezer": "冷凍機", "block.ragium.fuel": "燃料油", "block.ragium.gray_dye": "灰色の染料", @@ -54,8 +64,10 @@ "block.ragium.heat_machine_casing": "機械筐体 (熱)", "block.ragium.honey": "ハチミツ", "block.ragium.hydrochloric_acid": "塩酸", + "block.ragium.hydrofluoric_acid": "フッ化水素酸", "block.ragium.hydrogen": "水素", "block.ragium.hydrogen_chloride": "塩化水素", + "block.ragium.hydrogen_fluoride": "フッ化水素", "block.ragium.light_blue_dye": "空色の染料", "block.ragium.light_gray_dye": "薄灰色の染料", "block.ragium.lime_dye": "黄緑色の染料", @@ -79,11 +91,14 @@ "block.ragium.ore_slurry": "無効な鉱石泥", "block.ragium.oxygen": "酸素", "block.ragium.pink_dye": "桃色の染料", + "block.ragium.pitch_coke_block": "ピッチコークスブロック", "block.ragium.planter": "栽培機", + "block.ragium.precision_assembler": "精密組立機", "block.ragium.purple_dye": "紫色の染料", "block.ragium.pyrolyzer": "熱分解炉", "block.ragium.red_dye": "赤色の染料", "block.ragium.refinery": "精製機", + "block.ragium.resin": "樹脂", "block.ragium.scanner": "レーザースキャナ", "block.ragium.smelter": "製錬炉", "block.ragium.sodium_hydroxide_solution": "水酸化ナトリウム水溶液", @@ -92,7 +107,10 @@ "block.ragium.sulfur_ore": "硫黄鉱石", "block.ragium.sulfur_trioxide": "三酸化硫黄", "block.ragium.sulfuric_acid": "硫酸", + "block.ragium.synthetic_resin": "合成樹脂", + "block.ragium.tank": "可変タンク", "block.ragium.void_metal_block": "虚金ブロック", + "block.ragium.void_tank": "廃棄タンク", "block.ragium.white_dye": "白色の染料", "block.ragium.wood_tar": "木タール", "block.ragium.yellow_dye": "黄色の染料", @@ -106,15 +124,19 @@ "constants.ragium.none": "なし", "constants.ragium.true": "True", "datapack.ragium.work_in_progress": "開発中の要素を有効にします", + "death.attack.chemicalBurn": "%1$sは化学火傷を負った", + "death.attack.chemicalBurn.player": "%1$sは%2$sと戦いながら化学火傷を負った", "direction.ragium.down": "下", "direction.ragium.east": "東", "direction.ragium.north": "北", "direction.ragium.south": "南", "direction.ragium.up": "上", "direction.ragium.west": "西", + "effect.ragium.chemical_burn": "化学火傷", "effect.ragium.frostbite": "凍傷", "error.ragium.invalid_packet.c2s": "クライアント側からの不正なパケットを受信しました: %1$s", "error.ragium.invalid_packet.s2c": "サーバー側からの不正なパケットを受信しました: %1$s", + "gui.ragium.biome": "バイオーム: %1$s", "gui.ragium.capacity": "Capacity: %1$s", "gui.ragium.capacity.fe": "Capacity: %1$s FE", "gui.ragium.capacity.mb": "Capacity: %1$s mB", @@ -127,31 +149,52 @@ "gui.ragium.stored.fe": "%1$s FE", "gui.ragium.stored.mb": "%1$s: %2$s mB", "gui.ragium.tick": "%1$s ticks", + "item.minecraft.lingering_potion.effect.blindness": "盲目の残留ポーション", + "item.minecraft.lingering_potion.effect.chemical_burn": "化学火傷の残留ポーション", "item.minecraft.lingering_potion.effect.darkness": "暗闇の残留ポーション", "item.minecraft.lingering_potion.effect.enchanted_golden_apple": "エンチャントされた金リンゴの残留ポーション", "item.minecraft.lingering_potion.effect.frostbite": "凍傷の残留ポーション", "item.minecraft.lingering_potion.effect.golden_apple": "金リンゴの残留ポーション", "item.minecraft.lingering_potion.effect.hunger": "空腹の残留ポーション", + "item.minecraft.lingering_potion.effect.nausea": "吐き気の残留ポーション", + "item.minecraft.lingering_potion.effect.wither": "衰退の残留ポーション", + "item.minecraft.potion.effect.blindness": "盲目のポーション", + "item.minecraft.potion.effect.chemical_burn": "化学火傷のポーション", "item.minecraft.potion.effect.darkness": "暗闇のポーション", "item.minecraft.potion.effect.enchanted_golden_apple": "エンチャントされた金リンゴのポーション", "item.minecraft.potion.effect.frostbite": "凍傷のポーション", "item.minecraft.potion.effect.golden_apple": "金リンゴのポーション", "item.minecraft.potion.effect.hunger": "空腹のポーション", + "item.minecraft.potion.effect.nausea": "吐き気のポーション", + "item.minecraft.potion.effect.wither": "衰退のポーション", + "item.minecraft.splash_potion.effect.blindness": "盲目のスプラッシュポーション", + "item.minecraft.splash_potion.effect.chemical_burn": "化学火傷のスプラッシュポーション", "item.minecraft.splash_potion.effect.darkness": "暗闇のスプラッシュポーション", "item.minecraft.splash_potion.effect.enchanted_golden_apple": "エンチャントされた金リンゴのスプラッシュポーション", "item.minecraft.splash_potion.effect.frostbite": "凍傷のスプラッシュポーション", "item.minecraft.splash_potion.effect.golden_apple": "金リンゴのスプラッシュポーション", "item.minecraft.splash_potion.effect.hunger": "空腹のスプラッシュポーション", + "item.minecraft.splash_potion.effect.nausea": "吐き気のスプラッシュポーション", + "item.minecraft.splash_potion.effect.wither": "衰退のスプラッシュポーション", + "item.minecraft.tipped_arrow.effect.blindness": "盲目の矢", + "item.minecraft.tipped_arrow.effect.chemical_burn": "化学火傷の矢", "item.minecraft.tipped_arrow.effect.darkness": "暗闇の矢", "item.minecraft.tipped_arrow.effect.enchanted_golden_apple": "エンチャントされた金リンゴの矢", "item.minecraft.tipped_arrow.effect.frostbite": "凍傷の矢", "item.minecraft.tipped_arrow.effect.golden_apple": "金リンゴの矢", "item.minecraft.tipped_arrow.effect.hunger": "空腹の矢", + "item.minecraft.tipped_arrow.effect.nausea": "吐き気の矢", + "item.minecraft.tipped_arrow.effect.wither": "衰退の矢", + "item.ragium.alumina_dust": "アルミナの粉", + "item.ragium.alumina_solution_bucket": "アルミナ水溶液入りバケツ", + "item.ragium.aluminum_ingot": "アルミニウムインゴット", + "item.ragium.aluminum_nugget": "アルミニウムナゲット", "item.ragium.amethyst_dust": "アメジストの粉", "item.ragium.anti_rust_oil_bucket": "防錆油入りバケツ", "item.ragium.arcane_machine_parts": "機械部品 (神秘)", "item.ragium.aromatic_compound_bucket": "芳香族化合物入りバケツ", "item.ragium.bamboo_charcoal": "竹炭", + "item.ragium.bauxite_dust": "ボーキサイトの粉", "item.ragium.beeswax": "密猟", "item.ragium.bio_machine_parts": "機械部品 (生体)", "item.ragium.black_dye_bucket": "黒色の染料入りバケツ", @@ -161,24 +204,32 @@ "item.ragium.blue_dye_bucket": "青色の染料入りバケツ", "item.ragium.borax_dust": "ホウ砂の粉", "item.ragium.brown_dye_bucket": "茶色の染料入りバケツ", + "item.ragium.carbon_dust": "炭素の粉", "item.ragium.charcoal_dust": "木炭の粉", "item.ragium.chemical_machine_parts": "機械部品 (化学)", - "item.ragium.chloride_bucket": "塩素入りバケツ", + "item.ragium.chlorine_bucket": "塩素入りバケツ", + "item.ragium.circuit_board": "回路基板", + "item.ragium.circuit_chip": "回路チップ", "item.ragium.coal_coke": "石炭コークス", - "item.ragium.coal_coke_dust": "石炭コークスの粉", "item.ragium.coal_dust": "石炭の粉", "item.ragium.coal_tar_bucket": "石炭タール入りバケツ", "item.ragium.copper_dust": "銅の粉", "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": "ダイヤモンドの歯車", "item.ragium.echo_dust": "残響の粉", "item.ragium.elder_heart": "エルダーの心臓", + "item.ragium.electric_circuit": "電子回路", "item.ragium.electronics_machine_parts": "機械部品 (電子)", "item.ragium.emerald_dust": "エメラルドの粉", "item.ragium.emerald_gear": "エメラルドの歯車", + "item.ragium.fluorite": "蛍石", + "item.ragium.fluorite_dust": "蛍石の粉", "item.ragium.fuel_bucket": "燃料油入りバケツ", "item.ragium.glass_dust": "ガラスの粉", "item.ragium.gold_dust": "金の粉", @@ -188,8 +239,10 @@ "item.ragium.heat_machine_parts": "機械部品 (熱)", "item.ragium.honey_bucket": "ハチミツ入りバケツ", "item.ragium.hydrochloric_acid_bucket": "塩酸入りバケツ", + "item.ragium.hydrofluoric_acid_bucket": "フッ化水素酸入りバケツ", "item.ragium.hydrogen_bucket": "水素入りバケツ", "item.ragium.hydrogen_chloride_bucket": "塩化水素入りバケツ", + "item.ragium.hydrogen_fluoride_bucket": "フッ化水素入りバケツ", "item.ragium.iron_dust": "鉄の粉", "item.ragium.iron_gear": "鉄の歯車", "item.ragium.lapis_dust": "ラピスの粉", @@ -227,7 +280,10 @@ "item.ragium.quartz_dust": "水晶の粉", "item.ragium.raginite_dust": "ラギナイトの粉", "item.ragium.red_dye_bucket": "赤色の染料入りバケツ", + "item.ragium.resin_bucket": "樹脂入りバケツ", "item.ragium.salt_dust": "食塩の粉", + "item.ragium.silicon_dust": "シリコンの粉", + "item.ragium.silicon_wafer": "シリコンウェハ", "item.ragium.sodium_hydroxide_solution_bucket": "水酸化ナトリウム水溶液入りバケツ", "item.ragium.sooty_iron_axe": "煤鉄の斧", "item.ragium.sooty_iron_hoe": "煤鉄のクワ", @@ -244,10 +300,12 @@ "item.ragium.synthetic_feather": "合成羽", "item.ragium.synthetic_fiber": "合成繊維", "item.ragium.synthetic_leather": "合成牛皮", + "item.ragium.synthetic_resin_bucket": "合成樹脂入りバケツ", "item.ragium.tar": "タール", "item.ragium.tiny_charcoal": "小さな木炭", "item.ragium.tiny_coal": "小さな石炭", "item.ragium.tiny_coal_coke": "小さな石炭コークス", + "item.ragium.tiny_pitch_coke": "小さなピッチコークス", "item.ragium.void_metal_ingot": "虚金インゴット", "item.ragium.void_metal_nugget": "虚金ナゲット", "item.ragium.white_dye_bucket": "白色の染料入りバケツ", @@ -257,9 +315,10 @@ "item.ragium.wood_gear": "木の歯車", "item.ragium.wood_tar_bucket": "木タール入りバケツ", "item.ragium.yellow_dye_bucket": "黄色の染料入りバケツ", - "ore_slurry_data.ragium.copper": "銅の鉱石泥", - "ore_slurry_data.ragium.gold": "金の鉱石泥", - "ore_slurry_data.ragium.iron": "鉄の鉱石泥", + "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": "古代の鉱石泥", "recipe_type.ragium.alloying": "合金", "recipe_type.ragium.assembling": "組立", "recipe_type.ragium.bathing": "化学洗浄", @@ -278,10 +337,12 @@ "recipe_type.ragium.pyrolyzing": "熱分解", "recipe_type.ragium.reacting": "化学反応", "recipe_type.ragium.refining": "蒸留", + "recipe_type.ragium.resource.extracting": "資源採集", + "tag.fluid.c.alumina_solution": "アルミナ水溶液", "tag.fluid.c.anti_rust_oil": "防錆油", "tag.fluid.c.aromatic_compound": "芳香族化合物", "tag.fluid.c.bleach": "漂白剤", - "tag.fluid.c.chloride": "塩素", + "tag.fluid.c.chlorine": "塩素", "tag.fluid.c.coal_tar": "石炭タール", "tag.fluid.c.crude_oil": "原油", "tag.fluid.c.dyes.black": "黒色の染料", @@ -303,8 +364,10 @@ "tag.fluid.c.fuel": "燃料油", "tag.fluid.c.honey": "ハチミツ", "tag.fluid.c.hydrochloric_acid": "塩酸", + "tag.fluid.c.hydrofluoric_acid": "フッ化水素酸", "tag.fluid.c.hydrogen": "水素", "tag.fluid.c.hydrogen_chloride": "塩化水素", + "tag.fluid.c.hydrogen_fluoride": "フッ化水素", "tag.fluid.c.liquid_explosive": "液体爆薬", "tag.fluid.c.molten_ender": "共振エンダー", "tag.fluid.c.molten_glass": "溶融ガラス", @@ -314,15 +377,18 @@ "tag.fluid.c.nitric_acid": "硝酸", "tag.fluid.c.ominous_flux": "不吉な流動体", "tag.fluid.c.oxygen": "酸素", + "tag.fluid.c.resin": "樹脂", "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.alumina_solution": "アルミナ水溶液入りバケツ", "tag.item.c.buckets.anti_rust_oil": "防錆油入りバケツ", "tag.item.c.buckets.aromatic_compound": "芳香族化合物入りバケツ", "tag.item.c.buckets.bleach": "漂白剤入りバケツ", - "tag.item.c.buckets.chloride": "塩素入りバケツ", + "tag.item.c.buckets.chlorine": "塩素入りバケツ", "tag.item.c.buckets.coal_tar": "石炭タール入りバケツ", "tag.item.c.buckets.crude_oil": "原油入りバケツ", "tag.item.c.buckets.dye.black": "黒色の染料入りバケツ", @@ -344,8 +410,10 @@ "tag.item.c.buckets.fuel": "燃料油入りバケツ", "tag.item.c.buckets.honey": "ハチミツ入りバケツ", "tag.item.c.buckets.hydrochloric_acid": "塩酸入りバケツ", + "tag.item.c.buckets.hydrofluoric_acid": "フッ化水素酸入りバケツ", "tag.item.c.buckets.hydrogen": "水素入りバケツ", "tag.item.c.buckets.hydrogen_chloride": "塩化水素入りバケツ", + "tag.item.c.buckets.hydrogen_fluoride": "フッ化水素入りバケツ", "tag.item.c.buckets.liquid_explosive": "液体爆薬入りバケツ", "tag.item.c.buckets.molten_ender": "共振エンダー入りバケツ", "tag.item.c.buckets.molten_glass": "溶融ガラス入りバケツ", @@ -355,10 +423,12 @@ "tag.item.c.buckets.nitric_acid": "硝酸入りバケツ", "tag.item.c.buckets.ominous_flux": "不吉な流動体入りバケツ", "tag.item.c.buckets.oxygen": "酸素入りバケツ", + "tag.item.c.buckets.resin": "樹脂入りバケツ", "tag.item.c.buckets.sodium_hydroxide_solution": "水酸化ナトリウム水溶液入りバケツ", "tag.item.c.buckets.sulfur_dioxide": "二酸化硫黄入りバケツ", "tag.item.c.buckets.sulfur_trioxide": "三酸化硫黄入りバケツ", "tag.item.c.buckets.sulfuric_acid": "硫酸入りバケツ", + "tag.item.c.buckets.synthetic_resin": "合成樹脂入りバケツ", "tag.item.c.buckets.wood_tar": "木タール入りバケツ", "tooltip.ragium.intrinsic_enchantment": "常に少なくとも%1$sがあります", "tooltip.ragium.memory_disc_data": "スキャン済み: %1$s", diff --git a/src/generated/resources/assets/ragium/models/block/aluminum_block.json b/src/generated/resources/assets/ragium/models/block/aluminum_block.json new file mode 100644 index 0000000000..65dd5a92ed --- /dev/null +++ b/src/generated/resources/assets/ragium/models/block/aluminum_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "ragium:block/aluminum_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/models/block/creative_tank.json b/src/generated/resources/assets/ragium/models/block/creative_tank.json new file mode 100644 index 0000000000..d3a653bc34 --- /dev/null +++ b/src/generated/resources/assets/ragium/models/block/creative_tank.json @@ -0,0 +1,7 @@ +{ + "parent": "ragium:block/tank_template", + "textures": { + "side": "ragium:block/creative_tank_side", + "top": "ragium:block/creative_tank_top" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/models/block/cryolite_block.json b/src/generated/resources/assets/ragium/models/block/cryolite_block.json new file mode 100644 index 0000000000..358c7a98f8 --- /dev/null +++ b/src/generated/resources/assets/ragium/models/block/cryolite_block.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000000..483227ad38 --- /dev/null +++ b/src/generated/resources/assets/ragium/models/block/cryolite_slab.json @@ -0,0 +1,8 @@ +{ + "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 new file mode 100644 index 0000000000..eb934758e1 --- /dev/null +++ b/src/generated/resources/assets/ragium/models/block/cryolite_slab_top.json @@ -0,0 +1,8 @@ +{ + "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 new file mode 100644 index 0000000000..9e104411c7 --- /dev/null +++ b/src/generated/resources/assets/ragium/models/block/cryolite_stairs.json @@ -0,0 +1,8 @@ +{ + "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 new file mode 100644 index 0000000000..71fab6dd07 --- /dev/null +++ b/src/generated/resources/assets/ragium/models/block/cryolite_stairs_inner.json @@ -0,0 +1,8 @@ +{ + "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 new file mode 100644 index 0000000000..c0925acb40 --- /dev/null +++ b/src/generated/resources/assets/ragium/models/block/cryolite_stairs_outer.json @@ -0,0 +1,8 @@ +{ + "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/enchanter.json b/src/generated/resources/assets/ragium/models/block/enchanter.json new file mode 100644 index 0000000000..6024281fa3 --- /dev/null +++ b/src/generated/resources/assets/ragium/models/block/enchanter.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/orientable", + "textures": { + "front": "ragium:block/enchanter_front", + "side": "ragium:block/machine/arcane_side", + "top": "ragium:block/machine_casing" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/models/block/fluorite_block.json b/src/generated/resources/assets/ragium/models/block/fluorite_block.json new file mode 100644 index 0000000000..3a7fb8c383 --- /dev/null +++ b/src/generated/resources/assets/ragium/models/block/fluorite_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "ragium:block/fluorite_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/models/block/fluorite_slab.json b/src/generated/resources/assets/ragium/models/block/fluorite_slab.json new file mode 100644 index 0000000000..86e30ea228 --- /dev/null +++ b/src/generated/resources/assets/ragium/models/block/fluorite_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "ragium:block/fluorite_block", + "side": "ragium:block/fluorite_block", + "top": "ragium:block/fluorite_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/models/block/fluorite_slab_top.json b/src/generated/resources/assets/ragium/models/block/fluorite_slab_top.json new file mode 100644 index 0000000000..ecb894d0c0 --- /dev/null +++ b/src/generated/resources/assets/ragium/models/block/fluorite_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "ragium:block/fluorite_block", + "side": "ragium:block/fluorite_block", + "top": "ragium:block/fluorite_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/models/block/fluorite_stairs.json b/src/generated/resources/assets/ragium/models/block/fluorite_stairs.json new file mode 100644 index 0000000000..d51eab00de --- /dev/null +++ b/src/generated/resources/assets/ragium/models/block/fluorite_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "ragium:block/fluorite_block", + "side": "ragium:block/fluorite_block", + "top": "ragium:block/fluorite_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/models/block/fluorite_stairs_inner.json b/src/generated/resources/assets/ragium/models/block/fluorite_stairs_inner.json new file mode 100644 index 0000000000..f17b547497 --- /dev/null +++ b/src/generated/resources/assets/ragium/models/block/fluorite_stairs_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "ragium:block/fluorite_block", + "side": "ragium:block/fluorite_block", + "top": "ragium:block/fluorite_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/models/block/fluorite_stairs_outer.json b/src/generated/resources/assets/ragium/models/block/fluorite_stairs_outer.json new file mode 100644 index 0000000000..5c4717135d --- /dev/null +++ b/src/generated/resources/assets/ragium/models/block/fluorite_stairs_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "ragium:block/fluorite_block", + "side": "ragium:block/fluorite_block", + "top": "ragium:block/fluorite_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/models/block/hydrofluoric_acid.json b/src/generated/resources/assets/ragium/models/block/hydrofluoric_acid.json new file mode 100644 index 0000000000..67032282f0 --- /dev/null +++ b/src/generated/resources/assets/ragium/models/block/hydrofluoric_acid.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/block/pitch_coke_block.json b/src/generated/resources/assets/ragium/models/block/pitch_coke_block.json new file mode 100644 index 0000000000..a020572b93 --- /dev/null +++ b/src/generated/resources/assets/ragium/models/block/pitch_coke_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "ragium:block/pitch_coke_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/models/block/precision_assembler.json b/src/generated/resources/assets/ragium/models/block/precision_assembler.json new file mode 100644 index 0000000000..e692df1f05 --- /dev/null +++ b/src/generated/resources/assets/ragium/models/block/precision_assembler.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/orientable", + "textures": { + "front": "ragium:block/precision_assembler_front", + "side": "ragium:block/machine/electronics_side", + "top": "ragium:block/machine_casing" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/models/block/resin.json b/src/generated/resources/assets/ragium/models/block/resin.json new file mode 100644 index 0000000000..67032282f0 --- /dev/null +++ b/src/generated/resources/assets/ragium/models/block/resin.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/block/tank.json b/src/generated/resources/assets/ragium/models/block/tank.json new file mode 100644 index 0000000000..923e27cb49 --- /dev/null +++ b/src/generated/resources/assets/ragium/models/block/tank.json @@ -0,0 +1,7 @@ +{ + "parent": "ragium:block/tank_template", + "textures": { + "side": "ragium:block/tank_side", + "top": "ragium:block/tank_top" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/models/block/void_tank.json b/src/generated/resources/assets/ragium/models/block/void_tank.json new file mode 100644 index 0000000000..7a794998b1 --- /dev/null +++ b/src/generated/resources/assets/ragium/models/block/void_tank.json @@ -0,0 +1,7 @@ +{ + "parent": "ragium:block/tank_template", + "textures": { + "side": "ragium:block/void_tank_side", + "top": "ragium:block/void_tank_top" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/models/item/coal_coke_dust.json b/src/generated/resources/assets/ragium/models/item/alumina_dust.json similarity index 59% rename from src/generated/resources/assets/ragium/models/item/coal_coke_dust.json rename to src/generated/resources/assets/ragium/models/item/alumina_dust.json index b69784e443..6a44d7b20f 100644 --- a/src/generated/resources/assets/ragium/models/item/coal_coke_dust.json +++ b/src/generated/resources/assets/ragium/models/item/alumina_dust.json @@ -1,6 +1,6 @@ { "parent": "minecraft:item/generated", "textures": { - "layer0": "ragium:item/coal_coke_dust" + "layer0": "ragium:item/alumina_dust" } } \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/models/item/aluminum_ingot.json b/src/generated/resources/assets/ragium/models/item/aluminum_ingot.json new file mode 100644 index 0000000000..21d26ee4e6 --- /dev/null +++ b/src/generated/resources/assets/ragium/models/item/aluminum_ingot.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "ragium:item/aluminum_ingot" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/models/item/aluminum_nugget.json b/src/generated/resources/assets/ragium/models/item/aluminum_nugget.json new file mode 100644 index 0000000000..66c1b59b56 --- /dev/null +++ b/src/generated/resources/assets/ragium/models/item/aluminum_nugget.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "ragium:item/aluminum_nugget" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/models/item/bauxite_dust.json b/src/generated/resources/assets/ragium/models/item/bauxite_dust.json new file mode 100644 index 0000000000..64173028d9 --- /dev/null +++ b/src/generated/resources/assets/ragium/models/item/bauxite_dust.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "ragium:item/bauxite_dust" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/models/item/carbon_dust.json b/src/generated/resources/assets/ragium/models/item/carbon_dust.json new file mode 100644 index 0000000000..4f8b0ab027 --- /dev/null +++ b/src/generated/resources/assets/ragium/models/item/carbon_dust.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "ragium:item/carbon_dust" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/models/item/circuit_board.json b/src/generated/resources/assets/ragium/models/item/circuit_board.json new file mode 100644 index 0000000000..7ab696f845 --- /dev/null +++ b/src/generated/resources/assets/ragium/models/item/circuit_board.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "ragium:item/circuit_board" + } +} \ 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/circuit_chip.json new file mode 100644 index 0000000000..8dc75a31d3 --- /dev/null +++ b/src/generated/resources/assets/ragium/models/item/circuit_chip.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "ragium:item/circuit_chip" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/models/item/crude_silicon.json b/src/generated/resources/assets/ragium/models/item/crude_silicon.json new file mode 100644 index 0000000000..68eee0e9a0 --- /dev/null +++ b/src/generated/resources/assets/ragium/models/item/crude_silicon.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "ragium:item/crude_silicon" + } +} \ 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/cryolite.json new file mode 100644 index 0000000000..9d1270c1c8 --- /dev/null +++ b/src/generated/resources/assets/ragium/models/item/cryolite.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "ragium:item/cryolite" + } +} \ 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/cryolite_dust.json new file mode 100644 index 0000000000..7a664a22fa --- /dev/null +++ b/src/generated/resources/assets/ragium/models/item/cryolite_dust.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "ragium:item/cryolite_dust" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/models/item/electric_circuit.json b/src/generated/resources/assets/ragium/models/item/electric_circuit.json new file mode 100644 index 0000000000..86ffd021d6 --- /dev/null +++ b/src/generated/resources/assets/ragium/models/item/electric_circuit.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "ragium:item/electric_circuit" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/models/item/fluorite.json b/src/generated/resources/assets/ragium/models/item/fluorite.json new file mode 100644 index 0000000000..5d244f36fc --- /dev/null +++ b/src/generated/resources/assets/ragium/models/item/fluorite.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "ragium:item/fluorite" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/models/item/fluorite_dust.json b/src/generated/resources/assets/ragium/models/item/fluorite_dust.json new file mode 100644 index 0000000000..0dae92dfea --- /dev/null +++ b/src/generated/resources/assets/ragium/models/item/fluorite_dust.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "ragium:item/fluorite_dust" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/models/item/silicon_dust.json b/src/generated/resources/assets/ragium/models/item/silicon_dust.json new file mode 100644 index 0000000000..92f2484d5e --- /dev/null +++ b/src/generated/resources/assets/ragium/models/item/silicon_dust.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "ragium:item/silicon_dust" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/models/item/silicon_wafer.json b/src/generated/resources/assets/ragium/models/item/silicon_wafer.json new file mode 100644 index 0000000000..92239745f0 --- /dev/null +++ b/src/generated/resources/assets/ragium/models/item/silicon_wafer.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "ragium:item/silicon_wafer" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/models/item/tiny_pitch_coke.json b/src/generated/resources/assets/ragium/models/item/tiny_pitch_coke.json new file mode 100644 index 0000000000..af769ac9a4 --- /dev/null +++ b/src/generated/resources/assets/ragium/models/item/tiny_pitch_coke.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "ragium:item/tiny_pitch_coke" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/block/storage_blocks.json b/src/generated/resources/data/c/tags/block/storage_blocks.json index 24f6feff54..1192c30428 100644 --- a/src/generated/resources/data/c/tags/block/storage_blocks.json +++ b/src/generated/resources/data/c/tags/block/storage_blocks.json @@ -1,9 +1,10 @@ { "values": [ + "#c:storage_blocks/aluminum", "#c:storage_blocks/black_steel", "#c:storage_blocks/charcoal", "#c:storage_blocks/coal_coke", - "#c:storage_blocks/echo", + "#c:storage_blocks/pitch_coke", "#c:storage_blocks/sooty_iron", "#c:storage_blocks/void_metal" ] diff --git a/src/generated/resources/data/c/tags/block/storage_blocks/aluminum.json b/src/generated/resources/data/c/tags/block/storage_blocks/aluminum.json new file mode 100644 index 0000000000..9216099d67 --- /dev/null +++ b/src/generated/resources/data/c/tags/block/storage_blocks/aluminum.json @@ -0,0 +1,5 @@ +{ + "values": [ + "ragium:aluminum_block" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/block/storage_blocks/echo.json b/src/generated/resources/data/c/tags/block/storage_blocks/echo.json deleted file mode 100644 index 9cfec0c902..0000000000 --- a/src/generated/resources/data/c/tags/block/storage_blocks/echo.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "ragium:echo_block" - ] -} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/block/storage_blocks/pitch_coke.json b/src/generated/resources/data/c/tags/block/storage_blocks/pitch_coke.json new file mode 100644 index 0000000000..33f0161c9b --- /dev/null +++ b/src/generated/resources/data/c/tags/block/storage_blocks/pitch_coke.json @@ -0,0 +1,5 @@ +{ + "values": [ + "ragium:pitch_coke_block" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/fluid/alumina_solution.json b/src/generated/resources/data/c/tags/fluid/alumina_solution.json new file mode 100644 index 0000000000..1b17c725a9 --- /dev/null +++ b/src/generated/resources/data/c/tags/fluid/alumina_solution.json @@ -0,0 +1,5 @@ +{ + "values": [ + "ragium:alumina_solution" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/fluid/chloride.json b/src/generated/resources/data/c/tags/fluid/chloride.json deleted file mode 100644 index b89131e365..0000000000 --- a/src/generated/resources/data/c/tags/fluid/chloride.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "ragium:chloride" - ] -} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/fluid/chlorine.json b/src/generated/resources/data/c/tags/fluid/chlorine.json new file mode 100644 index 0000000000..57c5883f8a --- /dev/null +++ b/src/generated/resources/data/c/tags/fluid/chlorine.json @@ -0,0 +1,5 @@ +{ + "values": [ + "ragium:chlorine" + ] +} \ 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 872ca0ab8a..1f94bcb1d7 100644 --- a/src/generated/resources/data/c/tags/fluid/gaseous.json +++ b/src/generated/resources/data/c/tags/fluid/gaseous.json @@ -1,8 +1,9 @@ { "values": [ - "#c:chloride", + "#c:chlorine", "#c:hydrogen", "#c:hydrogen_chloride", + "#c:hydrogen_fluoride", "#c:oxygen", "#c:sulfur_dioxide", "#c:sulfur_trioxide" diff --git a/src/generated/resources/data/c/tags/fluid/hydrofluoric_acid.json b/src/generated/resources/data/c/tags/fluid/hydrofluoric_acid.json new file mode 100644 index 0000000000..40163730e5 --- /dev/null +++ b/src/generated/resources/data/c/tags/fluid/hydrofluoric_acid.json @@ -0,0 +1,6 @@ +{ + "values": [ + "ragium:flowing_hydrofluoric_acid", + "ragium:hydrofluoric_acid" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/fluid/hydrogen_fluoride.json b/src/generated/resources/data/c/tags/fluid/hydrogen_fluoride.json new file mode 100644 index 0000000000..b795ad4e8a --- /dev/null +++ b/src/generated/resources/data/c/tags/fluid/hydrogen_fluoride.json @@ -0,0 +1,5 @@ +{ + "values": [ + "ragium:hydrogen_fluoride" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/fluid/resin.json b/src/generated/resources/data/c/tags/fluid/resin.json new file mode 100644 index 0000000000..d63157725b --- /dev/null +++ b/src/generated/resources/data/c/tags/fluid/resin.json @@ -0,0 +1,6 @@ +{ + "values": [ + "ragium:flowing_resin", + "ragium:resin" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/fluid/synthetic_resin.json b/src/generated/resources/data/c/tags/fluid/synthetic_resin.json new file mode 100644 index 0000000000..e139e19fa0 --- /dev/null +++ b/src/generated/resources/data/c/tags/fluid/synthetic_resin.json @@ -0,0 +1,5 @@ +{ + "values": [ + "ragium:synthetic_resin" + ] +} \ 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 187a939ef9..fc1fe9cb84 100644 --- a/src/generated/resources/data/c/tags/item/buckets.json +++ b/src/generated/resources/data/c/tags/item/buckets.json @@ -1,9 +1,10 @@ { "values": [ + "#c:buckets/alumina_solution", "#c:buckets/anti_rust_oil", "#c:buckets/aromatic_compound", "#c:buckets/bleach", - "#c:buckets/chloride", + "#c:buckets/chlorine", "#c:buckets/coal_tar", "#c:buckets/crude_oil", "#c:buckets/dye/black", @@ -25,8 +26,10 @@ "#c:buckets/fuel", "#c:buckets/honey", "#c:buckets/hydrochloric_acid", + "#c:buckets/hydrofluoric_acid", "#c:buckets/hydrogen", "#c:buckets/hydrogen_chloride", + "#c:buckets/hydrogen_fluoride", "#c:buckets/liquid_explosive", "#c:buckets/molten_ender", "#c:buckets/molten_glass", @@ -38,10 +41,12 @@ "#c:buckets/ore_slurry", "#c:buckets/oxygen", "#c:buckets/potion", + "#c:buckets/resin", "#c:buckets/sodium_hydroxide_solution", "#c:buckets/sulfur_dioxide", "#c:buckets/sulfur_trioxide", "#c:buckets/sulfuric_acid", + "#c:buckets/synthetic_resin", "#c:buckets/wood_tar" ] } \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/buckets/alumina_solution.json b/src/generated/resources/data/c/tags/item/buckets/alumina_solution.json new file mode 100644 index 0000000000..a8b63e5cef --- /dev/null +++ b/src/generated/resources/data/c/tags/item/buckets/alumina_solution.json @@ -0,0 +1,5 @@ +{ + "values": [ + "ragium:alumina_solution_bucket" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/buckets/chloride.json b/src/generated/resources/data/c/tags/item/buckets/chloride.json deleted file mode 100644 index 2f2451201d..0000000000 --- a/src/generated/resources/data/c/tags/item/buckets/chloride.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "ragium:chloride_bucket" - ] -} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/buckets/chlorine.json b/src/generated/resources/data/c/tags/item/buckets/chlorine.json new file mode 100644 index 0000000000..be020bf490 --- /dev/null +++ b/src/generated/resources/data/c/tags/item/buckets/chlorine.json @@ -0,0 +1,5 @@ +{ + "values": [ + "ragium:chlorine_bucket" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/buckets/hydrofluoric_acid.json b/src/generated/resources/data/c/tags/item/buckets/hydrofluoric_acid.json new file mode 100644 index 0000000000..d7d98275a2 --- /dev/null +++ b/src/generated/resources/data/c/tags/item/buckets/hydrofluoric_acid.json @@ -0,0 +1,5 @@ +{ + "values": [ + "ragium:hydrofluoric_acid_bucket" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/buckets/hydrogen_fluoride.json b/src/generated/resources/data/c/tags/item/buckets/hydrogen_fluoride.json new file mode 100644 index 0000000000..684fb9327d --- /dev/null +++ b/src/generated/resources/data/c/tags/item/buckets/hydrogen_fluoride.json @@ -0,0 +1,5 @@ +{ + "values": [ + "ragium:hydrogen_fluoride_bucket" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/buckets/resin.json b/src/generated/resources/data/c/tags/item/buckets/resin.json new file mode 100644 index 0000000000..5a0ed5f05e --- /dev/null +++ b/src/generated/resources/data/c/tags/item/buckets/resin.json @@ -0,0 +1,5 @@ +{ + "values": [ + "ragium:resin_bucket" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/buckets/synthetic_resin.json b/src/generated/resources/data/c/tags/item/buckets/synthetic_resin.json new file mode 100644 index 0000000000..10684ce45c --- /dev/null +++ b/src/generated/resources/data/c/tags/item/buckets/synthetic_resin.json @@ -0,0 +1,5 @@ +{ + "values": [ + "ragium:synthetic_resin_bucket" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/coal_coke.json b/src/generated/resources/data/c/tags/item/coal_coke.json new file mode 100644 index 0000000000..b395aa7ed5 --- /dev/null +++ b/src/generated/resources/data/c/tags/item/coal_coke.json @@ -0,0 +1,5 @@ +{ + "values": [ + "ragium:coal_coke" + ] +} \ 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 131924c9fb..4decc30e59 100644 --- a/src/generated/resources/data/c/tags/item/dusts.json +++ b/src/generated/resources/data/c/tags/item/dusts.json @@ -1,14 +1,18 @@ { "values": [ + "#c:dusts/alumina", "#c:dusts/amethyst", + "#c:dusts/bauxite", "#c:dusts/borax", + "#c:dusts/carbon", "#c:dusts/charcoal", "#c:dusts/coal", - "#c:dusts/coal_coke", "#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/iron", @@ -21,6 +25,7 @@ "#c:dusts/quartz", "#c:dusts/raginite", "#c:dusts/salt", + "#c:dusts/silicon", "#c:dusts/sulfur", "#c:dusts/wood" ] diff --git a/src/generated/resources/data/c/tags/item/dusts/alumina.json b/src/generated/resources/data/c/tags/item/dusts/alumina.json new file mode 100644 index 0000000000..2f303e18ab --- /dev/null +++ b/src/generated/resources/data/c/tags/item/dusts/alumina.json @@ -0,0 +1,5 @@ +{ + "values": [ + "ragium:alumina_dust" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/dusts/bauxite.json b/src/generated/resources/data/c/tags/item/dusts/bauxite.json new file mode 100644 index 0000000000..8539428d9d --- /dev/null +++ b/src/generated/resources/data/c/tags/item/dusts/bauxite.json @@ -0,0 +1,5 @@ +{ + "values": [ + "ragium:bauxite_dust" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/dusts/carbon.json b/src/generated/resources/data/c/tags/item/dusts/carbon.json new file mode 100644 index 0000000000..4ce2a13d60 --- /dev/null +++ b/src/generated/resources/data/c/tags/item/dusts/carbon.json @@ -0,0 +1,5 @@ +{ + "values": [ + "ragium:carbon_dust" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/dusts/coal_coke.json b/src/generated/resources/data/c/tags/item/dusts/coal_coke.json deleted file mode 100644 index 7ca4845376..0000000000 --- a/src/generated/resources/data/c/tags/item/dusts/coal_coke.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "ragium:coal_coke_dust" - ] -} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/dusts/cryolite.json b/src/generated/resources/data/c/tags/item/dusts/cryolite.json new file mode 100644 index 0000000000..086c5b3633 --- /dev/null +++ b/src/generated/resources/data/c/tags/item/dusts/cryolite.json @@ -0,0 +1,5 @@ +{ + "values": [ + "ragium:cryolite_dust" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/dusts/fluorite.json b/src/generated/resources/data/c/tags/item/dusts/fluorite.json new file mode 100644 index 0000000000..a533dee581 --- /dev/null +++ b/src/generated/resources/data/c/tags/item/dusts/fluorite.json @@ -0,0 +1,5 @@ +{ + "values": [ + "ragium:fluorite_dust" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/dusts/silicon.json b/src/generated/resources/data/c/tags/item/dusts/silicon.json new file mode 100644 index 0000000000..d29c84e800 --- /dev/null +++ b/src/generated/resources/data/c/tags/item/dusts/silicon.json @@ -0,0 +1,5 @@ +{ + "values": [ + "ragium:silicon_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 0e39a61a51..7c478dca32 100644 --- a/src/generated/resources/data/c/tags/item/gems.json +++ b/src/generated/resources/data/c/tags/item/gems.json @@ -1,5 +1,7 @@ { "values": [ - "#c:gems/echo" + "#c:gems/cryolite", + "#c:gems/echo", + "#c:gems/fluorite" ] } \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/gems/cryolite.json b/src/generated/resources/data/c/tags/item/gems/cryolite.json new file mode 100644 index 0000000000..26c80ec1ac --- /dev/null +++ b/src/generated/resources/data/c/tags/item/gems/cryolite.json @@ -0,0 +1,5 @@ +{ + "values": [ + "ragium:cryolite" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/gems/fluorite.json b/src/generated/resources/data/c/tags/item/gems/fluorite.json new file mode 100644 index 0000000000..2848eb8485 --- /dev/null +++ b/src/generated/resources/data/c/tags/item/gems/fluorite.json @@ -0,0 +1,5 @@ +{ + "values": [ + "ragium:fluorite" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/ingots.json b/src/generated/resources/data/c/tags/item/ingots.json index 355981e458..74b1cc77b9 100644 --- a/src/generated/resources/data/c/tags/item/ingots.json +++ b/src/generated/resources/data/c/tags/item/ingots.json @@ -1,5 +1,6 @@ { "values": [ + "#c:ingots/aluminum", "#c:ingots/black_steel", "#c:ingots/sooty_iron", "#c:ingots/void_metal" diff --git a/src/generated/resources/data/c/tags/item/ingots/aluminum.json b/src/generated/resources/data/c/tags/item/ingots/aluminum.json new file mode 100644 index 0000000000..47dc2fe68a --- /dev/null +++ b/src/generated/resources/data/c/tags/item/ingots/aluminum.json @@ -0,0 +1,5 @@ +{ + "values": [ + "ragium:aluminum_ingot" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/nuggets.json b/src/generated/resources/data/c/tags/item/nuggets.json index 20bd017b46..1f86f44107 100644 --- a/src/generated/resources/data/c/tags/item/nuggets.json +++ b/src/generated/resources/data/c/tags/item/nuggets.json @@ -1,5 +1,6 @@ { "values": [ + "#c:nuggets/aluminum", "#c:nuggets/black_steel", "#c:nuggets/netherite", "#c:nuggets/sooty_iron", diff --git a/src/generated/resources/data/c/tags/item/nuggets/aluminum.json b/src/generated/resources/data/c/tags/item/nuggets/aluminum.json new file mode 100644 index 0000000000..b338f6d005 --- /dev/null +++ b/src/generated/resources/data/c/tags/item/nuggets/aluminum.json @@ -0,0 +1,5 @@ +{ + "values": [ + "ragium:aluminum_nugget" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/pitch_coke.json b/src/generated/resources/data/c/tags/item/pitch_coke.json new file mode 100644 index 0000000000..8f0f3aba79 --- /dev/null +++ b/src/generated/resources/data/c/tags/item/pitch_coke.json @@ -0,0 +1,5 @@ +{ + "values": [ + "ragium:pitch_coke" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/silicon.json b/src/generated/resources/data/c/tags/item/silicon.json new file mode 100644 index 0000000000..fe84be0f59 --- /dev/null +++ b/src/generated/resources/data/c/tags/item/silicon.json @@ -0,0 +1,5 @@ +{ + "values": [ + "ragium:crude_silicon" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/storage_blocks.json b/src/generated/resources/data/c/tags/item/storage_blocks.json index 24f6feff54..1192c30428 100644 --- a/src/generated/resources/data/c/tags/item/storage_blocks.json +++ b/src/generated/resources/data/c/tags/item/storage_blocks.json @@ -1,9 +1,10 @@ { "values": [ + "#c:storage_blocks/aluminum", "#c:storage_blocks/black_steel", "#c:storage_blocks/charcoal", "#c:storage_blocks/coal_coke", - "#c:storage_blocks/echo", + "#c:storage_blocks/pitch_coke", "#c:storage_blocks/sooty_iron", "#c:storage_blocks/void_metal" ] diff --git a/src/generated/resources/data/c/tags/item/storage_blocks/aluminum.json b/src/generated/resources/data/c/tags/item/storage_blocks/aluminum.json new file mode 100644 index 0000000000..9216099d67 --- /dev/null +++ b/src/generated/resources/data/c/tags/item/storage_blocks/aluminum.json @@ -0,0 +1,5 @@ +{ + "values": [ + "ragium:aluminum_block" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/storage_blocks/echo.json b/src/generated/resources/data/c/tags/item/storage_blocks/echo.json deleted file mode 100644 index 9cfec0c902..0000000000 --- a/src/generated/resources/data/c/tags/item/storage_blocks/echo.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "ragium:echo_block" - ] -} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/storage_blocks/pitch_coke.json b/src/generated/resources/data/c/tags/item/storage_blocks/pitch_coke.json new file mode 100644 index 0000000000..33f0161c9b --- /dev/null +++ b/src/generated/resources/data/c/tags/item/storage_blocks/pitch_coke.json @@ -0,0 +1,5 @@ +{ + "values": [ + "ragium:pitch_coke_block" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/tiny.json b/src/generated/resources/data/c/tags/item/tiny.json index 58f9a417dd..4eb53e99e9 100644 --- a/src/generated/resources/data/c/tags/item/tiny.json +++ b/src/generated/resources/data/c/tags/item/tiny.json @@ -2,6 +2,7 @@ "values": [ "#c:tiny/charcoal", "#c:tiny/coal", - "#c:tiny/coal_coke" + "#c:tiny/coal_coke", + "#c:tiny/pitch_coke" ] } \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/tiny/pitch_coke.json b/src/generated/resources/data/c/tags/item/tiny/pitch_coke.json new file mode 100644 index 0000000000..695be0eecb --- /dev/null +++ b/src/generated/resources/data/c/tags/item/tiny/pitch_coke.json @@ -0,0 +1,5 @@ +{ + "values": [ + "ragium:tiny_pitch_coke" + ] +} \ 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 83152fc7d3..40996203de 100644 --- a/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json +++ b/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json @@ -1,6 +1,7 @@ { "values": [ "ragium:alloy_smelter", + "ragium:aluminum_block", "ragium:arcane_machine_casing", "ragium:assembler", "ragium:bio_machine_casing", @@ -12,13 +13,22 @@ "ragium:chemical_reactor", "ragium:coal_coke_block", "ragium:compressor", + "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", "ragium:echo_block", "ragium:electrolyzer", "ragium:electronics_machine_casing", + "ragium:enchanter", + "ragium:fluorite_block", + "ragium:fluorite_slab", + "ragium:fluorite_stairs", "ragium:freezer", "ragium:heat_machine_casing", "ragium:machine_casing", @@ -28,13 +38,17 @@ "ragium:nether_niter_ore", "ragium:nether_sulfur_ore", "ragium:niter_ore", + "ragium:pitch_coke_block", "ragium:planter", + "ragium:precision_assembler", "ragium:pyrolyzer", "ragium:refinery", "ragium:scanner", "ragium:smelter", "ragium:sooty_iron_block", "ragium:sulfur_ore", - "ragium:void_metal_block" + "ragium:tank", + "ragium:void_metal_block", + "ragium:void_tank" ] } \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/block/slabs.json b/src/generated/resources/data/minecraft/tags/block/slabs.json new file mode 100644 index 0000000000..1894019991 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/block/slabs.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000000..fe730d5066 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/block/stairs.json @@ -0,0 +1,6 @@ +{ + "values": [ + "ragium:cryolite_stairs", + "ragium:fluorite_stairs" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/damage_type/bypasses_armor.json b/src/generated/resources/data/minecraft/tags/damage_type/bypasses_armor.json new file mode 100644 index 0000000000..46e462adaa --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/damage_type/bypasses_armor.json @@ -0,0 +1,5 @@ +{ + "values": [ + "ragium:chemical_burn" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/damage_type/no_knockback.json b/src/generated/resources/data/minecraft/tags/damage_type/no_knockback.json new file mode 100644 index 0000000000..46e462adaa --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/damage_type/no_knockback.json @@ -0,0 +1,5 @@ +{ + "values": [ + "ragium:chemical_burn" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/damage_type/panic_causes.json b/src/generated/resources/data/minecraft/tags/damage_type/panic_causes.json new file mode 100644 index 0000000000..46e462adaa --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/damage_type/panic_causes.json @@ -0,0 +1,5 @@ +{ + "values": [ + "ragium:chemical_burn" + ] +} \ 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 new file mode 100644 index 0000000000..75dea581a0 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/item/beacon_payment_items.json @@ -0,0 +1,10 @@ +{ + "values": [ + "ragium:aluminum_ingot", + "ragium:black_steel_ingot", + "ragium:cryolite", + "ragium:fluorite", + "ragium:sooty_iron_ingot", + "ragium:void_metal_ingot" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/item/metal_nuggets.json b/src/generated/resources/data/minecraft/tags/item/metal_nuggets.json index d37a7904f9..2607faded5 100644 --- a/src/generated/resources/data/minecraft/tags/item/metal_nuggets.json +++ b/src/generated/resources/data/minecraft/tags/item/metal_nuggets.json @@ -1,5 +1,6 @@ { "values": [ + "ragium:aluminum_nugget", "ragium:black_steel_nugget", "ragium:netherite_nugget", "ragium:sooty_iron_nugget", diff --git a/src/generated/resources/data/minecraft/tags/item/slabs.json b/src/generated/resources/data/minecraft/tags/item/slabs.json new file mode 100644 index 0000000000..1894019991 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/item/slabs.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000000..fe730d5066 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/item/stairs.json @@ -0,0 +1,6 @@ +{ + "values": [ + "ragium:cryolite_stairs", + "ragium:fluorite_stairs" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/neoforge/data_maps/item/furnace_fuels.json b/src/generated/resources/data/neoforge/data_maps/item/furnace_fuels.json index e624ba21b2..a1fc0be55a 100644 --- a/src/generated/resources/data/neoforge/data_maps/item/furnace_fuels.json +++ b/src/generated/resources/data/neoforge/data_maps/item/furnace_fuels.json @@ -13,7 +13,10 @@ "burn_time": 32000 }, "ragium:pitch_coke": { - "burn_time": 1200 + "burn_time": 2400 + }, + "ragium:pitch_coke_block": { + "burn_time": 24000 }, "ragium:tar": { "burn_time": 800 @@ -26,6 +29,9 @@ }, "ragium:tiny_coal_coke": { "burn_time": 400 + }, + "ragium:tiny_pitch_coke": { + "burn_time": 300 } } } \ No newline at end of file diff --git a/src/generated/resources/data/neoforge/recipe_priorities.json b/src/generated/resources/data/neoforge/recipe_priorities.json index 37b1caf2ce..9bd3e6e365 100644 --- a/src/generated/resources/data/neoforge/recipe_priorities.json +++ b/src/generated/resources/data/neoforge/recipe_priorities.json @@ -1,5 +1,9 @@ { "entries": { - "ragium:melting/molten_glass_from_panes": 1 + "ragium:alloying/aluminum_ingot_with_cryolite": 100, + "ragium:melting/molten_glass_from_panes": 100, + "ragium:resource/extracting/crude_oil_at_soul_sand_valley": 100, + "ragium:resource/extracting/water_at_ocean": 200, + "ragium:resource/extracting/water_at_river": 100 } } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/brewing/lingering_bottle.json b/src/generated/resources/data/ragium/advancement/recipes/brewing/lingering_bottle.json deleted file mode 100644 index af175283dc..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/brewing/lingering_bottle.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_dragon_breath": { - "conditions": { - "items": [ - { - "items": "minecraft:dragon_breath" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:lingering_bottle" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_dragon_breath" - ] - ], - "rewards": { - "recipes": [ - "ragium:lingering_bottle" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/brewing/splash_bottle.json b/src/generated/resources/data/ragium/advancement/recipes/brewing/splash_bottle.json deleted file mode 100644 index 43462c9f2b..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/brewing/splash_bottle.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_gunpowders": { - "conditions": { - "items": [ - { - "items": "#c:gunpowders" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:splash_bottle" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_gunpowders" - ] - ], - "rewards": { - "recipes": [ - "ragium:splash_bottle" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/building_blocks/black_steel_block.json b/src/generated/resources/data/ragium/advancement/recipes/building_blocks/black_steel_block.json deleted file mode 100644 index b387ef8246..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/building_blocks/black_steel_block.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_ingots_black_steel": { - "conditions": { - "items": [ - { - "items": "#c:ingots/black_steel" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:black_steel_block" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_ingots_black_steel" - ] - ], - "rewards": { - "recipes": [ - "ragium:black_steel_block" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/building_blocks/charcoal_block.json b/src/generated/resources/data/ragium/advancement/recipes/building_blocks/charcoal_block.json deleted file mode 100644 index 2b924b3a28..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/building_blocks/charcoal_block.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_charcoal": { - "conditions": { - "items": [ - { - "items": "minecraft:charcoal" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:charcoal_block" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_charcoal" - ] - ], - "rewards": { - "recipes": [ - "ragium:charcoal_block" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/building_blocks/coal_coke_block.json b/src/generated/resources/data/ragium/advancement/recipes/building_blocks/coal_coke_block.json deleted file mode 100644 index 0b0af5629c..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/building_blocks/coal_coke_block.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_coal_coke": { - "conditions": { - "items": [ - { - "items": "ragium:coal_coke" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:coal_coke_block" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_coal_coke" - ] - ], - "rewards": { - "recipes": [ - "ragium:coal_coke_block" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/building_blocks/echo_block.json b/src/generated/resources/data/ragium/advancement/recipes/building_blocks/echo_block.json deleted file mode 100644 index 979d259e44..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/building_blocks/echo_block.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_gems_echo": { - "conditions": { - "items": [ - { - "items": "#c:gems/echo" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:echo_block" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_gems_echo" - ] - ], - "rewards": { - "recipes": [ - "ragium:echo_block" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/building_blocks/prismarine_shard_from_bricks.json b/src/generated/resources/data/ragium/advancement/recipes/building_blocks/prismarine_shard_from_bricks.json deleted file mode 100644 index 989fa092ca..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/building_blocks/prismarine_shard_from_bricks.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_prismarine_bricks": { - "conditions": { - "items": [ - { - "items": "minecraft:prismarine_bricks" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "minecraft:prismarine_shard_from_bricks" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_prismarine_bricks" - ] - ], - "rewards": { - "recipes": [ - "minecraft:prismarine_shard_from_bricks" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/building_blocks/sooty_iron_block.json b/src/generated/resources/data/ragium/advancement/recipes/building_blocks/sooty_iron_block.json deleted file mode 100644 index b3c29abbb0..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/building_blocks/sooty_iron_block.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_ingots_sooty_iron": { - "conditions": { - "items": [ - { - "items": "#c:ingots/sooty_iron" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:sooty_iron_block" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_ingots_sooty_iron" - ] - ], - "rewards": { - "recipes": [ - "ragium:sooty_iron_block" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/building_blocks/void_metal_block.json b/src/generated/resources/data/ragium/advancement/recipes/building_blocks/void_metal_block.json deleted file mode 100644 index e588bd61e2..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/building_blocks/void_metal_block.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_ingots_void_metal": { - "conditions": { - "items": [ - { - "items": "#c:ingots/void_metal" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:void_metal_block" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_ingots_void_metal" - ] - ], - "rewards": { - "recipes": [ - "ragium:void_metal_block" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/decorations/arcane_machine_casing.json b/src/generated/resources/data/ragium/advancement/recipes/decorations/arcane_machine_casing.json deleted file mode 100644 index 2f1e0edc21..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/decorations/arcane_machine_casing.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_machine_casing": { - "conditions": { - "items": [ - { - "items": "ragium:machine_casing" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:arcane_machine_casing" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_machine_casing" - ] - ], - "rewards": { - "recipes": [ - "ragium:arcane_machine_casing" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/decorations/bio_machine_casing.json b/src/generated/resources/data/ragium/advancement/recipes/decorations/bio_machine_casing.json deleted file mode 100644 index fea86fb603..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/decorations/bio_machine_casing.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_machine_casing": { - "conditions": { - "items": [ - { - "items": "ragium:machine_casing" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:bio_machine_casing" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_machine_casing" - ] - ], - "rewards": { - "recipes": [ - "ragium:bio_machine_casing" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/decorations/candle.json b/src/generated/resources/data/ragium/advancement/recipes/decorations/candle.json deleted file mode 100644 index ffb69fd488..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/decorations/candle.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_beeswax": { - "conditions": { - "items": [ - { - "items": "ragium:beeswax" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_strings": { - "conditions": { - "items": [ - { - "items": "#c:strings" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "minecraft:candle" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_strings", - "has_beeswax" - ] - ], - "rewards": { - "recipes": [ - "minecraft:candle" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/decorations/chemical_machine_casing.json b/src/generated/resources/data/ragium/advancement/recipes/decorations/chemical_machine_casing.json deleted file mode 100644 index a056391346..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/decorations/chemical_machine_casing.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_machine_casing": { - "conditions": { - "items": [ - { - "items": "ragium:machine_casing" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:chemical_machine_casing" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_machine_casing" - ] - ], - "rewards": { - "recipes": [ - "ragium:chemical_machine_casing" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/decorations/electronics_machine_casing.json b/src/generated/resources/data/ragium/advancement/recipes/decorations/electronics_machine_casing.json deleted file mode 100644 index 607d6ebd40..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/decorations/electronics_machine_casing.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_machine_casing": { - "conditions": { - "items": [ - { - "items": "ragium:machine_casing" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:electronics_machine_casing" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_machine_casing" - ] - ], - "rewards": { - "recipes": [ - "ragium:electronics_machine_casing" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/decorations/heat_machine_casing.json b/src/generated/resources/data/ragium/advancement/recipes/decorations/heat_machine_casing.json deleted file mode 100644 index 99c93537db..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/decorations/heat_machine_casing.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_machine_casing": { - "conditions": { - "items": [ - { - "items": "ragium:machine_casing" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:heat_machine_casing" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_machine_casing" - ] - ], - "rewards": { - "recipes": [ - "ragium:heat_machine_casing" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/decorations/machine_casing.json b/src/generated/resources/data/ragium/advancement/recipes/decorations/machine_casing.json deleted file mode 100644 index 7e24020514..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/decorations/machine_casing.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_ingots_sooty_iron": { - "conditions": { - "items": [ - { - "items": "#c:ingots/sooty_iron" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:machine_casing" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_ingots_sooty_iron" - ] - ], - "rewards": { - "recipes": [ - "ragium:machine_casing" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/decorations/mechanical_machine_casing.json b/src/generated/resources/data/ragium/advancement/recipes/decorations/mechanical_machine_casing.json deleted file mode 100644 index 5ac89f71b0..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/decorations/mechanical_machine_casing.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_machine_casing": { - "conditions": { - "items": [ - { - "items": "ragium:machine_casing" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:mechanical_machine_casing" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_machine_casing" - ] - ], - "rewards": { - "recipes": [ - "ragium:mechanical_machine_casing" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/alloy_smelter.json b/src/generated/resources/data/ragium/advancement/recipes/misc/alloy_smelter.json deleted file mode 100644 index 98fa4cde6e..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/alloy_smelter.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_blast_furnace": { - "conditions": { - "items": [ - { - "items": "minecraft:blast_furnace" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:alloy_smelter" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_blast_furnace" - ] - ], - "rewards": { - "recipes": [ - "ragium:alloy_smelter" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/assembler.json b/src/generated/resources/data/ragium/advancement/recipes/misc/assembler.json deleted file mode 100644 index 3ea1275d9c..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/assembler.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_crafter": { - "conditions": { - "items": [ - { - "items": "minecraft:crafter" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:assembler" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_crafter" - ] - ], - "rewards": { - "recipes": [ - "ragium:assembler" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/bamboo_charcoal.json b/src/generated/resources/data/ragium/advancement/recipes/misc/bamboo_charcoal.json deleted file mode 100644 index a90ab5d166..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/bamboo_charcoal.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_bamboo": { - "conditions": { - "items": [ - { - "items": "minecraft:bamboo" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:bamboo_charcoal" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_bamboo" - ] - ], - "rewards": { - "recipes": [ - "ragium:bamboo_charcoal" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/black_dye_bucket.json b/src/generated/resources/data/ragium/advancement/recipes/misc/black_dye_bucket.json deleted file mode 100644 index 2306419c33..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/black_dye_bucket.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_dyes_black": { - "conditions": { - "items": [ - { - "items": "#c:dyes/black" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:black_dye_bucket" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_dyes_black" - ] - ], - "rewards": { - "recipes": [ - "ragium:black_dye_bucket" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/black_steel_ingot_from_block.json b/src/generated/resources/data/ragium/advancement/recipes/misc/black_steel_ingot_from_block.json deleted file mode 100644 index 7157cb6d87..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/black_steel_ingot_from_block.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_storage_blocks_black_steel": { - "conditions": { - "items": [ - { - "items": "#c:storage_blocks/black_steel" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:black_steel_ingot_from_block" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_storage_blocks_black_steel" - ] - ], - "rewards": { - "recipes": [ - "ragium:black_steel_ingot_from_block" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/black_steel_ingot_from_nugget.json b/src/generated/resources/data/ragium/advancement/recipes/misc/black_steel_ingot_from_nugget.json deleted file mode 100644 index b9739fa118..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/black_steel_ingot_from_nugget.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_nuggets_black_steel": { - "conditions": { - "items": [ - { - "items": "#c:nuggets/black_steel" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:black_steel_ingot_from_nugget" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_nuggets_black_steel" - ] - ], - "rewards": { - "recipes": [ - "ragium:black_steel_ingot_from_nugget" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/black_steel_nugget_from_ingot.json b/src/generated/resources/data/ragium/advancement/recipes/misc/black_steel_nugget_from_ingot.json deleted file mode 100644 index 0061812c55..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/black_steel_nugget_from_ingot.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_ingots_black_steel": { - "conditions": { - "items": [ - { - "items": "#c:ingots/black_steel" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:black_steel_nugget_from_ingot" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_ingots_black_steel" - ] - ], - "rewards": { - "recipes": [ - "ragium:black_steel_nugget_from_ingot" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/blaze_rod.json b/src/generated/resources/data/ragium/advancement/recipes/misc/blaze_rod.json deleted file mode 100644 index 75f302e35a..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/blaze_rod.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_dusts_amethyst": { - "conditions": { - "items": [ - { - "items": "#c:dusts/amethyst" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_dusts_sulfur": { - "conditions": { - "items": [ - { - "items": "#c:dusts/sulfur" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_magma_block": { - "conditions": { - "items": [ - { - "items": "minecraft:magma_block" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "minecraft:blaze_rod" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_dusts_amethyst", - "has_magma_block", - "has_dusts_sulfur" - ] - ], - "rewards": { - "recipes": [ - "minecraft:blaze_rod" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/blue_dye_bucket.json b/src/generated/resources/data/ragium/advancement/recipes/misc/blue_dye_bucket.json deleted file mode 100644 index 051ea5b29c..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/blue_dye_bucket.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_dyes_blue": { - "conditions": { - "items": [ - { - "items": "#c:dyes/blue" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:blue_dye_bucket" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_dyes_blue" - ] - ], - "rewards": { - "recipes": [ - "ragium:blue_dye_bucket" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/breeze_rod.json b/src/generated/resources/data/ragium/advancement/recipes/misc/breeze_rod.json deleted file mode 100644 index 12993b2b53..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/breeze_rod.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_dusts_amethyst": { - "conditions": { - "items": [ - { - "items": "#c:dusts/amethyst" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_dusts_niter": { - "conditions": { - "items": [ - { - "items": "#c:dusts/niter" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_ice": { - "conditions": { - "items": [ - { - "items": "minecraft:ice" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "minecraft:breeze_rod" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_dusts_amethyst", - "has_ice", - "has_dusts_niter" - ] - ], - "rewards": { - "recipes": [ - "minecraft:breeze_rod" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/brewery.json b/src/generated/resources/data/ragium/advancement/recipes/misc/brewery.json deleted file mode 100644 index 305106e110..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/brewery.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_brewing_stand": { - "conditions": { - "items": [ - { - "items": "minecraft:brewing_stand" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:brewery" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_brewing_stand" - ] - ], - "rewards": { - "recipes": [ - "ragium:brewery" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/brown_dye_bucket.json b/src/generated/resources/data/ragium/advancement/recipes/misc/brown_dye_bucket.json deleted file mode 100644 index 3b6c0e75e9..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/brown_dye_bucket.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_dyes_brown": { - "conditions": { - "items": [ - { - "items": "#c:dyes/brown" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:brown_dye_bucket" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_dyes_brown" - ] - ], - "rewards": { - "recipes": [ - "ragium:brown_dye_bucket" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/charcoal_from_block.json b/src/generated/resources/data/ragium/advancement/recipes/misc/charcoal_from_block.json deleted file mode 100644 index 36b0c1fb72..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/charcoal_from_block.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_storage_blocks_charcoal": { - "conditions": { - "items": [ - { - "items": "#c:storage_blocks/charcoal" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "minecraft:charcoal_from_block" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_storage_blocks_charcoal" - ] - ], - "rewards": { - "recipes": [ - "minecraft:charcoal_from_block" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/charcoal_from_tiny.json b/src/generated/resources/data/ragium/advancement/recipes/misc/charcoal_from_tiny.json deleted file mode 100644 index eaa4162d5e..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/charcoal_from_tiny.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "minecraft:charcoal_from_tiny" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "has_tiny_charcoal": { - "conditions": { - "items": [ - { - "items": "#c:tiny/charcoal" - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_tiny_charcoal" - ] - ], - "rewards": { - "recipes": [ - "minecraft:charcoal_from_tiny" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/chemical_bath.json b/src/generated/resources/data/ragium/advancement/recipes/misc/chemical_bath.json deleted file mode 100644 index 4209be3704..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/chemical_bath.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_cauldron": { - "conditions": { - "items": [ - { - "items": "minecraft:cauldron" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:chemical_bath" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_cauldron" - ] - ], - "rewards": { - "recipes": [ - "ragium:chemical_bath" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/coal_coke_from_block.json b/src/generated/resources/data/ragium/advancement/recipes/misc/coal_coke_from_block.json deleted file mode 100644 index 1c0f23dd17..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/coal_coke_from_block.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_storage_blocks_coal_coke": { - "conditions": { - "items": [ - { - "items": "#c:storage_blocks/coal_coke" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:coal_coke_from_block" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_storage_blocks_coal_coke" - ] - ], - "rewards": { - "recipes": [ - "ragium:coal_coke_from_block" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/coal_coke_from_tiny.json b/src/generated/resources/data/ragium/advancement/recipes/misc/coal_coke_from_tiny.json deleted file mode 100644 index dc9db4a490..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/coal_coke_from_tiny.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "ragium:coal_coke_from_tiny" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "has_tiny_coal_coke": { - "conditions": { - "items": [ - { - "items": "#c:tiny/coal_coke" - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_tiny_coal_coke" - ] - ], - "rewards": { - "recipes": [ - "ragium:coal_coke_from_tiny" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/coal_from_tiny.json b/src/generated/resources/data/ragium/advancement/recipes/misc/coal_from_tiny.json deleted file mode 100644 index 40eb941ce3..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/coal_from_tiny.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "minecraft:coal_from_tiny" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "has_tiny_coal": { - "conditions": { - "items": [ - { - "items": "#c:tiny/coal" - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_tiny_coal" - ] - ], - "rewards": { - "recipes": [ - "minecraft:coal_from_tiny" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/compressor.json b/src/generated/resources/data/ragium/advancement/recipes/misc/compressor.json deleted file mode 100644 index 5f2856f7b7..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/compressor.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_anvil": { - "conditions": { - "items": [ - { - "items": "#minecraft:anvil" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:compressor" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_anvil" - ] - ], - "rewards": { - "recipes": [ - "ragium:compressor" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/copper_gear.json b/src/generated/resources/data/ragium/advancement/recipes/misc/copper_gear.json deleted file mode 100644 index 7f147b9da7..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/copper_gear.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_ingots_copper": { - "conditions": { - "items": [ - { - "items": "#c:ingots/copper" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:copper_gear" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_ingots_copper" - ] - ], - "rewards": { - "recipes": [ - "ragium:copper_gear" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/copper_ingot_from_blasting_dust.json b/src/generated/resources/data/ragium/advancement/recipes/misc/copper_ingot_from_blasting_dust.json deleted file mode 100644 index 39be19c67a..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/copper_ingot_from_blasting_dust.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_copper_dust": { - "conditions": { - "items": [ - { - "items": "ragium:copper_dust" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "minecraft:copper_ingot_from_blasting_dust" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_copper_dust" - ] - ], - "rewards": { - "recipes": [ - "minecraft:copper_ingot_from_blasting_dust" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/copper_ingot_from_smelting_dust.json b/src/generated/resources/data/ragium/advancement/recipes/misc/copper_ingot_from_smelting_dust.json deleted file mode 100644 index 564a439103..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/copper_ingot_from_smelting_dust.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_copper_dust": { - "conditions": { - "items": [ - { - "items": "ragium:copper_dust" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "minecraft:copper_ingot_from_smelting_dust" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_copper_dust" - ] - ], - "rewards": { - "recipes": [ - "minecraft:copper_ingot_from_smelting_dust" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/crusher.json b/src/generated/resources/data/ragium/advancement/recipes/misc/crusher.json deleted file mode 100644 index 2c38320f02..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/crusher.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_grindstone": { - "conditions": { - "items": [ - { - "items": "minecraft:grindstone" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:crusher" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_grindstone" - ] - ], - "rewards": { - "recipes": [ - "ragium:crusher" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/cutting_machine.json b/src/generated/resources/data/ragium/advancement/recipes/misc/cutting_machine.json deleted file mode 100644 index 907d7b7196..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/cutting_machine.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_stonecutter": { - "conditions": { - "items": [ - { - "items": "minecraft:stonecutter" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:cutting_machine" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_stonecutter" - ] - ], - "rewards": { - "recipes": [ - "ragium:cutting_machine" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/cyan_dye_bucket.json b/src/generated/resources/data/ragium/advancement/recipes/misc/cyan_dye_bucket.json deleted file mode 100644 index 2f1fa7662d..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/cyan_dye_bucket.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_dyes_cyan": { - "conditions": { - "items": [ - { - "items": "#c:dyes/cyan" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:cyan_dye_bucket" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_dyes_cyan" - ] - ], - "rewards": { - "recipes": [ - "ragium:cyan_dye_bucket" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/diamond_gear.json b/src/generated/resources/data/ragium/advancement/recipes/misc/diamond_gear.json deleted file mode 100644 index a2967e7961..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/diamond_gear.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_gems_diamond": { - "conditions": { - "items": [ - { - "items": "#c:gems/diamond" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:diamond_gear" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_gems_diamond" - ] - ], - "rewards": { - "recipes": [ - "ragium:diamond_gear" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/echo_shard_from_block.json b/src/generated/resources/data/ragium/advancement/recipes/misc/echo_shard_from_block.json deleted file mode 100644 index f83d6f86c3..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/echo_shard_from_block.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_storage_blocks_echo": { - "conditions": { - "items": [ - { - "items": "#c:storage_blocks/echo" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "minecraft:echo_shard_from_block" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_storage_blocks_echo" - ] - ], - "rewards": { - "recipes": [ - "minecraft:echo_shard_from_block" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/emerald_gear.json b/src/generated/resources/data/ragium/advancement/recipes/misc/emerald_gear.json deleted file mode 100644 index 7daf63ee2d..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/emerald_gear.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_gems_emerald": { - "conditions": { - "items": [ - { - "items": "#c:gems/emerald" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:emerald_gear" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_gems_emerald" - ] - ], - "rewards": { - "recipes": [ - "ragium:emerald_gear" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/freezer.json b/src/generated/resources/data/ragium/advancement/recipes/misc/freezer.json deleted file mode 100644 index d61f6f1877..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/freezer.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_buckets_water": { - "conditions": { - "items": [ - { - "items": "#c:buckets/water" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:freezer" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_buckets_water" - ] - ], - "rewards": { - "recipes": [ - "ragium:freezer" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/gold_gear.json b/src/generated/resources/data/ragium/advancement/recipes/misc/gold_gear.json deleted file mode 100644 index 5b573cb54d..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/gold_gear.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_ingots_gold": { - "conditions": { - "items": [ - { - "items": "#c:ingots/gold" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:gold_gear" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_ingots_gold" - ] - ], - "rewards": { - "recipes": [ - "ragium:gold_gear" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/gold_ingot_from_blasting_dust.json b/src/generated/resources/data/ragium/advancement/recipes/misc/gold_ingot_from_blasting_dust.json deleted file mode 100644 index 52b6d90d90..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/gold_ingot_from_blasting_dust.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_gold_dust": { - "conditions": { - "items": [ - { - "items": "ragium:gold_dust" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "minecraft:gold_ingot_from_blasting_dust" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_gold_dust" - ] - ], - "rewards": { - "recipes": [ - "minecraft:gold_ingot_from_blasting_dust" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/gold_ingot_from_smelting_dust.json b/src/generated/resources/data/ragium/advancement/recipes/misc/gold_ingot_from_smelting_dust.json deleted file mode 100644 index 350d775616..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/gold_ingot_from_smelting_dust.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_gold_dust": { - "conditions": { - "items": [ - { - "items": "ragium:gold_dust" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "minecraft:gold_ingot_from_smelting_dust" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_gold_dust" - ] - ], - "rewards": { - "recipes": [ - "minecraft:gold_ingot_from_smelting_dust" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/gray_dye_bucket.json b/src/generated/resources/data/ragium/advancement/recipes/misc/gray_dye_bucket.json deleted file mode 100644 index 7439cefb9f..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/gray_dye_bucket.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_dyes_gray": { - "conditions": { - "items": [ - { - "items": "#c:dyes/gray" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:gray_dye_bucket" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_dyes_gray" - ] - ], - "rewards": { - "recipes": [ - "ragium:gray_dye_bucket" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/green_dye_bucket.json b/src/generated/resources/data/ragium/advancement/recipes/misc/green_dye_bucket.json deleted file mode 100644 index c3bfd78c8e..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/green_dye_bucket.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_dyes_green": { - "conditions": { - "items": [ - { - "items": "#c:dyes/green" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:green_dye_bucket" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_dyes_green" - ] - ], - "rewards": { - "recipes": [ - "ragium:green_dye_bucket" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/gunpowder.json b/src/generated/resources/data/ragium/advancement/recipes/misc/gunpowder.json deleted file mode 100644 index b882881b43..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/gunpowder.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_dusts_niter": { - "conditions": { - "items": [ - { - "items": "#c:dusts/niter" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_dusts_sulfur": { - "conditions": { - "items": [ - { - "items": "#c:dusts/sulfur" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "minecraft:gunpowder" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_dusts_sulfur", - "has_dusts_niter" - ] - ], - "rewards": { - "recipes": [ - "minecraft:gunpowder" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/iron_gear.json b/src/generated/resources/data/ragium/advancement/recipes/misc/iron_gear.json deleted file mode 100644 index 8cb673fed8..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/iron_gear.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_ingots_iron": { - "conditions": { - "items": [ - { - "items": "#c:ingots/iron" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:iron_gear" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_ingots_iron" - ] - ], - "rewards": { - "recipes": [ - "ragium:iron_gear" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/iron_ingot_from_blasting_dust.json b/src/generated/resources/data/ragium/advancement/recipes/misc/iron_ingot_from_blasting_dust.json deleted file mode 100644 index a38351324a..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/iron_ingot_from_blasting_dust.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_iron_dust": { - "conditions": { - "items": [ - { - "items": "ragium:iron_dust" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "minecraft:iron_ingot_from_blasting_dust" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_iron_dust" - ] - ], - "rewards": { - "recipes": [ - "minecraft:iron_ingot_from_blasting_dust" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/iron_ingot_from_smelting_dust.json b/src/generated/resources/data/ragium/advancement/recipes/misc/iron_ingot_from_smelting_dust.json deleted file mode 100644 index 4bd080ffce..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/iron_ingot_from_smelting_dust.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_iron_dust": { - "conditions": { - "items": [ - { - "items": "ragium:iron_dust" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "minecraft:iron_ingot_from_smelting_dust" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_iron_dust" - ] - ], - "rewards": { - "recipes": [ - "minecraft:iron_ingot_from_smelting_dust" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/light_blue_dye_bucket.json b/src/generated/resources/data/ragium/advancement/recipes/misc/light_blue_dye_bucket.json deleted file mode 100644 index 290bc44b49..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/light_blue_dye_bucket.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_dyes_light_blue": { - "conditions": { - "items": [ - { - "items": "#c:dyes/light_blue" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:light_blue_dye_bucket" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_dyes_light_blue" - ] - ], - "rewards": { - "recipes": [ - "ragium:light_blue_dye_bucket" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/light_gray_dye_bucket.json b/src/generated/resources/data/ragium/advancement/recipes/misc/light_gray_dye_bucket.json deleted file mode 100644 index 017b8ed741..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/light_gray_dye_bucket.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_dyes_light_gray": { - "conditions": { - "items": [ - { - "items": "#c:dyes/light_gray" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:light_gray_dye_bucket" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_dyes_light_gray" - ] - ], - "rewards": { - "recipes": [ - "ragium:light_gray_dye_bucket" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/lime_dye_bucket.json b/src/generated/resources/data/ragium/advancement/recipes/misc/lime_dye_bucket.json deleted file mode 100644 index 77ec06bfef..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/lime_dye_bucket.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_dyes_lime": { - "conditions": { - "items": [ - { - "items": "#c:dyes/lime" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:lime_dye_bucket" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_dyes_lime" - ] - ], - "rewards": { - "recipes": [ - "ragium:lime_dye_bucket" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/magenta_dye_bucket.json b/src/generated/resources/data/ragium/advancement/recipes/misc/magenta_dye_bucket.json deleted file mode 100644 index 65368ed8cb..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/magenta_dye_bucket.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_dyes_magenta": { - "conditions": { - "items": [ - { - "items": "#c:dyes/magenta" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:magenta_dye_bucket" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_dyes_magenta" - ] - ], - "rewards": { - "recipes": [ - "ragium:magenta_dye_bucket" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/mechanical_machine_parts.json b/src/generated/resources/data/ragium/advancement/recipes/misc/mechanical_machine_parts.json deleted file mode 100644 index 8d12732668..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/mechanical_machine_parts.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_ingots_sooty_iron": { - "conditions": { - "items": [ - { - "items": "#c:ingots/sooty_iron" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:mechanical_machine_parts" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_ingots_sooty_iron" - ] - ], - "rewards": { - "recipes": [ - "ragium:mechanical_machine_parts" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/melter.json b/src/generated/resources/data/ragium/advancement/recipes/misc/melter.json deleted file mode 100644 index 5637ad97cb..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/melter.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_buckets_lava": { - "conditions": { - "items": [ - { - "items": "#c:buckets/lava" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:melter" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_buckets_lava" - ] - ], - "rewards": { - "recipes": [ - "ragium:melter" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/netherite_gear_smithing.json b/src/generated/resources/data/ragium/advancement/recipes/misc/netherite_gear_smithing.json deleted file mode 100644 index 38da40dfb6..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/netherite_gear_smithing.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_gears_diamond": { - "conditions": { - "items": [ - { - "items": "#c:gears/diamond" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:netherite_gear_smithing" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_gears_diamond" - ] - ], - "rewards": { - "recipes": [ - "ragium:netherite_gear_smithing" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/netherite_ingot_from_blasting_dust.json b/src/generated/resources/data/ragium/advancement/recipes/misc/netherite_ingot_from_blasting_dust.json deleted file mode 100644 index 3cd0acfbbf..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/netherite_ingot_from_blasting_dust.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_netherite_dust": { - "conditions": { - "items": [ - { - "items": "ragium:netherite_dust" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "minecraft:netherite_ingot_from_blasting_dust" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_netherite_dust" - ] - ], - "rewards": { - "recipes": [ - "minecraft:netherite_ingot_from_blasting_dust" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/netherite_ingot_from_nugget.json b/src/generated/resources/data/ragium/advancement/recipes/misc/netherite_ingot_from_nugget.json deleted file mode 100644 index c31ebcb9c6..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/netherite_ingot_from_nugget.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_nuggets_netherite": { - "conditions": { - "items": [ - { - "items": "#c:nuggets/netherite" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "minecraft:netherite_ingot_from_nugget" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_nuggets_netherite" - ] - ], - "rewards": { - "recipes": [ - "minecraft:netherite_ingot_from_nugget" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/netherite_ingot_from_smelting_dust.json b/src/generated/resources/data/ragium/advancement/recipes/misc/netherite_ingot_from_smelting_dust.json deleted file mode 100644 index 2d39b58fb4..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/netherite_ingot_from_smelting_dust.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_netherite_dust": { - "conditions": { - "items": [ - { - "items": "ragium:netherite_dust" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "minecraft:netherite_ingot_from_smelting_dust" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_netherite_dust" - ] - ], - "rewards": { - "recipes": [ - "minecraft:netherite_ingot_from_smelting_dust" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/netherite_nugget_from_ingot.json b/src/generated/resources/data/ragium/advancement/recipes/misc/netherite_nugget_from_ingot.json deleted file mode 100644 index 92917400ea..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/netherite_nugget_from_ingot.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_ingots_netherite": { - "conditions": { - "items": [ - { - "items": "#c:ingots/netherite" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:netherite_nugget_from_ingot" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_ingots_netherite" - ] - ], - "rewards": { - "recipes": [ - "ragium:netherite_nugget_from_ingot" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/orange_dye_bucket.json b/src/generated/resources/data/ragium/advancement/recipes/misc/orange_dye_bucket.json deleted file mode 100644 index 1e71b06094..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/orange_dye_bucket.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_dyes_orange": { - "conditions": { - "items": [ - { - "items": "#c:dyes/orange" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:orange_dye_bucket" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_dyes_orange" - ] - ], - "rewards": { - "recipes": [ - "ragium:orange_dye_bucket" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/particle_board.json b/src/generated/resources/data/ragium/advancement/recipes/misc/particle_board.json deleted file mode 100644 index d9e97c6dc4..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/particle_board.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_sticky_balls": { - "conditions": { - "items": [ - { - "items": "#c:sticky_balls" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:particle_board" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_sticky_balls" - ] - ], - "rewards": { - "recipes": [ - "ragium:particle_board" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/pink_dye_bucket.json b/src/generated/resources/data/ragium/advancement/recipes/misc/pink_dye_bucket.json deleted file mode 100644 index 94f0f8641f..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/pink_dye_bucket.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_dyes_pink": { - "conditions": { - "items": [ - { - "items": "#c:dyes/pink" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:pink_dye_bucket" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_dyes_pink" - ] - ], - "rewards": { - "recipes": [ - "ragium:pink_dye_bucket" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/purple_dye_bucket.json b/src/generated/resources/data/ragium/advancement/recipes/misc/purple_dye_bucket.json deleted file mode 100644 index fc9bbaebfb..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/purple_dye_bucket.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_dyes_purple": { - "conditions": { - "items": [ - { - "items": "#c:dyes/purple" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:purple_dye_bucket" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_dyes_purple" - ] - ], - "rewards": { - "recipes": [ - "ragium:purple_dye_bucket" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/red_dye_bucket.json b/src/generated/resources/data/ragium/advancement/recipes/misc/red_dye_bucket.json deleted file mode 100644 index 74607c7dde..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/red_dye_bucket.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_dyes_red": { - "conditions": { - "items": [ - { - "items": "#c:dyes/red" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:red_dye_bucket" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_dyes_red" - ] - ], - "rewards": { - "recipes": [ - "ragium:red_dye_bucket" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/smelter.json b/src/generated/resources/data/ragium/advancement/recipes/misc/smelter.json deleted file mode 100644 index cd4e9a5618..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/smelter.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_furnace": { - "conditions": { - "items": [ - { - "items": "minecraft:furnace" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:smelter" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_furnace" - ] - ], - "rewards": { - "recipes": [ - "ragium:smelter" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/sooty_iron_ingot.json b/src/generated/resources/data/ragium/advancement/recipes/misc/sooty_iron_ingot.json deleted file mode 100644 index f029a36432..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/sooty_iron_ingot.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "ragium:sooty_iron_ingot" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "has_tiny_charcoal": { - "conditions": { - "items": [ - { - "items": "#c:tiny/charcoal" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_tiny_coal": { - "conditions": { - "items": [ - { - "items": "#c:tiny/coal" - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_tiny_coal", - "has_tiny_charcoal" - ] - ], - "rewards": { - "recipes": [ - "ragium:sooty_iron_ingot" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/sooty_iron_ingot_by_coke_dust.json b/src/generated/resources/data/ragium/advancement/recipes/misc/sooty_iron_ingot_by_coke_dust.json deleted file mode 100644 index 3b766346f9..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/sooty_iron_ingot_by_coke_dust.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_dusts_coal_coke": { - "conditions": { - "items": [ - { - "items": "#c:dusts/coal_coke" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:sooty_iron_ingot_by_coke_dust" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_dusts_coal_coke" - ] - ], - "rewards": { - "recipes": [ - "ragium:sooty_iron_ingot_by_coke_dust" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/sooty_iron_ingot_by_dust.json b/src/generated/resources/data/ragium/advancement/recipes/misc/sooty_iron_ingot_by_dust.json deleted file mode 100644 index 49a27d08e1..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/sooty_iron_ingot_by_dust.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_dusts_charcoal": { - "conditions": { - "items": [ - { - "items": "#c:dusts/charcoal" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_dusts_coal": { - "conditions": { - "items": [ - { - "items": "#c:dusts/coal" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:sooty_iron_ingot_by_dust" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_dusts_coal", - "has_dusts_charcoal" - ] - ], - "rewards": { - "recipes": [ - "ragium:sooty_iron_ingot_by_dust" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/sooty_iron_ingot_from_block.json b/src/generated/resources/data/ragium/advancement/recipes/misc/sooty_iron_ingot_from_block.json deleted file mode 100644 index 119ced5039..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/sooty_iron_ingot_from_block.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_storage_blocks_sooty_iron": { - "conditions": { - "items": [ - { - "items": "#c:storage_blocks/sooty_iron" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:sooty_iron_ingot_from_block" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_storage_blocks_sooty_iron" - ] - ], - "rewards": { - "recipes": [ - "ragium:sooty_iron_ingot_from_block" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/sooty_iron_ingot_from_coke.json b/src/generated/resources/data/ragium/advancement/recipes/misc/sooty_iron_ingot_from_coke.json deleted file mode 100644 index 95d828304a..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/sooty_iron_ingot_from_coke.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "ragium:sooty_iron_ingot_from_coke" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "has_tiny_coal_coke": { - "conditions": { - "items": [ - { - "items": "#c:tiny/coal_coke" - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_tiny_coal_coke" - ] - ], - "rewards": { - "recipes": [ - "ragium:sooty_iron_ingot_from_coke" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/sooty_iron_ingot_from_nugget.json b/src/generated/resources/data/ragium/advancement/recipes/misc/sooty_iron_ingot_from_nugget.json deleted file mode 100644 index 45011b78d2..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/sooty_iron_ingot_from_nugget.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_nuggets_sooty_iron": { - "conditions": { - "items": [ - { - "items": "#c:nuggets/sooty_iron" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:sooty_iron_ingot_from_nugget" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_nuggets_sooty_iron" - ] - ], - "rewards": { - "recipes": [ - "ragium:sooty_iron_ingot_from_nugget" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/sooty_iron_nugget_from_ingot.json b/src/generated/resources/data/ragium/advancement/recipes/misc/sooty_iron_nugget_from_ingot.json deleted file mode 100644 index 38689e5de8..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/sooty_iron_nugget_from_ingot.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_ingots_sooty_iron": { - "conditions": { - "items": [ - { - "items": "#c:ingots/sooty_iron" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:sooty_iron_nugget_from_ingot" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_ingots_sooty_iron" - ] - ], - "rewards": { - "recipes": [ - "ragium:sooty_iron_nugget_from_ingot" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/synthetic_feather.json b/src/generated/resources/data/ragium/advancement/recipes/misc/synthetic_feather.json deleted file mode 100644 index 9755105096..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/synthetic_feather.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_plastics": { - "conditions": { - "items": [ - { - "items": "#c:plastics" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:synthetic_feather" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_plastics" - ] - ], - "rewards": { - "recipes": [ - "ragium:synthetic_feather" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/synthetic_fiber.json b/src/generated/resources/data/ragium/advancement/recipes/misc/synthetic_fiber.json deleted file mode 100644 index c9b66f2070..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/synthetic_fiber.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_plastics": { - "conditions": { - "items": [ - { - "items": "#c:plastics" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:synthetic_fiber" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_plastics" - ] - ], - "rewards": { - "recipes": [ - "ragium:synthetic_fiber" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/synthetic_leather.json b/src/generated/resources/data/ragium/advancement/recipes/misc/synthetic_leather.json deleted file mode 100644 index 6b4aff56fc..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/synthetic_leather.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_plastics": { - "conditions": { - "items": [ - { - "items": "#c:plastics" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:synthetic_leather" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_plastics" - ] - ], - "rewards": { - "recipes": [ - "ragium:synthetic_leather" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/tiny_charcoal.json b/src/generated/resources/data/ragium/advancement/recipes/misc/tiny_charcoal.json deleted file mode 100644 index 845c97605a..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/tiny_charcoal.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_charcoal": { - "conditions": { - "items": [ - { - "items": "minecraft:charcoal" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:tiny_charcoal" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_charcoal" - ] - ], - "rewards": { - "recipes": [ - "ragium:tiny_charcoal" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/tiny_coal.json b/src/generated/resources/data/ragium/advancement/recipes/misc/tiny_coal.json deleted file mode 100644 index 4da63ad9e4..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/tiny_coal.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_coal": { - "conditions": { - "items": [ - { - "items": "minecraft:coal" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:tiny_coal" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_coal" - ] - ], - "rewards": { - "recipes": [ - "ragium:tiny_coal" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/tiny_coal_coke.json b/src/generated/resources/data/ragium/advancement/recipes/misc/tiny_coal_coke.json deleted file mode 100644 index e2aa922f89..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/tiny_coal_coke.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_coal_coke": { - "conditions": { - "items": [ - { - "items": "ragium:coal_coke" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:tiny_coal_coke" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_coal_coke" - ] - ], - "rewards": { - "recipes": [ - "ragium:tiny_coal_coke" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/void_metal_ingot_from_block.json b/src/generated/resources/data/ragium/advancement/recipes/misc/void_metal_ingot_from_block.json deleted file mode 100644 index f537e80d2c..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/void_metal_ingot_from_block.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_storage_blocks_void_metal": { - "conditions": { - "items": [ - { - "items": "#c:storage_blocks/void_metal" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:void_metal_ingot_from_block" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_storage_blocks_void_metal" - ] - ], - "rewards": { - "recipes": [ - "ragium:void_metal_ingot_from_block" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/void_metal_ingot_from_nugget.json b/src/generated/resources/data/ragium/advancement/recipes/misc/void_metal_ingot_from_nugget.json deleted file mode 100644 index 73429ef771..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/void_metal_ingot_from_nugget.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_nuggets_void_metal": { - "conditions": { - "items": [ - { - "items": "#c:nuggets/void_metal" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:void_metal_ingot_from_nugget" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_nuggets_void_metal" - ] - ], - "rewards": { - "recipes": [ - "ragium:void_metal_ingot_from_nugget" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/void_metal_nugget_from_ingot.json b/src/generated/resources/data/ragium/advancement/recipes/misc/void_metal_nugget_from_ingot.json deleted file mode 100644 index a95f3eab3b..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/void_metal_nugget_from_ingot.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_ingots_void_metal": { - "conditions": { - "items": [ - { - "items": "#c:ingots/void_metal" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:void_metal_nugget_from_ingot" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_ingots_void_metal" - ] - ], - "rewards": { - "recipes": [ - "ragium:void_metal_nugget_from_ingot" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/white_dye_bucket.json b/src/generated/resources/data/ragium/advancement/recipes/misc/white_dye_bucket.json deleted file mode 100644 index ddfd57dfbd..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/white_dye_bucket.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_dyes_white": { - "conditions": { - "items": [ - { - "items": "#c:dyes/white" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:white_dye_bucket" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_dyes_white" - ] - ], - "rewards": { - "recipes": [ - "ragium:white_dye_bucket" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/wood_gear.json b/src/generated/resources/data/ragium/advancement/recipes/misc/wood_gear.json deleted file mode 100644 index 5b82c88990..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/wood_gear.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_planks": { - "conditions": { - "items": [ - { - "items": "#minecraft:planks" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:wood_gear" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_planks" - ] - ], - "rewards": { - "recipes": [ - "ragium:wood_gear" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/yellow_dye_bucket.json b/src/generated/resources/data/ragium/advancement/recipes/misc/yellow_dye_bucket.json deleted file mode 100644 index 6e611d43fd..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/yellow_dye_bucket.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_dyes_yellow": { - "conditions": { - "items": [ - { - "items": "#c:dyes/yellow" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:yellow_dye_bucket" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_dyes_yellow" - ] - ], - "rewards": { - "recipes": [ - "ragium:yellow_dye_bucket" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/tools/sooty_iron_axe.json b/src/generated/resources/data/ragium/advancement/recipes/tools/sooty_iron_axe.json deleted file mode 100644 index eb98246af2..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/tools/sooty_iron_axe.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_sooty_iron_tool_materials": { - "conditions": { - "items": [ - { - "items": "#ragium:sooty_iron_tool_materials" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:sooty_iron_axe" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_sooty_iron_tool_materials" - ] - ], - "rewards": { - "recipes": [ - "ragium:sooty_iron_axe" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/tools/sooty_iron_hoe.json b/src/generated/resources/data/ragium/advancement/recipes/tools/sooty_iron_hoe.json deleted file mode 100644 index 5a0835ef4a..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/tools/sooty_iron_hoe.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_sooty_iron_tool_materials": { - "conditions": { - "items": [ - { - "items": "#ragium:sooty_iron_tool_materials" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:sooty_iron_hoe" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_sooty_iron_tool_materials" - ] - ], - "rewards": { - "recipes": [ - "ragium:sooty_iron_hoe" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/tools/sooty_iron_pickaxe.json b/src/generated/resources/data/ragium/advancement/recipes/tools/sooty_iron_pickaxe.json deleted file mode 100644 index 62613f1493..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/tools/sooty_iron_pickaxe.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_sooty_iron_tool_materials": { - "conditions": { - "items": [ - { - "items": "#ragium:sooty_iron_tool_materials" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:sooty_iron_pickaxe" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_sooty_iron_tool_materials" - ] - ], - "rewards": { - "recipes": [ - "ragium:sooty_iron_pickaxe" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/tools/sooty_iron_shovel.json b/src/generated/resources/data/ragium/advancement/recipes/tools/sooty_iron_shovel.json deleted file mode 100644 index 98df79e80d..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/tools/sooty_iron_shovel.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_sooty_iron_tool_materials": { - "conditions": { - "items": [ - { - "items": "#ragium:sooty_iron_tool_materials" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:sooty_iron_shovel" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_sooty_iron_tool_materials" - ] - ], - "rewards": { - "recipes": [ - "ragium:sooty_iron_shovel" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/tools/sooty_iron_sword.json b/src/generated/resources/data/ragium/advancement/recipes/tools/sooty_iron_sword.json deleted file mode 100644 index 5e535e0506..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/tools/sooty_iron_sword.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_sooty_iron_tool_materials": { - "conditions": { - "items": [ - { - "items": "#ragium:sooty_iron_tool_materials" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:sooty_iron_sword" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_sooty_iron_tool_materials" - ] - ], - "rewards": { - "recipes": [ - "ragium:sooty_iron_sword" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/damage_type/chemical_burn.json b/src/generated/resources/data/ragium/damage_type/chemical_burn.json new file mode 100644 index 0000000000..5921583804 --- /dev/null +++ b/src/generated/resources/data/ragium/damage_type/chemical_burn.json @@ -0,0 +1,6 @@ +{ + "effects": "burning", + "exhaustion": 0.1, + "message_id": "chemicalBurn", + "scaling": "always" +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/loot_table/blocks/alloy_smelter.json b/src/generated/resources/data/ragium/loot_table/blocks/alloy_smelter.json index 58a1bfe4be..1649a28f98 100644 --- a/src/generated/resources/data/ragium/loot_table/blocks/alloy_smelter.json +++ b/src/generated/resources/data/ragium/loot_table/blocks/alloy_smelter.json @@ -11,6 +11,16 @@ "entries": [ { "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_components", + "include": [ + "minecraft:custom_name", + "ragium:owner_id" + ], + "source": "block_entity" + } + ], "name": "ragium:alloy_smelter" } ], diff --git a/src/generated/resources/data/ragium/loot_table/blocks/aluminum_block.json b/src/generated/resources/data/ragium/loot_table/blocks/aluminum_block.json new file mode 100644 index 0000000000..088271cc7d --- /dev/null +++ b/src/generated/resources/data/ragium/loot_table/blocks/aluminum_block.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "ragium:aluminum_block" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "ragium:blocks/aluminum_block" +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/loot_table/blocks/assembler.json b/src/generated/resources/data/ragium/loot_table/blocks/assembler.json index 49c85f09a7..9bdc1aa1f2 100644 --- a/src/generated/resources/data/ragium/loot_table/blocks/assembler.json +++ b/src/generated/resources/data/ragium/loot_table/blocks/assembler.json @@ -11,6 +11,16 @@ "entries": [ { "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_components", + "include": [ + "minecraft:custom_name", + "ragium:owner_id" + ], + "source": "block_entity" + } + ], "name": "ragium:assembler" } ], diff --git a/src/generated/resources/data/ragium/loot_table/blocks/brewery.json b/src/generated/resources/data/ragium/loot_table/blocks/brewery.json index a2c081659b..4508153ac7 100644 --- a/src/generated/resources/data/ragium/loot_table/blocks/brewery.json +++ b/src/generated/resources/data/ragium/loot_table/blocks/brewery.json @@ -11,6 +11,16 @@ "entries": [ { "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_components", + "include": [ + "minecraft:custom_name", + "ragium:owner_id" + ], + "source": "block_entity" + } + ], "name": "ragium:brewery" } ], diff --git a/src/generated/resources/data/ragium/loot_table/blocks/chemical_bath.json b/src/generated/resources/data/ragium/loot_table/blocks/chemical_bath.json index 4513a6b548..ec2e1ead6e 100644 --- a/src/generated/resources/data/ragium/loot_table/blocks/chemical_bath.json +++ b/src/generated/resources/data/ragium/loot_table/blocks/chemical_bath.json @@ -11,6 +11,16 @@ "entries": [ { "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_components", + "include": [ + "minecraft:custom_name", + "ragium:owner_id" + ], + "source": "block_entity" + } + ], "name": "ragium:chemical_bath" } ], diff --git a/src/generated/resources/data/ragium/loot_table/blocks/chemical_reactor.json b/src/generated/resources/data/ragium/loot_table/blocks/chemical_reactor.json index 2302f1329d..e2ac729b23 100644 --- a/src/generated/resources/data/ragium/loot_table/blocks/chemical_reactor.json +++ b/src/generated/resources/data/ragium/loot_table/blocks/chemical_reactor.json @@ -11,6 +11,16 @@ "entries": [ { "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_components", + "include": [ + "minecraft:custom_name", + "ragium:owner_id" + ], + "source": "block_entity" + } + ], "name": "ragium:chemical_reactor" } ], diff --git a/src/generated/resources/data/ragium/loot_table/blocks/compressor.json b/src/generated/resources/data/ragium/loot_table/blocks/compressor.json index 7a2b78e93c..364e2c9f9d 100644 --- a/src/generated/resources/data/ragium/loot_table/blocks/compressor.json +++ b/src/generated/resources/data/ragium/loot_table/blocks/compressor.json @@ -11,6 +11,16 @@ "entries": [ { "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_components", + "include": [ + "minecraft:custom_name", + "ragium:owner_id" + ], + "source": "block_entity" + } + ], "name": "ragium:compressor" } ], diff --git a/src/generated/resources/data/ragium/loot_table/blocks/creative_tank.json b/src/generated/resources/data/ragium/loot_table/blocks/creative_tank.json new file mode 100644 index 0000000000..23360595cf --- /dev/null +++ b/src/generated/resources/data/ragium/loot_table/blocks/creative_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:creative_tank" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "ragium:blocks/creative_tank" +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/loot_table/blocks/crusher.json b/src/generated/resources/data/ragium/loot_table/blocks/crusher.json index 2cd76a7bfc..5c46060f49 100644 --- a/src/generated/resources/data/ragium/loot_table/blocks/crusher.json +++ b/src/generated/resources/data/ragium/loot_table/blocks/crusher.json @@ -11,6 +11,16 @@ "entries": [ { "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_components", + "include": [ + "minecraft:custom_name", + "ragium:owner_id" + ], + "source": "block_entity" + } + ], "name": "ragium:crusher" } ], diff --git a/src/generated/resources/data/ragium/loot_table/blocks/cryolite_block.json b/src/generated/resources/data/ragium/loot_table/blocks/cryolite_block.json new file mode 100644 index 0000000000..a21263dd58 --- /dev/null +++ b/src/generated/resources/data/ragium/loot_table/blocks/cryolite_block.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "ragium:cryolite_block" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "ragium:blocks/cryolite_block" +} \ 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 new file mode 100644 index 0000000000..da029e80b2 --- /dev/null +++ b/src/generated/resources/data/ragium/loot_table/blocks/cryolite_slab.json @@ -0,0 +1,35 @@ +{ + "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/cryolite_stairs.json b/src/generated/resources/data/ragium/loot_table/blocks/cryolite_stairs.json new file mode 100644 index 0000000000..8dfa581224 --- /dev/null +++ b/src/generated/resources/data/ragium/loot_table/blocks/cryolite_stairs.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "ragium:cryolite_stairs" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "ragium:blocks/cryolite_stairs" +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/loot_table/blocks/cutting_machine.json b/src/generated/resources/data/ragium/loot_table/blocks/cutting_machine.json index d7b3cde729..76e2af19ff 100644 --- a/src/generated/resources/data/ragium/loot_table/blocks/cutting_machine.json +++ b/src/generated/resources/data/ragium/loot_table/blocks/cutting_machine.json @@ -11,6 +11,16 @@ "entries": [ { "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_components", + "include": [ + "minecraft:custom_name", + "ragium:owner_id" + ], + "source": "block_entity" + } + ], "name": "ragium:cutting_machine" } ], diff --git a/src/generated/resources/data/ragium/loot_table/blocks/electrolyzer.json b/src/generated/resources/data/ragium/loot_table/blocks/electrolyzer.json index 7d0576d6d6..ffa2c69016 100644 --- a/src/generated/resources/data/ragium/loot_table/blocks/electrolyzer.json +++ b/src/generated/resources/data/ragium/loot_table/blocks/electrolyzer.json @@ -11,6 +11,16 @@ "entries": [ { "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_components", + "include": [ + "minecraft:custom_name", + "ragium:owner_id" + ], + "source": "block_entity" + } + ], "name": "ragium:electrolyzer" } ], diff --git a/src/generated/resources/data/ragium/loot_table/blocks/enchanter.json b/src/generated/resources/data/ragium/loot_table/blocks/enchanter.json new file mode 100644 index 0000000000..0189e8cc96 --- /dev/null +++ b/src/generated/resources/data/ragium/loot_table/blocks/enchanter.json @@ -0,0 +1,31 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_components", + "include": [ + "minecraft:custom_name", + "ragium:owner_id" + ], + "source": "block_entity" + } + ], + "name": "ragium:enchanter" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "ragium:blocks/enchanter" +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/loot_table/blocks/fluorite_block.json b/src/generated/resources/data/ragium/loot_table/blocks/fluorite_block.json new file mode 100644 index 0000000000..5047b901a1 --- /dev/null +++ b/src/generated/resources/data/ragium/loot_table/blocks/fluorite_block.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "ragium:fluorite_block" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "ragium:blocks/fluorite_block" +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/loot_table/blocks/fluorite_slab.json b/src/generated/resources/data/ragium/loot_table/blocks/fluorite_slab.json new file mode 100644 index 0000000000..7cd6327048 --- /dev/null +++ b/src/generated/resources/data/ragium/loot_table/blocks/fluorite_slab.json @@ -0,0 +1,35 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "add": false, + "conditions": [ + { + "block": "ragium:fluorite_slab", + "condition": "minecraft:block_state_property", + "properties": { + "type": "double" + } + } + ], + "count": 2.0, + "function": "minecraft:set_count" + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "ragium:fluorite_slab" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "ragium:blocks/fluorite_slab" +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/loot_table/blocks/fluorite_stairs.json b/src/generated/resources/data/ragium/loot_table/blocks/fluorite_stairs.json new file mode 100644 index 0000000000..73e44c0621 --- /dev/null +++ b/src/generated/resources/data/ragium/loot_table/blocks/fluorite_stairs.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "ragium:fluorite_stairs" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "ragium:blocks/fluorite_stairs" +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/loot_table/blocks/freezer.json b/src/generated/resources/data/ragium/loot_table/blocks/freezer.json index 9f0bbe72b2..89ca3ae9f8 100644 --- a/src/generated/resources/data/ragium/loot_table/blocks/freezer.json +++ b/src/generated/resources/data/ragium/loot_table/blocks/freezer.json @@ -11,6 +11,16 @@ "entries": [ { "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_components", + "include": [ + "minecraft:custom_name", + "ragium:owner_id" + ], + "source": "block_entity" + } + ], "name": "ragium:freezer" } ], diff --git a/src/generated/resources/data/ragium/loot_table/blocks/melter.json b/src/generated/resources/data/ragium/loot_table/blocks/melter.json index f6c061aa3c..d486c42aa9 100644 --- a/src/generated/resources/data/ragium/loot_table/blocks/melter.json +++ b/src/generated/resources/data/ragium/loot_table/blocks/melter.json @@ -11,6 +11,16 @@ "entries": [ { "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_components", + "include": [ + "minecraft:custom_name", + "ragium:owner_id" + ], + "source": "block_entity" + } + ], "name": "ragium:melter" } ], diff --git a/src/generated/resources/data/ragium/loot_table/blocks/mixer.json b/src/generated/resources/data/ragium/loot_table/blocks/mixer.json index d3aef1bf46..89ccafc1d7 100644 --- a/src/generated/resources/data/ragium/loot_table/blocks/mixer.json +++ b/src/generated/resources/data/ragium/loot_table/blocks/mixer.json @@ -11,6 +11,16 @@ "entries": [ { "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_components", + "include": [ + "minecraft:custom_name", + "ragium:owner_id" + ], + "source": "block_entity" + } + ], "name": "ragium:mixer" } ], diff --git a/src/generated/resources/data/ragium/loot_table/blocks/pitch_coke_block.json b/src/generated/resources/data/ragium/loot_table/blocks/pitch_coke_block.json new file mode 100644 index 0000000000..d3c6144e22 --- /dev/null +++ b/src/generated/resources/data/ragium/loot_table/blocks/pitch_coke_block.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "ragium:pitch_coke_block" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "ragium:blocks/pitch_coke_block" +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/loot_table/blocks/planter.json b/src/generated/resources/data/ragium/loot_table/blocks/planter.json index ed02fb6688..b67a6e9287 100644 --- a/src/generated/resources/data/ragium/loot_table/blocks/planter.json +++ b/src/generated/resources/data/ragium/loot_table/blocks/planter.json @@ -11,6 +11,16 @@ "entries": [ { "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_components", + "include": [ + "minecraft:custom_name", + "ragium:owner_id" + ], + "source": "block_entity" + } + ], "name": "ragium:planter" } ], diff --git a/src/generated/resources/data/ragium/loot_table/blocks/precision_assembler.json b/src/generated/resources/data/ragium/loot_table/blocks/precision_assembler.json new file mode 100644 index 0000000000..74545e4b7b --- /dev/null +++ b/src/generated/resources/data/ragium/loot_table/blocks/precision_assembler.json @@ -0,0 +1,31 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_components", + "include": [ + "minecraft:custom_name", + "ragium:owner_id" + ], + "source": "block_entity" + } + ], + "name": "ragium:precision_assembler" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "ragium:blocks/precision_assembler" +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/loot_table/blocks/pyrolyzer.json b/src/generated/resources/data/ragium/loot_table/blocks/pyrolyzer.json index 04b0390a8b..780f546495 100644 --- a/src/generated/resources/data/ragium/loot_table/blocks/pyrolyzer.json +++ b/src/generated/resources/data/ragium/loot_table/blocks/pyrolyzer.json @@ -11,6 +11,16 @@ "entries": [ { "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_components", + "include": [ + "minecraft:custom_name", + "ragium:owner_id" + ], + "source": "block_entity" + } + ], "name": "ragium:pyrolyzer" } ], diff --git a/src/generated/resources/data/ragium/loot_table/blocks/refinery.json b/src/generated/resources/data/ragium/loot_table/blocks/refinery.json index f1105d1f75..eb1f91ee73 100644 --- a/src/generated/resources/data/ragium/loot_table/blocks/refinery.json +++ b/src/generated/resources/data/ragium/loot_table/blocks/refinery.json @@ -11,6 +11,16 @@ "entries": [ { "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_components", + "include": [ + "minecraft:custom_name", + "ragium:owner_id" + ], + "source": "block_entity" + } + ], "name": "ragium:refinery" } ], diff --git a/src/generated/resources/data/ragium/loot_table/blocks/scanner.json b/src/generated/resources/data/ragium/loot_table/blocks/scanner.json index c4b8410f21..1d87bfab5f 100644 --- a/src/generated/resources/data/ragium/loot_table/blocks/scanner.json +++ b/src/generated/resources/data/ragium/loot_table/blocks/scanner.json @@ -11,6 +11,16 @@ "entries": [ { "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_components", + "include": [ + "minecraft:custom_name", + "ragium:owner_id" + ], + "source": "block_entity" + } + ], "name": "ragium:scanner" } ], diff --git a/src/generated/resources/data/ragium/loot_table/blocks/smelter.json b/src/generated/resources/data/ragium/loot_table/blocks/smelter.json index e49b128f68..4d83b362e6 100644 --- a/src/generated/resources/data/ragium/loot_table/blocks/smelter.json +++ b/src/generated/resources/data/ragium/loot_table/blocks/smelter.json @@ -11,6 +11,16 @@ "entries": [ { "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_components", + "include": [ + "minecraft:custom_name", + "ragium:owner_id" + ], + "source": "block_entity" + } + ], "name": "ragium:smelter" } ], diff --git a/src/generated/resources/data/ragium/loot_table/blocks/tank.json b/src/generated/resources/data/ragium/loot_table/blocks/tank.json new file mode 100644 index 0000000000..21b5a4cd60 --- /dev/null +++ b/src/generated/resources/data/ragium/loot_table/blocks/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:tank" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "ragium:blocks/tank" +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/loot_table/blocks/void_tank.json b/src/generated/resources/data/ragium/loot_table/blocks/void_tank.json new file mode 100644 index 0000000000..29a23b48a1 --- /dev/null +++ b/src/generated/resources/data/ragium/loot_table/blocks/void_tank.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "ragium:void_tank" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "ragium:blocks/void_tank" +} \ 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 index 617e30d90d..b26e843e01 100644 --- a/src/generated/resources/data/ragium/ragium/ore_slurry_data/copper.json +++ b/src/generated/resources/data/ragium/ragium/ore_slurry_data/copper.json @@ -1,8 +1,17 @@ { - "count": 3, - "fallback": "ragium:copper_dust", - "result": "#c:dusts/copper", + "color": "#c15a36", + "result": { + "type": "ragium:with_fallback", + "base": { + "type": "ragium:tag", + "tag": "#c:dusts/copper" + }, + "count": 3, + "fallback": { + "id": "ragium:copper_dust" + } + }, "title": { - "translate": "ore_slurry_data.ragium.copper" + "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 index 0c25e83264..02ef20bc8f 100644 --- a/src/generated/resources/data/ragium/ragium/ore_slurry_data/gold.json +++ b/src/generated/resources/data/ragium/ragium/ore_slurry_data/gold.json @@ -1,8 +1,17 @@ { - "count": 2, - "fallback": "ragium:gold_dust", - "result": "#c:dusts/gold", + "color": "#ffcc00", + "result": { + "type": "ragium:with_fallback", + "base": { + "type": "ragium:tag", + "tag": "#c:dusts/gold" + }, + "count": 2, + "fallback": { + "id": "ragium:gold_dust" + } + }, "title": { - "translate": "ore_slurry_data.ragium.gold" + "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 index 4236afe94a..de10c1c784 100644 --- a/src/generated/resources/data/ragium/ragium/ore_slurry_data/iron.json +++ b/src/generated/resources/data/ragium/ragium/ore_slurry_data/iron.json @@ -1,8 +1,17 @@ { - "count": 2, - "fallback": "ragium:iron_dust", - "result": "#c:dusts/iron", + "color": "#777777", + "result": { + "type": "ragium:with_fallback", + "base": { + "type": "ragium:tag", + "tag": "#c:dusts/iron" + }, + "count": 2, + "fallback": { + "id": "ragium:iron_dust" + } + }, "title": { - "translate": "ore_slurry_data.ragium.iron" + "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 new file mode 100644 index 0000000000..d656b3144e --- /dev/null +++ b/src/generated/resources/data/ragium/ragium/ore_slurry_data/netherite_scrap.json @@ -0,0 +1,10 @@ +{ + "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 new file mode 100644 index 0000000000..db409a6093 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/alloying/aluminum_ingot.json @@ -0,0 +1,16 @@ +{ + "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 new file mode 100644 index 0000000000..9c4035abf7 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/alloying/aluminum_ingot_with_cryolite.json @@ -0,0 +1,28 @@ +{ + "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/black_steel_ingot.json b/src/generated/resources/data/ragium/recipe/alloying/black_steel_ingot.json index e4d75734e3..8c735716f0 100644 --- a/src/generated/resources/data/ragium/recipe/alloying/black_steel_ingot.json +++ b/src/generated/resources/data/ragium/recipe/alloying/black_steel_ingot.json @@ -1,16 +1,22 @@ { "type": "ragium:alloying", - "primary_ingredient": { + "extra": { + "count": 2, + "items": "#c:dusts/obsidian" + }, + "ingredient": { "count": 1, - "items": "#c:ingots/sooty_iron" + "items": { + "neoforge:ingredient_type": "ragium:material_tags", + "tags": [ + "c:dusts/sooty_iron", + "c:ingots/sooty_iron" + ] + } }, "result": { "count": 1, "id": "ragium:black_steel_ingot" }, - "secondary_ingredient": { - "count": 2, - "items": "#c:dusts/obsidian" - }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/alloying/brick.json b/src/generated/resources/data/ragium/recipe/alloying/brick.json new file mode 100644 index 0000000000..1bff04d78a --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/alloying/brick.json @@ -0,0 +1,16 @@ +{ + "type": "ragium:alloying", + "extra": { + "count": 1, + "items": "#c:sands" + }, + "ingredient": { + "count": 1, + "items": "minecraft:clay_ball" + }, + "result": { + "count": 2, + "id": "minecraft:brick" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/alloying/chemical_machine_parts.json b/src/generated/resources/data/ragium/recipe/alloying/chemical_machine_parts.json index 9d0a9b6b44..6735f9b82d 100644 --- a/src/generated/resources/data/ragium/recipe/alloying/chemical_machine_parts.json +++ b/src/generated/resources/data/ragium/recipe/alloying/chemical_machine_parts.json @@ -1,6 +1,16 @@ { "type": "ragium:alloying", - "primary_ingredient": { + "extra": { + "count": 1, + "items": { + "neoforge:ingredient_type": "ragium:material_tags", + "tags": [ + "c:dusts/gold", + "c:ingots/gold" + ] + } + }, + "ingredient": { "count": 2, "items": "#c:ingots/black_steel" }, @@ -8,15 +18,5 @@ "count": 1, "id": "ragium:chemical_machine_parts" }, - "secondary_ingredient": { - "count": 1, - "items": { - "type": "neoforge:or", - "values": [ - "#c:dusts/gold", - "#c:ingots/gold" - ] - } - }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/alloying/circuit_board.json b/src/generated/resources/data/ragium/recipe/alloying/circuit_board.json new file mode 100644 index 0000000000..6b98f7f568 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/alloying/circuit_board.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:alloying", + "extra": { + "count": 1, + "items": { + "neoforge:ingredient_type": "ragium:material_tags", + "tags": [ + "c:dusts/gold", + "c:ingots/gold" + ] + } + }, + "ingredient": { + "count": 1, + "items": "#c:plastics" + }, + "result": { + "count": 1, + "id": "ragium:circuit_board" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/alloying/crude_silicon_from_amethyst.json b/src/generated/resources/data/ragium/recipe/alloying/crude_silicon_from_amethyst.json new file mode 100644 index 0000000000..7b1bceb3e1 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/alloying/crude_silicon_from_amethyst.json @@ -0,0 +1,29 @@ +{ + "type": "ragium:alloying", + "extra": { + "count": 1, + "items": { + "neoforge:ingredient_type": "ragium:material_tags", + "tags": [ + "c:dusts/coal_coke", + "c:dusts/pitch_coke", + "ragium:cokes" + ] + } + }, + "ingredient": { + "count": 4, + "items": { + "neoforge:ingredient_type": "ragium:material_tags", + "tags": [ + "c:dusts/amethyst", + "c:gems/amethyst" + ] + } + }, + "result": { + "count": 1, + "id": "ragium:crude_silicon" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/alloying/crude_silicon_from_amethyst_block.json b/src/generated/resources/data/ragium/recipe/alloying/crude_silicon_from_amethyst_block.json new file mode 100644 index 0000000000..fc99110c76 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/alloying/crude_silicon_from_amethyst_block.json @@ -0,0 +1,23 @@ +{ + "type": "ragium:alloying", + "extra": { + "count": 1, + "items": { + "neoforge:ingredient_type": "ragium:material_tags", + "tags": [ + "c:dusts/coal_coke", + "c:dusts/pitch_coke", + "ragium:cokes" + ] + } + }, + "ingredient": { + "count": 1, + "items": "minecraft:amethyst_block" + }, + "result": { + "count": 1, + "id": "ragium:crude_silicon" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/alloying/crude_silicon_from_quartz.json b/src/generated/resources/data/ragium/recipe/alloying/crude_silicon_from_quartz.json new file mode 100644 index 0000000000..2538f11f84 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/alloying/crude_silicon_from_quartz.json @@ -0,0 +1,29 @@ +{ + "type": "ragium:alloying", + "extra": { + "count": 1, + "items": { + "neoforge:ingredient_type": "ragium:material_tags", + "tags": [ + "c:dusts/coal_coke", + "c:dusts/pitch_coke", + "ragium:cokes" + ] + } + }, + "ingredient": { + "count": 1, + "items": { + "neoforge:ingredient_type": "ragium:material_tags", + "tags": [ + "c:dusts/quartz", + "c:gems/quartz" + ] + } + }, + "result": { + "count": 1, + "id": "ragium:crude_silicon" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/alloying/crude_silicon_from_quartz_block.json b/src/generated/resources/data/ragium/recipe/alloying/crude_silicon_from_quartz_block.json new file mode 100644 index 0000000000..415a8e5c8a --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/alloying/crude_silicon_from_quartz_block.json @@ -0,0 +1,23 @@ +{ + "type": "ragium:alloying", + "extra": { + "count": 4, + "items": { + "neoforge:ingredient_type": "ragium:material_tags", + "tags": [ + "c:dusts/coal_coke", + "c:dusts/pitch_coke", + "ragium:cokes" + ] + } + }, + "ingredient": { + "count": 1, + "items": "#ragium:quartz_blocks" + }, + "result": { + "count": 4, + "id": "ragium:crude_silicon" + }, + "time": 800 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/alloying/nether_brick.json b/src/generated/resources/data/ragium/recipe/alloying/nether_brick.json new file mode 100644 index 0000000000..e32c0b3194 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/alloying/nether_brick.json @@ -0,0 +1,16 @@ +{ + "type": "ragium:alloying", + "extra": { + "count": 1, + "items": "#minecraft:soul_fire_base_blocks" + }, + "ingredient": { + "count": 1, + "items": "#c:netherracks" + }, + "result": { + "count": 2, + "id": "minecraft:nether_brick" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/alloying/netherite_ingot.json b/src/generated/resources/data/ragium/recipe/alloying/netherite_ingot.json index f2ee777966..7a45f33214 100644 --- a/src/generated/resources/data/ragium/recipe/alloying/netherite_ingot.json +++ b/src/generated/resources/data/ragium/recipe/alloying/netherite_ingot.json @@ -1,12 +1,16 @@ { "type": "ragium:alloying", - "primary_ingredient": { + "extra": { + "count": 2, + "items": "minecraft:netherite_scrap" + }, + "ingredient": { "count": 2, "items": { - "type": "neoforge:or", - "values": [ - "#c:dusts/gold", - "#c:ingots/gold" + "neoforge:ingredient_type": "ragium:material_tags", + "tags": [ + "c:dusts/gold", + "c:ingots/gold" ] } }, @@ -14,9 +18,5 @@ "count": 1, "id": "minecraft:netherite_ingot" }, - "secondary_ingredient": { - "count": 2, - "items": "minecraft:netherite_scrap" - }, "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 new file mode 100644 index 0000000000..b1ab1a2837 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/alloying/obzinite_ingot.json @@ -0,0 +1,34 @@ +{ + "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/alloying/silicon_wafer.json b/src/generated/resources/data/ragium/recipe/alloying/silicon_wafer.json new file mode 100644 index 0000000000..c3926089c9 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/alloying/silicon_wafer.json @@ -0,0 +1,16 @@ +{ + "type": "ragium:alloying", + "extra": { + "count": 1, + "items": "#c:dusts/raginite" + }, + "ingredient": { + "count": 8, + "items": "#c:dusts/silicon" + }, + "result": { + "count": 1, + "id": "ragium:silicon_wafer" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/alloying/sooty_iron_ingot_by_coals.json b/src/generated/resources/data/ragium/recipe/alloying/sooty_iron_ingot_by_coals.json new file mode 100644 index 0000000000..53cdba98ba --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/alloying/sooty_iron_ingot_by_coals.json @@ -0,0 +1,29 @@ +{ + "type": "ragium:alloying", + "extra": { + "count": 1, + "items": { + "neoforge:ingredient_type": "ragium:material_tags", + "tags": [ + "c:dusts/coal", + "c:dusts/charcoal", + "ragium:coals" + ] + } + }, + "ingredient": { + "count": 1, + "items": { + "neoforge:ingredient_type": "ragium:material_tags", + "tags": [ + "c:dusts/iron", + "c:ingots/iron" + ] + } + }, + "result": { + "count": 1, + "id": "ragium:sooty_iron_ingot" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/alloying/sooty_iron_ingot_by_cokes.json b/src/generated/resources/data/ragium/recipe/alloying/sooty_iron_ingot_by_cokes.json new file mode 100644 index 0000000000..d508bb4987 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/alloying/sooty_iron_ingot_by_cokes.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:alloying", + "extra": { + "count": 1, + "items": "#ragium:cokes" + }, + "ingredient": { + "count": 2, + "items": { + "neoforge:ingredient_type": "ragium:material_tags", + "tags": [ + "c:dusts/iron", + "c:ingots/iron" + ] + } + }, + "result": { + "count": 2, + "id": "ragium:sooty_iron_ingot" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/assembling/activator_rail.json b/src/generated/resources/data/ragium/recipe/assembling/activator_rail.json new file mode 100644 index 0000000000..b9dd9c11cd --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/assembling/activator_rail.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:assembling", + "extras": [ + { + "count": 1, + "items": "#c:rods/wooden" + }, + { + "count": 2, + "items": "minecraft:redstone_torch" + } + ], + "ingredient": { + "count": 6, + "items": "#c:ingots/iron" + }, + "result": { + "count": 9, + "id": "minecraft:activator_rail" + }, + "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 8dc7706fa5..34c481d046 100644 --- a/src/generated/resources/data/ragium/recipe/assembling/cobweb.json +++ b/src/generated/resources/data/ragium/recipe/assembling/cobweb.json @@ -1,6 +1,10 @@ { "type": "ragium:assembling", - "primary_ingredient": { + "extra": { + "count": 1, + "items": "#c:sticky_balls" + }, + "ingredient": { "count": 5, "items": "#c:strings" }, @@ -8,9 +12,5 @@ "count": 1, "id": "minecraft:cobweb" }, - "secondary_ingredient": { - "count": 1, - "items": "#c:sticky_balls" - }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/assembling/comparator.json b/src/generated/resources/data/ragium/recipe/assembling/comparator.json new file mode 100644 index 0000000000..b7169ec371 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/assembling/comparator.json @@ -0,0 +1,28 @@ +{ + "type": "ragium:assembling", + "extras": [ + { + "count": 3, + "items": "minecraft:redstone_torch" + }, + { + "count": 1, + "items": { + "neoforge:ingredient_type": "ragium:material_tags", + "tags": [ + "c:dusts/quartz", + "c:gems/quartz" + ] + } + } + ], + "ingredient": { + "count": 1, + "items": "#c:stones" + }, + "result": { + "count": 2, + "id": "minecraft:comparator" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/assembling/copper_chain.json b/src/generated/resources/data/ragium/recipe/assembling/copper_chain.json index d0f52dce66..da420bd06c 100644 --- a/src/generated/resources/data/ragium/recipe/assembling/copper_chain.json +++ b/src/generated/resources/data/ragium/recipe/assembling/copper_chain.json @@ -1,6 +1,10 @@ { "type": "ragium:assembling", - "primary_ingredient": { + "extra": { + "count": 3, + "items": "#c:nuggets/copper" + }, + "ingredient": { "count": 1, "items": "#c:ingots/copper" }, @@ -8,9 +12,5 @@ "count": 3, "id": "minecraft:copper_chain" }, - "secondary_ingredient": { - "count": 3, - "items": "#c:nuggets/copper" - }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/assembling/copper_lantern.json b/src/generated/resources/data/ragium/recipe/assembling/copper_lantern.json index 9e1b663366..3cabe24f4a 100644 --- a/src/generated/resources/data/ragium/recipe/assembling/copper_lantern.json +++ b/src/generated/resources/data/ragium/recipe/assembling/copper_lantern.json @@ -1,6 +1,10 @@ { "type": "ragium:assembling", - "primary_ingredient": { + "extra": { + "count": 1, + "items": "minecraft:torch" + }, + "ingredient": { "count": 1, "items": "#c:ingots/copper" }, @@ -8,9 +12,5 @@ "count": 2, "id": "minecraft:copper_lantern" }, - "secondary_ingredient": { - "count": 1, - "items": "minecraft:torch" - }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/assembling/creeper_head.json b/src/generated/resources/data/ragium/recipe/assembling/creeper_head.json index 46c527d539..6e1d37a419 100644 --- a/src/generated/resources/data/ragium/recipe/assembling/creeper_head.json +++ b/src/generated/resources/data/ragium/recipe/assembling/creeper_head.json @@ -1,6 +1,10 @@ { "type": "ragium:assembling", - "primary_ingredient": { + "extra": { + "count": 8, + "items": "#c:gunpowders" + }, + "ingredient": { "count": 1, "items": "minecraft:skeleton_skull" }, @@ -8,9 +12,5 @@ "count": 1, "id": "minecraft:creeper_head" }, - "secondary_ingredient": { - "count": 8, - "items": "#c:gunpowders" - }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/assembling/crimson_nylium.json b/src/generated/resources/data/ragium/recipe/assembling/crimson_nylium.json index f2c8b3b023..c51dd00f7f 100644 --- a/src/generated/resources/data/ragium/recipe/assembling/crimson_nylium.json +++ b/src/generated/resources/data/ragium/recipe/assembling/crimson_nylium.json @@ -1,6 +1,10 @@ { "type": "ragium:assembling", - "primary_ingredient": { + "extra": { + "count": 1, + "items": "minecraft:crimson_fungus" + }, + "ingredient": { "count": 1, "items": "#c:netherracks" }, @@ -8,9 +12,5 @@ "count": 1, "id": "minecraft:crimson_nylium" }, - "secondary_ingredient": { - "count": 1, - "items": "minecraft:crimson_fungus" - }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/assembling/detector_rail.json b/src/generated/resources/data/ragium/recipe/assembling/detector_rail.json new file mode 100644 index 0000000000..e3e382c111 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/assembling/detector_rail.json @@ -0,0 +1,25 @@ +{ + "type": "ragium:assembling", + "extras": [ + { + "count": 1, + "items": { + "neoforge:ingredient_type": "neoforge:block_tag", + "tag": "minecraft:stone_pressure_plates" + } + }, + { + "count": 1, + "items": "#c:dusts/redstone" + } + ], + "ingredient": { + "count": 6, + "items": "#c:ingots/iron" + }, + "result": { + "count": 9, + "id": "minecraft:detector_rail" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/assembling/dispenser.json b/src/generated/resources/data/ragium/recipe/assembling/dispenser.json index 590876cc39..c13d762725 100644 --- a/src/generated/resources/data/ragium/recipe/assembling/dispenser.json +++ b/src/generated/resources/data/ragium/recipe/assembling/dispenser.json @@ -1,6 +1,10 @@ { "type": "ragium:assembling", - "primary_ingredient": { + "extra": { + "count": 1, + "items": "#c:tools/bow" + }, + "ingredient": { "count": 1, "items": "minecraft:dropper" }, @@ -8,9 +12,5 @@ "count": 1, "id": "minecraft:dispenser" }, - "secondary_ingredient": { - "count": 1, - "items": "#c:tools/bow" - }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/assembling/dispenser_stackable.json b/src/generated/resources/data/ragium/recipe/assembling/dispenser_stackable.json new file mode 100644 index 0000000000..28a6ae1a98 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/assembling/dispenser_stackable.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:assembling", + "extras": [ + { + "count": 3, + "items": "#c:rods/wooden" + }, + { + "count": 3, + "items": "#c:strings" + } + ], + "ingredient": { + "count": 1, + "items": "minecraft:dropper" + }, + "result": { + "count": 1, + "id": "minecraft:dispenser" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/assembling/electric_circuit.json b/src/generated/resources/data/ragium/recipe/assembling/electric_circuit.json new file mode 100644 index 0000000000..aa1faac67b --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/assembling/electric_circuit.json @@ -0,0 +1,16 @@ +{ + "type": "ragium:assembling", + "extra": { + "count": 1, + "items": "ragium:circuit_board" + }, + "ingredient": { + "count": 2, + "items": "ragium:circuit_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 new file mode 100644 index 0000000000..73392ae268 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/assembling/electronics_machine_parts.json @@ -0,0 +1,16 @@ +{ + "type": "ragium:assembling", + "extra": { + "count": 1, + "items": "ragium:electric_circuit" + }, + "ingredient": { + "count": 2, + "items": "#c:ingots/void_metal" + }, + "result": { + "count": 1, + "id": "ragium:electronics_machine_parts" + }, + "time": 200 +} \ No newline at end of file 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 new file mode 100644 index 0000000000..e7be79da01 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/assembling/electronics_machine_parts_by_black_metal.json @@ -0,0 +1,16 @@ +{ + "type": "ragium:assembling", + "extra": { + "count": 1, + "items": "ragium:electric_circuit" + }, + "ingredient": { + "count": 4, + "items": "#c:ingots/black_steel" + }, + "result": { + "count": 1, + "id": "ragium:electronics_machine_parts" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/assembling/enchanted_golden_apple.json b/src/generated/resources/data/ragium/recipe/assembling/enchanted_golden_apple.json index 7e821c80e8..9e89e6d810 100644 --- a/src/generated/resources/data/ragium/recipe/assembling/enchanted_golden_apple.json +++ b/src/generated/resources/data/ragium/recipe/assembling/enchanted_golden_apple.json @@ -1,6 +1,10 @@ { "type": "ragium:assembling", - "primary_ingredient": { + "extra": { + "count": 8, + "items": "#c:storage_blocks/gold" + }, + "ingredient": { "count": 1, "items": "minecraft:apple" }, @@ -8,9 +12,5 @@ "count": 1, "id": "minecraft:enchanted_golden_apple" }, - "secondary_ingredient": { - "count": 8, - "items": "#c:storage_blocks/gold" - }, "time": 1600 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/assembling/gilded_blackstone.json b/src/generated/resources/data/ragium/recipe/assembling/gilded_blackstone.json index 71e9732bee..4917101c8a 100644 --- a/src/generated/resources/data/ragium/recipe/assembling/gilded_blackstone.json +++ b/src/generated/resources/data/ragium/recipe/assembling/gilded_blackstone.json @@ -1,6 +1,10 @@ { "type": "ragium:assembling", - "primary_ingredient": { + "extra": { + "count": 8, + "items": "#c:dusts/gold" + }, + "ingredient": { "count": 1, "items": "minecraft:blackstone" }, @@ -8,9 +12,5 @@ "count": 1, "id": "minecraft:gilded_blackstone" }, - "secondary_ingredient": { - "count": 8, - "items": "#c:dusts/gold" - }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/assembling/heat_machine_parts.json b/src/generated/resources/data/ragium/recipe/assembling/heat_machine_parts.json index 10776e5bd0..9831f72dde 100644 --- a/src/generated/resources/data/ragium/recipe/assembling/heat_machine_parts.json +++ b/src/generated/resources/data/ragium/recipe/assembling/heat_machine_parts.json @@ -1,6 +1,10 @@ { "type": "ragium:assembling", - "primary_ingredient": { + "extra": { + "count": 1, + "items": "minecraft:magma_block" + }, + "ingredient": { "count": 1, "items": "ragium:mechanical_machine_parts" }, @@ -8,9 +12,5 @@ "count": 1, "id": "ragium:heat_machine_parts" }, - "secondary_ingredient": { - "count": 1, - "items": "minecraft:magma_block" - }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/assembling/hopper.json b/src/generated/resources/data/ragium/recipe/assembling/hopper.json deleted file mode 100644 index 90f84d7554..0000000000 --- a/src/generated/resources/data/ragium/recipe/assembling/hopper.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "ragium:assembling", - "primary_ingredient": { - "count": 5, - "items": "#c:ingots/iron" - }, - "result": { - "count": 1, - "id": "minecraft:hopper" - }, - "secondary_ingredient": { - "count": 1, - "items": "#c:chests/wooden" - }, - "time": 200 -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/assembling/iron_chain.json b/src/generated/resources/data/ragium/recipe/assembling/iron_chain.json index 1ab140e7ed..b4fec65a04 100644 --- a/src/generated/resources/data/ragium/recipe/assembling/iron_chain.json +++ b/src/generated/resources/data/ragium/recipe/assembling/iron_chain.json @@ -1,6 +1,10 @@ { "type": "ragium:assembling", - "primary_ingredient": { + "extra": { + "count": 3, + "items": "#c:nuggets/iron" + }, + "ingredient": { "count": 1, "items": "#c:ingots/iron" }, @@ -8,9 +12,5 @@ "count": 3, "id": "minecraft:iron_chain" }, - "secondary_ingredient": { - "count": 3, - "items": "#c:nuggets/iron" - }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/assembling/lantern.json b/src/generated/resources/data/ragium/recipe/assembling/lantern.json index 5f864bc355..7c12b7c3b3 100644 --- a/src/generated/resources/data/ragium/recipe/assembling/lantern.json +++ b/src/generated/resources/data/ragium/recipe/assembling/lantern.json @@ -1,6 +1,10 @@ { "type": "ragium:assembling", - "primary_ingredient": { + "extra": { + "count": 1, + "items": "minecraft:torch" + }, + "ingredient": { "count": 1, "items": "#c:ingots/iron" }, @@ -8,9 +12,5 @@ "count": 2, "id": "minecraft:lantern" }, - "secondary_ingredient": { - "count": 1, - "items": "minecraft:torch" - }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/assembling/mycelium.json b/src/generated/resources/data/ragium/recipe/assembling/mycelium.json index 7be57d2ecb..55e9ddafef 100644 --- a/src/generated/resources/data/ragium/recipe/assembling/mycelium.json +++ b/src/generated/resources/data/ragium/recipe/assembling/mycelium.json @@ -1,6 +1,10 @@ { "type": "ragium:assembling", - "primary_ingredient": { + "extra": { + "count": 1, + "items": "#c:mushrooms" + }, + "ingredient": { "count": 1, "items": "minecraft:dirt" }, @@ -8,9 +12,5 @@ "count": 1, "id": "minecraft:mycelium" }, - "secondary_ingredient": { - "count": 1, - "items": "#c:mushrooms" - }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/assembling/piglin_head.json b/src/generated/resources/data/ragium/recipe/assembling/piglin_head.json index e3a9e2bbe6..29ae2eea60 100644 --- a/src/generated/resources/data/ragium/recipe/assembling/piglin_head.json +++ b/src/generated/resources/data/ragium/recipe/assembling/piglin_head.json @@ -1,6 +1,10 @@ { "type": "ragium:assembling", - "primary_ingredient": { + "extra": { + "count": 8, + "items": "minecraft:porkchop" + }, + "ingredient": { "count": 1, "items": "minecraft:skeleton_skull" }, @@ -8,9 +12,5 @@ "count": 1, "id": "minecraft:piglin_head" }, - "secondary_ingredient": { - "count": 8, - "items": "minecraft:porkchop" - }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/assembling/podzol.json b/src/generated/resources/data/ragium/recipe/assembling/podzol.json index 698c5ca37a..647764f9f0 100644 --- a/src/generated/resources/data/ragium/recipe/assembling/podzol.json +++ b/src/generated/resources/data/ragium/recipe/assembling/podzol.json @@ -1,6 +1,10 @@ { "type": "ragium:assembling", - "primary_ingredient": { + "extra": { + "count": 8, + "items": "#minecraft:leaves" + }, + "ingredient": { "count": 1, "items": "minecraft:dirt" }, @@ -8,9 +12,5 @@ "count": 1, "id": "minecraft:podzol" }, - "secondary_ingredient": { - "count": 8, - "items": "#minecraft:leaves" - }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/assembling/powered_rail.json b/src/generated/resources/data/ragium/recipe/assembling/powered_rail.json new file mode 100644 index 0000000000..a6b53e329c --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/assembling/powered_rail.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:assembling", + "extras": [ + { + "count": 1, + "items": "#c:rods/wooden" + }, + { + "count": 1, + "items": "#c:dusts/redstone" + } + ], + "ingredient": { + "count": 6, + "items": "#c:ingots/gold" + }, + "result": { + "count": 9, + "id": "minecraft:powered_rail" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/assembling/rail.json b/src/generated/resources/data/ragium/recipe/assembling/rail.json new file mode 100644 index 0000000000..82b51f8597 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/assembling/rail.json @@ -0,0 +1,16 @@ +{ + "type": "ragium:assembling", + "extra": { + "count": 1, + "items": "#c:rods/wooden" + }, + "ingredient": { + "count": 6, + "items": "#c:ingots/iron" + }, + "result": { + "count": 24, + "id": "minecraft:rail" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/assembling/repeater.json b/src/generated/resources/data/ragium/recipe/assembling/repeater.json new file mode 100644 index 0000000000..6a37ab22da --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/assembling/repeater.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:assembling", + "extras": [ + { + "count": 2, + "items": "minecraft:redstone_torch" + }, + { + "count": 1, + "items": "#c:dusts/redstone" + } + ], + "ingredient": { + "count": 1, + "items": "#c:stones" + }, + "result": { + "count": 2, + "id": "minecraft:repeater" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/assembling/soul_lantern.json b/src/generated/resources/data/ragium/recipe/assembling/soul_lantern.json index 91d16604cf..68aedee5da 100644 --- a/src/generated/resources/data/ragium/recipe/assembling/soul_lantern.json +++ b/src/generated/resources/data/ragium/recipe/assembling/soul_lantern.json @@ -1,6 +1,10 @@ { "type": "ragium:assembling", - "primary_ingredient": { + "extra": { + "count": 1, + "items": "minecraft:soul_torch" + }, + "ingredient": { "count": 1, "items": "#c:ingots/iron" }, @@ -8,9 +12,5 @@ "count": 2, "id": "minecraft:soul_lantern" }, - "secondary_ingredient": { - "count": 1, - "items": "minecraft:soul_torch" - }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/assembling/tnt.json b/src/generated/resources/data/ragium/recipe/assembling/tnt.json index 724399f0ba..217340f0fd 100644 --- a/src/generated/resources/data/ragium/recipe/assembling/tnt.json +++ b/src/generated/resources/data/ragium/recipe/assembling/tnt.json @@ -1,6 +1,10 @@ { "type": "ragium:assembling", - "primary_ingredient": { + "extra": { + "count": 5, + "items": "#c:gunpowders" + }, + "ingredient": { "count": 4, "items": "#c:sands" }, @@ -8,9 +12,5 @@ "count": 2, "id": "minecraft:tnt" }, - "secondary_ingredient": { - "count": 5, - "items": "#c:gunpowders" - }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/assembling/warped_nylium.json b/src/generated/resources/data/ragium/recipe/assembling/warped_nylium.json index 11d8938097..77ff544265 100644 --- a/src/generated/resources/data/ragium/recipe/assembling/warped_nylium.json +++ b/src/generated/resources/data/ragium/recipe/assembling/warped_nylium.json @@ -1,6 +1,10 @@ { "type": "ragium:assembling", - "primary_ingredient": { + "extra": { + "count": 1, + "items": "minecraft:warped_fungus" + }, + "ingredient": { "count": 1, "items": "#c:netherracks" }, @@ -8,9 +12,5 @@ "count": 1, "id": "minecraft:warped_nylium" }, - "secondary_ingredient": { - "count": 1, - "items": "minecraft:warped_fungus" - }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/assembling/zombie_head.json b/src/generated/resources/data/ragium/recipe/assembling/zombie_head.json index 2dc7c6be3c..af62be402e 100644 --- a/src/generated/resources/data/ragium/recipe/assembling/zombie_head.json +++ b/src/generated/resources/data/ragium/recipe/assembling/zombie_head.json @@ -1,6 +1,10 @@ { "type": "ragium:assembling", - "primary_ingredient": { + "extra": { + "count": 8, + "items": "minecraft:rotten_flesh" + }, + "ingredient": { "count": 1, "items": "minecraft:skeleton_skull" }, @@ -8,9 +12,5 @@ "count": 1, "id": "minecraft:zombie_head" }, - "secondary_ingredient": { - "count": 8, - "items": "minecraft:rotten_flesh" - }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/black_dye_from_carbon.json b/src/generated/resources/data/ragium/recipe/bathing/black_dye_from_carbon.json new file mode 100644 index 0000000000..fe4d136f77 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/black_dye_from_carbon.json @@ -0,0 +1,16 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 250, + "fluids": "#ragium:resins" + }, + "item_ingredient": { + "count": 1, + "items": "#c:dusts/carbon" + }, + "result": { + "count": 1, + "id": "minecraft:black_dye" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/blue_dye_from_lapis.json b/src/generated/resources/data/ragium/recipe/bathing/blue_dye_from_lapis.json new file mode 100644 index 0000000000..dd9f200bc0 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/blue_dye_from_lapis.json @@ -0,0 +1,16 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 250, + "fluids": "#ragium:resins" + }, + "item_ingredient": { + "count": 1, + "items": "#c:dusts/lapis" + }, + "result": { + "count": 1, + "id": "minecraft:blue_dye" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/brown_dye_from_bauxite.json b/src/generated/resources/data/ragium/recipe/bathing/brown_dye_from_bauxite.json new file mode 100644 index 0000000000..1f0adf6daf --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/brown_dye_from_bauxite.json @@ -0,0 +1,16 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 250, + "fluids": "#ragium:resins" + }, + "item_ingredient": { + "count": 1, + "items": "#c:dusts/bauxite" + }, + "result": { + "count": 1, + "id": "minecraft:brown_dye" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/salt_dust_from_block.json b/src/generated/resources/data/ragium/recipe/bathing/salt_dust_from_block.json new file mode 100644 index 0000000000..83aab8897e --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/salt_dust_from_block.json @@ -0,0 +1,16 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 1000, + "fluids": "#c:water" + }, + "item_ingredient": { + "count": 1, + "items": "#c:storage_blocks/dried_kelp" + }, + "result": { + "count": 6, + "id": "ragium:salt_dust" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/silicon_dust.json b/src/generated/resources/data/ragium/recipe/bathing/silicon_dust.json new file mode 100644 index 0000000000..f11b25a586 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/silicon_dust.json @@ -0,0 +1,16 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 125, + "fluids": "#c:hydrochloric_acid" + }, + "item_ingredient": { + "count": 1, + "items": "#c:silicon" + }, + "result": { + "count": 1, + "id": "ragium:silicon_dust" + }, + "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/bathing/tinted_glass.json index 1b9a5d7b49..3e32376200 100644 --- a/src/generated/resources/data/ragium/recipe/bathing/tinted_glass.json +++ b/src/generated/resources/data/ragium/recipe/bathing/tinted_glass.json @@ -6,7 +6,13 @@ }, "item_ingredient": { "count": 1, - "items": "#c:dusts/amethyst" + "items": { + "neoforge:ingredient_type": "ragium:material_tags", + "tags": [ + "c:dusts/amethyst", + "c:gems/amethyst" + ] + } }, "result": { "count": 2, diff --git a/src/generated/resources/data/ragium/recipe/copper_ingot_from_blasting_dust.json b/src/generated/resources/data/ragium/recipe/blasting/copper_ingot_from_dust.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/copper_ingot_from_blasting_dust.json rename to src/generated/resources/data/ragium/recipe/blasting/copper_ingot_from_dust.json diff --git a/src/generated/resources/data/ragium/recipe/gold_ingot_from_blasting_dust.json b/src/generated/resources/data/ragium/recipe/blasting/gold_ingot_from_dust.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/gold_ingot_from_blasting_dust.json rename to src/generated/resources/data/ragium/recipe/blasting/gold_ingot_from_dust.json diff --git a/src/generated/resources/data/ragium/recipe/iron_ingot_from_blasting_dust.json b/src/generated/resources/data/ragium/recipe/blasting/iron_ingot_from_dust.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/iron_ingot_from_blasting_dust.json rename to src/generated/resources/data/ragium/recipe/blasting/iron_ingot_from_dust.json diff --git a/src/generated/resources/data/ragium/recipe/netherite_ingot_from_blasting_dust.json b/src/generated/resources/data/ragium/recipe/blasting/netherite_ingot_from_dust.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/netherite_ingot_from_blasting_dust.json rename to src/generated/resources/data/ragium/recipe/blasting/netherite_ingot_from_dust.json diff --git a/src/generated/resources/data/ragium/recipe/brewing/potion/blindness.json b/src/generated/resources/data/ragium/recipe/brewing/potion/blindness.json new file mode 100644 index 0000000000..78d43bdd0a --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/brewing/potion/blindness.json @@ -0,0 +1,27 @@ +{ + "type": "ragium:brewing", + "fluid_ingredient": { + "amount": 1000, + "fluids": { + "neoforge:ingredient_type": "ragium:potion", + "potions": "minecraft:thick" + } + }, + "item_ingredient": { + "count": 1, + "items": "#c:glass_blocks/tinted" + }, + "result": { + "type": "ragium:potion", + "amount": 1000, + "custom_effects": [ + { + "duration": 900, + "id": "minecraft:blindness", + "show_icon": true + } + ], + "custom_name": "blindness" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/brewing/potion/darkness.json b/src/generated/resources/data/ragium/recipe/brewing/potion/darkness.json index 590944bb67..dc71ceb5c3 100644 --- a/src/generated/resources/data/ragium/recipe/brewing/potion/darkness.json +++ b/src/generated/resources/data/ragium/recipe/brewing/potion/darkness.json @@ -9,7 +9,13 @@ }, "item_ingredient": { "count": 1, - "items": "#c:gems/echo" + "items": { + "neoforge:ingredient_type": "ragium:material_tags", + "tags": [ + "c:dusts/echo", + "c:gems/echo" + ] + } }, "result": { "type": "ragium:potion", diff --git a/src/generated/resources/data/ragium/recipe/brewing/potion/nausea.json b/src/generated/resources/data/ragium/recipe/brewing/potion/nausea.json new file mode 100644 index 0000000000..b8c00efc6c --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/brewing/potion/nausea.json @@ -0,0 +1,27 @@ +{ + "type": "ragium:brewing", + "fluid_ingredient": { + "amount": 1000, + "fluids": { + "neoforge:ingredient_type": "ragium:potion", + "potions": "minecraft:thick" + } + }, + "item_ingredient": { + "count": 1, + "items": "minecraft:pufferfish" + }, + "result": { + "type": "ragium:potion", + "amount": 1000, + "custom_effects": [ + { + "duration": 900, + "id": "minecraft:nausea", + "show_icon": true + } + ], + "custom_name": "nausea" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/brewing/potion/wither.json b/src/generated/resources/data/ragium/recipe/brewing/potion/wither.json new file mode 100644 index 0000000000..e237554dd0 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/brewing/potion/wither.json @@ -0,0 +1,30 @@ +{ + "type": "ragium:brewing", + "fluid_ingredient": { + "amount": 1000, + "fluids": { + "neoforge:ingredient_type": "ragium:potion", + "potions": "minecraft:thick" + } + }, + "item_ingredient": { + "count": 1, + "items": [ + "minecraft:wither_rose", + "minecraft:wither_skeleton_skull" + ] + }, + "result": { + "type": "ragium:potion", + "amount": 1000, + "custom_effects": [ + { + "duration": 900, + "id": "minecraft:wither", + "show_icon": true + } + ], + "custom_name": "wither" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/compressing/charcoal_from_dust.json b/src/generated/resources/data/ragium/recipe/compressing/charcoal_from_dust.json index 431aa34133..4f975104f9 100644 --- a/src/generated/resources/data/ragium/recipe/compressing/charcoal_from_dust.json +++ b/src/generated/resources/data/ragium/recipe/compressing/charcoal_from_dust.json @@ -1,4 +1,13 @@ { + "neoforge:conditions": [ + { + "type": "neoforge:not", + "value": { + "type": "neoforge:tag_empty", + "tag": "c:dusts/charcoal" + } + } + ], "type": "ragium:compressing", "ingredient": { "count": 1, diff --git a/src/generated/resources/data/ragium/recipe/compressing/coal_coke_from_dust.json b/src/generated/resources/data/ragium/recipe/compressing/coal_coke_from_dust.json index 20518d5f1b..81188f583b 100644 --- a/src/generated/resources/data/ragium/recipe/compressing/coal_coke_from_dust.json +++ b/src/generated/resources/data/ragium/recipe/compressing/coal_coke_from_dust.json @@ -1,4 +1,13 @@ { + "neoforge:conditions": [ + { + "type": "neoforge:not", + "value": { + "type": "neoforge:tag_empty", + "tag": "c:dusts/coal_coke" + } + } + ], "type": "ragium:compressing", "ingredient": { "count": 1, diff --git a/src/generated/resources/data/ragium/recipe/compressing/coal_from_dust.json b/src/generated/resources/data/ragium/recipe/compressing/coal_from_dust.json index f2b1af738e..f075a444e2 100644 --- a/src/generated/resources/data/ragium/recipe/compressing/coal_from_dust.json +++ b/src/generated/resources/data/ragium/recipe/compressing/coal_from_dust.json @@ -1,4 +1,13 @@ { + "neoforge:conditions": [ + { + "type": "neoforge:not", + "value": { + "type": "neoforge:tag_empty", + "tag": "c:dusts/coal" + } + } + ], "type": "ragium:compressing", "ingredient": { "count": 1, diff --git a/src/generated/resources/data/ragium/recipe/compressing/pitch_coke_from_dust.json b/src/generated/resources/data/ragium/recipe/compressing/pitch_coke_from_dust.json new file mode 100644 index 0000000000..a16d8a1450 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/compressing/pitch_coke_from_dust.json @@ -0,0 +1,21 @@ +{ + "neoforge:conditions": [ + { + "type": "neoforge:not", + "value": { + "type": "neoforge:tag_empty", + "tag": "c:dusts/pitch_coke" + } + } + ], + "type": "ragium:compressing", + "ingredient": { + "count": 1, + "items": "#c:dusts/pitch_coke" + }, + "result": { + "count": 1, + "id": "ragium:pitch_coke" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/crushing/amethyst_dust_from_gem.json b/src/generated/resources/data/ragium/recipe/crushing/amethyst_dust_from_gem.json index 3c1914e335..6ba2e8eebb 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/amethyst_dust_from_gem.json +++ b/src/generated/resources/data/ragium/recipe/crushing/amethyst_dust_from_gem.json @@ -4,7 +4,7 @@ "count": 1, "items": "#c:gems/amethyst" }, - "results": { + "result": { "count": 1, "id": "ragium:amethyst_dust" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/amethyst_shard.json b/src/generated/resources/data/ragium/recipe/crushing/amethyst_shard.json index 0d8fbd1622..d9f74d9028 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/amethyst_shard.json +++ b/src/generated/resources/data/ragium/recipe/crushing/amethyst_shard.json @@ -4,7 +4,7 @@ "count": 1, "items": "minecraft:amethyst_block" }, - "results": { + "result": { "count": 4, "id": "minecraft:amethyst_shard" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/black_dye.json b/src/generated/resources/data/ragium/recipe/crushing/black_dye.json index 6f05c860d3..cb0fc84f61 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/black_dye.json +++ b/src/generated/resources/data/ragium/recipe/crushing/black_dye.json @@ -7,7 +7,7 @@ "minecraft:wither_rose" ] }, - "results": { + "result": { "count": 2, "id": "minecraft:black_dye" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/blaze_powder.json b/src/generated/resources/data/ragium/recipe/crushing/blaze_powder.json index fd244abee6..20a7a996c0 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/blaze_powder.json +++ b/src/generated/resources/data/ragium/recipe/crushing/blaze_powder.json @@ -4,7 +4,7 @@ "count": 1, "items": "#c:rods/blaze" }, - "results": { + "result": { "count": 4, "id": "minecraft:blaze_powder" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/blue_dye.json b/src/generated/resources/data/ragium/recipe/crushing/blue_dye.json index df91e88099..e610089932 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/blue_dye.json +++ b/src/generated/resources/data/ragium/recipe/crushing/blue_dye.json @@ -4,7 +4,7 @@ "count": 1, "items": "minecraft:cornflower" }, - "results": { + "result": { "count": 2, "id": "minecraft:blue_dye" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/brick.json b/src/generated/resources/data/ragium/recipe/crushing/brick.json index ebd241bb44..441ec4bd25 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/brick.json +++ b/src/generated/resources/data/ragium/recipe/crushing/brick.json @@ -4,7 +4,7 @@ "count": 1, "items": "minecraft:bricks" }, - "results": { + "result": { "count": 4, "id": "minecraft:brick" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/brown_dye.json b/src/generated/resources/data/ragium/recipe/crushing/brown_dye.json index e40afaaa5c..60e046317f 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/brown_dye.json +++ b/src/generated/resources/data/ragium/recipe/crushing/brown_dye.json @@ -4,7 +4,7 @@ "count": 1, "items": "minecraft:cocoa_beans" }, - "results": { + "result": { "count": 2, "id": "minecraft:brown_dye" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/coal_coke_dust.json b/src/generated/resources/data/ragium/recipe/crushing/carbon_dust.json similarity index 56% rename from src/generated/resources/data/ragium/recipe/crushing/coal_coke_dust.json rename to src/generated/resources/data/ragium/recipe/crushing/carbon_dust.json index d70d5b0b51..7224375066 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/coal_coke_dust.json +++ b/src/generated/resources/data/ragium/recipe/crushing/carbon_dust.json @@ -2,11 +2,11 @@ "type": "ragium:crushing", "ingredient": { "count": 1, - "items": "ragium:coal_coke" + "items": "#ragium:cokes" }, - "results": { + "result": { "count": 1, - "id": "ragium:coal_coke_dust" + "id": "ragium:carbon_dust" }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/crushing/charcoal_dust.json b/src/generated/resources/data/ragium/recipe/crushing/charcoal_dust.json index 603326733c..e24ddf03fe 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/charcoal_dust.json +++ b/src/generated/resources/data/ragium/recipe/crushing/charcoal_dust.json @@ -4,7 +4,7 @@ "count": 1, "items": "minecraft:charcoal" }, - "results": { + "result": { "count": 1, "id": "ragium:charcoal_dust" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/clay_ball.json b/src/generated/resources/data/ragium/recipe/crushing/clay_ball.json index efcd9df52f..9b70abfb97 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/clay_ball.json +++ b/src/generated/resources/data/ragium/recipe/crushing/clay_ball.json @@ -4,7 +4,7 @@ "count": 1, "items": "minecraft:clay" }, - "results": { + "result": { "count": 4, "id": "minecraft:clay_ball" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/coal_dust.json b/src/generated/resources/data/ragium/recipe/crushing/coal_dust.json index 3a01d8f803..65c3533920 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/coal_dust.json +++ b/src/generated/resources/data/ragium/recipe/crushing/coal_dust.json @@ -4,7 +4,7 @@ "count": 1, "items": "minecraft:coal" }, - "results": { + "result": { "count": 1, "id": "ragium:coal_dust" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/copper_dust_from_gear.json b/src/generated/resources/data/ragium/recipe/crushing/copper_dust_from_gear.json index 4dd59bcd27..280412a414 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/copper_dust_from_gear.json +++ b/src/generated/resources/data/ragium/recipe/crushing/copper_dust_from_gear.json @@ -4,7 +4,7 @@ "count": 1, "items": "#c:gears/copper" }, - "results": { + "result": { "count": 4, "id": "ragium:copper_dust" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/copper_dust_from_ingot.json b/src/generated/resources/data/ragium/recipe/crushing/copper_dust_from_ingot.json index 6c3474f09c..e8b9aea2c4 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/copper_dust_from_ingot.json +++ b/src/generated/resources/data/ragium/recipe/crushing/copper_dust_from_ingot.json @@ -4,7 +4,7 @@ "count": 1, "items": "#c:ingots/copper" }, - "results": { + "result": { "count": 1, "id": "ragium:copper_dust" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/copper_dust_from_raw.json b/src/generated/resources/data/ragium/recipe/crushing/copper_dust_from_raw.json index 1eef5863dd..65835f71ee 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/copper_dust_from_raw.json +++ b/src/generated/resources/data/ragium/recipe/crushing/copper_dust_from_raw.json @@ -1,10 +1,19 @@ { + "neoforge:conditions": [ + { + "type": "neoforge:not", + "value": { + "type": "neoforge:tag_empty", + "tag": "c:raw_materials/copper" + } + } + ], "type": "ragium:crushing", "ingredient": { "count": 3, "items": "#c:raw_materials/copper" }, - "results": { + "result": { "count": 4, "id": "ragium:copper_dust" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/cryolite.json b/src/generated/resources/data/ragium/recipe/crushing/cryolite.json new file mode 100644 index 0000000000..5006ddb270 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/crushing/cryolite.json @@ -0,0 +1,12 @@ +{ + "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/cryolite_dust_from_gem.json new file mode 100644 index 0000000000..4ca387edfd --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/crushing/cryolite_dust_from_gem.json @@ -0,0 +1,12 @@ +{ + "type": "ragium:crushing", + "ingredient": { + "count": 1, + "items": "#c:gems/cryolite" + }, + "result": { + "count": 1, + "id": "ragium:cryolite_dust" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/crushing/diamond_dust_from_gear.json b/src/generated/resources/data/ragium/recipe/crushing/diamond_dust_from_gear.json index f7ab6c7da4..a89b6d4e26 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/diamond_dust_from_gear.json +++ b/src/generated/resources/data/ragium/recipe/crushing/diamond_dust_from_gear.json @@ -4,7 +4,7 @@ "count": 1, "items": "#c:gears/diamond" }, - "results": { + "result": { "count": 4, "id": "ragium:diamond_dust" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/diamond_dust_from_gem.json b/src/generated/resources/data/ragium/recipe/crushing/diamond_dust_from_gem.json index 339fa98523..3d14193b92 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/diamond_dust_from_gem.json +++ b/src/generated/resources/data/ragium/recipe/crushing/diamond_dust_from_gem.json @@ -4,7 +4,7 @@ "count": 1, "items": "#c:gems/diamond" }, - "results": { + "result": { "count": 1, "id": "ragium:diamond_dust" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/diamond_dust_from_ore.json b/src/generated/resources/data/ragium/recipe/crushing/diamond_dust_from_ore.json index e795088f84..6e7413a863 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/diamond_dust_from_ore.json +++ b/src/generated/resources/data/ragium/recipe/crushing/diamond_dust_from_ore.json @@ -4,7 +4,7 @@ "count": 1, "items": "#c:ores/diamond" }, - "results": { + "result": { "count": 2, "id": "ragium:diamond_dust" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/double_cyan_dye.json b/src/generated/resources/data/ragium/recipe/crushing/double_cyan_dye.json index 621f124025..fe6e2a7013 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/double_cyan_dye.json +++ b/src/generated/resources/data/ragium/recipe/crushing/double_cyan_dye.json @@ -4,7 +4,7 @@ "count": 1, "items": "minecraft:pitcher_plant" }, - "results": { + "result": { "count": 4, "id": "minecraft:cyan_dye" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/double_pink_dye.json b/src/generated/resources/data/ragium/recipe/crushing/double_pink_dye.json index 4726572405..a65627d1d7 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/double_pink_dye.json +++ b/src/generated/resources/data/ragium/recipe/crushing/double_pink_dye.json @@ -4,7 +4,7 @@ "count": 1, "items": "minecraft:lilac" }, - "results": { + "result": { "count": 4, "id": "minecraft:pink_dye" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/double_red_dye.json b/src/generated/resources/data/ragium/recipe/crushing/double_red_dye.json index 0f738792e1..4af3e32e36 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/double_red_dye.json +++ b/src/generated/resources/data/ragium/recipe/crushing/double_red_dye.json @@ -4,7 +4,7 @@ "count": 1, "items": "minecraft:rose_bush" }, - "results": { + "result": { "count": 4, "id": "minecraft:red_dye" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/double_yellow_dye.json b/src/generated/resources/data/ragium/recipe/crushing/double_yellow_dye.json index 583ae522f2..27ff7342ca 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/double_yellow_dye.json +++ b/src/generated/resources/data/ragium/recipe/crushing/double_yellow_dye.json @@ -4,7 +4,7 @@ "count": 1, "items": "minecraft:sunflower" }, - "results": { + "result": { "count": 4, "id": "minecraft:yellow_dye" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/echo_dust_from_gem.json b/src/generated/resources/data/ragium/recipe/crushing/echo_dust_from_gem.json index 054d76ed79..904baeb0c3 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/echo_dust_from_gem.json +++ b/src/generated/resources/data/ragium/recipe/crushing/echo_dust_from_gem.json @@ -4,7 +4,7 @@ "count": 1, "items": "#c:gems/echo" }, - "results": { + "result": { "count": 1, "id": "ragium:echo_dust" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/echo_shard.json b/src/generated/resources/data/ragium/recipe/crushing/echo_shard.json new file mode 100644 index 0000000000..039d6c988d --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/crushing/echo_shard.json @@ -0,0 +1,12 @@ +{ + "type": "ragium:crushing", + "ingredient": { + "count": 1, + "items": "ragium:echo_block" + }, + "result": { + "count": 4, + "id": "minecraft:echo_shard" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/crushing/emerald_dust_from_gear.json b/src/generated/resources/data/ragium/recipe/crushing/emerald_dust_from_gear.json index 0e13b57ed9..535a5ecf5d 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/emerald_dust_from_gear.json +++ b/src/generated/resources/data/ragium/recipe/crushing/emerald_dust_from_gear.json @@ -4,7 +4,7 @@ "count": 1, "items": "#c:gears/emerald" }, - "results": { + "result": { "count": 4, "id": "ragium:emerald_dust" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/emerald_dust_from_gem.json b/src/generated/resources/data/ragium/recipe/crushing/emerald_dust_from_gem.json index 767f545064..a71309ce5c 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/emerald_dust_from_gem.json +++ b/src/generated/resources/data/ragium/recipe/crushing/emerald_dust_from_gem.json @@ -4,7 +4,7 @@ "count": 1, "items": "#c:gems/emerald" }, - "results": { + "result": { "count": 1, "id": "ragium:emerald_dust" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/emerald_dust_from_ore.json b/src/generated/resources/data/ragium/recipe/crushing/emerald_dust_from_ore.json index 8b610d00cc..b4f44ce65c 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/emerald_dust_from_ore.json +++ b/src/generated/resources/data/ragium/recipe/crushing/emerald_dust_from_ore.json @@ -4,7 +4,7 @@ "count": 1, "items": "#c:ores/emerald" }, - "results": { + "result": { "count": 2, "id": "ragium:emerald_dust" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/fluorite.json b/src/generated/resources/data/ragium/recipe/crushing/fluorite.json new file mode 100644 index 0000000000..1b2ccb0937 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/crushing/fluorite.json @@ -0,0 +1,12 @@ +{ + "type": "ragium:crushing", + "ingredient": { + "count": 1, + "items": "ragium:fluorite_block" + }, + "result": { + "count": 4, + "id": "ragium:fluorite" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/crushing/fluorite_dust_from_gem.json b/src/generated/resources/data/ragium/recipe/crushing/fluorite_dust_from_gem.json new file mode 100644 index 0000000000..31fd7a360c --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/crushing/fluorite_dust_from_gem.json @@ -0,0 +1,12 @@ +{ + "type": "ragium:crushing", + "ingredient": { + "count": 1, + "items": "#c:gems/fluorite" + }, + "result": { + "count": 1, + "id": "ragium:fluorite_dust" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/crushing/glass_dust_from_block.json b/src/generated/resources/data/ragium/recipe/crushing/glass_dust_from_block.json index b0d03f8b36..bd09bda013 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/glass_dust_from_block.json +++ b/src/generated/resources/data/ragium/recipe/crushing/glass_dust_from_block.json @@ -4,7 +4,7 @@ "count": 1, "items": "#c:glass_blocks" }, - "results": { + "result": { "count": 1, "id": "ragium:glass_dust" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/glass_dust_from_pane.json b/src/generated/resources/data/ragium/recipe/crushing/glass_dust_from_pane.json index c44ac5a0f5..71d4326c9d 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/glass_dust_from_pane.json +++ b/src/generated/resources/data/ragium/recipe/crushing/glass_dust_from_pane.json @@ -4,7 +4,7 @@ "count": 8, "items": "#c:glass_panes" }, - "results": { + "result": { "count": 3, "id": "ragium:glass_dust" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/glowstone_dust.json b/src/generated/resources/data/ragium/recipe/crushing/glowstone_dust.json index 4c457e21fa..16ed547636 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/glowstone_dust.json +++ b/src/generated/resources/data/ragium/recipe/crushing/glowstone_dust.json @@ -4,7 +4,7 @@ "count": 1, "items": "minecraft:glowstone" }, - "results": { + "result": { "count": 4, "id": "minecraft:glowstone_dust" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/gold_dust_from_gear.json b/src/generated/resources/data/ragium/recipe/crushing/gold_dust_from_gear.json index 863e14efaf..c05082c5e9 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/gold_dust_from_gear.json +++ b/src/generated/resources/data/ragium/recipe/crushing/gold_dust_from_gear.json @@ -4,7 +4,7 @@ "count": 1, "items": "#c:gears/gold" }, - "results": { + "result": { "count": 4, "id": "ragium:gold_dust" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/gold_dust_from_ingot.json b/src/generated/resources/data/ragium/recipe/crushing/gold_dust_from_ingot.json index ba0fe4661a..009cdf7a4c 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/gold_dust_from_ingot.json +++ b/src/generated/resources/data/ragium/recipe/crushing/gold_dust_from_ingot.json @@ -4,7 +4,7 @@ "count": 1, "items": "#c:ingots/gold" }, - "results": { + "result": { "count": 1, "id": "ragium:gold_dust" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/gold_dust_from_ore.json b/src/generated/resources/data/ragium/recipe/crushing/gold_dust_from_ore.json index 2c2cb57663..59276d5c0d 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/gold_dust_from_ore.json +++ b/src/generated/resources/data/ragium/recipe/crushing/gold_dust_from_ore.json @@ -4,7 +4,7 @@ "count": 1, "items": "#c:ores/gold" }, - "results": { + "result": { "count": 2, "id": "ragium:gold_dust" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/gold_dust_from_raw.json b/src/generated/resources/data/ragium/recipe/crushing/gold_dust_from_raw.json index 6c0338c983..49802562b6 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/gold_dust_from_raw.json +++ b/src/generated/resources/data/ragium/recipe/crushing/gold_dust_from_raw.json @@ -1,10 +1,19 @@ { + "neoforge:conditions": [ + { + "type": "neoforge:not", + "value": { + "type": "neoforge:tag_empty", + "tag": "c:raw_materials/gold" + } + } + ], "type": "ragium:crushing", "ingredient": { "count": 3, "items": "#c:raw_materials/gold" }, - "results": { + "result": { "count": 4, "id": "ragium:gold_dust" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/gray_dye.json b/src/generated/resources/data/ragium/recipe/crushing/gray_dye.json index 7edb65b7af..9b194a4834 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/gray_dye.json +++ b/src/generated/resources/data/ragium/recipe/crushing/gray_dye.json @@ -4,7 +4,7 @@ "count": 1, "items": "minecraft:closed_eyeblossom" }, - "results": { + "result": { "count": 2, "id": "minecraft:gray_dye" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/green_dye.json b/src/generated/resources/data/ragium/recipe/crushing/green_dye.json index 6c4c7556ef..88751bba7f 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/green_dye.json +++ b/src/generated/resources/data/ragium/recipe/crushing/green_dye.json @@ -4,7 +4,7 @@ "count": 1, "items": "minecraft:cactus" }, - "results": { + "result": { "count": 2, "id": "minecraft:green_dye" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/honeycomb.json b/src/generated/resources/data/ragium/recipe/crushing/honeycomb.json index a2cd9550a4..507b9de384 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/honeycomb.json +++ b/src/generated/resources/data/ragium/recipe/crushing/honeycomb.json @@ -4,7 +4,7 @@ "count": 1, "items": "minecraft:honeycomb_block" }, - "results": { + "result": { "count": 4, "id": "minecraft:honeycomb" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/iron_dust_from_gear.json b/src/generated/resources/data/ragium/recipe/crushing/iron_dust_from_gear.json index da6b1f934d..e0e0276980 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/iron_dust_from_gear.json +++ b/src/generated/resources/data/ragium/recipe/crushing/iron_dust_from_gear.json @@ -4,7 +4,7 @@ "count": 1, "items": "#c:gears/iron" }, - "results": { + "result": { "count": 4, "id": "ragium:iron_dust" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/iron_dust_from_ingot.json b/src/generated/resources/data/ragium/recipe/crushing/iron_dust_from_ingot.json index 396cf30212..3392316d4f 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/iron_dust_from_ingot.json +++ b/src/generated/resources/data/ragium/recipe/crushing/iron_dust_from_ingot.json @@ -4,7 +4,7 @@ "count": 1, "items": "#c:ingots/iron" }, - "results": { + "result": { "count": 1, "id": "ragium:iron_dust" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/iron_dust_from_raw.json b/src/generated/resources/data/ragium/recipe/crushing/iron_dust_from_raw.json index 64f6c9a0e1..6fe9ae5f10 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/iron_dust_from_raw.json +++ b/src/generated/resources/data/ragium/recipe/crushing/iron_dust_from_raw.json @@ -1,10 +1,19 @@ { + "neoforge:conditions": [ + { + "type": "neoforge:not", + "value": { + "type": "neoforge:tag_empty", + "tag": "c:raw_materials/iron" + } + } + ], "type": "ragium:crushing", "ingredient": { "count": 3, "items": "#c:raw_materials/iron" }, - "results": { + "result": { "count": 4, "id": "ragium:iron_dust" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/lapis_dust_from_gem.json b/src/generated/resources/data/ragium/recipe/crushing/lapis_dust_from_gem.json index 01b438731e..bc591ff919 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/lapis_dust_from_gem.json +++ b/src/generated/resources/data/ragium/recipe/crushing/lapis_dust_from_gem.json @@ -4,7 +4,7 @@ "count": 1, "items": "#c:gems/lapis" }, - "results": { + "result": { "count": 1, "id": "ragium:lapis_dust" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/lapis_dust_from_ore.json b/src/generated/resources/data/ragium/recipe/crushing/lapis_dust_from_ore.json index 4bdf70c8b6..f9313ab6fa 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/lapis_dust_from_ore.json +++ b/src/generated/resources/data/ragium/recipe/crushing/lapis_dust_from_ore.json @@ -4,7 +4,7 @@ "count": 1, "items": "#c:ores/lapis" }, - "results": { + "result": { "count": 6, "id": "ragium:lapis_dust" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/light_blue_dye.json b/src/generated/resources/data/ragium/recipe/crushing/light_blue_dye.json index 2d62335921..dca000b1e5 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/light_blue_dye.json +++ b/src/generated/resources/data/ragium/recipe/crushing/light_blue_dye.json @@ -4,7 +4,7 @@ "count": 1, "items": "minecraft:blue_orchid" }, - "results": { + "result": { "count": 2, "id": "minecraft:light_blue_dye" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/light_gray_dye.json b/src/generated/resources/data/ragium/recipe/crushing/light_gray_dye.json index 2e5da6ae60..3a164bc827 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/light_gray_dye.json +++ b/src/generated/resources/data/ragium/recipe/crushing/light_gray_dye.json @@ -8,7 +8,7 @@ "minecraft:white_tulip" ] }, - "results": { + "result": { "count": 2, "id": "minecraft:light_gray_dye" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/lime_dye.json b/src/generated/resources/data/ragium/recipe/crushing/lime_dye.json index 5985a44452..75456f3c74 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/lime_dye.json +++ b/src/generated/resources/data/ragium/recipe/crushing/lime_dye.json @@ -4,7 +4,7 @@ "count": 1, "items": "minecraft:sea_pickle" }, - "results": { + "result": { "count": 2, "id": "minecraft:lime_dye" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/magenta_dye.json b/src/generated/resources/data/ragium/recipe/crushing/magenta_dye.json index d35006a523..374a321cf8 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/magenta_dye.json +++ b/src/generated/resources/data/ragium/recipe/crushing/magenta_dye.json @@ -4,7 +4,7 @@ "count": 1, "items": "minecraft:allium" }, - "results": { + "result": { "count": 2, "id": "minecraft:magenta_dye" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/magma_cream.json b/src/generated/resources/data/ragium/recipe/crushing/magma_cream.json index b35c0c1a00..b6dc8031c1 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/magma_cream.json +++ b/src/generated/resources/data/ragium/recipe/crushing/magma_cream.json @@ -4,7 +4,7 @@ "count": 1, "items": "minecraft:magma_block" }, - "results": { + "result": { "count": 4, "id": "minecraft:magma_cream" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/nether_brick.json b/src/generated/resources/data/ragium/recipe/crushing/nether_brick.json index 851227fdaf..edaaffc1dc 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/nether_brick.json +++ b/src/generated/resources/data/ragium/recipe/crushing/nether_brick.json @@ -4,7 +4,7 @@ "count": 1, "items": "minecraft:nether_bricks" }, - "results": { + "result": { "count": 4, "id": "minecraft:nether_brick" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/netherite_dust_from_gear.json b/src/generated/resources/data/ragium/recipe/crushing/netherite_dust_from_gear.json index 75590b3d89..a2616d1409 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/netherite_dust_from_gear.json +++ b/src/generated/resources/data/ragium/recipe/crushing/netherite_dust_from_gear.json @@ -4,7 +4,7 @@ "count": 1, "items": "#c:gears/netherite" }, - "results": { + "result": { "count": 4, "id": "ragium:netherite_dust" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/netherite_dust_from_ingot.json b/src/generated/resources/data/ragium/recipe/crushing/netherite_dust_from_ingot.json index 7a0a81eb45..058c694ece 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/netherite_dust_from_ingot.json +++ b/src/generated/resources/data/ragium/recipe/crushing/netherite_dust_from_ingot.json @@ -4,7 +4,7 @@ "count": 1, "items": "#c:ingots/netherite" }, - "results": { + "result": { "count": 1, "id": "ragium:netherite_dust" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/niter_dust_from_ore.json b/src/generated/resources/data/ragium/recipe/crushing/niter_dust_from_ore.json index 74cfd03911..4a59c0803e 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/niter_dust_from_ore.json +++ b/src/generated/resources/data/ragium/recipe/crushing/niter_dust_from_ore.json @@ -4,7 +4,7 @@ "count": 1, "items": "#c:ores/niter" }, - "results": { + "result": { "count": 6, "id": "ragium:niter_dust" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/obsidian_dust.json b/src/generated/resources/data/ragium/recipe/crushing/obsidian_dust.json index 4239d61a21..ae82a2a960 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/obsidian_dust.json +++ b/src/generated/resources/data/ragium/recipe/crushing/obsidian_dust.json @@ -4,7 +4,7 @@ "count": 1, "items": "#c:obsidians/normal" }, - "results": { + "result": { "count": 1, "id": "ragium:obsidian_dust" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/orange_dye.json b/src/generated/resources/data/ragium/recipe/crushing/orange_dye.json index 195f4b3867..5f7c70566d 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/orange_dye.json +++ b/src/generated/resources/data/ragium/recipe/crushing/orange_dye.json @@ -8,7 +8,7 @@ "minecraft:open_eyeblossom" ] }, - "results": { + "result": { "count": 2, "id": "minecraft:orange_dye" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/packed_ice.json b/src/generated/resources/data/ragium/recipe/crushing/packed_ice.json new file mode 100644 index 0000000000..bb8899831b --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/crushing/packed_ice.json @@ -0,0 +1,18 @@ +{ + "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/paper_dust_from_book.json b/src/generated/resources/data/ragium/recipe/crushing/paper_dust_from_book.json index 66924509d4..a4fd879df5 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/paper_dust_from_book.json +++ b/src/generated/resources/data/ragium/recipe/crushing/paper_dust_from_book.json @@ -4,7 +4,7 @@ "count": 1, "items": "minecraft:book" }, - "results": { + "result": { "count": 3, "id": "ragium:paper_dust" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/pink_dye.json b/src/generated/resources/data/ragium/recipe/crushing/pink_dye.json index ee5fee5c80..e366694e67 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/pink_dye.json +++ b/src/generated/resources/data/ragium/recipe/crushing/pink_dye.json @@ -8,7 +8,7 @@ "minecraft:pink_tulip" ] }, - "results": { + "result": { "count": 2, "id": "minecraft:pink_dye" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/pointed_dripstone.json b/src/generated/resources/data/ragium/recipe/crushing/pointed_dripstone.json index 63c0ed4015..dd58fd099e 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/pointed_dripstone.json +++ b/src/generated/resources/data/ragium/recipe/crushing/pointed_dripstone.json @@ -4,7 +4,7 @@ "count": 1, "items": "minecraft:dripstone_block" }, - "results": { + "result": { "count": 4, "id": "minecraft:pointed_dripstone" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/popped_chorus_fruit.json b/src/generated/resources/data/ragium/recipe/crushing/popped_chorus_fruit.json index 70a585dd6f..c8d228f2e6 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/popped_chorus_fruit.json +++ b/src/generated/resources/data/ragium/recipe/crushing/popped_chorus_fruit.json @@ -4,7 +4,7 @@ "count": 1, "items": "minecraft:purpur_block" }, - "results": { + "result": { "count": 4, "id": "minecraft:popped_chorus_fruit" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/prismarine_dust_from_gem.json b/src/generated/resources/data/ragium/recipe/crushing/prismarine_dust_from_gem.json index b83be6d9be..2320d66964 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/prismarine_dust_from_gem.json +++ b/src/generated/resources/data/ragium/recipe/crushing/prismarine_dust_from_gem.json @@ -4,7 +4,7 @@ "count": 1, "items": "#c:gems/prismarine" }, - "results": { + "result": { "count": 1, "id": "ragium:prismarine_dust" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/prismarine_shard.json b/src/generated/resources/data/ragium/recipe/crushing/prismarine_shard.json index 383e19fcc7..a09a4d6745 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/prismarine_shard.json +++ b/src/generated/resources/data/ragium/recipe/crushing/prismarine_shard.json @@ -4,7 +4,7 @@ "count": 1, "items": "minecraft:prismarine" }, - "results": { + "result": { "count": 4, "id": "minecraft:prismarine_shard" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/quartz.json b/src/generated/resources/data/ragium/recipe/crushing/quartz.json index c17d61a62f..edb7534f8d 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/quartz.json +++ b/src/generated/resources/data/ragium/recipe/crushing/quartz.json @@ -4,7 +4,7 @@ "count": 1, "items": "#ragium:quartz_blocks" }, - "results": { + "result": { "count": 4, "id": "minecraft:quartz" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/quartz_dust_from_gem.json b/src/generated/resources/data/ragium/recipe/crushing/quartz_dust_from_gem.json index 64b9ac0783..1789924a79 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/quartz_dust_from_gem.json +++ b/src/generated/resources/data/ragium/recipe/crushing/quartz_dust_from_gem.json @@ -4,7 +4,7 @@ "count": 1, "items": "#c:gems/quartz" }, - "results": { + "result": { "count": 1, "id": "ragium:quartz_dust" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/red_dye.json b/src/generated/resources/data/ragium/recipe/crushing/red_dye.json index 7d6c35a2b9..55e5ba1e2d 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/red_dye.json +++ b/src/generated/resources/data/ragium/recipe/crushing/red_dye.json @@ -7,7 +7,7 @@ "minecraft:beetroot" ] }, - "results": { + "result": { "count": 2, "id": "minecraft:red_dye" }, 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 7d99b54646..e775c57413 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/red_sand.json +++ b/src/generated/resources/data/ragium/recipe/crushing/red_sand.json @@ -4,9 +4,15 @@ "count": 1, "items": "#c:sandstone/red_blocks" }, - "results": { - "count": 4, - "id": "minecraft:red_sand" - }, + "results": [ + { + "count": 4, + "id": "minecraft:red_sand" + }, + { + "count": 1, + "id": "ragium:bauxite_dust" + } + ], "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 dbeef0a383..82c9ef9e6e 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/sand.json +++ b/src/generated/resources/data/ragium/recipe/crushing/sand.json @@ -4,9 +4,15 @@ "count": 1, "items": "#c:sandstone/uncolored_blocks" }, - "results": { - "count": 4, - "id": "minecraft:sand" - }, + "results": [ + { + "count": 4, + "id": "minecraft:sand" + }, + { + "count": 1, + "id": "ragium:niter_dust" + } + ], "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/crushing/snowball.json b/src/generated/resources/data/ragium/recipe/crushing/snowball.json index e0b6f4a036..de5ebfbe97 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/snowball.json +++ b/src/generated/resources/data/ragium/recipe/crushing/snowball.json @@ -4,7 +4,7 @@ "count": 1, "items": "minecraft:snow_block" }, - "results": { + "result": { "count": 4, "id": "minecraft:snowball" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/sulfur_dust_from_ore.json b/src/generated/resources/data/ragium/recipe/crushing/sulfur_dust_from_ore.json index 99b4b73ac5..11e0ac6ba9 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/sulfur_dust_from_ore.json +++ b/src/generated/resources/data/ragium/recipe/crushing/sulfur_dust_from_ore.json @@ -4,7 +4,7 @@ "count": 1, "items": "#c:ores/sulfur" }, - "results": { + "result": { "count": 6, "id": "ragium:sulfur_dust" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/white_dye.json b/src/generated/resources/data/ragium/recipe/crushing/white_dye.json index a1406aecb5..a7c282a62a 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/white_dye.json +++ b/src/generated/resources/data/ragium/recipe/crushing/white_dye.json @@ -7,7 +7,7 @@ "minecraft:lily_of_the_valley" ] }, - "results": { + "result": { "count": 2, "id": "minecraft:white_dye" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/wind_charge.json b/src/generated/resources/data/ragium/recipe/crushing/wind_charge.json index dd0f177307..163ee6f369 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/wind_charge.json +++ b/src/generated/resources/data/ragium/recipe/crushing/wind_charge.json @@ -4,7 +4,7 @@ "count": 1, "items": "#c:rods/breeze" }, - "results": { + "result": { "count": 6, "id": "minecraft:wind_charge" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_barrels_wooden.json b/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_barrels_wooden.json index 9e97a915c1..e4f1075770 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_barrels_wooden.json +++ b/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_barrels_wooden.json @@ -4,7 +4,7 @@ "count": 1, "items": "#c:barrels/wooden" }, - "results": { + "result": { "count": 7, "id": "ragium:wood_dust" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_boats.json b/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_boats.json index 080632eff9..cf4634e6bd 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_boats.json +++ b/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_boats.json @@ -8,7 +8,7 @@ "subtracted": "#minecraft:chest_boats" } }, - "results": { + "result": { "count": 5, "id": "ragium:wood_dust" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_chest_boats.json b/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_chest_boats.json index 3fc1661db4..45d081bc2e 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_chest_boats.json +++ b/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_chest_boats.json @@ -4,7 +4,7 @@ "count": 1, "items": "#minecraft:chest_boats" }, - "results": { + "result": { "count": 13, "id": "ragium:wood_dust" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_chests_wooden.json b/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_chests_wooden.json index 743a4e4498..64ada1fdf8 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_chests_wooden.json +++ b/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_chests_wooden.json @@ -4,7 +4,7 @@ "count": 1, "items": "#c:chests/wooden" }, - "results": { + "result": { "count": 8, "id": "ragium:wood_dust" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_fence_gates_wooden.json b/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_fence_gates_wooden.json index 24f68bef13..bd1e7f9f92 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_fence_gates_wooden.json +++ b/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_fence_gates_wooden.json @@ -4,7 +4,7 @@ "count": 1, "items": "#c:fence_gates/wooden" }, - "results": { + "result": { "count": 4, "id": "ragium:wood_dust" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_fences_wooden.json b/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_fences_wooden.json index 318f545cdf..37f644e604 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_fences_wooden.json +++ b/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_fences_wooden.json @@ -4,7 +4,7 @@ "count": 1, "items": "#c:fences/wooden" }, - "results": { + "result": { "count": 1, "id": "ragium:wood_dust" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_gear.json b/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_gear.json index 8928a73067..e06fb5653e 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_gear.json +++ b/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_gear.json @@ -4,7 +4,7 @@ "count": 1, "items": "#c:gears/wood" }, - "results": { + "result": { "count": 4, "id": "ragium:wood_dust" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_gears_wood.json b/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_gears_wood.json index 509a00549c..da848ea428 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_gears_wood.json +++ b/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_gears_wood.json @@ -4,7 +4,7 @@ "count": 4, "items": "#c:gears/wood" }, - "results": { + "result": { "count": 1, "id": "ragium:wood_dust" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_hanging_signs.json b/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_hanging_signs.json index 6a1d23e2b6..f6919beb6e 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_hanging_signs.json +++ b/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_hanging_signs.json @@ -4,7 +4,7 @@ "count": 1, "items": "#minecraft:hanging_signs" }, - "results": { + "result": { "count": 6, "id": "ragium:wood_dust" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_logs.json b/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_logs.json index 04d956e358..8a41c23550 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_logs.json +++ b/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_logs.json @@ -4,7 +4,7 @@ "count": 1, "items": "#minecraft:logs" }, - "results": { + "result": { "count": 6, "id": "ragium:wood_dust" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_planks.json b/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_planks.json index d62d372eb7..9a52713623 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_planks.json +++ b/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_planks.json @@ -4,7 +4,7 @@ "count": 1, "items": "#minecraft:planks" }, - "results": { + "result": { "count": 1, "id": "ragium:wood_dust" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_rods_wooden.json b/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_rods_wooden.json index 546edee629..84a7822779 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_rods_wooden.json +++ b/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_rods_wooden.json @@ -4,7 +4,7 @@ "count": 2, "items": "#c:rods/wooden" }, - "results": { + "result": { "count": 1, "id": "ragium:wood_dust" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_signs.json b/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_signs.json index 21744c9f1e..87046437c9 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_signs.json +++ b/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_signs.json @@ -4,7 +4,7 @@ "count": 1, "items": "#minecraft:signs" }, - "results": { + "result": { "count": 2, "id": "ragium:wood_dust" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_wooden_buttons.json b/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_wooden_buttons.json index 265ab9140c..11180c31a6 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_wooden_buttons.json +++ b/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_wooden_buttons.json @@ -4,7 +4,7 @@ "count": 1, "items": "#minecraft:wooden_buttons" }, - "results": { + "result": { "count": 1, "id": "ragium:wood_dust" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_wooden_doors.json b/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_wooden_doors.json index 74436a0b87..da9797c120 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_wooden_doors.json +++ b/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_wooden_doors.json @@ -4,7 +4,7 @@ "count": 1, "items": "#minecraft:wooden_doors" }, - "results": { + "result": { "count": 2, "id": "ragium:wood_dust" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_wooden_pressure_plates.json b/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_wooden_pressure_plates.json index 2cac828dfd..07b5d9ac94 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_wooden_pressure_plates.json +++ b/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_wooden_pressure_plates.json @@ -4,7 +4,7 @@ "count": 1, "items": "#minecraft:wooden_pressure_plates" }, - "results": { + "result": { "count": 2, "id": "ragium:wood_dust" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_wooden_shelves.json b/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_wooden_shelves.json index bc01ccc871..c259d74b68 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_wooden_shelves.json +++ b/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_wooden_shelves.json @@ -4,7 +4,7 @@ "count": 1, "items": "#minecraft:wooden_shelves" }, - "results": { + "result": { "count": 6, "id": "ragium:wood_dust" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_wooden_slabs.json b/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_wooden_slabs.json index 26999d2363..5fd960c69d 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_wooden_slabs.json +++ b/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_wooden_slabs.json @@ -4,7 +4,7 @@ "count": 2, "items": "#minecraft:wooden_slabs" }, - "results": { + "result": { "count": 1, "id": "ragium:wood_dust" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_wooden_stairs.json b/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_wooden_stairs.json index 7ca2ce3411..5db2c481bb 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_wooden_stairs.json +++ b/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_wooden_stairs.json @@ -4,7 +4,7 @@ "count": 2, "items": "#minecraft:wooden_stairs" }, - "results": { + "result": { "count": 3, "id": "ragium:wood_dust" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_wooden_trapdoors.json b/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_wooden_trapdoors.json index 9bddf0b662..4f6854c672 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_wooden_trapdoors.json +++ b/src/generated/resources/data/ragium/recipe/crushing/wood_dust_from_wooden_trapdoors.json @@ -4,7 +4,7 @@ "count": 3, "items": "#minecraft:wooden_trapdoors" }, - "results": { + "result": { "count": 1, "id": "ragium:wood_dust" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/yellow_dye.json b/src/generated/resources/data/ragium/recipe/crushing/yellow_dye.json index e389539c08..c9abf35119 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/yellow_dye.json +++ b/src/generated/resources/data/ragium/recipe/crushing/yellow_dye.json @@ -8,7 +8,7 @@ "minecraft:wildflowers" ] }, - "results": { + "result": { "count": 2, "id": "minecraft:yellow_dye" }, diff --git a/src/generated/resources/data/ragium/recipe/cutting/circuit_chip.json b/src/generated/resources/data/ragium/recipe/cutting/circuit_chip.json new file mode 100644 index 0000000000..e7cbe309c4 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/cutting/circuit_chip.json @@ -0,0 +1,12 @@ +{ + "type": "ragium:cutting", + "ingredient": { + "count": 1, + "items": "ragium:silicon_wafer" + }, + "result": { + "count": 8, + "id": "ragium:circuit_chip" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/cutting/melon_slice.json b/src/generated/resources/data/ragium/recipe/cutting/melon_slice.json index 53615e52ba..f61d1fa4cb 100644 --- a/src/generated/resources/data/ragium/recipe/cutting/melon_slice.json +++ b/src/generated/resources/data/ragium/recipe/cutting/melon_slice.json @@ -4,7 +4,7 @@ "count": 1, "items": "minecraft:melon" }, - "results": { + "result": { "count": 9, "id": "minecraft:melon_slice" }, diff --git a/src/generated/resources/data/ragium/recipe/cutting/stick_from_saplings.json b/src/generated/resources/data/ragium/recipe/cutting/stick_from_saplings.json index 50dc7ed14b..f1031cf982 100644 --- a/src/generated/resources/data/ragium/recipe/cutting/stick_from_saplings.json +++ b/src/generated/resources/data/ragium/recipe/cutting/stick_from_saplings.json @@ -4,7 +4,7 @@ "count": 1, "items": "#minecraft:saplings" }, - "results": { + "result": { "count": 1, "id": "minecraft:stick" }, 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 ec4dad8c6d..161e77bfc9 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 @@ -15,7 +15,7 @@ }, { "amount": 500, - "id": "ragium:chloride" + "id": "ragium:chlorine" }, { "amount": 1000, diff --git a/src/generated/resources/data/ragium/recipe/freezing/black_dye_from_liquid_dye.json b/src/generated/resources/data/ragium/recipe/freezing/black_dye_from_liquid_dye.json new file mode 100644 index 0000000000..2c65e52129 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/freezing/black_dye_from_liquid_dye.json @@ -0,0 +1,12 @@ +{ + "type": "ragium:freezing", + "ingredient": { + "amount": 250, + "fluids": "#c:dyes/black" + }, + "result": { + "count": 1, + "id": "minecraft:black_dye" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/freezing/blue_dye_from_liquid_dye.json b/src/generated/resources/data/ragium/recipe/freezing/blue_dye_from_liquid_dye.json new file mode 100644 index 0000000000..daaef74cd1 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/freezing/blue_dye_from_liquid_dye.json @@ -0,0 +1,12 @@ +{ + "type": "ragium:freezing", + "ingredient": { + "amount": 250, + "fluids": "#c:dyes/blue" + }, + "result": { + "count": 1, + "id": "minecraft:blue_dye" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/freezing/brown_dye_from_liquid_dye.json b/src/generated/resources/data/ragium/recipe/freezing/brown_dye_from_liquid_dye.json new file mode 100644 index 0000000000..35969ceb34 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/freezing/brown_dye_from_liquid_dye.json @@ -0,0 +1,12 @@ +{ + "type": "ragium:freezing", + "ingredient": { + "amount": 250, + "fluids": "#c:dyes/brown" + }, + "result": { + "count": 1, + "id": "minecraft:brown_dye" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/freezing/cyan_dye_from_liquid_dye.json b/src/generated/resources/data/ragium/recipe/freezing/cyan_dye_from_liquid_dye.json new file mode 100644 index 0000000000..6e7c7cae95 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/freezing/cyan_dye_from_liquid_dye.json @@ -0,0 +1,12 @@ +{ + "type": "ragium:freezing", + "ingredient": { + "amount": 250, + "fluids": "#c:dyes/cyan" + }, + "result": { + "count": 1, + "id": "minecraft:cyan_dye" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/freezing/gray_dye_from_liquid_dye.json b/src/generated/resources/data/ragium/recipe/freezing/gray_dye_from_liquid_dye.json new file mode 100644 index 0000000000..e165673cbd --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/freezing/gray_dye_from_liquid_dye.json @@ -0,0 +1,12 @@ +{ + "type": "ragium:freezing", + "ingredient": { + "amount": 250, + "fluids": "#c:dyes/gray" + }, + "result": { + "count": 1, + "id": "minecraft:gray_dye" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/freezing/green_dye_from_liquid_dye.json b/src/generated/resources/data/ragium/recipe/freezing/green_dye_from_liquid_dye.json new file mode 100644 index 0000000000..818112cb04 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/freezing/green_dye_from_liquid_dye.json @@ -0,0 +1,12 @@ +{ + "type": "ragium:freezing", + "ingredient": { + "amount": 250, + "fluids": "#c:dyes/green" + }, + "result": { + "count": 1, + "id": "minecraft:green_dye" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/freezing/light_blue_dye_from_liquid_dye.json b/src/generated/resources/data/ragium/recipe/freezing/light_blue_dye_from_liquid_dye.json new file mode 100644 index 0000000000..3ab079fba4 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/freezing/light_blue_dye_from_liquid_dye.json @@ -0,0 +1,12 @@ +{ + "type": "ragium:freezing", + "ingredient": { + "amount": 250, + "fluids": "#c:dyes/light_blue" + }, + "result": { + "count": 1, + "id": "minecraft:light_blue_dye" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/freezing/light_gray_dye_from_liquid_dye.json b/src/generated/resources/data/ragium/recipe/freezing/light_gray_dye_from_liquid_dye.json new file mode 100644 index 0000000000..98af8f55ae --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/freezing/light_gray_dye_from_liquid_dye.json @@ -0,0 +1,12 @@ +{ + "type": "ragium:freezing", + "ingredient": { + "amount": 250, + "fluids": "#c:dyes/light_gray" + }, + "result": { + "count": 1, + "id": "minecraft:light_gray_dye" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/freezing/lime_dye_from_liquid_dye.json b/src/generated/resources/data/ragium/recipe/freezing/lime_dye_from_liquid_dye.json new file mode 100644 index 0000000000..b0b8af807b --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/freezing/lime_dye_from_liquid_dye.json @@ -0,0 +1,12 @@ +{ + "type": "ragium:freezing", + "ingredient": { + "amount": 250, + "fluids": "#c:dyes/lime" + }, + "result": { + "count": 1, + "id": "minecraft:lime_dye" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/freezing/magenta_dye_from_liquid_dye.json b/src/generated/resources/data/ragium/recipe/freezing/magenta_dye_from_liquid_dye.json new file mode 100644 index 0000000000..3dfb3a9fff --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/freezing/magenta_dye_from_liquid_dye.json @@ -0,0 +1,12 @@ +{ + "type": "ragium:freezing", + "ingredient": { + "amount": 250, + "fluids": "#c:dyes/magenta" + }, + "result": { + "count": 1, + "id": "minecraft:magenta_dye" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/freezing/orange_dye_from_liquid_dye.json b/src/generated/resources/data/ragium/recipe/freezing/orange_dye_from_liquid_dye.json new file mode 100644 index 0000000000..178d17b54f --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/freezing/orange_dye_from_liquid_dye.json @@ -0,0 +1,12 @@ +{ + "type": "ragium:freezing", + "ingredient": { + "amount": 250, + "fluids": "#c:dyes/orange" + }, + "result": { + "count": 1, + "id": "minecraft:orange_dye" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/freezing/pink_dye_from_liquid_dye.json b/src/generated/resources/data/ragium/recipe/freezing/pink_dye_from_liquid_dye.json new file mode 100644 index 0000000000..4777263cb9 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/freezing/pink_dye_from_liquid_dye.json @@ -0,0 +1,12 @@ +{ + "type": "ragium:freezing", + "ingredient": { + "amount": 250, + "fluids": "#c:dyes/pink" + }, + "result": { + "count": 1, + "id": "minecraft:pink_dye" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/freezing/plastic_plate.json b/src/generated/resources/data/ragium/recipe/freezing/plastic_plate.json new file mode 100644 index 0000000000..b3b05987fd --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/freezing/plastic_plate.json @@ -0,0 +1,12 @@ +{ + "type": "ragium:freezing", + "ingredient": { + "amount": 500, + "fluids": "#c:naphtha" + }, + "result": { + "count": 1, + "id": "ragium:plastic_plate" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/freezing/purple_dye_from_liquid_dye.json b/src/generated/resources/data/ragium/recipe/freezing/purple_dye_from_liquid_dye.json new file mode 100644 index 0000000000..fa5418935a --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/freezing/purple_dye_from_liquid_dye.json @@ -0,0 +1,12 @@ +{ + "type": "ragium:freezing", + "ingredient": { + "amount": 250, + "fluids": "#c:dyes/purple" + }, + "result": { + "count": 1, + "id": "minecraft:purple_dye" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/freezing/red_dye_from_liquid_dye.json b/src/generated/resources/data/ragium/recipe/freezing/red_dye_from_liquid_dye.json new file mode 100644 index 0000000000..58d8176623 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/freezing/red_dye_from_liquid_dye.json @@ -0,0 +1,12 @@ +{ + "type": "ragium:freezing", + "ingredient": { + "amount": 250, + "fluids": "#c:dyes/red" + }, + "result": { + "count": 1, + "id": "minecraft:red_dye" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/freezing/white_dye_from_liquid_dye.json b/src/generated/resources/data/ragium/recipe/freezing/white_dye_from_liquid_dye.json new file mode 100644 index 0000000000..a722967e51 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/freezing/white_dye_from_liquid_dye.json @@ -0,0 +1,12 @@ +{ + "type": "ragium:freezing", + "ingredient": { + "amount": 250, + "fluids": "#c:dyes/white" + }, + "result": { + "count": 1, + "id": "minecraft:white_dye" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/freezing/yellow_dye_from_liquid_dye.json b/src/generated/resources/data/ragium/recipe/freezing/yellow_dye_from_liquid_dye.json new file mode 100644 index 0000000000..ba81530973 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/freezing/yellow_dye_from_liquid_dye.json @@ -0,0 +1,12 @@ +{ + "type": "ragium:freezing", + "ingredient": { + "amount": 250, + "fluids": "#c:dyes/yellow" + }, + "result": { + "count": 1, + "id": "minecraft:yellow_dye" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/melting/lava_from_stone.json b/src/generated/resources/data/ragium/recipe/melting/lava_from_stone.json deleted file mode 100644 index bd97e1c693..0000000000 --- a/src/generated/resources/data/ragium/recipe/melting/lava_from_stone.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "ragium:melting", - "ingredient": { - "count": 1, - "items": { - "type": "neoforge:or", - "values": [ - "#c:cobblestones", - "#c:stones" - ] - } - }, - "result": { - "amount": 125, - "id": "minecraft:lava" - }, - "time": 200 -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/melting/molten_glass_from_block.json b/src/generated/resources/data/ragium/recipe/melting/molten_glass_from_block.json index a09d2045e3..9a5c3be2f0 100644 --- a/src/generated/resources/data/ragium/recipe/melting/molten_glass_from_block.json +++ b/src/generated/resources/data/ragium/recipe/melting/molten_glass_from_block.json @@ -6,7 +6,7 @@ "type": "neoforge:or", "values": [ "#c:dusts/glass", - "#c:glass_blocks" + "#c:glass_blocks/cheap" ] } }, diff --git a/src/generated/resources/data/ragium/recipe/melting/resin_from_block.json b/src/generated/resources/data/ragium/recipe/melting/resin_from_block.json new file mode 100644 index 0000000000..d7c00123a9 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/melting/resin_from_block.json @@ -0,0 +1,12 @@ +{ + "type": "ragium:melting", + "ingredient": { + "count": 1, + "items": "#c:storage_blocks/resin" + }, + "result": { + "amount": 810, + "id": "ragium:resin" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/melting/resin_from_clump.json b/src/generated/resources/data/ragium/recipe/melting/resin_from_clump.json new file mode 100644 index 0000000000..0a4b0c700f --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/melting/resin_from_clump.json @@ -0,0 +1,12 @@ +{ + "type": "ragium:melting", + "ingredient": { + "count": 1, + "items": "#c:clumps/resin" + }, + "result": { + "amount": 90, + "id": "ragium:resin" + }, + "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 new file mode 100644 index 0000000000..660da860bd --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/mixing/alumina_solution.json @@ -0,0 +1,16 @@ +{ + "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/black_dye.json b/src/generated/resources/data/ragium/recipe/mixing/black_dye.json new file mode 100644 index 0000000000..67e84e1740 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/mixing/black_dye.json @@ -0,0 +1,16 @@ +{ + "type": "ragium:mixing", + "fluid_ingredient": { + "amount": 250, + "fluids": "#c:water" + }, + "item_ingredient": { + "count": 1, + "items": "#c:dyes/black" + }, + "result": { + "amount": 250, + "id": "ragium:black_dye" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/mixing/blue_dye.json b/src/generated/resources/data/ragium/recipe/mixing/blue_dye.json new file mode 100644 index 0000000000..8c0df6bbe7 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/mixing/blue_dye.json @@ -0,0 +1,16 @@ +{ + "type": "ragium:mixing", + "fluid_ingredient": { + "amount": 250, + "fluids": "#c:water" + }, + "item_ingredient": { + "count": 1, + "items": "#c:dyes/blue" + }, + "result": { + "amount": 250, + "id": "ragium:blue_dye" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/mixing/brown_dye.json b/src/generated/resources/data/ragium/recipe/mixing/brown_dye.json new file mode 100644 index 0000000000..606e7cd722 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/mixing/brown_dye.json @@ -0,0 +1,16 @@ +{ + "type": "ragium:mixing", + "fluid_ingredient": { + "amount": 250, + "fluids": "#c:water" + }, + "item_ingredient": { + "count": 1, + "items": "#c:dyes/brown" + }, + "result": { + "amount": 250, + "id": "ragium:brown_dye" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/mixing/cyan_dye.json b/src/generated/resources/data/ragium/recipe/mixing/cyan_dye.json new file mode 100644 index 0000000000..04e3d4c0d7 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/mixing/cyan_dye.json @@ -0,0 +1,16 @@ +{ + "type": "ragium:mixing", + "fluid_ingredient": { + "amount": 250, + "fluids": "#c:water" + }, + "item_ingredient": { + "count": 1, + "items": "#c:dyes/cyan" + }, + "result": { + "amount": 250, + "id": "ragium:cyan_dye" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/mixing/gray_dye.json b/src/generated/resources/data/ragium/recipe/mixing/gray_dye.json new file mode 100644 index 0000000000..8bced950bc --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/mixing/gray_dye.json @@ -0,0 +1,16 @@ +{ + "type": "ragium:mixing", + "fluid_ingredient": { + "amount": 250, + "fluids": "#c:water" + }, + "item_ingredient": { + "count": 1, + "items": "#c:dyes/gray" + }, + "result": { + "amount": 250, + "id": "ragium:gray_dye" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/mixing/green_dye.json b/src/generated/resources/data/ragium/recipe/mixing/green_dye.json new file mode 100644 index 0000000000..2221c135fd --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/mixing/green_dye.json @@ -0,0 +1,16 @@ +{ + "type": "ragium:mixing", + "fluid_ingredient": { + "amount": 250, + "fluids": "#c:water" + }, + "item_ingredient": { + "count": 1, + "items": "#c:dyes/green" + }, + "result": { + "amount": 250, + "id": "ragium:green_dye" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/mixing/hydrogen_chloride.json b/src/generated/resources/data/ragium/recipe/mixing/hydrogen_chloride.json new file mode 100644 index 0000000000..7544fadc28 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/mixing/hydrogen_chloride.json @@ -0,0 +1,16 @@ +{ + "type": "ragium:mixing", + "fluid_ingredient": { + "amount": 500, + "fluids": "#c:sulfuric_acid" + }, + "item_ingredient": { + "count": 1, + "items": "#c:dusts/salt" + }, + "result": { + "amount": 1000, + "id": "ragium:hydrogen_chloride" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/mixing/hydrogen_fluoride.json b/src/generated/resources/data/ragium/recipe/mixing/hydrogen_fluoride.json new file mode 100644 index 0000000000..f761179495 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/mixing/hydrogen_fluoride.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:mixing", + "fluid_ingredient": { + "amount": 1000, + "fluids": "#c:sulfuric_acid" + }, + "item_ingredient": { + "count": 1, + "items": { + "neoforge:ingredient_type": "ragium:material_tags", + "tags": [ + "c:dusts/fluorite", + "c:gems/fluorite" + ] + } + }, + "result": { + "amount": 2000, + "id": "ragium:hydrogen_fluoride" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/mixing/light_blue_dye.json b/src/generated/resources/data/ragium/recipe/mixing/light_blue_dye.json new file mode 100644 index 0000000000..6cbd2da9b1 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/mixing/light_blue_dye.json @@ -0,0 +1,16 @@ +{ + "type": "ragium:mixing", + "fluid_ingredient": { + "amount": 250, + "fluids": "#c:water" + }, + "item_ingredient": { + "count": 1, + "items": "#c:dyes/light_blue" + }, + "result": { + "amount": 250, + "id": "ragium:light_blue_dye" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/mixing/light_gray_dye.json b/src/generated/resources/data/ragium/recipe/mixing/light_gray_dye.json new file mode 100644 index 0000000000..a3915b7201 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/mixing/light_gray_dye.json @@ -0,0 +1,16 @@ +{ + "type": "ragium:mixing", + "fluid_ingredient": { + "amount": 250, + "fluids": "#c:water" + }, + "item_ingredient": { + "count": 1, + "items": "#c:dyes/light_gray" + }, + "result": { + "amount": 250, + "id": "ragium:light_gray_dye" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/mixing/lime_dye.json b/src/generated/resources/data/ragium/recipe/mixing/lime_dye.json new file mode 100644 index 0000000000..415216b9cb --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/mixing/lime_dye.json @@ -0,0 +1,16 @@ +{ + "type": "ragium:mixing", + "fluid_ingredient": { + "amount": 250, + "fluids": "#c:water" + }, + "item_ingredient": { + "count": 1, + "items": "#c:dyes/lime" + }, + "result": { + "amount": 250, + "id": "ragium:lime_dye" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/mixing/magenta_dye.json b/src/generated/resources/data/ragium/recipe/mixing/magenta_dye.json new file mode 100644 index 0000000000..c991e95185 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/mixing/magenta_dye.json @@ -0,0 +1,16 @@ +{ + "type": "ragium:mixing", + "fluid_ingredient": { + "amount": 250, + "fluids": "#c:water" + }, + "item_ingredient": { + "count": 1, + "items": "#c:dyes/magenta" + }, + "result": { + "amount": 250, + "id": "ragium:magenta_dye" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/mixing/orange_dye.json b/src/generated/resources/data/ragium/recipe/mixing/orange_dye.json new file mode 100644 index 0000000000..fd82736aa9 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/mixing/orange_dye.json @@ -0,0 +1,16 @@ +{ + "type": "ragium:mixing", + "fluid_ingredient": { + "amount": 250, + "fluids": "#c:water" + }, + "item_ingredient": { + "count": 1, + "items": "#c:dyes/orange" + }, + "result": { + "amount": 250, + "id": "ragium:orange_dye" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/mixing/pink_dye.json b/src/generated/resources/data/ragium/recipe/mixing/pink_dye.json new file mode 100644 index 0000000000..f3b5e826a1 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/mixing/pink_dye.json @@ -0,0 +1,16 @@ +{ + "type": "ragium:mixing", + "fluid_ingredient": { + "amount": 250, + "fluids": "#c:water" + }, + "item_ingredient": { + "count": 1, + "items": "#c:dyes/pink" + }, + "result": { + "amount": 250, + "id": "ragium:pink_dye" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/mixing/purple_dye.json b/src/generated/resources/data/ragium/recipe/mixing/purple_dye.json new file mode 100644 index 0000000000..9903c02f6d --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/mixing/purple_dye.json @@ -0,0 +1,16 @@ +{ + "type": "ragium:mixing", + "fluid_ingredient": { + "amount": 250, + "fluids": "#c:water" + }, + "item_ingredient": { + "count": 1, + "items": "#c:dyes/purple" + }, + "result": { + "amount": 250, + "id": "ragium:purple_dye" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/mixing/red_dye.json b/src/generated/resources/data/ragium/recipe/mixing/red_dye.json new file mode 100644 index 0000000000..0aafc5bbf7 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/mixing/red_dye.json @@ -0,0 +1,16 @@ +{ + "type": "ragium:mixing", + "fluid_ingredient": { + "amount": 250, + "fluids": "#c:water" + }, + "item_ingredient": { + "count": 1, + "items": "#c:dyes/red" + }, + "result": { + "amount": 250, + "id": "ragium:red_dye" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/mixing/white_dye.json b/src/generated/resources/data/ragium/recipe/mixing/white_dye.json new file mode 100644 index 0000000000..9e56c0fab3 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/mixing/white_dye.json @@ -0,0 +1,16 @@ +{ + "type": "ragium:mixing", + "fluid_ingredient": { + "amount": 250, + "fluids": "#c:water" + }, + "item_ingredient": { + "count": 1, + "items": "#c:dyes/white" + }, + "result": { + "amount": 250, + "id": "ragium:white_dye" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/mixing/yellow_dye.json b/src/generated/resources/data/ragium/recipe/mixing/yellow_dye.json new file mode 100644 index 0000000000..2ae1e070ec --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/mixing/yellow_dye.json @@ -0,0 +1,16 @@ +{ + "type": "ragium:mixing", + "fluid_ingredient": { + "amount": 250, + "fluids": "#c:water" + }, + "item_ingredient": { + "count": 1, + "items": "#c:dyes/yellow" + }, + "result": { + "amount": 250, + "id": "ragium:yellow_dye" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/planting/apple.json b/src/generated/resources/data/ragium/recipe/planting/apple.json index e4e620d021..9a3fe6aa76 100644 --- a/src/generated/resources/data/ragium/recipe/planting/apple.json +++ b/src/generated/resources/data/ragium/recipe/planting/apple.json @@ -4,7 +4,7 @@ "count": 8, "items": "minecraft:apple" }, - "results": { + "result": { "count": 16, "id": "minecraft:apple" }, diff --git a/src/generated/resources/data/ragium/recipe/planting/brown_mushroom.json b/src/generated/resources/data/ragium/recipe/planting/brown_mushroom.json index 6d70716eaa..8228116f3f 100644 --- a/src/generated/resources/data/ragium/recipe/planting/brown_mushroom.json +++ b/src/generated/resources/data/ragium/recipe/planting/brown_mushroom.json @@ -4,7 +4,7 @@ "count": 8, "items": "minecraft:brown_mushroom" }, - "results": { + "result": { "count": 16, "id": "minecraft:brown_mushroom" }, diff --git a/src/generated/resources/data/ragium/recipe/planting/cactus.json b/src/generated/resources/data/ragium/recipe/planting/cactus.json index b032c629e4..0d419f7339 100644 --- a/src/generated/resources/data/ragium/recipe/planting/cactus.json +++ b/src/generated/resources/data/ragium/recipe/planting/cactus.json @@ -4,7 +4,7 @@ "count": 8, "items": "minecraft:cactus" }, - "results": { + "result": { "count": 24, "id": "minecraft:cactus" }, diff --git a/src/generated/resources/data/ragium/recipe/planting/carrot.json b/src/generated/resources/data/ragium/recipe/planting/carrot.json index 2755ed110f..5cf49c9a94 100644 --- a/src/generated/resources/data/ragium/recipe/planting/carrot.json +++ b/src/generated/resources/data/ragium/recipe/planting/carrot.json @@ -4,7 +4,7 @@ "count": 8, "items": "minecraft:carrot" }, - "results": { + "result": { "count": 16, "id": "minecraft:carrot" }, diff --git a/src/generated/resources/data/ragium/recipe/planting/cocoa_beans.json b/src/generated/resources/data/ragium/recipe/planting/cocoa_beans.json index 387818141f..784839bdbd 100644 --- a/src/generated/resources/data/ragium/recipe/planting/cocoa_beans.json +++ b/src/generated/resources/data/ragium/recipe/planting/cocoa_beans.json @@ -4,7 +4,7 @@ "count": 8, "items": "minecraft:cocoa_beans" }, - "results": { + "result": { "count": 16, "id": "minecraft:cocoa_beans" }, diff --git a/src/generated/resources/data/ragium/recipe/planting/glow_berries.json b/src/generated/resources/data/ragium/recipe/planting/glow_berries.json index 46413dd84b..54be55ebf6 100644 --- a/src/generated/resources/data/ragium/recipe/planting/glow_berries.json +++ b/src/generated/resources/data/ragium/recipe/planting/glow_berries.json @@ -4,7 +4,7 @@ "count": 8, "items": "minecraft:glow_berries" }, - "results": { + "result": { "count": 16, "id": "minecraft:glow_berries" }, diff --git a/src/generated/resources/data/ragium/recipe/planting/nether_wart.json b/src/generated/resources/data/ragium/recipe/planting/nether_wart.json index 0f58e924bc..d4992f3bbd 100644 --- a/src/generated/resources/data/ragium/recipe/planting/nether_wart.json +++ b/src/generated/resources/data/ragium/recipe/planting/nether_wart.json @@ -4,7 +4,7 @@ "count": 8, "items": "minecraft:nether_wart" }, - "results": { + "result": { "count": 16, "id": "minecraft:nether_wart" }, diff --git a/src/generated/resources/data/ragium/recipe/planting/potato.json b/src/generated/resources/data/ragium/recipe/planting/potato.json index ca8461be74..466b3e8cdf 100644 --- a/src/generated/resources/data/ragium/recipe/planting/potato.json +++ b/src/generated/resources/data/ragium/recipe/planting/potato.json @@ -4,7 +4,7 @@ "count": 8, "items": "minecraft:potato" }, - "results": { + "result": { "count": 16, "id": "minecraft:potato" }, diff --git a/src/generated/resources/data/ragium/recipe/planting/red_mushroom.json b/src/generated/resources/data/ragium/recipe/planting/red_mushroom.json index f99bd13693..a623610b97 100644 --- a/src/generated/resources/data/ragium/recipe/planting/red_mushroom.json +++ b/src/generated/resources/data/ragium/recipe/planting/red_mushroom.json @@ -4,7 +4,7 @@ "count": 8, "items": "minecraft:red_mushroom" }, - "results": { + "result": { "count": 16, "id": "minecraft:red_mushroom" }, diff --git a/src/generated/resources/data/ragium/recipe/planting/sugar_cane.json b/src/generated/resources/data/ragium/recipe/planting/sugar_cane.json index 11234cdb74..0a13cdab7f 100644 --- a/src/generated/resources/data/ragium/recipe/planting/sugar_cane.json +++ b/src/generated/resources/data/ragium/recipe/planting/sugar_cane.json @@ -4,7 +4,7 @@ "count": 8, "items": "minecraft:sugar_cane" }, - "results": { + "result": { "count": 24, "id": "minecraft:sugar_cane" }, diff --git a/src/generated/resources/data/ragium/recipe/planting/sweet_berries.json b/src/generated/resources/data/ragium/recipe/planting/sweet_berries.json index c7eec66a61..6753d21c93 100644 --- a/src/generated/resources/data/ragium/recipe/planting/sweet_berries.json +++ b/src/generated/resources/data/ragium/recipe/planting/sweet_berries.json @@ -4,7 +4,7 @@ "count": 8, "items": "minecraft:sweet_berries" }, - "results": { + "result": { "count": 16, "id": "minecraft:sweet_berries" }, diff --git a/src/generated/resources/data/ragium/recipe/pyrolyzing/coal_coke_dust.json b/src/generated/resources/data/ragium/recipe/pyrolyzing/carbon_dust.json similarity index 87% rename from src/generated/resources/data/ragium/recipe/pyrolyzing/coal_coke_dust.json rename to src/generated/resources/data/ragium/recipe/pyrolyzing/carbon_dust.json index 10a60bab99..27f9b0c3d3 100644 --- a/src/generated/resources/data/ragium/recipe/pyrolyzing/coal_coke_dust.json +++ b/src/generated/resources/data/ragium/recipe/pyrolyzing/carbon_dust.json @@ -10,7 +10,7 @@ }, "item_result": { "count": 1, - "id": "ragium:coal_coke_dust" + "id": "ragium:carbon_dust" }, "time": 100 } \ 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 new file mode 100644 index 0000000000..4446d36927 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/reacting/cryolite.json @@ -0,0 +1,16 @@ +{ + "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/hydrofluoric_acid.json b/src/generated/resources/data/ragium/recipe/reacting/hydrofluoric_acid.json new file mode 100644 index 0000000000..a46959b10f --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/reacting/hydrofluoric_acid.json @@ -0,0 +1,16 @@ +{ + "type": "ragium:reacting", + "fluid_result": { + "amount": 1000, + "id": "ragium:hydrofluoric_acid" + }, + "primary_ingredient": { + "amount": 1000, + "fluids": "#c:hydrogen_fluoride" + }, + "secondary_ingredient": { + "amount": 1000, + "fluids": "#c:water" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/reacting/hydrogen_chloride.json b/src/generated/resources/data/ragium/recipe/reacting/hydrogen_chloride.json index 7be184491d..05ab983170 100644 --- a/src/generated/resources/data/ragium/recipe/reacting/hydrogen_chloride.json +++ b/src/generated/resources/data/ragium/recipe/reacting/hydrogen_chloride.json @@ -1,7 +1,7 @@ { "type": "ragium:reacting", "fluid_result": { - "amount": 1000, + "amount": 2000, "id": "ragium:hydrogen_chloride" }, "primary_ingredient": { @@ -10,7 +10,7 @@ }, "secondary_ingredient": { "amount": 1000, - "fluids": "#c:chloride" + "fluids": "#c:chlorine" }, "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/plastic_plate.json new file mode 100644 index 0000000000..13da8c0df8 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/reacting/plastic_plate.json @@ -0,0 +1,16 @@ +{ + "type": "ragium:reacting", + "item_result": { + "count": 2, + "id": "ragium:plastic_plate" + }, + "primary_ingredient": { + "amount": 500, + "fluids": "#c:naphtha" + }, + "secondary_ingredient": { + "amount": 250, + "fluids": "#c:oxygen" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/reacting/synthetic_resin.json b/src/generated/resources/data/ragium/recipe/reacting/synthetic_resin.json new file mode 100644 index 0000000000..a9b089e3c8 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/reacting/synthetic_resin.json @@ -0,0 +1,16 @@ +{ + "type": "ragium:reacting", + "fluid_result": { + "amount": 1000, + "id": "ragium:synthetic_resin" + }, + "primary_ingredient": { + "amount": 1000, + "fluids": "#c:aromatic_compound" + }, + "secondary_ingredient": { + "amount": 1000, + "fluids": "#c:water" + }, + "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/alumina_dust_from_solution.json new file mode 100644 index 0000000000..415a16752b --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/refining/alumina_dust_from_solution.json @@ -0,0 +1,16 @@ +{ + "type": "ragium:refining", + "fluid_result": { + "amount": 1000, + "id": "minecraft:water" + }, + "ingredient": { + "amount": 1000, + "fluids": "#c:alumina_solution" + }, + "item_result": { + "count": 1, + "id": "ragium:alumina_dust" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/resource/extracting/crude_oil_at_soul_sand_valley.json b/src/generated/resources/data/ragium/recipe/resource/extracting/crude_oil_at_soul_sand_valley.json new file mode 100644 index 0000000000..987d4fab5f --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/resource/extracting/crude_oil_at_soul_sand_valley.json @@ -0,0 +1,9 @@ +{ + "type": "ragium:resource/extracting", + "condition": "minecraft:soul_sand_valley", + "result": { + "amount": 250, + "id": "ragium:crude_oil" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/resource/extracting/lava_at_nether.json b/src/generated/resources/data/ragium/recipe/resource/extracting/lava_at_nether.json new file mode 100644 index 0000000000..77b0844868 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/resource/extracting/lava_at_nether.json @@ -0,0 +1,9 @@ +{ + "type": "ragium:resource/extracting", + "condition": "#c:is_nether", + "result": { + "amount": 250, + "id": "minecraft:lava" + }, + "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/water_at_ocean.json new file mode 100644 index 0000000000..b06ae25601 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/resource/extracting/water_at_ocean.json @@ -0,0 +1,9 @@ +{ + "type": "ragium:resource/extracting", + "condition": "#c:is_ocean", + "result": { + "amount": 4000, + "id": "minecraft:water" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/resource/extracting/water_at_river.json b/src/generated/resources/data/ragium/recipe/resource/extracting/water_at_river.json new file mode 100644 index 0000000000..29a0b3a370 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/resource/extracting/water_at_river.json @@ -0,0 +1,9 @@ +{ + "type": "ragium:resource/extracting", + "condition": "#c:is_river", + "result": { + "amount": 2000, + "id": "minecraft:water" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/resource/extracting/water_at_wet_biomes.json b/src/generated/resources/data/ragium/recipe/resource/extracting/water_at_wet_biomes.json new file mode 100644 index 0000000000..4bb830962b --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/resource/extracting/water_at_wet_biomes.json @@ -0,0 +1,9 @@ +{ + "type": "ragium:resource/extracting", + "condition": "#c:is_wet", + "result": { + "amount": 1000, + "id": "minecraft:water" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/alloy_smelter.json b/src/generated/resources/data/ragium/recipe/shaped/alloy_smelter.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/alloy_smelter.json rename to src/generated/resources/data/ragium/recipe/shaped/alloy_smelter.json diff --git a/src/generated/resources/data/ragium/recipe/shaped/aluminum_block.json b/src/generated/resources/data/ragium/recipe/shaped/aluminum_block.json new file mode 100644 index 0000000000..fbd6d33ef0 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/shaped/aluminum_block.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "group": "aluminum_block", + "key": { + "A": "#c:ingots/aluminum", + "B": "ragium:aluminum_ingot" + }, + "pattern": [ + "AAA", + "ABA", + "AAA" + ], + "result": { + "id": "ragium:aluminum_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/shaped/aluminum_ingot_from_nugget.json b/src/generated/resources/data/ragium/recipe/shaped/aluminum_ingot_from_nugget.json new file mode 100644 index 0000000000..adf8a9a165 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/shaped/aluminum_ingot_from_nugget.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "group": "aluminum_ingot", + "key": { + "A": "#c:nuggets/aluminum", + "B": "ragium:aluminum_nugget" + }, + "pattern": [ + "AAA", + "ABA", + "AAA" + ], + "result": { + "id": "ragium:aluminum_ingot" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/assembler.json b/src/generated/resources/data/ragium/recipe/shaped/assembler.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/assembler.json rename to src/generated/resources/data/ragium/recipe/shaped/assembler.json diff --git a/src/generated/resources/data/ragium/recipe/black_steel_block.json b/src/generated/resources/data/ragium/recipe/shaped/black_steel_block.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/black_steel_block.json rename to src/generated/resources/data/ragium/recipe/shaped/black_steel_block.json diff --git a/src/generated/resources/data/ragium/recipe/black_steel_ingot_from_nugget.json b/src/generated/resources/data/ragium/recipe/shaped/black_steel_ingot_from_nugget.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/black_steel_ingot_from_nugget.json rename to src/generated/resources/data/ragium/recipe/shaped/black_steel_ingot_from_nugget.json diff --git a/src/generated/resources/data/ragium/recipe/blaze_rod.json b/src/generated/resources/data/ragium/recipe/shaped/blaze_rod.json similarity index 91% rename from src/generated/resources/data/ragium/recipe/blaze_rod.json rename to src/generated/resources/data/ragium/recipe/shaped/blaze_rod.json index 9b6450ca62..907b8a8a84 100644 --- a/src/generated/resources/data/ragium/recipe/blaze_rod.json +++ b/src/generated/resources/data/ragium/recipe/shaped/blaze_rod.json @@ -1,7 +1,6 @@ { "type": "minecraft:crafting_shaped", "category": "misc", - "group": "blaze_rod", "key": { "A": "#c:dusts/amethyst", "B": "minecraft:magma_block", diff --git a/src/generated/resources/data/ragium/recipe/breeze_rod.json b/src/generated/resources/data/ragium/recipe/shaped/breeze_rod.json similarity index 91% rename from src/generated/resources/data/ragium/recipe/breeze_rod.json rename to src/generated/resources/data/ragium/recipe/shaped/breeze_rod.json index d44b27744b..06b3d90172 100644 --- a/src/generated/resources/data/ragium/recipe/breeze_rod.json +++ b/src/generated/resources/data/ragium/recipe/shaped/breeze_rod.json @@ -1,7 +1,6 @@ { "type": "minecraft:crafting_shaped", "category": "misc", - "group": "breeze_rod", "key": { "A": "#c:dusts/amethyst", "B": "minecraft:ice", diff --git a/src/generated/resources/data/ragium/recipe/brewery.json b/src/generated/resources/data/ragium/recipe/shaped/brewery.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/brewery.json rename to src/generated/resources/data/ragium/recipe/shaped/brewery.json diff --git a/src/generated/resources/data/ragium/recipe/candle.json b/src/generated/resources/data/ragium/recipe/shaped/candle.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/candle.json rename to src/generated/resources/data/ragium/recipe/shaped/candle.json diff --git a/src/generated/resources/data/ragium/recipe/charcoal_block.json b/src/generated/resources/data/ragium/recipe/shaped/charcoal_block.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/charcoal_block.json rename to src/generated/resources/data/ragium/recipe/shaped/charcoal_block.json diff --git a/src/generated/resources/data/ragium/recipe/charcoal_from_tiny.json b/src/generated/resources/data/ragium/recipe/shaped/charcoal_from_tiny.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/charcoal_from_tiny.json rename to src/generated/resources/data/ragium/recipe/shaped/charcoal_from_tiny.json diff --git a/src/generated/resources/data/ragium/recipe/chemical_bath.json b/src/generated/resources/data/ragium/recipe/shaped/chemical_bath.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/chemical_bath.json rename to src/generated/resources/data/ragium/recipe/shaped/chemical_bath.json diff --git a/src/generated/resources/data/ragium/recipe/coal_coke_block.json b/src/generated/resources/data/ragium/recipe/shaped/coal_coke_block.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/coal_coke_block.json rename to src/generated/resources/data/ragium/recipe/shaped/coal_coke_block.json diff --git a/src/generated/resources/data/ragium/recipe/coal_coke_from_tiny.json b/src/generated/resources/data/ragium/recipe/shaped/coal_coke_from_tiny.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/coal_coke_from_tiny.json rename to src/generated/resources/data/ragium/recipe/shaped/coal_coke_from_tiny.json diff --git a/src/generated/resources/data/ragium/recipe/coal_from_tiny.json b/src/generated/resources/data/ragium/recipe/shaped/coal_from_tiny.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/coal_from_tiny.json rename to src/generated/resources/data/ragium/recipe/shaped/coal_from_tiny.json diff --git a/src/generated/resources/data/ragium/recipe/compressor.json b/src/generated/resources/data/ragium/recipe/shaped/compressor.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/compressor.json rename to src/generated/resources/data/ragium/recipe/shaped/compressor.json diff --git a/src/generated/resources/data/ragium/recipe/copper_gear.json b/src/generated/resources/data/ragium/recipe/shaped/copper_gear.json similarity index 90% rename from src/generated/resources/data/ragium/recipe/copper_gear.json rename to src/generated/resources/data/ragium/recipe/shaped/copper_gear.json index 80708e54f3..145257daf0 100644 --- a/src/generated/resources/data/ragium/recipe/copper_gear.json +++ b/src/generated/resources/data/ragium/recipe/shaped/copper_gear.json @@ -1,7 +1,6 @@ { "type": "minecraft:crafting_shaped", "category": "misc", - "group": "copper_gear", "key": { "A": "#c:ingots/copper", "B": "#c:gears/wood" diff --git a/src/generated/resources/data/ragium/recipe/crusher.json b/src/generated/resources/data/ragium/recipe/shaped/crusher.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/crusher.json rename to src/generated/resources/data/ragium/recipe/shaped/crusher.json diff --git a/src/generated/resources/data/ragium/recipe/shaped/cryolite_block.json b/src/generated/resources/data/ragium/recipe/shaped/cryolite_block.json new file mode 100644 index 0000000000..08350be81a --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/shaped/cryolite_block.json @@ -0,0 +1,15 @@ +{ + "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_slab.json b/src/generated/resources/data/ragium/recipe/shaped/cryolite_slab.json new file mode 100644 index 0000000000..478b42a56a --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/shaped/cryolite_slab.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "group": "cryolite_slab", + "key": { + "A": "ragium:cryolite_block" + }, + "pattern": [ + "AAA" + ], + "result": { + "count": 6, + "id": "ragium:cryolite_slab" + } +} \ 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 new file mode 100644 index 0000000000..b11cf3cedb --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/shaped/cryolite_stairs.json @@ -0,0 +1,17 @@ +{ + "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/cutting_machine.json b/src/generated/resources/data/ragium/recipe/shaped/cutting_machine.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/cutting_machine.json rename to src/generated/resources/data/ragium/recipe/shaped/cutting_machine.json diff --git a/src/generated/resources/data/ragium/recipe/diamond_gear.json b/src/generated/resources/data/ragium/recipe/shaped/diamond_gear.json similarity index 89% rename from src/generated/resources/data/ragium/recipe/diamond_gear.json rename to src/generated/resources/data/ragium/recipe/shaped/diamond_gear.json index 71da435bb2..16b4f6c967 100644 --- a/src/generated/resources/data/ragium/recipe/diamond_gear.json +++ b/src/generated/resources/data/ragium/recipe/shaped/diamond_gear.json @@ -1,7 +1,6 @@ { "type": "minecraft:crafting_shaped", "category": "misc", - "group": "diamond_gear", "key": { "A": "#c:gems/diamond", "B": "#c:gears/wood" diff --git a/src/generated/resources/data/ragium/recipe/echo_block.json b/src/generated/resources/data/ragium/recipe/shaped/echo_block.json similarity index 73% rename from src/generated/resources/data/ragium/recipe/echo_block.json rename to src/generated/resources/data/ragium/recipe/shaped/echo_block.json index acad629312..6559026475 100644 --- a/src/generated/resources/data/ragium/recipe/echo_block.json +++ b/src/generated/resources/data/ragium/recipe/shaped/echo_block.json @@ -3,12 +3,11 @@ "category": "building", "group": "echo_block", "key": { - "A": "#c:gems/echo", - "B": "minecraft:echo_shard" + "A": "#c:gems/echo" }, "pattern": [ "AA", - "AB" + "AA" ], "result": { "id": "ragium:echo_block" diff --git a/src/generated/resources/data/ragium/recipe/emerald_gear.json b/src/generated/resources/data/ragium/recipe/shaped/emerald_gear.json similarity index 89% rename from src/generated/resources/data/ragium/recipe/emerald_gear.json rename to src/generated/resources/data/ragium/recipe/shaped/emerald_gear.json index 3fa0a38bc5..227b8d6954 100644 --- a/src/generated/resources/data/ragium/recipe/emerald_gear.json +++ b/src/generated/resources/data/ragium/recipe/shaped/emerald_gear.json @@ -1,7 +1,6 @@ { "type": "minecraft:crafting_shaped", "category": "misc", - "group": "emerald_gear", "key": { "A": "#c:gems/emerald", "B": "#c:gears/wood" diff --git a/src/generated/resources/data/ragium/recipe/shaped/enchanter.json b/src/generated/resources/data/ragium/recipe/shaped/enchanter.json new file mode 100644 index 0000000000..b1130e35af --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/shaped/enchanter.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "A": "#c:nuggets/void_metal", + "B": "ragium:arcane_machine_parts", + "C": "#c:gears/netherite", + "D": "minecraft:enchanting_table" + }, + "pattern": [ + "ABA", + "BCB", + "ADA" + ], + "result": { + "id": "ragium:enchanter" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/shaped/fluorite_block.json b/src/generated/resources/data/ragium/recipe/shaped/fluorite_block.json new file mode 100644 index 0000000000..f19da8767f --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/shaped/fluorite_block.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "group": "fluorite_block", + "key": { + "A": "#c:gems/fluorite" + }, + "pattern": [ + "AA", + "AA" + ], + "result": { + "id": "ragium:fluorite_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/shaped/fluorite_slab.json b/src/generated/resources/data/ragium/recipe/shaped/fluorite_slab.json new file mode 100644 index 0000000000..45e20991d5 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/shaped/fluorite_slab.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "group": "fluorite_slab", + "key": { + "A": "ragium:fluorite_block" + }, + "pattern": [ + "AAA" + ], + "result": { + "count": 6, + "id": "ragium:fluorite_slab" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/shaped/fluorite_stairs.json b/src/generated/resources/data/ragium/recipe/shaped/fluorite_stairs.json new file mode 100644 index 0000000000..13db750414 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/shaped/fluorite_stairs.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "group": "fluorite_stairs", + "key": { + "A": "ragium:fluorite_block" + }, + "pattern": [ + "A ", + "AA ", + "AAA" + ], + "result": { + "count": 4, + "id": "ragium:fluorite_stairs" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/freezer.json b/src/generated/resources/data/ragium/recipe/shaped/freezer.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/freezer.json rename to src/generated/resources/data/ragium/recipe/shaped/freezer.json diff --git a/src/generated/resources/data/ragium/recipe/gold_gear.json b/src/generated/resources/data/ragium/recipe/shaped/gold_gear.json similarity index 90% rename from src/generated/resources/data/ragium/recipe/gold_gear.json rename to src/generated/resources/data/ragium/recipe/shaped/gold_gear.json index 20130fa9c6..832049e574 100644 --- a/src/generated/resources/data/ragium/recipe/gold_gear.json +++ b/src/generated/resources/data/ragium/recipe/shaped/gold_gear.json @@ -1,7 +1,6 @@ { "type": "minecraft:crafting_shaped", "category": "misc", - "group": "gold_gear", "key": { "A": "#c:ingots/gold", "B": "#c:gears/wood" diff --git a/src/generated/resources/data/ragium/recipe/shaped/hopper_by_black_steel.json b/src/generated/resources/data/ragium/recipe/shaped/hopper_by_black_steel.json new file mode 100644 index 0000000000..a023d5bbfb --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/shaped/hopper_by_black_steel.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "A": "#c:ingots/black_steel", + "B": "#c:chests/wooden" + }, + "pattern": [ + "A A", + "ABA", + " A " + ], + "result": { + "count": 4, + "id": "minecraft:hopper" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/shaped/hopper_by_sooty_iron.json b/src/generated/resources/data/ragium/recipe/shaped/hopper_by_sooty_iron.json new file mode 100644 index 0000000000..4f0c992204 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/shaped/hopper_by_sooty_iron.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "A": "#c:ingots/sooty_iron", + "B": "#c:chests/wooden" + }, + "pattern": [ + "A A", + "ABA", + " A " + ], + "result": { + "count": 2, + "id": "minecraft:hopper" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/iron_gear.json b/src/generated/resources/data/ragium/recipe/shaped/iron_gear.json similarity index 90% rename from src/generated/resources/data/ragium/recipe/iron_gear.json rename to src/generated/resources/data/ragium/recipe/shaped/iron_gear.json index 3f5a18f41b..67386f5080 100644 --- a/src/generated/resources/data/ragium/recipe/iron_gear.json +++ b/src/generated/resources/data/ragium/recipe/shaped/iron_gear.json @@ -1,7 +1,6 @@ { "type": "minecraft:crafting_shaped", "category": "misc", - "group": "iron_gear", "key": { "A": "#c:ingots/iron", "B": "#c:gears/wood" diff --git a/src/generated/resources/data/ragium/recipe/machine_casing.json b/src/generated/resources/data/ragium/recipe/shaped/machine_casing.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/machine_casing.json rename to src/generated/resources/data/ragium/recipe/shaped/machine_casing.json diff --git a/src/generated/resources/data/ragium/recipe/mechanical_machine_parts.json b/src/generated/resources/data/ragium/recipe/shaped/mechanical_machine_parts.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/mechanical_machine_parts.json rename to src/generated/resources/data/ragium/recipe/shaped/mechanical_machine_parts.json diff --git a/src/generated/resources/data/ragium/recipe/melter.json b/src/generated/resources/data/ragium/recipe/shaped/melter.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/melter.json rename to src/generated/resources/data/ragium/recipe/shaped/melter.json diff --git a/src/generated/resources/data/ragium/recipe/shaped/mixer.json b/src/generated/resources/data/ragium/recipe/shaped/mixer.json new file mode 100644 index 0000000000..98e45d39ef --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/shaped/mixer.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "A": "#c:nuggets/black_steel", + "B": "ragium:chemical_machine_parts", + "C": "#c:gears/gold", + "D": "#c:buckets/empty" + }, + "pattern": [ + "ABA", + "BCB", + "ADA" + ], + "result": { + "id": "ragium:mixer" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/netherite_ingot_from_nugget.json b/src/generated/resources/data/ragium/recipe/shaped/netherite_ingot_from_nugget.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/netherite_ingot_from_nugget.json rename to src/generated/resources/data/ragium/recipe/shaped/netherite_ingot_from_nugget.json diff --git a/src/generated/resources/data/ragium/recipe/particle_board.json b/src/generated/resources/data/ragium/recipe/shaped/particle_board.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/particle_board.json rename to src/generated/resources/data/ragium/recipe/shaped/particle_board.json diff --git a/src/generated/resources/data/ragium/recipe/shaped/pitch_coke_block.json b/src/generated/resources/data/ragium/recipe/shaped/pitch_coke_block.json new file mode 100644 index 0000000000..69a8d6c66d --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/shaped/pitch_coke_block.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "group": "pitch_coke_block", + "key": { + "A": "ragium:pitch_coke", + "B": "ragium:pitch_coke" + }, + "pattern": [ + "AAA", + "ABA", + "AAA" + ], + "result": { + "id": "ragium:pitch_coke_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/shaped/pitch_coke_from_tiny.json b/src/generated/resources/data/ragium/recipe/shaped/pitch_coke_from_tiny.json new file mode 100644 index 0000000000..6ee111e6bf --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/shaped/pitch_coke_from_tiny.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "group": "pitch_coke", + "key": { + "A": "#c:tiny/pitch_coke" + }, + "pattern": [ + "AAA", + "A A", + "AAA" + ], + "result": { + "id": "ragium:pitch_coke" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/shaped/planter.json b/src/generated/resources/data/ragium/recipe/shaped/planter.json new file mode 100644 index 0000000000..6b6cc84769 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/shaped/planter.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "A": "#c:nuggets/black_steel", + "B": "ragium:bio_machine_parts", + "C": "#c:gears/emerald", + "D": "minecraft:flower_pot" + }, + "pattern": [ + "ABA", + "BCB", + "ADA" + ], + "result": { + "id": "ragium:planter" + } +} \ 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 new file mode 100644 index 0000000000..c7ebde1de5 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/shaped/precision_assembler.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "A": "#c:nuggets/void_metal", + "B": "ragium:electronics_machine_parts", + "C": "#c:gears/diamond", + "D": "ragium:assembler" + }, + "pattern": [ + "ABA", + "BCB", + "ADA" + ], + "result": { + "id": "ragium:precision_assembler" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/smelter.json b/src/generated/resources/data/ragium/recipe/shaped/smelter.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/smelter.json rename to src/generated/resources/data/ragium/recipe/shaped/smelter.json diff --git a/src/generated/resources/data/ragium/recipe/sooty_iron_axe.json b/src/generated/resources/data/ragium/recipe/shaped/sooty_iron_axe.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/sooty_iron_axe.json rename to src/generated/resources/data/ragium/recipe/shaped/sooty_iron_axe.json diff --git a/src/generated/resources/data/ragium/recipe/sooty_iron_block.json b/src/generated/resources/data/ragium/recipe/shaped/sooty_iron_block.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/sooty_iron_block.json rename to src/generated/resources/data/ragium/recipe/shaped/sooty_iron_block.json diff --git a/src/generated/resources/data/ragium/recipe/sooty_iron_hoe.json b/src/generated/resources/data/ragium/recipe/shaped/sooty_iron_hoe.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/sooty_iron_hoe.json rename to src/generated/resources/data/ragium/recipe/shaped/sooty_iron_hoe.json diff --git a/src/generated/resources/data/ragium/recipe/sooty_iron_ingot.json b/src/generated/resources/data/ragium/recipe/shaped/sooty_iron_ingot.json similarity index 68% rename from src/generated/resources/data/ragium/recipe/sooty_iron_ingot.json rename to src/generated/resources/data/ragium/recipe/shaped/sooty_iron_ingot.json index 468baa54e6..ed33fd84d0 100644 --- a/src/generated/resources/data/ragium/recipe/sooty_iron_ingot.json +++ b/src/generated/resources/data/ragium/recipe/shaped/sooty_iron_ingot.json @@ -4,10 +4,10 @@ "group": "sooty_iron_ingot", "key": { "A": { - "neoforge:ingredient_type": "neoforge:compound", - "children": [ - "#c:tiny/charcoal", - "#c:tiny/coal" + "neoforge:ingredient_type": "ragium:material_tags", + "tags": [ + "c:tiny/coal", + "c:tiny/charcoal" ] }, "B": "#c:ingots/iron" diff --git a/src/generated/resources/data/ragium/recipe/sooty_iron_ingot_from_coke.json b/src/generated/resources/data/ragium/recipe/shaped/sooty_iron_ingot_from_coke.json similarity index 60% rename from src/generated/resources/data/ragium/recipe/sooty_iron_ingot_from_coke.json rename to src/generated/resources/data/ragium/recipe/shaped/sooty_iron_ingot_from_coke.json index c61f13852d..f10cc3688c 100644 --- a/src/generated/resources/data/ragium/recipe/sooty_iron_ingot_from_coke.json +++ b/src/generated/resources/data/ragium/recipe/shaped/sooty_iron_ingot_from_coke.json @@ -3,7 +3,13 @@ "category": "misc", "group": "sooty_iron_ingot", "key": { - "A": "#c:tiny/coal_coke", + "A": { + "neoforge:ingredient_type": "ragium:material_tags", + "tags": [ + "c:tiny/coal_coke", + "c:tiny/pitch_coke" + ] + }, "B": "#c:ingots/iron" }, "pattern": [ diff --git a/src/generated/resources/data/ragium/recipe/sooty_iron_ingot_from_nugget.json b/src/generated/resources/data/ragium/recipe/shaped/sooty_iron_ingot_from_nugget.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/sooty_iron_ingot_from_nugget.json rename to src/generated/resources/data/ragium/recipe/shaped/sooty_iron_ingot_from_nugget.json diff --git a/src/generated/resources/data/ragium/recipe/sooty_iron_pickaxe.json b/src/generated/resources/data/ragium/recipe/shaped/sooty_iron_pickaxe.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/sooty_iron_pickaxe.json rename to src/generated/resources/data/ragium/recipe/shaped/sooty_iron_pickaxe.json diff --git a/src/generated/resources/data/ragium/recipe/sooty_iron_shovel.json b/src/generated/resources/data/ragium/recipe/shaped/sooty_iron_shovel.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/sooty_iron_shovel.json rename to src/generated/resources/data/ragium/recipe/shaped/sooty_iron_shovel.json diff --git a/src/generated/resources/data/ragium/recipe/sooty_iron_sword.json b/src/generated/resources/data/ragium/recipe/shaped/sooty_iron_sword.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/sooty_iron_sword.json rename to src/generated/resources/data/ragium/recipe/shaped/sooty_iron_sword.json diff --git a/src/generated/resources/data/ragium/recipe/shaped/tank_by_black_steel.json b/src/generated/resources/data/ragium/recipe/shaped/tank_by_black_steel.json new file mode 100644 index 0000000000..20be85599f --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/shaped/tank_by_black_steel.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "A": "#c:ingots/black_steel", + "B": "#c:buckets/empty" + }, + "pattern": [ + " A ", + "ABA", + " A " + ], + "result": { + "id": "ragium:tank" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/shaped/tank_by_sooty_iron.json b/src/generated/resources/data/ragium/recipe/shaped/tank_by_sooty_iron.json new file mode 100644 index 0000000000..84b6a149bd --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/shaped/tank_by_sooty_iron.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "A": "#c:ingots/sooty_iron", + "B": "#c:buckets/empty" + }, + "pattern": [ + "AAA", + "ABA", + "AAA" + ], + "result": { + "id": "ragium:tank" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/shaped/torch_from_coal_coke.json b/src/generated/resources/data/ragium/recipe/shaped/torch_from_coal_coke.json new file mode 100644 index 0000000000..08a77fc256 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/shaped/torch_from_coal_coke.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "A": "#c:coal_coke", + "B": "#c:rods/wooden" + }, + "pattern": [ + "A", + "B" + ], + "result": { + "count": 8, + "id": "minecraft:torch" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/shaped/torch_from_pitch_coke.json b/src/generated/resources/data/ragium/recipe/shaped/torch_from_pitch_coke.json new file mode 100644 index 0000000000..84678fde5b --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/shaped/torch_from_pitch_coke.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "A": "#c:pitch_coke", + "B": "#c:rods/wooden" + }, + "pattern": [ + "A", + "B" + ], + "result": { + "count": 6, + "id": "minecraft:torch" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/shaped/torch_from_tar.json b/src/generated/resources/data/ragium/recipe/shaped/torch_from_tar.json new file mode 100644 index 0000000000..6e7c29f172 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/shaped/torch_from_tar.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "A": "ragium:tar", + "B": "#c:rods/wooden" + }, + "pattern": [ + "A", + "B" + ], + "result": { + "count": 3, + "id": "minecraft:torch" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/void_metal_block.json b/src/generated/resources/data/ragium/recipe/shaped/void_metal_block.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/void_metal_block.json rename to src/generated/resources/data/ragium/recipe/shaped/void_metal_block.json diff --git a/src/generated/resources/data/ragium/recipe/void_metal_ingot_from_nugget.json b/src/generated/resources/data/ragium/recipe/shaped/void_metal_ingot_from_nugget.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/void_metal_ingot_from_nugget.json rename to src/generated/resources/data/ragium/recipe/shaped/void_metal_ingot_from_nugget.json diff --git a/src/generated/resources/data/ragium/recipe/shaped/void_tank.json b/src/generated/resources/data/ragium/recipe/shaped/void_tank.json new file mode 100644 index 0000000000..fc1aab59e1 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/shaped/void_tank.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "A": "#c:ingots/void_metal", + "B": "#c:buckets/empty" + }, + "pattern": [ + "AAA", + "ABA", + "AAA" + ], + "result": { + "id": "ragium:void_tank" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/wood_gear.json b/src/generated/resources/data/ragium/recipe/shaped/wood_gear.json similarity index 91% rename from src/generated/resources/data/ragium/recipe/wood_gear.json rename to src/generated/resources/data/ragium/recipe/shaped/wood_gear.json index 9b9570360e..a2ef3be339 100644 --- a/src/generated/resources/data/ragium/recipe/wood_gear.json +++ b/src/generated/resources/data/ragium/recipe/shaped/wood_gear.json @@ -1,7 +1,6 @@ { "type": "minecraft:crafting_shaped", "category": "misc", - "group": "wood_gear", "key": { "A": "#minecraft:planks", "B": "#minecraft:wooden_buttons" diff --git a/src/generated/resources/data/ragium/recipe/shapeless/aluminum_ingot_from_block.json b/src/generated/resources/data/ragium/recipe/shapeless/aluminum_ingot_from_block.json new file mode 100644 index 0000000000..ec16a501c4 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/shapeless/aluminum_ingot_from_block.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "group": "aluminum_ingot", + "ingredients": [ + "#c:storage_blocks/aluminum" + ], + "result": { + "count": 9, + "id": "ragium:aluminum_ingot" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/shapeless/aluminum_nugget_from_ingot.json b/src/generated/resources/data/ragium/recipe/shapeless/aluminum_nugget_from_ingot.json new file mode 100644 index 0000000000..0e5f5c93a5 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/shapeless/aluminum_nugget_from_ingot.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "group": "aluminum_nugget", + "ingredients": [ + "#c:ingots/aluminum" + ], + "result": { + "count": 9, + "id": "ragium:aluminum_nugget" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/black_dye_bucket.json b/src/generated/resources/data/ragium/recipe/shapeless/black_dye_bucket.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/black_dye_bucket.json rename to src/generated/resources/data/ragium/recipe/shapeless/black_dye_bucket.json diff --git a/src/generated/resources/data/ragium/recipe/black_steel_ingot_from_block.json b/src/generated/resources/data/ragium/recipe/shapeless/black_steel_ingot_from_block.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/black_steel_ingot_from_block.json rename to src/generated/resources/data/ragium/recipe/shapeless/black_steel_ingot_from_block.json diff --git a/src/generated/resources/data/ragium/recipe/black_steel_nugget_from_ingot.json b/src/generated/resources/data/ragium/recipe/shapeless/black_steel_nugget_from_ingot.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/black_steel_nugget_from_ingot.json rename to src/generated/resources/data/ragium/recipe/shapeless/black_steel_nugget_from_ingot.json diff --git a/src/generated/resources/data/ragium/recipe/blue_dye_bucket.json b/src/generated/resources/data/ragium/recipe/shapeless/blue_dye_bucket.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/blue_dye_bucket.json rename to src/generated/resources/data/ragium/recipe/shapeless/blue_dye_bucket.json diff --git a/src/generated/resources/data/ragium/recipe/brown_dye_bucket.json b/src/generated/resources/data/ragium/recipe/shapeless/brown_dye_bucket.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/brown_dye_bucket.json rename to src/generated/resources/data/ragium/recipe/shapeless/brown_dye_bucket.json diff --git a/src/generated/resources/data/ragium/recipe/charcoal_from_block.json b/src/generated/resources/data/ragium/recipe/shapeless/charcoal_from_block.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/charcoal_from_block.json rename to src/generated/resources/data/ragium/recipe/shapeless/charcoal_from_block.json diff --git a/src/generated/resources/data/ragium/recipe/coal_coke_from_block.json b/src/generated/resources/data/ragium/recipe/shapeless/coal_coke_from_block.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/coal_coke_from_block.json rename to src/generated/resources/data/ragium/recipe/shapeless/coal_coke_from_block.json diff --git a/src/generated/resources/data/ragium/recipe/cyan_dye_bucket.json b/src/generated/resources/data/ragium/recipe/shapeless/cyan_dye_bucket.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/cyan_dye_bucket.json rename to src/generated/resources/data/ragium/recipe/shapeless/cyan_dye_bucket.json diff --git a/src/generated/resources/data/ragium/recipe/shapeless/fire_charge_from_coal_coke.json b/src/generated/resources/data/ragium/recipe/shapeless/fire_charge_from_coal_coke.json new file mode 100644 index 0000000000..7745cb1407 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/shapeless/fire_charge_from_coal_coke.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + "#c:gunpowders", + "minecraft:blaze_powder", + "#c:coal_coke" + ], + "result": { + "count": 6, + "id": "minecraft:fire_charge" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/echo_shard_from_block.json b/src/generated/resources/data/ragium/recipe/shapeless/fire_charge_from_pitch_coke.json similarity index 54% rename from src/generated/resources/data/ragium/recipe/echo_shard_from_block.json rename to src/generated/resources/data/ragium/recipe/shapeless/fire_charge_from_pitch_coke.json index 36fe5038e8..9283495a75 100644 --- a/src/generated/resources/data/ragium/recipe/echo_shard_from_block.json +++ b/src/generated/resources/data/ragium/recipe/shapeless/fire_charge_from_pitch_coke.json @@ -1,12 +1,13 @@ { "type": "minecraft:crafting_shapeless", "category": "misc", - "group": "echo_shard", "ingredients": [ - "#c:storage_blocks/echo" + "#c:gunpowders", + "minecraft:blaze_powder", + "#c:pitch_coke" ], "result": { "count": 4, - "id": "minecraft:echo_shard" + "id": "minecraft:fire_charge" } } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/gray_dye_bucket.json b/src/generated/resources/data/ragium/recipe/shapeless/gray_dye_bucket.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/gray_dye_bucket.json rename to src/generated/resources/data/ragium/recipe/shapeless/gray_dye_bucket.json diff --git a/src/generated/resources/data/ragium/recipe/green_dye_bucket.json b/src/generated/resources/data/ragium/recipe/shapeless/green_dye_bucket.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/green_dye_bucket.json rename to src/generated/resources/data/ragium/recipe/shapeless/green_dye_bucket.json diff --git a/src/generated/resources/data/ragium/recipe/gunpowder.json b/src/generated/resources/data/ragium/recipe/shapeless/gunpowder.json similarity index 59% rename from src/generated/resources/data/ragium/recipe/gunpowder.json rename to src/generated/resources/data/ragium/recipe/shapeless/gunpowder.json index a827f8fffe..daa1643b17 100644 --- a/src/generated/resources/data/ragium/recipe/gunpowder.json +++ b/src/generated/resources/data/ragium/recipe/shapeless/gunpowder.json @@ -1,13 +1,12 @@ { "type": "minecraft:crafting_shapeless", "category": "misc", - "group": "gunpowder", "ingredients": [ { - "neoforge:ingredient_type": "neoforge:compound", - "children": [ - "#c:dusts/charcoal", - "#c:dusts/coal" + "neoforge:ingredient_type": "ragium:material_tags", + "tags": [ + "c:dusts/coal", + "c:dusts/charcoal" ] }, "#c:dusts/sulfur", diff --git a/src/generated/resources/data/ragium/recipe/light_blue_dye_bucket.json b/src/generated/resources/data/ragium/recipe/shapeless/light_blue_dye_bucket.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/light_blue_dye_bucket.json rename to src/generated/resources/data/ragium/recipe/shapeless/light_blue_dye_bucket.json diff --git a/src/generated/resources/data/ragium/recipe/light_gray_dye_bucket.json b/src/generated/resources/data/ragium/recipe/shapeless/light_gray_dye_bucket.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/light_gray_dye_bucket.json rename to src/generated/resources/data/ragium/recipe/shapeless/light_gray_dye_bucket.json diff --git a/src/generated/resources/data/ragium/recipe/lime_dye_bucket.json b/src/generated/resources/data/ragium/recipe/shapeless/lime_dye_bucket.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/lime_dye_bucket.json rename to src/generated/resources/data/ragium/recipe/shapeless/lime_dye_bucket.json diff --git a/src/generated/resources/data/ragium/recipe/lingering_bottle.json b/src/generated/resources/data/ragium/recipe/shapeless/lingering_bottle.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/lingering_bottle.json rename to src/generated/resources/data/ragium/recipe/shapeless/lingering_bottle.json diff --git a/src/generated/resources/data/ragium/recipe/magenta_dye_bucket.json b/src/generated/resources/data/ragium/recipe/shapeless/magenta_dye_bucket.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/magenta_dye_bucket.json rename to src/generated/resources/data/ragium/recipe/shapeless/magenta_dye_bucket.json diff --git a/src/generated/resources/data/ragium/recipe/netherite_nugget_from_ingot.json b/src/generated/resources/data/ragium/recipe/shapeless/netherite_nugget_from_ingot.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/netherite_nugget_from_ingot.json rename to src/generated/resources/data/ragium/recipe/shapeless/netherite_nugget_from_ingot.json diff --git a/src/generated/resources/data/ragium/recipe/orange_dye_bucket.json b/src/generated/resources/data/ragium/recipe/shapeless/orange_dye_bucket.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/orange_dye_bucket.json rename to src/generated/resources/data/ragium/recipe/shapeless/orange_dye_bucket.json diff --git a/src/generated/resources/data/ragium/recipe/pink_dye_bucket.json b/src/generated/resources/data/ragium/recipe/shapeless/pink_dye_bucket.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/pink_dye_bucket.json rename to src/generated/resources/data/ragium/recipe/shapeless/pink_dye_bucket.json diff --git a/src/generated/resources/data/ragium/recipe/shapeless/pitch_coke_from_block.json b/src/generated/resources/data/ragium/recipe/shapeless/pitch_coke_from_block.json new file mode 100644 index 0000000000..34b90f3354 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/shapeless/pitch_coke_from_block.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "group": "pitch_coke", + "ingredients": [ + "#c:storage_blocks/pitch_coke" + ], + "result": { + "count": 9, + "id": "ragium:pitch_coke" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/prismarine_shard_from_bricks.json b/src/generated/resources/data/ragium/recipe/shapeless/prismarine_shard_from_bricks.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/prismarine_shard_from_bricks.json rename to src/generated/resources/data/ragium/recipe/shapeless/prismarine_shard_from_bricks.json diff --git a/src/generated/resources/data/ragium/recipe/purple_dye_bucket.json b/src/generated/resources/data/ragium/recipe/shapeless/purple_dye_bucket.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/purple_dye_bucket.json rename to src/generated/resources/data/ragium/recipe/shapeless/purple_dye_bucket.json diff --git a/src/generated/resources/data/ragium/recipe/red_dye_bucket.json b/src/generated/resources/data/ragium/recipe/shapeless/red_dye_bucket.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/red_dye_bucket.json rename to src/generated/resources/data/ragium/recipe/shapeless/red_dye_bucket.json diff --git a/src/generated/resources/data/ragium/recipe/sooty_iron_ingot_from_block.json b/src/generated/resources/data/ragium/recipe/shapeless/sooty_iron_ingot_from_block.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/sooty_iron_ingot_from_block.json rename to src/generated/resources/data/ragium/recipe/shapeless/sooty_iron_ingot_from_block.json diff --git a/src/generated/resources/data/ragium/recipe/sooty_iron_nugget_from_ingot.json b/src/generated/resources/data/ragium/recipe/shapeless/sooty_iron_nugget_from_ingot.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/sooty_iron_nugget_from_ingot.json rename to src/generated/resources/data/ragium/recipe/shapeless/sooty_iron_nugget_from_ingot.json diff --git a/src/generated/resources/data/ragium/recipe/splash_bottle.json b/src/generated/resources/data/ragium/recipe/shapeless/splash_bottle.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/splash_bottle.json rename to src/generated/resources/data/ragium/recipe/shapeless/splash_bottle.json diff --git a/src/generated/resources/data/ragium/recipe/tiny_charcoal.json b/src/generated/resources/data/ragium/recipe/shapeless/tiny_charcoal.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/tiny_charcoal.json rename to src/generated/resources/data/ragium/recipe/shapeless/tiny_charcoal.json diff --git a/src/generated/resources/data/ragium/recipe/tiny_coal.json b/src/generated/resources/data/ragium/recipe/shapeless/tiny_coal.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/tiny_coal.json rename to src/generated/resources/data/ragium/recipe/shapeless/tiny_coal.json diff --git a/src/generated/resources/data/ragium/recipe/tiny_coal_coke.json b/src/generated/resources/data/ragium/recipe/shapeless/tiny_coal_coke.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/tiny_coal_coke.json rename to src/generated/resources/data/ragium/recipe/shapeless/tiny_coal_coke.json diff --git a/src/generated/resources/data/ragium/recipe/shapeless/tiny_pitch_coke.json b/src/generated/resources/data/ragium/recipe/shapeless/tiny_pitch_coke.json new file mode 100644 index 0000000000..42ce2b3fee --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/shapeless/tiny_pitch_coke.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "group": "tiny_pitch_coke", + "ingredients": [ + "ragium:pitch_coke" + ], + "result": { + "count": 8, + "id": "ragium:tiny_pitch_coke" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/void_metal_ingot_from_block.json b/src/generated/resources/data/ragium/recipe/shapeless/void_metal_ingot_from_block.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/void_metal_ingot_from_block.json rename to src/generated/resources/data/ragium/recipe/shapeless/void_metal_ingot_from_block.json diff --git a/src/generated/resources/data/ragium/recipe/void_metal_nugget_from_ingot.json b/src/generated/resources/data/ragium/recipe/shapeless/void_metal_nugget_from_ingot.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/void_metal_nugget_from_ingot.json rename to src/generated/resources/data/ragium/recipe/shapeless/void_metal_nugget_from_ingot.json diff --git a/src/generated/resources/data/ragium/recipe/white_dye_bucket.json b/src/generated/resources/data/ragium/recipe/shapeless/white_dye_bucket.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/white_dye_bucket.json rename to src/generated/resources/data/ragium/recipe/shapeless/white_dye_bucket.json diff --git a/src/generated/resources/data/ragium/recipe/yellow_dye_bucket.json b/src/generated/resources/data/ragium/recipe/shapeless/yellow_dye_bucket.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/yellow_dye_bucket.json rename to src/generated/resources/data/ragium/recipe/shapeless/yellow_dye_bucket.json diff --git a/src/generated/resources/data/ragium/recipe/bamboo_charcoal.json b/src/generated/resources/data/ragium/recipe/smelting/bamboo_charcoal.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/bamboo_charcoal.json rename to src/generated/resources/data/ragium/recipe/smelting/bamboo_charcoal.json diff --git a/src/generated/resources/data/ragium/recipe/copper_ingot_from_smelting_dust.json b/src/generated/resources/data/ragium/recipe/smelting/copper_ingot_from_dust.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/copper_ingot_from_smelting_dust.json rename to src/generated/resources/data/ragium/recipe/smelting/copper_ingot_from_dust.json diff --git a/src/generated/resources/data/ragium/recipe/gold_ingot_from_smelting_dust.json b/src/generated/resources/data/ragium/recipe/smelting/gold_ingot_from_dust.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/gold_ingot_from_smelting_dust.json rename to src/generated/resources/data/ragium/recipe/smelting/gold_ingot_from_dust.json diff --git a/src/generated/resources/data/ragium/recipe/iron_ingot_from_smelting_dust.json b/src/generated/resources/data/ragium/recipe/smelting/iron_ingot_from_dust.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/iron_ingot_from_smelting_dust.json rename to src/generated/resources/data/ragium/recipe/smelting/iron_ingot_from_dust.json diff --git a/src/generated/resources/data/ragium/recipe/netherite_ingot_from_smelting_dust.json b/src/generated/resources/data/ragium/recipe/smelting/netherite_ingot_from_dust.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/netherite_ingot_from_smelting_dust.json rename to src/generated/resources/data/ragium/recipe/smelting/netherite_ingot_from_dust.json diff --git a/src/generated/resources/data/ragium/recipe/netherite_gear_smithing.json b/src/generated/resources/data/ragium/recipe/smithing/netherite_gear.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/netherite_gear_smithing.json rename to src/generated/resources/data/ragium/recipe/smithing/netherite_gear.json diff --git a/src/generated/resources/data/ragium/recipe/sooty_iron_ingot_by_coke_dust.json b/src/generated/resources/data/ragium/recipe/sooty_iron_ingot_by_coke_dust.json deleted file mode 100644 index 6b6441ddd1..0000000000 --- a/src/generated/resources/data/ragium/recipe/sooty_iron_ingot_by_coke_dust.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "category": "misc", - "group": "sooty_iron_ingot", - "ingredients": [ - "#c:ingots/iron", - "#c:ingots/iron", - "#c:dusts/coal_coke" - ], - "result": { - "count": 2, - "id": "ragium:sooty_iron_ingot" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/sooty_iron_ingot_by_dust.json b/src/generated/resources/data/ragium/recipe/sooty_iron_ingot_by_dust.json deleted file mode 100644 index 21f342ad70..0000000000 --- a/src/generated/resources/data/ragium/recipe/sooty_iron_ingot_by_dust.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "category": "misc", - "group": "sooty_iron_ingot", - "ingredients": [ - "#c:ingots/iron", - { - "neoforge:ingredient_type": "neoforge:compound", - "children": [ - "#c:dusts/charcoal", - "#c:dusts/coal" - ] - } - ], - "result": { - "id": "ragium:sooty_iron_ingot" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/arcane_machine_casing.json b/src/generated/resources/data/ragium/recipe/stonecutting/arcane_machine_casing.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/arcane_machine_casing.json rename to src/generated/resources/data/ragium/recipe/stonecutting/arcane_machine_casing.json diff --git a/src/generated/resources/data/ragium/recipe/bio_machine_casing.json b/src/generated/resources/data/ragium/recipe/stonecutting/bio_machine_casing.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/bio_machine_casing.json rename to src/generated/resources/data/ragium/recipe/stonecutting/bio_machine_casing.json diff --git a/src/generated/resources/data/ragium/recipe/chemical_machine_casing.json b/src/generated/resources/data/ragium/recipe/stonecutting/chemical_machine_casing.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/chemical_machine_casing.json rename to src/generated/resources/data/ragium/recipe/stonecutting/chemical_machine_casing.json diff --git a/src/generated/resources/data/ragium/recipe/stonecutting/cryolite_slab.json b/src/generated/resources/data/ragium/recipe/stonecutting/cryolite_slab.json new file mode 100644 index 0000000000..f23b3e3544 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/stonecutting/cryolite_slab.json @@ -0,0 +1,8 @@ +{ + "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 new file mode 100644 index 0000000000..19f17a6ca8 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/stonecutting/cryolite_stairs.json @@ -0,0 +1,7 @@ +{ + "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/electronics_machine_casing.json b/src/generated/resources/data/ragium/recipe/stonecutting/electronics_machine_casing.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/electronics_machine_casing.json rename to src/generated/resources/data/ragium/recipe/stonecutting/electronics_machine_casing.json diff --git a/src/generated/resources/data/ragium/recipe/stonecutting/fluorite_slab.json b/src/generated/resources/data/ragium/recipe/stonecutting/fluorite_slab.json new file mode 100644 index 0000000000..ca1dc39955 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/stonecutting/fluorite_slab.json @@ -0,0 +1,8 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": "ragium:fluorite_block", + "result": { + "count": 2, + "id": "ragium:fluorite_slab" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/stonecutting/fluorite_stairs.json b/src/generated/resources/data/ragium/recipe/stonecutting/fluorite_stairs.json new file mode 100644 index 0000000000..cc4f2fcb3e --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/stonecutting/fluorite_stairs.json @@ -0,0 +1,7 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": "ragium:fluorite_block", + "result": { + "id": "ragium:fluorite_stairs" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/heat_machine_casing.json b/src/generated/resources/data/ragium/recipe/stonecutting/heat_machine_casing.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/heat_machine_casing.json rename to src/generated/resources/data/ragium/recipe/stonecutting/heat_machine_casing.json diff --git a/src/generated/resources/data/ragium/recipe/mechanical_machine_casing.json b/src/generated/resources/data/ragium/recipe/stonecutting/mechanical_machine_casing.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/mechanical_machine_casing.json rename to src/generated/resources/data/ragium/recipe/stonecutting/mechanical_machine_casing.json diff --git a/src/generated/resources/data/ragium/recipe/synthetic_feather.json b/src/generated/resources/data/ragium/recipe/stonecutting/synthetic_feather.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/synthetic_feather.json rename to src/generated/resources/data/ragium/recipe/stonecutting/synthetic_feather.json diff --git a/src/generated/resources/data/ragium/recipe/synthetic_fiber.json b/src/generated/resources/data/ragium/recipe/stonecutting/synthetic_fiber.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/synthetic_fiber.json rename to src/generated/resources/data/ragium/recipe/stonecutting/synthetic_fiber.json diff --git a/src/generated/resources/data/ragium/recipe/synthetic_leather.json b/src/generated/resources/data/ragium/recipe/stonecutting/synthetic_leather.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/synthetic_leather.json rename to src/generated/resources/data/ragium/recipe/stonecutting/synthetic_leather.json diff --git a/src/generated/resources/data/ragium/tags/block/machines.json b/src/generated/resources/data/ragium/tags/block/machines.json index 5e6f5515e6..04e451f284 100644 --- a/src/generated/resources/data/ragium/tags/block/machines.json +++ b/src/generated/resources/data/ragium/tags/block/machines.json @@ -1,5 +1,6 @@ { "values": [ + "#ragium:machines/arcane", "#ragium:machines/bio", "#ragium:machines/chemical", "#ragium:machines/electronics", diff --git a/src/generated/resources/data/ragium/tags/block/machines/arcane.json b/src/generated/resources/data/ragium/tags/block/machines/arcane.json new file mode 100644 index 0000000000..41780d1ef0 --- /dev/null +++ b/src/generated/resources/data/ragium/tags/block/machines/arcane.json @@ -0,0 +1,5 @@ +{ + "values": [ + "ragium:enchanter" + ] +} \ 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 f2a6ce3824..1be45a33dc 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:precision_assembler", "ragium:scanner" ] } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/tags/block/storages/creative.json b/src/generated/resources/data/ragium/tags/block/storages/creative.json new file mode 100644 index 0000000000..71b452c629 --- /dev/null +++ b/src/generated/resources/data/ragium/tags/block/storages/creative.json @@ -0,0 +1,6 @@ +{ + "values": [ + "ragium:creative_battery", + "ragium:creative_tank" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/tags/fluid/resins.json b/src/generated/resources/data/ragium/tags/fluid/resins.json new file mode 100644 index 0000000000..f90cf5c74e --- /dev/null +++ b/src/generated/resources/data/ragium/tags/fluid/resins.json @@ -0,0 +1,6 @@ +{ + "values": [ + "#c:resin", + "#c:synthetic_resin" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/tags/item/coals.json b/src/generated/resources/data/ragium/tags/item/coals.json new file mode 100644 index 0000000000..1a177d588f --- /dev/null +++ b/src/generated/resources/data/ragium/tags/item/coals.json @@ -0,0 +1,7 @@ +{ + "values": [ + "ragium:bamboo_charcoal", + "minecraft:charcoal", + "minecraft:coal" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/tags/item/cokes.json b/src/generated/resources/data/ragium/tags/item/cokes.json new file mode 100644 index 0000000000..c8c25df6dd --- /dev/null +++ b/src/generated/resources/data/ragium/tags/item/cokes.json @@ -0,0 +1,6 @@ +{ + "values": [ + "#c:coal_coke", + "#c:pitch_coke" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/tags/item/machines.json b/src/generated/resources/data/ragium/tags/item/machines.json index 5e6f5515e6..04e451f284 100644 --- a/src/generated/resources/data/ragium/tags/item/machines.json +++ b/src/generated/resources/data/ragium/tags/item/machines.json @@ -1,5 +1,6 @@ { "values": [ + "#ragium:machines/arcane", "#ragium:machines/bio", "#ragium:machines/chemical", "#ragium:machines/electronics", diff --git a/src/generated/resources/data/ragium/tags/item/machines/arcane.json b/src/generated/resources/data/ragium/tags/item/machines/arcane.json new file mode 100644 index 0000000000..41780d1ef0 --- /dev/null +++ b/src/generated/resources/data/ragium/tags/item/machines/arcane.json @@ -0,0 +1,5 @@ +{ + "values": [ + "ragium:enchanter" + ] +} \ 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 f2a6ce3824..1be45a33dc 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:precision_assembler", "ragium:scanner" ] } \ No newline at end of file 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 new file mode 100644 index 0000000000..29217b0ffd --- /dev/null +++ b/src/generated/resources/data/ragium/tags/item/show_fluid_tooltips.json @@ -0,0 +1,7 @@ +{ + "values": [ + "ragium:creative_tank", + "ragium:tank", + "ragium:void_tank" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/tags/item/storages/creative.json b/src/generated/resources/data/ragium/tags/item/storages/creative.json new file mode 100644 index 0000000000..71b452c629 --- /dev/null +++ b/src/generated/resources/data/ragium/tags/item/storages/creative.json @@ -0,0 +1,6 @@ +{ + "values": [ + "ragium:creative_battery", + "ragium:creative_tank" + ] +} \ No newline at end of file diff --git a/src/lib/kotlin/hiiragi283/lib/HTComparators.kt b/src/lib/kotlin/hiiragi283/lib/HTComparators.kt index ecefa09e48..e7ccd97947 100644 --- a/src/lib/kotlin/hiiragi283/lib/HTComparators.kt +++ b/src/lib/kotlin/hiiragi283/lib/HTComparators.kt @@ -1,8 +1,12 @@ package hiiragi283.lib +import com.google.common.collect.Comparators +import net.minecraft.core.HolderSet import net.minecraft.resources.Identifier import net.minecraft.resources.ResourceKey import net.minecraft.tags.TagKey +import net.neoforged.neoforge.registries.holdersets.CompositeHolderSet +import net.neoforged.neoforge.registries.holdersets.OrHolderSet /** * Hiiragi Seriesで使用される[Comparator]をまとめたクラスです。 @@ -31,8 +35,33 @@ data object HTComparators { compareBy(KEY, TagKey<*>::registry).thenComparing(compareBy(ID, TagKey<*>::location)) /** - * @since 26.1.4 + * [HolderSet]の[Comparator] + * @since 26.1.7 + */ + @JvmField + val HOLDER_SET: Comparator> = compareBy(Comparators.emptiesLast(TAG_KEY), HolderSet<*>::unwrapKey) + + /** + * @since 26.1.7 + */ + @JvmStatic + fun compressHolderSet(holderSets: Iterable>): OrHolderSet = + holderSets.flatMap { holderSet: HolderSet -> + when (holderSet) { + is CompositeHolderSet -> holderSet.components.singleOrNull()?.let(::listOf) ?: listOf(holderSet) + else -> listOf(holderSet) + } + }.sortedWith(HOLDER_SET).let(::OrHolderSet) + + /** + * @since 26.1.7 */ @JvmStatic - fun sortTagKeys(tagKeys: Iterable>): Set> = tagKeys.toSortedSet(TAG_KEY) + fun compressHolderSet(holderSets: Sequence>): OrHolderSet = + holderSets.flatMap { holderSet: HolderSet -> + when (holderSet) { + is CompositeHolderSet -> holderSet.components.singleOrNull()?.let(::listOf) ?: listOf(holderSet) + else -> listOf(holderSet) + } + }.sortedWith(HOLDER_SET).toList().let(::OrHolderSet) } diff --git a/src/lib/kotlin/hiiragi283/lib/HTConstants.kt b/src/lib/kotlin/hiiragi283/lib/HTConstants.kt index 2f562ecacc..e1532670aa 100644 --- a/src/lib/kotlin/hiiragi283/lib/HTConstants.kt +++ b/src/lib/kotlin/hiiragi283/lib/HTConstants.kt @@ -74,6 +74,15 @@ data object HTConstants { // Recipes // + // Vanilla + const val BLASTING = "blasting" + const val SHAPED = "shaped" + const val SHAPELESS = "shapeless" + const val SMELTING = "smelting" + const val SMITHING = "smithing" + const val SMOKING = "smoking" + const val TRANSMUTE = "transmute" + // Serialization const val ENERGY = "energy" const val TIME = "time" diff --git a/src/lib/kotlin/hiiragi283/lib/collection/AbstractMultiMap.kt b/src/lib/kotlin/hiiragi283/lib/collection/AbstractMultiMap.kt deleted file mode 100644 index 3b2082c5f7..0000000000 --- a/src/lib/kotlin/hiiragi283/lib/collection/AbstractMultiMap.kt +++ /dev/null @@ -1,76 +0,0 @@ -package hiiragi283.lib.collection - -import hiiragi283.lib.util.HTBuilderMarker -import it.unimi.dsi.fastutil.objects.Object2ObjectLinkedOpenHashMap - -/** - * [Map]に基づいた[MultiMap]の抽象クラスです。 - * @param K キーのクラス - * @param V 値のクラス - * @param C コレクションのクラス - * @author Hiiragi Tsubasa - * @since 26.1.0 - */ -abstract class AbstractMultiMap>(protected val map: Map) : MultiMap { - override val size: Int get() = map.size - - override val isEmpty: Boolean get() = map.isEmpty() - - override fun containsKey(key: K): Boolean = key in map - - override fun containsValue(value: @UnsafeVariance V): Boolean = map.any { (_, values: C) -> value in values } - - override fun get(key: K): C = map[key] ?: emptyCollection() - - /** - * 空のコレクションを生成します。 - */ - protected abstract fun emptyCollection(): C - - override val keys: Set get() = map.keys - override val values: Collection get() = map.values.flatten() - override val entries: Set>> get() = map.entries - - override fun asMap(): Map = map - - /** - * [MutableMap]に基づいた[MultiMap.Builder]の抽象クラスです。 - * @param K キーのクラス - * @param V 値のクラス - * @param C コレクションのクラス - * @author Hiiragi Tsubasa - * @since 26.1.0 - */ - @HTBuilderMarker - abstract class Builder>(protected val map: MutableMap) : - MultiMap.Builder { - constructor(initialCapacity: Int = 10) : this(Object2ObjectLinkedOpenHashMap(initialCapacity)) - - constructor(other: MultiMap) : this() { - other.asMap().forEach(this::putAll) - } - - /** - * 指定したキーから値の一覧を取得します。 - * @return 対応する一覧がない場合は[emptyCollection]で初期化 - */ - protected fun get(key: K): C = map.getOrPut(key, ::emptyCollection) - - /** - * 空のコレクションを生成します。 - */ - protected abstract fun emptyCollection(): C - - override fun put(key: K, value: V): Boolean = this.get(key).add(value) - - override fun putAll(key: K, values: Iterable): Boolean = this.get(key).addAll(values) - - override fun putAll(key: K, vararg values: V): Boolean = this.get(key).addAll(values) - - override fun putAll(key: K, values: Sequence): Boolean = this.get(key).addAll(values) - - override fun remove(key: K, value: V): Boolean = get(key).remove(value) - - override fun removeAll(key: K): Collection? = map.remove(key) - } -} diff --git a/src/lib/kotlin/hiiragi283/lib/collection/AbstractMultiMapBuilder.kt b/src/lib/kotlin/hiiragi283/lib/collection/AbstractMultiMapBuilder.kt new file mode 100644 index 0000000000..000e1ff288 --- /dev/null +++ b/src/lib/kotlin/hiiragi283/lib/collection/AbstractMultiMapBuilder.kt @@ -0,0 +1,35 @@ +package hiiragi283.lib.collection + +/** + * [MutableMap]に基づいた[MultiMapBuilder]の抽象クラスです。 + * @param K キーのクラス + * @param V 値のクラス + * @param C コレクションのクラス + * @author Hiiragi Tsubasa + * @since 26.1.7 + */ +abstract class AbstractMultiMapBuilder>(protected val destination: MutableMap) : + MultiMapBuilder { + /** + * 空のコレクションを生成します。 + */ + protected abstract fun emptyCollection(): C + + /** + * 指定したキーから値の一覧を取得します。 + * @return 対応する一覧がない場合は[emptyCollection]で初期化 + */ + protected fun get(key: K): C = destination.getOrPut(key, ::emptyCollection) + + override fun put(key: K, value: V): Boolean = this.get(key).add(value) + + override fun putAll(key: K, values: Iterable): Boolean = this.get(key).addAll(values) + + override fun putAll(key: K, vararg values: V): Boolean = this.get(key).addAll(values) + + override fun putAll(key: K, values: Sequence): Boolean = this.get(key).addAll(values) + + override fun remove(key: K, value: V): Boolean = destination[key]?.remove(value) ?: false + + override fun removeAll(key: K): Collection? = destination.remove(key) +} diff --git a/src/lib/kotlin/hiiragi283/lib/collection/DelegatingTable.kt b/src/lib/kotlin/hiiragi283/lib/collection/DelegatingTable.kt new file mode 100644 index 0000000000..325aef728c --- /dev/null +++ b/src/lib/kotlin/hiiragi283/lib/collection/DelegatingTable.kt @@ -0,0 +1,59 @@ +package hiiragi283.lib.collection + +import com.google.common.collect.HashBasedTable +import com.google.common.collect.ImmutableTable + +/** + * [Table]を実装した[com.google.common.collect.Table]のラッパークラスです。 + * @param R 行のクラス + * @param C 列のクラス + * @param V 値のクラス + * @author Hiiragi Tsubasa + * @since 26.1.7 + */ +class DelegatingTable(private val delegate: com.google.common.collect.Table) : + Table { + override val size: Int get() = delegate.size() + override val isEmpty: Boolean get() = delegate.isEmpty + + override fun contains(row: R, column: C): Boolean = delegate.contains(row, column) + + override fun containsRow(row: R): Boolean = delegate.containsRow(row) + + override fun containsColumn(column: C): Boolean = delegate.containsColumn(column) + + override fun containsValue(value: @UnsafeVariance V): Boolean = delegate.containsValue(value) + + override fun get(row: R, column: C): V? = delegate[row, column] + + override fun row(row: R): Map = delegate.row(row) + + override fun column(column: C): Map = delegate.column(column) + + override val rowKeys: Set get() = delegate.rowKeySet() + override val columnKeys: Set get() = delegate.columnKeySet() + override val values: Collection get() = delegate.values() + override val entries: Set> get() = delegate.cellSet().mapTo(mutableSetOf()) { + Triple(it.rowKey, it.columnKey, it.value) + } + + /** + * [DelegatingTable]向けの[Table.Builder]の抽象クラスです。 + * @param R 行のクラス + * @param C 列のクラス + * @param V 値のクラス + * @author Hiiragi Tsubasa + * @since 26.1.7 + */ + class Builder(private val builder: com.google.common.collect.Table) : + Table.Builder { + constructor() : this(HashBasedTable.create()) + + constructor(initialCapacity: Int = 10) : this(HashBasedTable.create(initialCapacity, initialCapacity)) + override fun get(row: R, column: C): V? = builder[row, column] + + override fun put(row: R, column: C, value: V): V? = builder.put(row, column, value) + + override fun build(): DelegatingTable = ImmutableTable.copyOf(builder).let(::DelegatingTable) + } +} diff --git a/src/lib/kotlin/hiiragi283/lib/collection/HTMaps.kt b/src/lib/kotlin/hiiragi283/lib/collection/HTMaps.kt index c092e2a130..b007fb6d20 100644 --- a/src/lib/kotlin/hiiragi283/lib/collection/HTMaps.kt +++ b/src/lib/kotlin/hiiragi283/lib/collection/HTMaps.kt @@ -30,34 +30,3 @@ fun , CB : MutableMap> Map Map>.toMultiMap(): ListMultiMap = ListMultiMap.copyOf(this) - -@JvmName("mapListMultiMapTo") -inline fun Map.mapMultiMapTo(transform: (Map.Entry) -> List): ListMultiMap = - this.mapValues(transform).toMultiMap() - -@Suppress("NOTHING_TO_INLINE") -@JvmName("toSetMultiMap") -inline fun Map>.toMultiMap(): SetMultiMap = SetMultiMap.copyOf(this) - -@JvmName("mapSetMultiMapTo") -inline fun Map.mapMultiMapTo(transform: (Map.Entry) -> Set): SetMultiMap = - this.mapValues(transform).toMultiMap() - -// Table // - -inline fun Map.mapTable(transform: (Map.Entry) -> Triple): Table = - this.mapTableTo(PairMapTable.Builder(), transform) - -inline fun > Map.mapTableTo( - builder: D, - transform: (Map.Entry) -> Triple -): Table { - this.entries.map(transform).forEach(builder::put) - return builder.build() -} diff --git a/src/lib/kotlin/hiiragi283/lib/collection/ListMultiMap.kt b/src/lib/kotlin/hiiragi283/lib/collection/ListMultiMap.kt deleted file mode 100644 index 3e52d9c78d..0000000000 --- a/src/lib/kotlin/hiiragi283/lib/collection/ListMultiMap.kt +++ /dev/null @@ -1,41 +0,0 @@ -package hiiragi283.lib.collection - -import it.unimi.dsi.fastutil.objects.ObjectArrayList - -/** - * [List]に基づいた[MultiMap]の実装クラスです。 - * @param K キーのクラス - * @param V 値のクラス - * @author Hiiragi Tsubasa - * @since 26.1.0 - */ -class ListMultiMap private constructor(map: Map>) : AbstractMultiMap>(map) { - companion object { - /** - * 指定した[map]を[MultiMap]に変換します。 - */ - @JvmStatic - fun copyOf(map: Map>): ListMultiMap = ListMultiMap(map) - } - - override fun emptyCollection(): List = listOf() - - /** - * [MutableList]に基づいた[MultiMap.Builder]の抽象クラスです。 - * @param K キーのクラス - * @param V 値のクラス - * @author Hiiragi Tsubasa - * @since 26.1.0 - */ - class Builder : AbstractMultiMap.Builder> { - constructor(map: MutableMap>) : super(map) - - constructor(initialCapacity: Int = 10) : super(initialCapacity) - - constructor(other: MultiMap) : super(other) - - override fun emptyCollection(): MutableList = ObjectArrayList() - - override fun build(): ListMultiMap = ListMultiMap(map) - } -} diff --git a/src/lib/kotlin/hiiragi283/lib/collection/ListMultiMapBuilder.kt b/src/lib/kotlin/hiiragi283/lib/collection/ListMultiMapBuilder.kt new file mode 100644 index 0000000000..4f04ecac08 --- /dev/null +++ b/src/lib/kotlin/hiiragi283/lib/collection/ListMultiMapBuilder.kt @@ -0,0 +1,17 @@ +package hiiragi283.lib.collection + +/** + * [MutableList]に基づいた[AbstractMultiMapBuilder]の実装クラスです。 + * @param K キーのクラス + * @param V 値のクラス + * @author Hiiragi Tsubasa + * @since 26.1.7 + */ +class ListMultiMapBuilder( + destination: MutableMap>, + private val collectionFactory: () -> MutableList = ::mutableListOf +) : AbstractMultiMapBuilder>(destination) { + override fun emptyCollection(): MutableList = collectionFactory() + + override fun build(): Map> = destination +} diff --git a/src/lib/kotlin/hiiragi283/lib/collection/MultiMap.kt b/src/lib/kotlin/hiiragi283/lib/collection/MultiMap.kt deleted file mode 100644 index 7abb639f3c..0000000000 --- a/src/lib/kotlin/hiiragi283/lib/collection/MultiMap.kt +++ /dev/null @@ -1,117 +0,0 @@ -package hiiragi283.lib.collection - -/** - * 一つのキーに対して複数の値が対応するコレクションを表すインターフェースです。 - * - * 参照 : [Google Guava - Multimap][com.google.common.collect.Multimap] - * @param K キーのクラス - * @param V 値のクラス - * @author Hiiragi Tsubasa - * @since 26.1.0 - */ -interface MultiMap { - /** - * 組の個数 - */ - val size: Int - - /** - * このマップが空かどうか判定します。 - */ - val isEmpty: Boolean - - /** - * 指定したキーが含まれているか判定します。 - */ - fun containsKey(key: K): Boolean - - operator fun contains(key: K): Boolean = containsKey(key) - - /** - * 指定した値が含まれているか判定します。 - */ - fun containsValue(value: @UnsafeVariance V): Boolean - - /** - * 指定したキーから値の一覧を取得します。 - */ - operator fun get(key: K): Collection - - /** - * キーの一覧 - */ - val keys: Set - - /** - * 値の一覧 - */ - val values: Collection - - /** - * 組の一覧 - */ - val entries: Set>> - - /** - * 値ごとに分割した組の一覧 - */ - val flatEntries: Set> get() = entries.flatMapTo(mutableSetOf()) { (key: K, values: Collection) -> - values.map { - key to - it - } - } - - /** - * [Map]に変換します。 - */ - fun asMap(): Map> - - /** - * [MultiMap]のビルダーを表すインターフェースです。 - * @param K キーのクラス - * @param V 値のクラス - * @author Hiiragi Tsubasa - * @since 26.1.0 - */ - interface Builder { - /** - * 値を追加します。 - */ - fun put(key: K, value: V): Boolean - - operator fun set(key: K, value: V) { - put(key, value) - } - - /** - * 値を追加します。 - */ - fun putAll(key: K, values: Iterable): Boolean - - /** - * 値を追加します。 - */ - fun putAll(key: K, vararg values: V): Boolean - - /** - * 値を追加します。 - */ - fun putAll(key: K, values: Sequence): Boolean - - /** - * @since 26.1.2 - */ - fun remove(key: K, value: V): Boolean - - /** - * @since 26.1.2 - */ - fun removeAll(key: K): Collection? - - /** - * [MultiMap]を生成します。 - */ - fun build(): MultiMap - } -} diff --git a/src/lib/kotlin/hiiragi283/lib/collection/MultiMapBuilder.kt b/src/lib/kotlin/hiiragi283/lib/collection/MultiMapBuilder.kt new file mode 100644 index 0000000000..28c0cff2b1 --- /dev/null +++ b/src/lib/kotlin/hiiragi283/lib/collection/MultiMapBuilder.kt @@ -0,0 +1,49 @@ +package hiiragi283.lib.collection + +/** + * 値に[Collection]を持つ[Map]のビルダーを表すインターフェースです。 + * @param K キーのクラス + * @param V 値のクラス + * @author Hiiragi Tsubasa + * @since 26.1.7 + */ +interface MultiMapBuilder { + /** + * 値を追加します。 + */ + fun put(key: K, value: V): Boolean + + operator fun set(key: K, value: V) { + put(key, value) + } + + /** + * 値を追加します。 + */ + fun putAll(key: K, values: Iterable): Boolean + + /** + * 値を追加します。 + */ + fun putAll(key: K, vararg values: V): Boolean + + /** + * 値を追加します。 + */ + fun putAll(key: K, values: Sequence): Boolean + + /** + * @since 26.1.2 + */ + fun remove(key: K, value: V): Boolean + + /** + * @since 26.1.2 + */ + fun removeAll(key: K): Collection? + + /** + * [Map]を生成します。 + */ + fun build(): Map> +} diff --git a/src/lib/kotlin/hiiragi283/lib/collection/MultiMaps.kt b/src/lib/kotlin/hiiragi283/lib/collection/MultiMaps.kt index f267e489da..13570badff 100644 --- a/src/lib/kotlin/hiiragi283/lib/collection/MultiMaps.kt +++ b/src/lib/kotlin/hiiragi283/lib/collection/MultiMaps.kt @@ -2,59 +2,25 @@ package hiiragi283.lib.collection -import hiiragi283.lib.util.identity -import java.util.TreeSet +import it.unimi.dsi.fastutil.objects.Object2ObjectLinkedOpenHashMap import kotlin.contracts.ExperimentalContracts import kotlin.contracts.InvocationKind import kotlin.contracts.contract /** - * 空の[MultiMap]のインスタンスを返します。 - * @param K キーのクラス - * @param V 値のクラス - * @author Hiiragi Tsubasa - * @since 26.1.0 - */ -@Suppress("UNCHECKED_CAST") -fun emptyMultiMapOf(): MultiMap = EmptyMultiMap as MultiMap - -private data object EmptyMultiMap : MultiMap { - override val size: Int = 0 - - override val isEmpty: Boolean = true - - override fun containsKey(key: Any?): Boolean = false - - override fun containsValue(value: Nothing): Boolean = false - - override fun get(key: Any?): Collection = setOf() - - override val keys: Set = setOf() - override val values: Collection = setOf() - override val entries: Set>> = setOf() - - override fun asMap(): Map> = mapOf() -} - -/** - * 新しい[ListMultiMap]のインスタンスを作成します。 + * 新しい[Map]のインスタンスを作成します。 * @param K キーのクラス * @param V 値のクラス * @author Hiiragi Tsubasa * @since 26.1.0 */ inline fun buildListMultiMap( - initialCapacity: Int = 10, - builderAction: ListMultiMap.Builder.() -> Unit -): ListMultiMap { - contract { - callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) - } - return ListMultiMap.Builder(initialCapacity).apply(builderAction).build() -} + builderAction: ListMultiMapBuilder.() -> Unit, + noinline collectionFactory: () -> MutableList = ::mutableListOf +): Map> = buildListMultiMap(Object2ObjectLinkedOpenHashMap(), builderAction, collectionFactory) /** - * 新しい[ListMultiMap]のインスタンスを作成します。 + * 新しい[Map]のインスタンスを作成します。 * @param K キーのクラス * @param V 値のクラス * @author Hiiragi Tsubasa @@ -62,33 +28,29 @@ inline fun buildListMultiMap( */ inline fun buildListMultiMap( map: MutableMap>, - builderAction: ListMultiMap.Builder.() -> Unit -): ListMultiMap { + builderAction: ListMultiMapBuilder.() -> Unit, + noinline collectionFactory: () -> MutableList = ::mutableListOf +): Map> { contract { callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) } - return ListMultiMap.Builder(map).apply(builderAction).build() + return ListMultiMapBuilder(map, collectionFactory).apply(builderAction).build() } /** - * 新しい[SetMultiMap]のインスタンスを作成します。 + * 新しい[Map]のインスタンスを作成します。 * @param K キーのクラス * @param V 値のクラス * @author Hiiragi Tsubasa * @since 26.1.0 */ inline fun buildSetMultiMap( - initialCapacity: Int = 10, - builderAction: SetMultiMap.Builder.() -> Unit -): SetMultiMap { - contract { - callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) - } - return SetMultiMap.Builder(initialCapacity).apply(builderAction).build() -} + builderAction: SetMultiMapBuilder.() -> Unit, + noinline collectionFactory: () -> MutableSet = ::mutableSetOf +): Map> = buildSetMultiMap(Object2ObjectLinkedOpenHashMap(), builderAction, collectionFactory) /** - * 新しい[SetMultiMap]のインスタンスを作成します。 + * 新しい[Map]のインスタンスを作成します。 * @param K キーのクラス * @param V 値のクラス * @author Hiiragi Tsubasa @@ -96,114 +58,45 @@ inline fun buildSetMultiMap( */ inline fun buildSetMultiMap( map: MutableMap>, - builderAction: SetMultiMap.Builder.() -> Unit -): SetMultiMap { - contract { - callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) - } - return SetMultiMap.Builder(map).apply(builderAction).build() -} - -/** - * 新しい[SetMultiMap]のインスタンスを作成します。 - * @param K キーのクラス - * @param V 値のクラス - * @author Hiiragi Tsubasa - * @since 26.1.2 - */ -inline fun > buildSortedSetMultiMap( - initialCapacity: Int = 10, - builderAction: SetMultiMap.SortedBuilder.() -> Unit -): SetMultiMap { - contract { - callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) - } - return SetMultiMap.SortedBuilder(compareBy(identity()), initialCapacity).apply(builderAction).build() -} - -/** - * 新しい[SetMultiMap]のインスタンスを作成します。 - * @param K キーのクラス - * @param V 値のクラス - * @author Hiiragi Tsubasa - * @since 26.1.2 - */ -inline fun > buildSortedSetMultiMap( - map: MutableMap>, - builderAction: SetMultiMap.SortedBuilder.() -> Unit -): SetMultiMap { - contract { - callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) - } - return SetMultiMap.SortedBuilder(compareBy(identity()), map).apply(builderAction).build() -} - -/** - * 新しい[SetMultiMap]のインスタンスを作成します。 - * @param K キーのクラス - * @param V 値のクラス - * @author Hiiragi Tsubasa - * @since 26.1.2 - */ -inline fun buildSortedSetMultiMap( - comparator: Comparator, - initialCapacity: Int = 10, - builderAction: SetMultiMap.SortedBuilder.() -> Unit -): SetMultiMap { - contract { - callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) - } - return SetMultiMap.SortedBuilder(comparator, initialCapacity).apply(builderAction).build() -} - -/** - * 新しい[SetMultiMap]のインスタンスを作成します。 - * @param K キーのクラス - * @param V 値のクラス - * @author Hiiragi Tsubasa - * @since 26.1.2 - */ -inline fun buildSortedSetMultiMap( - comparator: Comparator, - map: MutableMap>, - builderAction: SetMultiMap.SortedBuilder.() -> Unit -): SetMultiMap { + builderAction: SetMultiMapBuilder.() -> Unit, + noinline collectionFactory: () -> MutableSet = ::mutableSetOf +): Map> { contract { callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) } - return SetMultiMap.SortedBuilder(comparator, map).apply(builderAction).build() + return SetMultiMapBuilder(map, collectionFactory).apply(builderAction).build() } // Table // /** * [Table]に変換します。 - * @param K [MultiMap]のキーのクラス - * @param V [MultiMap]の値のクラス + * @param K [Map]のキーのクラス + * @param V [Map]の値のクラス * @param R [Table]の行のクラス * @param C [Table]の列のクラス * @param W [Table]の値のクラス - * @param transform [MultiMap]の要素の組を[Triple]の一覧に変換するブロック + * @param transform [Map]の要素の組を[Triple]の一覧に変換するブロック * @author Hiiragi Tsubasa * @since 26.1.0 */ -inline fun MultiMap.flatMapTable( +inline fun Map>.flatMapTable( transform: (Map.Entry>) -> Iterable> -): Table = this.flatMapTableTo(PairMapTable.Builder(), transform) +): Table = this.flatMapTableTo(DelegatingTable.Builder(), transform) /** * [Table]に変換します。 - * @param K [MultiMap]のキーのクラス - * @param V [MultiMap]の値のクラス + * @param K [Map]のキーのクラス + * @param V [Map]の値のクラス * @param R [Table]の行のクラス * @param C [Table]の列のクラス * @param W [Table]の値のクラス * @param builder テーブルの値の受取先 - * @param transform [MultiMap]の要素の組を[Triple]の一覧に変換するブロック + * @param transform [Map]の要素の組を[Triple]の一覧に変換するブロック * @author Hiiragi Tsubasa * @since 26.1.0 */ -inline fun > MultiMap.flatMapTableTo( +inline fun > Map>.flatMapTableTo( builder: D, transform: (Map.Entry>) -> Iterable> ): Table { diff --git a/src/lib/kotlin/hiiragi283/lib/collection/NonEmptyList.kt b/src/lib/kotlin/hiiragi283/lib/collection/NonEmptyList.kt index bbc779fa94..5b87b54450 100644 --- a/src/lib/kotlin/hiiragi283/lib/collection/NonEmptyList.kt +++ b/src/lib/kotlin/hiiragi283/lib/collection/NonEmptyList.kt @@ -15,43 +15,20 @@ typealias Nel = NonEmptyList * @author Hiiragi Tsubasa * @since 26.1.6 */ -class NonEmptyList @PublishedApi internal constructor(val head: E, val tail: List) : List { +class NonEmptyList @PublishedApi internal constructor(val head: E, val tail: List) : AbstractList() { constructor(head: E) : this(head, listOf()) - val all: List get() = listOf(head) + tail - - override fun equals(other: Any?): Boolean = when (other) { - is Nel<*> -> this.all == other.all - else -> this.all == other - } - - override fun hashCode(): Int = all.hashCode() - - override fun toString(): String = all.toString() + val all: List get() = this // List // - override val size: Int get() = all.size - - override fun isEmpty(): Boolean = false - - override fun contains(element: @UnsafeVariance E): Boolean = all.contains(element) - - override fun iterator(): Iterator = all.iterator() + override val size: Int get() = 1 + tail.size - override fun containsAll(elements: Collection<@UnsafeVariance E>): Boolean = all.containsAll(elements) - - override fun get(index: Int): E = all[index] - - override fun indexOf(element: @UnsafeVariance E): Int = all.indexOf(element) - - override fun lastIndexOf(element: @UnsafeVariance E): Int = all.lastIndexOf(element) - - override fun listIterator(): ListIterator = all.listIterator() - - override fun listIterator(index: Int): ListIterator = all.listIterator(index) - - override fun subList(fromIndex: Int, toIndex: Int): List = all.subList(fromIndex, toIndex) + override fun get(index: Int): E = when (index) { + 0 -> head + in 1 until size -> tail[index - 1] + else -> throw IndexOutOfBoundsException("index: $index, size: $size") + } // Extensions // diff --git a/src/lib/kotlin/hiiragi283/lib/collection/NonEmptyLists.kt b/src/lib/kotlin/hiiragi283/lib/collection/NonEmptyLists.kt index de3a9d1107..83d27257c2 100644 --- a/src/lib/kotlin/hiiragi283/lib/collection/NonEmptyLists.kt +++ b/src/lib/kotlin/hiiragi283/lib/collection/NonEmptyLists.kt @@ -1,5 +1,12 @@ package hiiragi283.lib.collection +/** + * @param E リストの要素のクラス + * @author Hiiragi Tsubasa + * @since 26.1.7 + */ +fun nelOf(head: E): Nel = Nel(head) + /** * @param E リストの要素のクラス * @author Hiiragi Tsubasa diff --git a/src/lib/kotlin/hiiragi283/lib/collection/PairMapTable.kt b/src/lib/kotlin/hiiragi283/lib/collection/PairMapTable.kt deleted file mode 100644 index 4f73dacd16..0000000000 --- a/src/lib/kotlin/hiiragi283/lib/collection/PairMapTable.kt +++ /dev/null @@ -1,67 +0,0 @@ -package hiiragi283.lib.collection - -import it.unimi.dsi.fastutil.objects.Object2ObjectLinkedOpenHashMap -import it.unimi.dsi.fastutil.objects.ObjectLinkedOpenHashSet - -/** - * 行と列を[Pair]で束ねて管理する[Table]の実装クラスです。 - * @param R 行のクラス - * @param C 列のクラス - * @param V 値のクラス - * @author Hiiragi Tsubasa - * @since 26.1.0 - */ -@JvmInline -value class PairMapTable private constructor(private val map: Map, V>) : Table { - override fun contains(row: R, column: C): Boolean = (row to column) in map - - override fun containsRow(row: R): Boolean = map.any { (key: Pair, _) -> key.first == row } - - override fun containsColumn(column: C): Boolean = map.any { (key: Pair, _) -> key.second == column } - - override fun containsValue(value: @UnsafeVariance V): Boolean = map.containsValue(value) - - override fun get(row: R, column: C): V? = map[row to column] - - override val size: Int get() = map.size - override val isEmpty: Boolean get() = map.isEmpty() - - override fun row(row: R): Map = map.filterKeys { (rowIn: R, _) -> - rowIn == row - }.mapKeys { (key: Pair, _) -> key.second } - - override fun column(column: C): Map = map.filterKeys { (_, columnIn: C) -> - columnIn == column - }.mapKeys { (key: Pair, _) -> key.first } - - override val rowKeys: Set get() = map.keys.mapTo(ObjectLinkedOpenHashSet()) { it.first } - override val columnKeys: Set get() = map.keys.mapTo(ObjectLinkedOpenHashSet()) { it.second } - override val values: Collection get() = map.values - override val entries: Set> get() = map.entries.mapTo( - ObjectLinkedOpenHashSet() - ) { (key: Pair, value: V) -> - Triple(key.first, key.second, value) - } - - /** - * [PairMapTable]向けの[Table.Builder]の抽象クラスです。 - * @param R 行のクラス - * @param C 列のクラス - * @param V 値のクラス - * @author Hiiragi Tsubasa - * @since 26.1.0 - */ - class Builder(private val map: MutableMap, V>) : Table.Builder { - constructor(initialCapacity: Int = 10) : this(Object2ObjectLinkedOpenHashMap(initialCapacity)) - - constructor(other: Table) : this() { - other.forEach(this::put) - } - - override fun get(row: R, column: C): V? = map[row to column] - - override fun put(row: R, column: C, value: V): V? = map.put(row to column, value) - - override fun build(): PairMapTable = PairMapTable(map) - } -} diff --git a/src/lib/kotlin/hiiragi283/lib/collection/SetMultiMap.kt b/src/lib/kotlin/hiiragi283/lib/collection/SetMultiMap.kt deleted file mode 100644 index e50f9fd83a..0000000000 --- a/src/lib/kotlin/hiiragi283/lib/collection/SetMultiMap.kt +++ /dev/null @@ -1,69 +0,0 @@ -package hiiragi283.lib.collection - -import it.unimi.dsi.fastutil.objects.ObjectLinkedOpenHashSet -import java.util.TreeSet - -/** - * [Set]に基づいた[MultiMap]の実装クラスです。 - * @param K キーのクラス - * @param V 値のクラス - * @author Hiiragi Tsubasa - * @since 26.1.0 - */ -class SetMultiMap private constructor(map: Map>) : AbstractMultiMap>(map) { - companion object { - /** - * 指定した[map]を[MultiMap]に変換します。 - */ - @JvmStatic - fun copyOf(map: Map>): SetMultiMap = SetMultiMap(map) - } - - override fun emptyCollection(): Set = setOf() - - /** - * [MutableSet]に基づいた[MultiMap.Builder]の抽象クラスです。 - * @param K キーのクラス - * @param V 値のクラス - * @author Hiiragi Tsubasa - * @since 26.1.0 - */ - class Builder : AbstractMultiMap.Builder> { - constructor(map: MutableMap>) : super(map) - - constructor(initialCapacity: Int = 10) : super(initialCapacity) - - constructor(other: MultiMap) : super(other) - - override fun emptyCollection(): MutableSet = ObjectLinkedOpenHashSet() - - override fun build(): SetMultiMap = SetMultiMap(map) - } - - /** - * [TreeSet]に基づいた[MultiMap.Builder]の抽象クラスです。 - * @param K キーのクラス - * @param V 値のクラス - * @author Hiiragi Tsubasa - * @since 26.1.2 - */ - class SortedBuilder : AbstractMultiMap.Builder> { - private val comparator: Comparator - - constructor(comparator: Comparator, map: MutableMap>) : super(map) { - this.comparator = comparator - } - - constructor(comparator: Comparator, initialCapacity: Int = 10) : super(initialCapacity) { - this.comparator = comparator - } - - constructor(comparator: Comparator, other: MultiMap) : super(other) { - this.comparator = comparator - } - - override fun emptyCollection(): TreeSet = sortedSetOf(comparator) - - override fun build(): SetMultiMap = SetMultiMap(map) - } -} diff --git a/src/lib/kotlin/hiiragi283/lib/collection/SetMultiMapBuilder.kt b/src/lib/kotlin/hiiragi283/lib/collection/SetMultiMapBuilder.kt new file mode 100644 index 0000000000..6c1b82285d --- /dev/null +++ b/src/lib/kotlin/hiiragi283/lib/collection/SetMultiMapBuilder.kt @@ -0,0 +1,17 @@ +package hiiragi283.lib.collection + +/** + * [MutableSet]に基づいた[AbstractMultiMapBuilder]の実装クラスです。 + * @param K キーのクラス + * @param V 値のクラス + * @author Hiiragi Tsubasa + * @since 26.1.7 + */ +class SetMultiMapBuilder( + destination: MutableMap>, + private val collectionFactory: () -> MutableSet = ::mutableSetOf +) : AbstractMultiMapBuilder>(destination) { + override fun emptyCollection(): MutableSet = collectionFactory() + + override fun build(): Map> = destination +} diff --git a/src/lib/kotlin/hiiragi283/lib/collection/Tables.kt b/src/lib/kotlin/hiiragi283/lib/collection/Tables.kt index 9bb69b4a08..340cbc7e60 100644 --- a/src/lib/kotlin/hiiragi283/lib/collection/Tables.kt +++ b/src/lib/kotlin/hiiragi283/lib/collection/Tables.kt @@ -42,39 +42,39 @@ private data object EmptyTable : Table { } /** - * 新しい[PairMapTable]のインスタンスを作成します。 + * 新しい[DelegatingTable]のインスタンスを作成します。 * @param R 行のクラス * @param C 列のクラス * @param V 値のクラス * @author Hiiragi Tsubasa * @since 26.1.0 */ -inline fun buildTable( +inline fun buildTable( initialCapacity: Int = 10, builderAction: Table.Builder.() -> Unit ): Table { contract { callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) } - return PairMapTable.Builder(initialCapacity).apply(builderAction).build() + return DelegatingTable.Builder(initialCapacity).apply(builderAction).build() } /** - * 新しい[PairMapTable]のインスタンスを作成します。 + * 新しい[DelegatingTable]のインスタンスを作成します。 * @param R 行のクラス * @param C 列のクラス * @param V 値のクラス * @author Hiiragi Tsubasa * @since 26.1.0 */ -inline fun buildTable( - map: MutableMap, V>, +inline fun buildTable( + parent: com.google.common.collect.Table, builderAction: Table.Builder.() -> Unit ): Table { contract { callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) } - return PairMapTable.Builder(map).apply(builderAction).build() + return DelegatingTable.Builder(parent).apply(builderAction).build() } /** @@ -103,8 +103,8 @@ fun Table.asSequence(): Sequence> = this.entr * @author Hiiragi Tsubasa * @since 26.1.2 */ -fun Table.mapValue(transform: (Triple) -> V2): Table = - this.mapValueTo(PairMapTable.Builder(), transform) +fun Table.mapValue(transform: (Triple) -> V2): Table = + this.mapValueTo(DelegatingTable.Builder(), transform) /** * @author Hiiragi Tsubasa diff --git a/src/lib/kotlin/hiiragi283/lib/data/ConditionBuilder.kt b/src/lib/kotlin/hiiragi283/lib/data/ConditionBuilder.kt index fff24ee568..e9cb6bc0fb 100644 --- a/src/lib/kotlin/hiiragi283/lib/data/ConditionBuilder.kt +++ b/src/lib/kotlin/hiiragi283/lib/data/ConditionBuilder.kt @@ -1,5 +1,7 @@ package hiiragi283.lib.data +import hiiragi283.lib.tag.HTMaterialLike +import hiiragi283.lib.tag.HTTagPrefix import hiiragi283.lib.util.HTBuilderMarker import net.minecraft.resources.ResourceKey import net.minecraft.tags.TagKey @@ -64,4 +66,12 @@ value class ConditionBuilder(private val conditions: MutableList) { operator fun FeatureFlagSet.unaryPlus() { +NeoForgeConditions.featureFlagsEnabled(this) } + + /** + * [TagKey]が登録されているか判定する[ICondition]を追加します。 + * @since 26.1.7 + */ + fun itemTagPresent(prefix: HTTagPrefix, material: HTMaterialLike) { + +prefix.itemTagKey(material) + } } diff --git a/src/lib/kotlin/hiiragi283/lib/data/ConditionalExporter.kt b/src/lib/kotlin/hiiragi283/lib/data/ConditionalExporter.kt index 2def4557a8..331b892602 100644 --- a/src/lib/kotlin/hiiragi283/lib/data/ConditionalExporter.kt +++ b/src/lib/kotlin/hiiragi283/lib/data/ConditionalExporter.kt @@ -15,14 +15,12 @@ fun interface ConditionalExporter { * @param value 受け取った値 * @param conditions 値を読み込む条件の一覧 */ - fun accept(key: ResourceKey, value: T, conditions: List) + fun accept(key: ResourceKey, value: T, conditions: List): ResourceKey /** * 値を登録します。 * @param key 受け取ったID * @param value 受け取った値 */ - fun accept(key: ResourceKey, value: T) { - accept(key, value, listOf()) - } + fun accept(key: ResourceKey, value: T): ResourceKey = accept(key, value, listOf()) } diff --git a/src/lib/kotlin/hiiragi283/lib/data/ExporterDataProvider.kt b/src/lib/kotlin/hiiragi283/lib/data/ExporterDataProvider.kt index 0de1f6c0c3..7b043e90bb 100644 --- a/src/lib/kotlin/hiiragi283/lib/data/ExporterDataProvider.kt +++ b/src/lib/kotlin/hiiragi283/lib/data/ExporterDataProvider.kt @@ -26,7 +26,6 @@ import net.minecraft.world.level.material.Fluid import net.neoforged.neoforge.common.Tags import net.neoforged.neoforge.common.conditions.ICondition import net.neoforged.neoforge.common.conditions.WithConditions -import net.neoforged.neoforge.registries.holdersets.OrHolderSet import java.util.Optional import java.util.concurrent.CompletableFuture @@ -67,6 +66,7 @@ abstract class ExporterDataProvider( if (oldValue != null) { error("Duplicate registration for $fixedKey, new=$value, old=$oldValue") } + fixedKey } exportValues() @@ -126,7 +126,7 @@ abstract class ExporterDataProvider( protected fun holderSet(tagKeys: Iterable>): HolderSet = when (tagKeys.count()) { 0 -> HolderSet.empty() 1 -> holderSet(tagKeys.first()) - else -> HTComparators.sortTagKeys(tagKeys).map(::holderSet).let(::OrHolderSet) + else -> tagKeys.map(::holderSet).let(HTComparators::compressHolderSet) } protected fun holderSet(vararg tagKeys: TagKey): HolderSet = holderSet(tagKeys.toSet()) @@ -139,9 +139,6 @@ abstract class ExporterDataProvider( protected fun holderSet(prefix: HTTagPrefix, material: HTMaterialLike): HolderSet = holderSet(prefix.itemTagKey(material)) - protected fun holderSet(prefix: HTTagPrefix, vararg materials: HTMaterialLike): HolderSet = - materials.map(prefix::itemTagKey).let(::holderSet) - /** * [HolderSet]を取得します。 * @param content 液体タグの提供元 diff --git a/src/lib/kotlin/hiiragi283/lib/data/HolderAcceptor.kt b/src/lib/kotlin/hiiragi283/lib/data/HolderAcceptor.kt index 0b55733df7..42dd16c652 100644 --- a/src/lib/kotlin/hiiragi283/lib/data/HolderAcceptor.kt +++ b/src/lib/kotlin/hiiragi283/lib/data/HolderAcceptor.kt @@ -1,3 +1,5 @@ +@file:OptIn(ExperimentalContracts::class) + package hiiragi283.lib.data import hiiragi283.lib.registry.HTDeferredBlockAndItem @@ -8,6 +10,9 @@ import net.minecraft.core.Holder import net.minecraft.core.HolderSet import net.minecraft.world.item.Item import net.minecraft.world.level.material.Fluid +import kotlin.contracts.ExperimentalContracts +import kotlin.contracts.InvocationKind +import kotlin.contracts.contract /** * [Holder]を受け取る処理を表すインターフェースです。 @@ -105,4 +110,28 @@ interface HolderAcceptor { class ItemSetBuilder : SetBuilder(), ItemAcceptor + + companion object { + /** + * @since 26.1.7 + */ + @JvmStatic + inline fun buildFluidSet(builderAction: FluidSetBuilder.() -> Unit): HolderSet { + contract { + callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) + } + return FluidSetBuilder().apply(builderAction).build() + } + + /** + * @since 26.1.7 + */ + @JvmStatic + inline fun buildItemSet(builderAction: ItemSetBuilder.() -> Unit): HolderSet { + contract { + callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) + } + return ItemSetBuilder().apply(builderAction).build() + } + } } diff --git a/src/lib/kotlin/hiiragi283/lib/data/advancement/HTAdvancementBuilder.kt b/src/lib/kotlin/hiiragi283/lib/data/advancement/HTAdvancementBuilder.kt index 30b735c3d6..88e97469c5 100644 --- a/src/lib/kotlin/hiiragi283/lib/data/advancement/HTAdvancementBuilder.kt +++ b/src/lib/kotlin/hiiragi283/lib/data/advancement/HTAdvancementBuilder.kt @@ -94,7 +94,7 @@ class HTAdvancementBuilder(val key: AdvancementKey) { // Save // - fun save(exporter: ConditionalExporter) { + fun save(exporter: ConditionalExporter): AdvancementKey { val adv = Advancement( parent.map(AdvancementKey::identifier), display, @@ -103,6 +103,6 @@ class HTAdvancementBuilder(val key: AdvancementKey) { this.requirements ?: strategy.create(criterions.keys), true ) - exporter.accept(key, adv, conditions) + return exporter.accept(key, adv, conditions) } } 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 08354ef96c..e565bfb109 100644 --- a/src/lib/kotlin/hiiragi283/lib/data/advancement/criterion/HTItemPredicateBuilder.kt +++ b/src/lib/kotlin/hiiragi283/lib/data/advancement/criterion/HTItemPredicateBuilder.kt @@ -37,7 +37,7 @@ class HTItemPredicateBuilder { contract { callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) } - +HolderAcceptor.ItemSetBuilder().apply(builderAction).build() + +HolderAcceptor.buildItemSet(builderAction) } operator fun MinMaxBounds.Ints.unaryPlus() { diff --git a/src/lib/kotlin/hiiragi283/lib/data/lang/HTLangProvider.kt b/src/lib/kotlin/hiiragi283/lib/data/lang/HTLangProvider.kt index ec589b17ad..f2cfa19f0f 100644 --- a/src/lib/kotlin/hiiragi283/lib/data/lang/HTLangProvider.kt +++ b/src/lib/kotlin/hiiragi283/lib/data/lang/HTLangProvider.kt @@ -54,8 +54,7 @@ abstract class HTLangProvider(output: PackOutput, modId: String, val langType: H * @param value エンチャントの翻訳名 * @param desc エンチャントの説明 */ - @JvmName("addEnchantment") - protected fun add(key: ResourceKey, value: String, desc: String) { + protected fun addEnchantment(key: ResourceKey, value: String, desc: String) { add(key.toLanguageKey(), value) add(key.toLanguageKey("desc"), desc) } @@ -66,8 +65,7 @@ abstract class HTLangProvider(output: PackOutput, modId: String, val langType: H * @param desc 進捗の説明 * @since 26.1.3 */ - @JvmName("addAdvancement") - protected fun add(key: AdvancementKey, title: String, desc: String) { + protected fun addAdvancement(key: AdvancementKey, title: String, desc: String) { add(key.titleKey, title) add(key.descKey, desc) } diff --git a/src/lib/kotlin/hiiragi283/lib/data/model/HTModelProvider.kt b/src/lib/kotlin/hiiragi283/lib/data/model/HTModelProvider.kt index 2c1e2b4229..5a24eb7aa1 100644 --- a/src/lib/kotlin/hiiragi283/lib/data/model/HTModelProvider.kt +++ b/src/lib/kotlin/hiiragi283/lib/data/model/HTModelProvider.kt @@ -69,12 +69,10 @@ abstract class HTModelProvider(output: PackOutput, modId: String) : ModelProvide /** * ハーフブロックのブロックJSONを生成します。 */ - fun BlockModelGenerators.createSlab( - block: HTValueWithId, - fullModel: Identifier, - texture: Material = Material(block.idOrThrow.blockId) - ) { - this.createSlab(block, fullModel, texture, texture, texture) + fun BlockModelGenerators.createSlab(block: HTValueWithId, fullBlock: HTValueWithId<*>) { + val fullBlockId: Identifier = fullBlock.idOrThrow.blockId + val texture = Material(fullBlockId) + this.createSlab(block, fullBlockId, texture, texture, texture) } /** @@ -108,10 +106,9 @@ abstract class HTModelProvider(output: PackOutput, modId: String) : ModelProvide /** * 階段ブロックのブロックJSONを生成します。 */ - fun BlockModelGenerators.createStairs( - block: HTValueWithId, - texture: Material = Material(block.idOrThrow.blockId) - ) { + fun BlockModelGenerators.createStairs(block: HTValueWithId, fullBlock: HTValueWithId<*>) { + val fullBlockId: Identifier = fullBlock.idOrThrow.blockId + val texture = Material(fullBlockId) this.createStairs(block, texture, texture, texture) } diff --git a/src/lib/kotlin/hiiragi283/lib/data/model/HTModelTemplates.kt b/src/lib/kotlin/hiiragi283/lib/data/model/HTModelTemplates.kt index b677c8b0f7..b26bba63ec 100644 --- a/src/lib/kotlin/hiiragi283/lib/data/model/HTModelTemplates.kt +++ b/src/lib/kotlin/hiiragi283/lib/data/model/HTModelTemplates.kt @@ -1,5 +1,9 @@ package hiiragi283.lib.data.model +import hiiragi283.lib.HTConstants +import hiiragi283.ragium.api.RagiumAPI +import net.minecraft.client.data.models.model.TextureMapping +import net.minecraft.client.data.models.model.TextureMapping.cubeTop import net.minecraft.client.data.models.model.TextureSlot import net.minecraft.client.data.models.model.TexturedModel import net.neoforged.neoforge.client.model.generators.template.ExtendedModelTemplate @@ -17,4 +21,27 @@ data object HTModelTemplates { val FLUID_BLOCK: ExtendedModelTemplate = ExtendedModelTemplateBuilder.builder() .requiredTextureSlot(TextureSlot.PARTICLE) .build() + + /** + * @since 26.1.7 + */ + @JvmField + val TANK_TEMPLATE: ExtendedModelTemplate = ExtendedModelTemplateBuilder.builder() + .parent(RagiumAPI.id(HTConstants.BLOCK, "tank_template")) + .requiredTextureSlot(TextureSlot.TOP) + .requiredTextureSlot(TextureSlot.SIDE) + .build() + + /** + * Hiiragi Seriesで使用される[TexturedModel.Provider]をまとめたクラスです。 + * + * 参照 : [Minecraft - TexturedModel.Provider][TexturedModel.Provider] + * @author Hiiragi Tsubasa + * @since 26.1.7 + */ + data object Providers { + @JvmField + val TANK_TEMPLATE: TexturedModel.Provider = + TexturedModel.createDefault(TextureMapping::cubeTop, HTModelTemplates.TANK_TEMPLATE) + } } diff --git a/src/lib/kotlin/hiiragi283/lib/data/recipe/HTRecipeProvider.kt b/src/lib/kotlin/hiiragi283/lib/data/recipe/HTRecipeProvider.kt index 3b5d09a0fa..513cf30b19 100644 --- a/src/lib/kotlin/hiiragi283/lib/data/recipe/HTRecipeProvider.kt +++ b/src/lib/kotlin/hiiragi283/lib/data/recipe/HTRecipeProvider.kt @@ -1,16 +1,27 @@ package hiiragi283.lib.data.recipe +import hiiragi283.lib.HTComparators import hiiragi283.lib.HTConstants +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 import net.minecraft.core.HolderLookup -import net.minecraft.core.HolderSet import net.minecraft.core.registries.Registries import net.minecraft.data.PackOutput import net.minecraft.resources.Identifier +import net.minecraft.tags.TagKey import net.minecraft.world.item.Item +import net.minecraft.world.item.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 @@ -27,11 +38,94 @@ abstract class HTRecipeProvider( ) : ExporterDataProvider>(packOutput, future, Registries.RECIPE, modId, Recipe.CONDITIONAL_CODEC) { // Extension // - fun dustOrGem(material: HTMaterialLike): HolderSet = - setOf(CommonTagPrefixes.DUST, CommonTagPrefixes.GEM).map { it.itemTagKey(material) }.let(::holderSet) + /** + * @since 26.1.7 + */ + fun materialTags(tags: Nel>): HTMaterialTagsIngredient = HTMaterialTagsIngredient(tags) - fun dustOrIngot(material: HTMaterialLike): HolderSet = - setOf(CommonTagPrefixes.DUST, CommonTagPrefixes.INGOT).map { it.itemTagKey(material) }.let(::holderSet) + /** + * @since 26.1.7 + */ + fun materialTags(prefixes: Nel, materials: Nel): HTMaterialTagsIngredient = + materialTags( + prefixes + .flatMap { prefix: HTTagPrefix -> materials.map(prefix::itemTagKey) } + .toSortedSet(HTComparators.TAG_KEY) + .toNel() + ) + + /** + * @since 26.1.7 + */ + fun materialTags(prefixes: Nel, material: HTMaterialLike): HTMaterialTagsIngredient = + materialTags(prefixes.map { it.itemTagKey(material) }) + + /** + * @since 26.1.7 + */ + fun materialTags(prefix: HTTagPrefix, materials: Nel): HTMaterialTagsIngredient = + materialTags(materials.map(prefix::itemTagKey)) + + /** + * @since 26.1.7 + */ + fun dustOrGem(material: HTMaterialLike): HTMaterialTagsIngredient = + materialTags(nelOf(CommonTagPrefixes.DUST, CommonTagPrefixes.GEM), material) + + /** + * @since 26.1.7 + */ + 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 // @@ -46,12 +140,11 @@ abstract class HTRecipeProvider( final override fun modifyId(id: Identifier): Identifier { val namespace: String = id.namespace - return if (namespace in builtInIds) { - val path: List = id.path.split("/", limit = 2) - id(path[0], modId, path[1]) - } else { + return if (namespace !in builtInIds) { val path: List = id.path.split("/", limit = 2) id(path[0], namespace, path[1]) + } else { + super.modifyId(id) } } } diff --git a/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/HTProgressRecipeBuilder.kt b/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/HTProgressRecipeBuilder.kt index 1abab35f04..41f2e6bbe4 100644 --- a/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/HTProgressRecipeBuilder.kt +++ b/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/HTProgressRecipeBuilder.kt @@ -1,6 +1,7 @@ package hiiragi283.lib.data.recipe.builder import hiiragi283.lib.recipe.base.HTProgressData +import hiiragi283.lib.util.HTDelegates import net.minecraft.world.item.crafting.Recipe import kotlin.properties.ReadWriteProperty import kotlin.reflect.KProperty @@ -12,8 +13,7 @@ import kotlin.reflect.KProperty * @since 26.1.0 */ abstract class HTProgressRecipeBuilder>(prefix: String) : HTRecipeBuilder(prefix) { - protected var progressData: HTProgressData = HTProgressData.time(20 * 10) - private set + var progressData: HTProgressData by HTDelegates.onceInitialize { HTProgressData.time(20 * 10) } var energy: Int by object : ReadWriteProperty { override fun getValue(thisRef: Any?, property: KProperty<*>): Int = when (progressData) { diff --git a/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/HTRecipeBuilder.kt b/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/HTRecipeBuilder.kt index e12dcf7ecb..875c7ecef5 100644 --- a/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/HTRecipeBuilder.kt +++ b/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/HTRecipeBuilder.kt @@ -116,7 +116,6 @@ abstract class HTRecipeBuilder>(private val prefix: Strin * レシピを生成します。 * @param exporter 生成したレシピの出力先 */ - open fun save(exporter: ConditionalExporter>) { + open fun save(exporter: ConditionalExporter>): RecipeKey = build().let { (key: RecipeKey, recipe: RECIPE) -> exporter.accept(key, recipe, conditions) } - } } diff --git a/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/HTTripleItemToItemRecipeBuilder.kt b/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/HTTripleItemToItemRecipeBuilder.kt new file mode 100644 index 0000000000..a3b1ebf6bf --- /dev/null +++ b/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/HTTripleItemToItemRecipeBuilder.kt @@ -0,0 +1,90 @@ +@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.HTItemIngredientBuilder +import hiiragi283.lib.data.recipe.result.HTItemResultBuilder +import hiiragi283.lib.recipe.base.HTProgressData +import hiiragi283.lib.recipe.ingredient.HTItemIngredient +import hiiragi283.lib.recipe.result.HTItemResult +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 + +/** + * 2種類または3種類のアイテムから1種類のアイテムを作成するレシピ向けの[HTProgressRecipeBuilder]の実装クラスです。 + * @param RECIPE 生成するレシピのクラス + * @author Hiiragi Tsubasa + * @since 26.1.7 + */ +class HTTripleItemToItemRecipeBuilder>(prefix: String, private val factory: Factory) : + HTProgressRecipeBuilder(prefix) { + override fun getRecipeId(): Identifier? = result.getId() + + override fun createRecipe(): RECIPE = factory.create( + ingredient, + extras.toNel(), + 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) + } + + // Extras + @PublishedApi internal var extras: MutableList = ObjectArrayList() + + inline fun extra(builderAction: HTItemIngredientBuilder.() -> Unit) { + contract { + callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) + } + extras += HTItemIngredientBuilder.build(builderAction) + } + + // Result + @PublishedApi internal var result: HTItemResult by HTDelegates.onceInitialize() + + operator fun HTItemResult.unaryPlus() { + result = this + } + + inline fun result(builderAction: HTItemResultBuilder.() -> Unit) { + contract { + callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) + } + +HTItemResultBuilder.build(builderAction) + } + + // Factory // + + /** + * @param RECIPE 生成するレシピのクラス + * @author Hiiragi Tsubasa + * @since 26.1.7 + */ + fun interface Factory { + fun create( + ingredient: HTItemIngredient, + extras: Nel, + result: HTItemResult, + progressData: HTProgressData + ): RECIPE + } +} diff --git a/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/VanillaRecipeBuilders.kt b/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/VanillaRecipeBuilders.kt new file mode 100644 index 0000000000..f60cb058a6 --- /dev/null +++ b/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/VanillaRecipeBuilders.kt @@ -0,0 +1,146 @@ +@file:OptIn(ExperimentalContracts::class) + +package hiiragi283.lib.data.recipe.builder + +import hiiragi283.lib.HTConstants +import hiiragi283.lib.data.ConditionalExporter +import hiiragi283.lib.data.recipe.builder.vanilla.HTCookingRecipeBuilder +import hiiragi283.lib.data.recipe.builder.vanilla.HTShapedRecipeBuilder +import hiiragi283.lib.data.recipe.builder.vanilla.HTShapelessRecipeBuilder +import hiiragi283.lib.data.recipe.builder.vanilla.HTSingleItemRecipeBuilder +import hiiragi283.lib.data.recipe.builder.vanilla.HTSmithingRecipeBuilder +import hiiragi283.lib.util.identity +import net.minecraft.world.item.crafting.BlastingRecipe +import net.minecraft.world.item.crafting.Recipe +import net.minecraft.world.item.crafting.SmeltingRecipe +import net.minecraft.world.item.crafting.SmokingRecipe +import net.minecraft.world.item.crafting.StonecutterRecipe +import kotlin.contracts.ExperimentalContracts +import kotlin.contracts.InvocationKind +import kotlin.contracts.contract + +/** + * @author Hiiragi Tsubasa + * @since 26.1.7 + */ +data object VanillaRecipeBuilders { + // Crafting // + + /** + * 定形クラフトレシピを生成します。 + */ + @JvmStatic + inline fun shaped(builderAction: HTShapedRecipeBuilder.() -> Unit): HTShapedRecipeBuilder { + contract { + callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) + } + return HTShapedRecipeBuilder().apply(builderAction) + } + + /** + * 不定形クラフトレシピを生成します。 + */ + @JvmStatic + inline fun shapeless(builderAction: HTShapelessRecipeBuilder.() -> Unit): HTShapelessRecipeBuilder { + contract { + callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) + } + return HTShapelessRecipeBuilder().apply(builderAction) + } + + // Cooking // + + /** + * かまどレシピのみを生成します。 + */ + @JvmStatic + inline fun smelting(builderAction: HTCookingRecipeBuilder.() -> Unit): HTCookingRecipeBuilder { + contract { + callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) + } + return HTCookingRecipeBuilder(::SmeltingRecipe, identity(), HTConstants.SMELTING).apply(builderAction) + } + + /** + * 溶鉱炉レシピのみを生成します。 + */ + @JvmStatic + inline fun blasting(builderAction: HTCookingRecipeBuilder.() -> Unit): HTCookingRecipeBuilder { + contract { + callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) + } + return HTCookingRecipeBuilder(::BlastingRecipe, identity(), HTConstants.BLASTING).apply(builderAction) + } + + /** + * 燻製器レシピのみを生成します。 + */ + @JvmStatic + inline fun smoking(builderAction: HTCookingRecipeBuilder.() -> Unit): HTCookingRecipeBuilder { + contract { + callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) + } + return HTCookingRecipeBuilder(::SmokingRecipe, identity(), HTConstants.SMOKING).apply(builderAction) + } + + /** + * かまどレシピと溶鉱炉レシピを生成します。後者の処理時間は前者の半分で登録されます。 + */ + @JvmStatic + inline fun smeltingAndBlasting( + exporter: ConditionalExporter>, + builderAction: HTCookingRecipeBuilder.() -> Unit + ) { + sequenceOf( + smelting(builderAction), + HTCookingRecipeBuilder(::BlastingRecipe, { it / 2 }, HTConstants.BLASTING).apply(builderAction) + ).forEach { it.save(exporter) } + } + + /** + * かまどレシピと燻製器レシピを生成します。後者の処理時間は前者の半分で登録されます。 + */ + @JvmStatic + inline fun smeltingAndSmoking( + exporter: ConditionalExporter>, + builderAction: HTCookingRecipeBuilder.() -> Unit + ) { + sequenceOf( + smelting(builderAction), + HTCookingRecipeBuilder(::SmokingRecipe, { it / 2 }, HTConstants.SMOKING).apply(builderAction) + ).forEach { it.save(exporter) } + } + + // Other // + + /** + * 鍛冶台レシピを生成します。 + */ + @JvmStatic + inline fun smithing(builderAction: HTSmithingRecipeBuilder.() -> Unit): HTSmithingRecipeBuilder { + contract { + callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) + } + return HTSmithingRecipeBuilder().apply(builderAction) + } + + /** + * 石切台レシピを生成します。 + */ + @JvmStatic + inline fun stonecutting(builderAction: Stonecutting.() -> Unit): Stonecutting { + contract { + callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) + } + return Stonecutting().apply(builderAction) + } + + /** + * 石切台レシピ向けの[HTSingleItemRecipeBuilder]の実装クラスです。 + * @author Hiiragi Tsubasa + * @since 26.1.7 + */ + class Stonecutting : HTSingleItemRecipeBuilder("stonecutting") { + override fun createRecipe(): StonecutterRecipe = StonecutterRecipe(commonInfo(true), ingredient, result) + } +} diff --git a/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/vanilla/HTCookingRecipeBuilder.kt b/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/vanilla/HTCookingRecipeBuilder.kt new file mode 100644 index 0000000000..8b843e7fb0 --- /dev/null +++ b/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/vanilla/HTCookingRecipeBuilder.kt @@ -0,0 +1,45 @@ +package hiiragi283.lib.data.recipe.builder.vanilla + +import hiiragi283.lib.util.HTDelegates +import hiiragi283.lib.util.Identity +import net.minecraft.world.item.crafting.AbstractCookingRecipe +import net.minecraft.world.item.crafting.CookingBookCategory + +/** + * 精錬レシピ向けの[HTVanillaRecipeBuilder]の実装クラスです。 + * + * 参照 : [Minecraft - SimpleCookingRecipeBuilder][net.minecraft.data.recipes.SimpleCookingRecipeBuilder] + * @author Hiiragi Tsubasa + * @since 26.1.0 + */ +class HTCookingRecipeBuilder( + private val factory: AbstractCookingRecipe.Factory<*>, + private val timeOperator: Identity, + prefix: String +) : HTSingleItemRecipeBuilder(prefix) { + /** + * レシピ本のカテゴリ + */ + var category: CookingBookCategory by HTDelegates.onceInitialize { CookingBookCategory.MISC } + + /** + * 精錬時にもらえる経験値量 + */ + var exp: Float by HTDelegates.onceInitialize { 0f } + + /** + * 精錬に必要な時間 + * + * デフォルトは200 ticks = 10 sec + */ + var time: Int by HTDelegates.onceInitialize { 20 * 10 } + + override fun createRecipe(): AbstractCookingRecipe = factory.create( + commonInfo(true), + AbstractCookingRecipe.CookingBookInfo(category, group), + ingredient, + result, + exp, + timeOperator(time) + ) +} diff --git a/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/vanilla/HTCraftingRecipeBuilder.kt b/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/vanilla/HTCraftingRecipeBuilder.kt new file mode 100644 index 0000000000..42a4dfa5e9 --- /dev/null +++ b/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/vanilla/HTCraftingRecipeBuilder.kt @@ -0,0 +1,20 @@ +package hiiragi283.lib.data.recipe.builder.vanilla + +import net.minecraft.data.recipes.RecipeCategory +import net.minecraft.world.item.crafting.CraftingRecipe + +/** + * クラフトレシピ向けの[HTVanillaRecipeBuilder]の実装クラスです。 + * @param RECIPE 生成するレシピのクラス + * @author Hiiragi Tsubasa + * @since 26.1.0 + */ +abstract class HTCraftingRecipeBuilder(prefix: String) : + HTVanillaRecipeBuilder(prefix) { + /** + * レシピ本のカテゴリ + */ + var category: RecipeCategory = RecipeCategory.MISC + + fun bookInfo(): CraftingRecipe.CraftingBookInfo = bookInfo(category) +} diff --git a/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/vanilla/HTShapedRecipeBuilder.kt b/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/vanilla/HTShapedRecipeBuilder.kt new file mode 100644 index 0000000000..c7a5f479b0 --- /dev/null +++ b/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/vanilla/HTShapedRecipeBuilder.kt @@ -0,0 +1,161 @@ +@file:OptIn(ExperimentalContracts::class) + +package hiiragi283.lib.data.recipe.builder.vanilla + +import hiiragi283.lib.HTConstants +import hiiragi283.lib.data.recipe.ingredient.IngredientBuilder +import it.unimi.dsi.fastutil.chars.Char2ObjectLinkedOpenHashMap +import it.unimi.dsi.fastutil.objects.ObjectArrayList +import net.minecraft.world.item.crafting.Ingredient +import net.minecraft.world.item.crafting.ShapedRecipe +import net.minecraft.world.item.crafting.ShapedRecipePattern +import kotlin.contracts.ExperimentalContracts +import kotlin.contracts.InvocationKind +import kotlin.contracts.contract + +/** + * 定形レシピ向けの[HTCraftingRecipeBuilder]の実装クラスです。 + * + * 参照 : [Minecraft - ShapedRecipeBuilder][net.minecraft.data.recipes.ShapedRecipeBuilder] + * @author Hiiragi Tsubasa + * @since 26.1.0 + */ +class HTShapedRecipeBuilder : HTCraftingRecipeBuilder(HTConstants.SHAPED) { + @PublishedApi internal val patterns: MutableList = ObjectArrayList() + + @PublishedApi internal val keys: MutableMap = Char2ObjectLinkedOpenHashMap() + + operator fun String.unaryPlus() { + patterns.firstOrNull()?.let { + if (it.length != this.length) error("Pattern must be the same width on every line") + } + patterns += this + } + + fun pattern(patterns: Iterable) { + patterns.forEach { +it } + } + + /** + * 2x2のパターンを指定します。 + */ + fun storage4() { + +"AA" + +"AA" + } + + /** + * 3x3のパターンを指定します。 + */ + fun storage9() { + +"AAA" + +"AAA" + +"AAA" + } + + /** + * 中央が空の3x3のパターンを指定します。 + */ + fun hollow() { + +"AAA" + +"A A" + +"AAA" + } + + /** + * 中央の材料を,一種類の4つの材料で取り囲むパターンを指定します。 + */ + fun hollow4() { + +" A " + +"ABA" + +" A " + } + + /** + * 中央の材料を,一種類の8つの材料で取り囲むパターンを指定します。 + */ + fun hollow8() { + +"AAA" + +"ABA" + +"AAA" + } + + /** + * 中央の材料を,二種類の2つずつの材料で取り囲むパターンを指定します。 + */ + fun cross4() { + +" A " + +"BCB" + +" A " + } + + /** + * 中央の材料を,二種類の4つずつの材料で取り囲むパターンを指定します。 + */ + fun cross8() { + +"ABA" + +"BCB" + +"ABA" + } + + /** + * @since 26.1.4 + */ + fun layered() { + +"AAA" + +"BBB" + +"CCC" + } + + /** + * @since 26.1.5 + */ + fun layered2() { + +"AAA" + +"BBB" + +"AAA" + } + + fun crossLayered() { + +"ABA" + +"CDC" + +"ABA" + } + + /** + * 二種類の材料を交互に配置する2x2のパターンを指定します。 + */ + fun mosaic4() { + +"AB" + +"BA" + } + + /** + * 二種類の材料を交互に配置する3x3のパターンを指定します。 + */ + fun mosaic9() { + +"ABA" + +"BAB" + +"ABA" + } + + infix fun Char.define(ingredient: Ingredient) { + check(this !in keys) { "Symbol $this is already defined" } + check(this != ' ') { "Symbol $this (whitespace) is reserved and cannot be defined" } + keys[this] = ingredient + } + + inline fun define(key: Char, builderAction: IngredientBuilder.() -> Unit) { + contract { + callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) + } + key define IngredientBuilder.build(builderAction) + } + + override fun createRecipe(): ShapedRecipe = ShapedRecipe( + commonInfo(true), + bookInfo(), + ShapedRecipePattern.of(keys, patterns), + result + ) +} diff --git a/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/vanilla/HTShapelessRecipeBuilder.kt b/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/vanilla/HTShapelessRecipeBuilder.kt new file mode 100644 index 0000000000..9a700bb215 --- /dev/null +++ b/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/vanilla/HTShapelessRecipeBuilder.kt @@ -0,0 +1,42 @@ +@file:OptIn(ExperimentalContracts::class) + +package hiiragi283.lib.data.recipe.builder.vanilla + +import hiiragi283.lib.HTConstants +import hiiragi283.lib.data.recipe.ingredient.IngredientBuilder +import it.unimi.dsi.fastutil.objects.ObjectArrayList +import net.minecraft.core.NonNullList +import net.minecraft.world.item.crafting.Ingredient +import net.minecraft.world.item.crafting.ShapelessRecipe +import kotlin.contracts.ExperimentalContracts +import kotlin.contracts.InvocationKind +import kotlin.contracts.contract + +/** + * 不定形レシピ向けの[HTCraftingRecipeBuilder]の実装クラスです。 + * + * 参照 : [Minecraft - ShapelessRecipeBuilder][net.minecraft.data.recipes.ShapelessRecipeBuilder] + * @author Hiiragi Tsubasa + * @since 26.1.0 + */ +class HTShapelessRecipeBuilder : HTCraftingRecipeBuilder(HTConstants.SHAPELESS) { + @PublishedApi internal val ingredients: MutableList = ObjectArrayList() + + operator fun Ingredient.unaryPlus() { + ingredients += this + } + + inline fun ingredient(builderAction: IngredientBuilder.() -> Unit) { + contract { + callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) + } + +IngredientBuilder.build(builderAction) + } + + override fun createRecipe(): ShapelessRecipe = ShapelessRecipe( + commonInfo(true), + bookInfo(), + result, + NonNullList.copyOf(ingredients) + ) +} diff --git a/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/vanilla/HTSingleItemRecipeBuilder.kt b/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/vanilla/HTSingleItemRecipeBuilder.kt new file mode 100644 index 0000000000..797e01d49c --- /dev/null +++ b/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/vanilla/HTSingleItemRecipeBuilder.kt @@ -0,0 +1,36 @@ +@file:OptIn(ExperimentalContracts::class) + +package hiiragi283.lib.data.recipe.builder.vanilla + +import hiiragi283.lib.data.recipe.ingredient.IngredientBuilder +import hiiragi283.lib.util.HTDelegates +import net.minecraft.world.item.crafting.Ingredient +import net.minecraft.world.item.crafting.Recipe +import kotlin.contracts.ExperimentalContracts +import kotlin.contracts.InvocationKind +import kotlin.contracts.contract + +/** + * アイテムを1:1で変換するレシピ向けの[HTVanillaRecipeBuilder]の実装クラスです。 + * + * 参照 : [Minecraft - SingleItemRecipeBuilder][net.minecraft.data.recipes.SingleItemRecipeBuilder] + * @param RECIPE 生成するレシピのクラス + * @author Hiiragi Tsubasa + * @since 26.1.0 + */ +abstract class HTSingleItemRecipeBuilder>(prefix: String) : + HTVanillaRecipeBuilder(prefix) { + // Ingredient + var ingredient: Ingredient by HTDelegates.onceInitialize() + + operator fun Ingredient.unaryPlus() { + ingredient = this + } + + inline fun ingredient(builderAction: IngredientBuilder.() -> Unit) { + contract { + callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) + } + ingredient = IngredientBuilder.build(builderAction) + } +} diff --git a/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/vanilla/HTSmithingRecipeBuilder.kt b/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/vanilla/HTSmithingRecipeBuilder.kt new file mode 100644 index 0000000000..6a7ec7cf9b --- /dev/null +++ b/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/vanilla/HTSmithingRecipeBuilder.kt @@ -0,0 +1,57 @@ +@file:OptIn(ExperimentalContracts::class) + +package hiiragi283.lib.data.recipe.builder.vanilla + +import hiiragi283.lib.HTConstants +import hiiragi283.lib.data.recipe.ingredient.IngredientBuilder +import hiiragi283.lib.util.HTDelegates +import net.minecraft.world.item.crafting.Ingredient +import net.minecraft.world.item.crafting.SmithingTransformRecipe +import java.util.Optional +import kotlin.contracts.ExperimentalContracts +import kotlin.contracts.InvocationKind +import kotlin.contracts.contract + +/** + * 鍛冶台レシピ向けの[HTVanillaRecipeBuilder]の実装クラスです。 + * + * 参照 : [Minecraft - SmithingTransformRecipeBuilder][net.minecraft.data.recipes.SmithingTransformRecipeBuilder] + * @author Hiiragi Tsubasa + * @since 26.1.0 + */ +class HTSmithingRecipeBuilder : HTVanillaRecipeBuilder(HTConstants.SMITHING) { + @PublishedApi internal var template: Optional by HTDelegates.optionalInitialize() + + @PublishedApi internal var base: Ingredient by HTDelegates.onceInitialize() + + @PublishedApi internal var addition: Optional by HTDelegates.optionalInitialize() + + inline fun template(builderAction: IngredientBuilder.() -> Unit) { + contract { + callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) + } + template = Optional.of(IngredientBuilder.build(builderAction)) + } + + inline fun base(builderAction: IngredientBuilder.() -> Unit) { + contract { + callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) + } + base = IngredientBuilder.build(builderAction) + } + + inline fun addition(builderAction: IngredientBuilder.() -> Unit) { + contract { + callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) + } + addition = Optional.of(IngredientBuilder.build(builderAction)) + } + + override fun createRecipe(): SmithingTransformRecipe = SmithingTransformRecipe( + commonInfo(true), + template, + base, + addition, + result + ) +} diff --git a/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/vanilla/HTVanillaRecipeBuilder.kt b/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/vanilla/HTVanillaRecipeBuilder.kt new file mode 100644 index 0000000000..25a17f353a --- /dev/null +++ b/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/vanilla/HTVanillaRecipeBuilder.kt @@ -0,0 +1,54 @@ +@file:OptIn(ExperimentalContracts::class) + +package hiiragi283.lib.data.recipe.builder.vanilla + +import hiiragi283.lib.data.recipe.builder.HTRecipeBuilder +import hiiragi283.lib.item.ItemInstanceBuilder +import hiiragi283.lib.registry.getKeyOrThrow +import hiiragi283.lib.util.HTDelegates +import net.minecraft.data.recipes.RecipeBuilder +import net.minecraft.data.recipes.RecipeCategory +import net.minecraft.resources.Identifier +import net.minecraft.world.item.ItemStackTemplate +import net.minecraft.world.item.crafting.CraftingRecipe +import net.minecraft.world.item.crafting.Recipe +import kotlin.contracts.ExperimentalContracts +import kotlin.contracts.InvocationKind +import kotlin.contracts.contract + +/** + * バニラのレシピ向けの[HTRecipeBuilder]の拡張クラスです。 + * @param RECIPE 生成するレシピのクラス + * @author Hiiragi Tsubasa + * @since 26.1.7 + */ +abstract class HTVanillaRecipeBuilder>(prefix: String) : HTRecipeBuilder(prefix) { + fun commonInfo(showNotification: Boolean): Recipe.CommonInfo = + RecipeBuilder.createCraftingCommonInfo(showNotification) + + fun bookInfo(category: RecipeCategory): CraftingRecipe.CraftingBookInfo = + RecipeBuilder.createCraftingBookInfo(category, group) + + /** + * レシピ本でのグループ + */ + var group: String by HTDelegates.onceInitialize { "" } + + // Result + var result: ItemStackTemplate by HTDelegates.onceInitialize() + + operator fun ItemStackTemplate.unaryPlus() { + result = this + } + + inline fun result(builderAction: ItemInstanceBuilder.() -> Unit) { + contract { + callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) + } + +ItemInstanceBuilder.buildTemplate(builderAction) + } + + // HTRecipeBuilder // + + final override fun getRecipeId(): Identifier = result.getKeyOrThrow().identifier() +} diff --git a/src/lib/kotlin/hiiragi283/lib/data/recipe/ingredient/HTBiomeConditionBuilder.kt b/src/lib/kotlin/hiiragi283/lib/data/recipe/ingredient/HTBiomeConditionBuilder.kt new file mode 100644 index 0000000000..425f0fdd2b --- /dev/null +++ b/src/lib/kotlin/hiiragi283/lib/data/recipe/ingredient/HTBiomeConditionBuilder.kt @@ -0,0 +1,50 @@ +@file:OptIn(ExperimentalContracts::class) + +package hiiragi283.lib.data.recipe.ingredient + +import hiiragi283.lib.data.HolderAcceptor +import hiiragi283.lib.recipe.ingredient.HTBiomeCondition +import hiiragi283.lib.util.HTBuilderMarker +import hiiragi283.lib.util.HTDelegates +import net.minecraft.core.HolderSet +import net.minecraft.world.level.biome.Biome +import kotlin.contracts.ExperimentalContracts +import kotlin.contracts.InvocationKind +import kotlin.contracts.contract + +/** + * [HTBiomeCondition]を作成するビルダークラスです。 + * @author Hiiragi Tsubasa + * @since 26.1.7 + */ +@HTBuilderMarker +class HTBiomeConditionBuilder @PublishedApi internal constructor() { + companion object { + @JvmStatic + inline fun build(builderAction: HTBiomeConditionBuilder.() -> Unit): HTBiomeCondition { + contract { + callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) + } + return HTBiomeConditionBuilder().apply(builderAction).build() + } + } + + @PublishedApi internal var condition: HTBiomeCondition by HTDelegates.onceInitialize() + + operator fun HTBiomeCondition.unaryPlus() { + condition = this + } + + operator fun HolderSet.unaryPlus() { + +HTBiomeCondition(this) + } + + inline fun biomes(builderAction: HolderAcceptor.SetBuilder.() -> Unit) { + contract { + callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) + } + +HolderAcceptor.SetBuilder().apply(builderAction).build() + } + + fun build(): HTBiomeCondition = condition +} diff --git a/src/lib/kotlin/hiiragi283/lib/data/recipe/ingredient/HTFluidIngredientBuilder.kt b/src/lib/kotlin/hiiragi283/lib/data/recipe/ingredient/HTFluidIngredientBuilder.kt index a2d732b5b8..2bbc1bc367 100644 --- a/src/lib/kotlin/hiiragi283/lib/data/recipe/ingredient/HTFluidIngredientBuilder.kt +++ b/src/lib/kotlin/hiiragi283/lib/data/recipe/ingredient/HTFluidIngredientBuilder.kt @@ -49,7 +49,7 @@ class HTFluidIngredientBuilder @PublishedApi internal constructor() { contract { callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) } - +HolderAcceptor.FluidSetBuilder().apply(builderAction).build() + +HolderAcceptor.buildFluidSet(builderAction) } fun build(): HTFluidIngredient = HTFluidIngredient(ingredient, amount) diff --git a/src/lib/kotlin/hiiragi283/lib/data/recipe/ingredient/HTItemIngredientBuilder.kt b/src/lib/kotlin/hiiragi283/lib/data/recipe/ingredient/HTItemIngredientBuilder.kt index 9a02b0c8f1..618e04a1e0 100644 --- a/src/lib/kotlin/hiiragi283/lib/data/recipe/ingredient/HTItemIngredientBuilder.kt +++ b/src/lib/kotlin/hiiragi283/lib/data/recipe/ingredient/HTItemIngredientBuilder.kt @@ -2,25 +2,19 @@ package hiiragi283.lib.data.recipe.ingredient -import hiiragi283.lib.data.HolderAcceptor import hiiragi283.lib.recipe.ingredient.HTItemIngredient import hiiragi283.lib.util.HTBuilderMarker -import hiiragi283.lib.util.HTDelegates -import net.minecraft.core.HolderSet -import net.minecraft.world.item.Item -import net.minecraft.world.item.crafting.Ingredient -import net.neoforged.neoforge.common.crafting.ICustomIngredient import kotlin.contracts.ExperimentalContracts import kotlin.contracts.InvocationKind import kotlin.contracts.contract /** - * [Ingredient]および[HTItemIngredient]を作成するビルダークラスです。 + * [HTItemIngredient]を作成するビルダークラスです。 * @author Hiiragi Tsubasa * @since 26.1.0 */ @HTBuilderMarker -class HTItemIngredientBuilder @PublishedApi internal constructor() { +class HTItemIngredientBuilder @PublishedApi internal constructor() : IngredientBuilder() { companion object { /** * @since 26.1.4 @@ -34,27 +28,7 @@ class HTItemIngredientBuilder @PublishedApi internal constructor() { } } - private var ingredient: Ingredient by HTDelegates.onceInitialize() var count: Int = 1 - operator fun Ingredient.unaryPlus() { - ingredient = this - } - - operator fun ICustomIngredient.unaryPlus() { - ingredient = this.toVanilla() - } - - operator fun HolderSet.unaryPlus() { - ingredient = Ingredient.of(this) - } - - inline fun items(builderAction: HolderAcceptor.ItemSetBuilder.() -> Unit) { - contract { - callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) - } - +HolderAcceptor.ItemSetBuilder().apply(builderAction).build() - } - fun build(): HTItemIngredient = HTItemIngredient(ingredient, count) } diff --git a/src/lib/kotlin/hiiragi283/lib/data/recipe/ingredient/IngredientBuilder.kt b/src/lib/kotlin/hiiragi283/lib/data/recipe/ingredient/IngredientBuilder.kt new file mode 100644 index 0000000000..2cd9c5f33a --- /dev/null +++ b/src/lib/kotlin/hiiragi283/lib/data/recipe/ingredient/IngredientBuilder.kt @@ -0,0 +1,58 @@ +@file:OptIn(ExperimentalContracts::class) + +package hiiragi283.lib.data.recipe.ingredient + +import hiiragi283.lib.data.HolderAcceptor +import hiiragi283.lib.util.HTBuilderMarker +import hiiragi283.lib.util.HTDelegates +import net.minecraft.core.HolderSet +import net.minecraft.world.item.Item +import net.minecraft.world.item.crafting.Ingredient +import net.neoforged.neoforge.common.crafting.ICustomIngredient +import kotlin.contracts.ExperimentalContracts +import kotlin.contracts.InvocationKind +import kotlin.contracts.contract + +/** + * [Ingredient]を作成するビルダークラスです。 + * @author Hiiragi Tsubasa + * @since 26.1.7 + */ +@HTBuilderMarker +abstract class IngredientBuilder { + companion object { + @JvmStatic + inline fun build(builderAction: IngredientBuilder.() -> Unit): Ingredient { + contract { + callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) + } + return Impl().apply(builderAction).build() + } + } + + protected var ingredient: Ingredient by HTDelegates.onceInitialize() + private set + + operator fun Ingredient.unaryPlus() { + ingredient = this + } + + operator fun ICustomIngredient.unaryPlus() { + ingredient = this.toVanilla() + } + + operator fun HolderSet.unaryPlus() { + ingredient = Ingredient.of(this) + } + + inline fun items(builderAction: HolderAcceptor.ItemSetBuilder.() -> Unit) { + contract { + callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) + } + +HolderAcceptor.buildItemSet(builderAction) + } + + @PublishedApi internal class Impl : IngredientBuilder() { + fun build(): Ingredient = ingredient + } +} diff --git a/src/lib/kotlin/hiiragi283/lib/data/tag/HTBlockItemTagBuilder.kt b/src/lib/kotlin/hiiragi283/lib/data/tag/HTBlockItemTagBuilder.kt index 8d86db43dc..2b1245d314 100644 --- a/src/lib/kotlin/hiiragi283/lib/data/tag/HTBlockItemTagBuilder.kt +++ b/src/lib/kotlin/hiiragi283/lib/data/tag/HTBlockItemTagBuilder.kt @@ -1,7 +1,7 @@ package hiiragi283.lib.data.tag +import hiiragi283.lib.registry.HTSimpleDeferredBlockAndItem import hiiragi283.lib.resource.BlockItemKey -import hiiragi283.lib.resource.HTSimpleBlockItemWithKey import hiiragi283.lib.tag.BlockItemTag import hiiragi283.lib.tag.HTMaterialLike import hiiragi283.lib.tag.HTTagPrefix @@ -21,11 +21,13 @@ interface HTBlockItemTagBuilder { /** * 指定した要素をタグに追加します。 - * @param value 要素のキーを提供する[HTSimpleBlockItemWithKey] + * @param value 要素のキーを提供する[HTSimpleDeferredBlockAndItem] * @param type このエントリの依存関係 */ - fun add(value: HTSimpleBlockItemWithKey, type: HTTagDependType = HTTagDependType.REQUIRED): HTBlockItemTagBuilder = - this.add(value.keyOrThrow, type) + fun add( + value: HTSimpleDeferredBlockAndItem, + type: HTTagDependType = HTTagDependType.REQUIRED + ): HTBlockItemTagBuilder = this.add(value.blockItemKey, type) /** * 指定した子タグをタグに追加します。 diff --git a/src/lib/kotlin/hiiragi283/lib/data/tag/HTItemTagsProvider.kt b/src/lib/kotlin/hiiragi283/lib/data/tag/HTItemTagsProvider.kt index ac91a805ef..2bed59dead 100644 --- a/src/lib/kotlin/hiiragi283/lib/data/tag/HTItemTagsProvider.kt +++ b/src/lib/kotlin/hiiragi283/lib/data/tag/HTItemTagsProvider.kt @@ -1,6 +1,6 @@ package hiiragi283.lib.data.tag -import hiiragi283.lib.registry.asKeyOrValue +import hiiragi283.lib.registry.HTSimpleDeferredBlockAndItem import hiiragi283.lib.tag.HTMaterialLike import hiiragi283.lib.tag.HTTagPrefix import net.minecraft.core.HolderLookup @@ -8,7 +8,6 @@ import net.minecraft.core.registries.Registries import net.minecraft.data.PackOutput import net.minecraft.tags.TagKey import net.minecraft.world.item.Item -import net.minecraft.world.level.ItemLike import java.util.concurrent.CompletableFuture /** @@ -32,13 +31,6 @@ abstract class HTItemTagsProvider : HTTagsProvider { // Extensions // - /** - * 指定した要素をタグに追加します。 - * @param item アイテムの値 - */ - protected fun HTTagBuilder.addItem(item: ItemLike): HTTagBuilder = - this.add(item.asItem().asKeyOrValue()) - protected fun createTag(prefix: HTTagPrefix, material: HTMaterialLike): TagKey = prefix.itemTagKey(material) /** @@ -48,4 +40,12 @@ abstract class HTItemTagsProvider : HTTagsProvider { */ protected fun builder(prefix: HTTagPrefix, material: HTMaterialLike): HTTagBuilder = builders(prefix.rawCommonTag.item, prefix.itemTagKey(material)) + + /** + * @since 26.1.7 + */ + protected fun HTTagBuilder.add( + blockItem: HTSimpleDeferredBlockAndItem, + type: HTTagDependType = HTTagDependType.REQUIRED + ): HTTagBuilder = this.add(blockItem.item, type) } diff --git a/src/lib/kotlin/hiiragi283/lib/data/tag/HTTagsProvider.kt b/src/lib/kotlin/hiiragi283/lib/data/tag/HTTagsProvider.kt index e772b1c6c2..a4ba18493b 100644 --- a/src/lib/kotlin/hiiragi283/lib/data/tag/HTTagsProvider.kt +++ b/src/lib/kotlin/hiiragi283/lib/data/tag/HTTagsProvider.kt @@ -1,10 +1,14 @@ package hiiragi283.lib.data.tag -import hiiragi283.lib.collection.SetMultiMap +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 @@ -42,12 +46,14 @@ abstract class HTTagsProvider : TagsProvider { modId: String ) : super(output, registryKey, lookupProvider, modId) - private val entryCache = SetMultiMap.SortedBuilder, TagEntry>(COMPARATOR) + private val entryCache = SetMultiMapBuilder, TagEntry>(Object2ObjectLinkedOpenHashMap()) { + sortedSetOf(COMPARATOR) + } final override fun addTags(registries: HolderLookup.Provider) { appendTags(registries) - entryCache.build().asMap().forEach { (tagKey: TagKey, entries: Collection) -> + for ((tagKey: TagKey, entries: Set) in entryCache.build()) { entries .distinctBy(TagEntry::toString) .forEach { entry: TagEntry -> getOrCreateRawBuilder(tagKey).add(entry) } @@ -77,4 +83,9 @@ 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/item/HTPotionBasedItem.kt b/src/lib/kotlin/hiiragi283/lib/item/HTPotionBasedItem.kt index 615ac21c94..06dfa66469 100644 --- a/src/lib/kotlin/hiiragi283/lib/item/HTPotionBasedItem.kt +++ b/src/lib/kotlin/hiiragi283/lib/item/HTPotionBasedItem.kt @@ -37,10 +37,7 @@ open class HTPotionBasedItem(properties: Properties) : parameters: CreativeModeTab.ItemDisplayParameters, output: CreativeModeTab.Output ) { - parameters.holders() - .lookupOrThrow(Registries.POTION) - .filterFeatures(parameters.enabledFeatures()) - .listElements() + parameters.filteredElements(Registries.POTION) .map { ItemStack(baseItem, 1, HTPotionHelper.createPotionPatch(it)) } .forEach(output::accept) } diff --git a/src/lib/kotlin/hiiragi283/lib/item/HTSubCreativeTabContents.kt b/src/lib/kotlin/hiiragi283/lib/item/HTSubCreativeTabContents.kt index 1d4507f5b2..c7af6c5bf2 100644 --- a/src/lib/kotlin/hiiragi283/lib/item/HTSubCreativeTabContents.kt +++ b/src/lib/kotlin/hiiragi283/lib/item/HTSubCreativeTabContents.kt @@ -1,9 +1,12 @@ package hiiragi283.lib.item +import hiiragi283.lib.registry.RegistryKey import net.minecraft.core.Holder +import net.minecraft.world.flag.FeatureElement import net.minecraft.world.item.CreativeModeTab import net.minecraft.world.item.Item import net.minecraft.world.item.ItemStack +import java.util.stream.Stream /** * クリエイティブタブに複数の[ItemStack]を追加するためのインターフェースです。 @@ -23,6 +26,17 @@ fun interface HTSubCreativeTabContents { output: CreativeModeTab.Output ) + /** + * @since 26.1.7 + */ + fun CreativeModeTab.ItemDisplayParameters.filteredElements( + registryKey: RegistryKey + ): Stream> = this.holders() + .lookup(registryKey) + .map { it.filterFeatures(this.enabledFeatures()) } + .stream() + .flatMap { it.listElements() } + /** * デフォルトの[ItemStack]を追加するか判定します。 */ diff --git a/src/lib/kotlin/hiiragi283/lib/item/ItemStacks.kt b/src/lib/kotlin/hiiragi283/lib/item/ItemStacks.kt index 8433eaf254..3a76abc806 100644 --- a/src/lib/kotlin/hiiragi283/lib/item/ItemStacks.kt +++ b/src/lib/kotlin/hiiragi283/lib/item/ItemStacks.kt @@ -37,6 +37,12 @@ fun ItemStackTemplate.transmuteCopy(newItem: ItemLike, newCount: Int = this.coun // ItemStack // +/** + * @author Hiiragi Tsubasa + * @since 26.1.7 + */ +fun ItemStack(item: ItemLike, patch: DataComponentPatch): ItemStack = ItemStack(item, 1, patch) + /** * @author Hiiragi Tsubasa * @since 26.1.0 diff --git a/src/lib/kotlin/hiiragi283/lib/mod/HTCommonMod.kt b/src/lib/kotlin/hiiragi283/lib/mod/HTCommonMod.kt index 3cba0f5f23..8ea306514a 100644 --- a/src/lib/kotlin/hiiragi283/lib/mod/HTCommonMod.kt +++ b/src/lib/kotlin/hiiragi283/lib/mod/HTCommonMod.kt @@ -1,32 +1,11 @@ package hiiragi283.lib.mod -import hiiragi283.lib.capability.HTFluidCapabilities -import hiiragi283.lib.capability.HTItemCapabilities -import hiiragi283.lib.transfer.HTHandlerProvider -import net.minecraft.core.Direction -import net.minecraft.world.entity.Entity -import net.minecraft.world.entity.EntityType -import net.minecraft.world.item.ItemStack -import net.minecraft.world.level.ItemLike -import net.minecraft.world.level.block.entity.BlockEntity -import net.minecraft.world.level.block.entity.BlockEntityType import net.neoforged.bus.api.IEventBus import net.neoforged.fml.ModContainer import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent -import net.neoforged.fml.event.lifecycle.FMLConstructModEvent -import net.neoforged.neoforge.capabilities.BlockCapability -import net.neoforged.neoforge.capabilities.EntityCapability -import net.neoforged.neoforge.capabilities.ICapabilityProvider -import net.neoforged.neoforge.capabilities.ItemCapability -import net.neoforged.neoforge.capabilities.RegisterCapabilitiesEvent import net.neoforged.neoforge.common.NeoForgeMod -import net.neoforged.neoforge.event.AddPackFindersEvent import net.neoforged.neoforge.network.event.RegisterPayloadHandlersEvent import net.neoforged.neoforge.network.registration.PayloadRegistrar -import net.neoforged.neoforge.registries.DataPackRegistryEvent -import net.neoforged.neoforge.registries.NewRegistryEvent -import net.neoforged.neoforge.registries.datamaps.DataMapType -import net.neoforged.neoforge.registries.datamaps.RegisterDataMapTypesEvent import thedarkcolour.kotlinforforge.neoforge.forge.LOADING_CONTEXT import thedarkcolour.kotlinforforge.neoforge.forge.MOD_BUS @@ -42,11 +21,6 @@ abstract class HTCommonMod { val eventBus: IEventBus = MOD_BUS val container: ModContainer = LOADING_CONTEXT.activeContainer - eventBus.addListener(::onConstruct) - eventBus.addListener(::registerRegistries) - eventBus.addListener(::registerDynamicRegistries) - eventBus.addListener(::registerDataMapTypes) - eventBus.addListener(::commonSetup) eventBus.addListener { event: RegisterPayloadHandlersEvent -> container.modInfo.version @@ -54,8 +28,6 @@ abstract class HTCommonMod { .let(event::registrar) .let(::registerPayload) } - eventBus.addListener { event: RegisterCapabilitiesEvent -> registerCapabilities(CapabilityHelper(event)) } - eventBus.addListener(::registerPack) initialize(eventBus, container) } @@ -65,88 +37,13 @@ abstract class HTCommonMod { */ protected abstract fun initialize(eventBus: IEventBus, container: ModContainer) - /** - * 初期化の後にセットアップを行います。 - */ - protected open fun onConstruct(event: FMLConstructModEvent) {} - - /** - * 新しいレジストリを登録します。 - */ - protected open fun registerRegistries(event: NewRegistryEvent) {} - - /** - * 新しい動的レジストリを登録します。 - */ - protected open fun registerDynamicRegistries(event: DataPackRegistryEvent.NewRegistry) {} - - /** - * 新しい[DataMapType]を登録します。 - */ - protected open fun registerDataMapTypes(event: RegisterDataMapTypesEvent) {} - /** * レジストリへの登録後のセットアップを行います。 */ protected open fun commonSetup(event: FMLCommonSetupEvent) {} - /** - * キャパビリティの登録を行います。 - */ - protected open fun registerCapabilities(helper: CapabilityHelper) {} - - /** - * キャパビリティの登録を補助するクラスです。 - */ - @JvmInline - protected value class CapabilityHelper(val event: RegisterCapabilitiesEvent) { - // Block // - - fun registerBlockEntity( - capability: BlockCapability, - type: BlockEntityType, - provider: ICapabilityProvider - ) { - event.registerBlockEntity(capability, type, provider) - } - - fun registerBlockEntity(type: BlockEntityType) where BE : BlockEntity, BE : HTHandlerProvider { - this.registerBlockEntity(HTItemCapabilities.block, type) { blockEntity: BE, side: Direction? -> - blockEntity.getItemHandler(side) - } - this.registerBlockEntity(HTFluidCapabilities.block, type) { blockEntity: BE, side: Direction? -> - blockEntity.getFluidHandler(side) - } - } - - // Entity // - - fun registerEntity( - capability: EntityCapability, - type: EntityType, - provider: ICapabilityProvider - ) { - event.registerEntity(capability, type, provider) - } - - // Item // - - fun registerItem( - capability: ItemCapability, - provider: ICapabilityProvider, - vararg items: ItemLike - ) { - event.registerItem(capability, provider, *items) - } - } - /** * パケットを登録します。 */ protected open fun registerPayload(registrar: PayloadRegistrar) {} - - /** - * 追加のリソース/データパックを登録します。 - */ - protected open fun registerPack(event: AddPackFindersEvent) {} } diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/HTRecipeHolder.kt b/src/lib/kotlin/hiiragi283/lib/recipe/HTRecipeHolder.kt index cc9047f802..c307fe95ea 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/HTRecipeHolder.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/HTRecipeHolder.kt @@ -3,7 +3,9 @@ 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 @@ -15,7 +17,7 @@ import net.minecraft.world.item.crafting.RecipeHolder * @since 26.1.0 */ @JvmRecord -data class HTRecipeHolder(val key: RecipeKey, val recipe: RECIPE) { +data class HTRecipeHolder(val key: RecipeKey, val recipe: RECIPE) : HTValueWithId { companion object { @JvmStatic fun codec(recipeCodec: MapCodec): Codec> = @@ -43,6 +45,8 @@ 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/base/HTDoubleItemToItemRecipe.kt b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTDoubleItemToItemRecipe.kt index 8ddd07c456..b92de05855 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTDoubleItemToItemRecipe.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTDoubleItemToItemRecipe.kt @@ -67,8 +67,8 @@ interface HTDoubleItemToItemRecipe : override fun test(first: ItemInstance, second: ItemInstance): Boolean = primary.test(first) && secondary.test(second) - override fun getRequiredAmount(first: ItemInstance, second: ItemInstance): Pair = - primary.getRequiredAmount(first) to secondary.getRequiredAmount(second) + override fun getMatchingStack(first: ItemInstance, second: ItemInstance): Pair = + primary.getMatchingStack(first) to secondary.getMatchingStack(second) override fun apply(first: ItemInstance, second: ItemInstance): ItemStack = result.create() } diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTFluidToRecipe.kt b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTFluidToRecipe.kt index 138434b65b..15bf26d1c8 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTFluidToRecipe.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTFluidToRecipe.kt @@ -82,7 +82,7 @@ interface HTFluidToRecipe : override fun test(input: FluidInstance): Boolean = ingredient.test(input) - override fun getRequiredAmount(input: FluidInstance): Int = ingredient.getRequiredAmount(input) + override fun getMatchingStack(input: FluidInstance): FluidInstance = ingredient.getMatchingStack(input) override fun apply(input: FluidInstance): OUTPUT = result.create() } diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTItemAndFluidToRecipe.kt b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTItemAndFluidToRecipe.kt index 74aa006c5b..0692e2a4a1 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTItemAndFluidToRecipe.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTItemAndFluidToRecipe.kt @@ -91,8 +91,8 @@ interface HTItemAndFluidToRecipe : override fun test(first: ItemInstance, second: FluidInstance): Boolean = itemIngredient.test(first) && fluidIngredient.test(second) - override fun getRequiredAmount(first: ItemInstance, second: FluidInstance): Pair = - itemIngredient.getRequiredAmount(first) to fluidIngredient.getRequiredAmount(second) + override fun getMatchingStack(first: ItemInstance, second: FluidInstance): Pair = + itemIngredient.getMatchingStack(first) to fluidIngredient.getMatchingStack(second) override fun apply(first: ItemInstance, second: FluidInstance): OUTPUT = result.create() } diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTItemToDoubleItemRecipe.kt b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTItemToDoubleItemRecipe.kt index 766786c7fa..e46db7e7da 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTItemToDoubleItemRecipe.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTItemToDoubleItemRecipe.kt @@ -8,7 +8,7 @@ import hiiragi283.lib.recipe.ingredient.HTItemIngredient import hiiragi283.lib.recipe.result.HTItemResult import hiiragi283.lib.recipe.result.createOrEmpty import hiiragi283.lib.serialization.codec.HTCodecs -import hiiragi283.lib.serialization.codec.nelOrElement +import hiiragi283.lib.serialization.codec.compactNelFieldOf import hiiragi283.lib.serialization.network.nelOf import net.minecraft.network.RegistryFriendlyByteBuf import net.minecraft.network.codec.StreamCodec @@ -29,8 +29,8 @@ interface HTItemToDoubleItemRecipe : fun asSingleOutput(): HTItemToItemRecipe = object : HTItemToItemRecipe { override fun test(input: ItemInstance): Boolean = this@HTItemToDoubleItemRecipe.test(input) - override fun getRequiredAmount(input: ItemInstance): Int = - this@HTItemToDoubleItemRecipe.getRequiredAmount(input) + override fun getMatchingStack(input: ItemInstance): ItemInstance = + this@HTItemToDoubleItemRecipe.getMatchingStack(input) override fun apply(input: ItemInstance): ItemStack = this@HTItemToDoubleItemRecipe.apply(input).first @@ -54,7 +54,9 @@ interface HTItemToDoubleItemRecipe : HTCodecs.recordMap { instance -> instance.group( HTItemIngredient.CODEC.fieldOf(HTConstants.INGREDIENT).forGetter(Basic::ingredient), - HTItemResult.CODEC.nelOrElement(2).fieldOf(HTConstants.RESULTS).forGetter(Basic::result), + HTItemResult.CODEC + .compactNelFieldOf(HTConstants.RESULT, HTConstants.RESULTS, 2) + .forGetter(Basic::result), HTProgressData.CODEC.forGetter(Basic::progressData) ).apply(instance, factory::create) } @@ -78,7 +80,7 @@ interface HTItemToDoubleItemRecipe : override fun test(input: ItemInstance): Boolean = ingredient.test(input) - override fun getRequiredAmount(input: ItemInstance): Int = ingredient.getRequiredAmount(input) + override fun getMatchingStack(input: ItemInstance): ItemInstance = ingredient.getMatchingStack(input) override fun apply(input: ItemInstance): Pair = result.head.create() to result.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 index 093b6109fa..18400bbb12 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTItemToItemAndFluidRecipe.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTItemToItemAndFluidRecipe.kt @@ -67,7 +67,7 @@ interface HTItemToItemAndFluidRecipe : override fun test(input: ItemInstance): Boolean = ingredient.test(input) - override fun getRequiredAmount(input: ItemInstance): Int = ingredient.getRequiredAmount(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 49101c9ba2..29763d990c 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTItemToRecipe.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTItemToRecipe.kt @@ -82,7 +82,7 @@ interface HTItemToRecipe : override fun test(input: ItemInstance): Boolean = ingredient.test(input) - override fun getRequiredAmount(input: ItemInstance): Int = ingredient.getRequiredAmount(input) + override fun getMatchingStack(input: ItemInstance): ItemInstance = ingredient.getMatchingStack(input) override fun apply(input: ItemInstance): OUTPUT = result.create() } diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTProgressData.kt b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTProgressData.kt index d27f4b753f..e56fbfb661 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTProgressData.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTProgressData.kt @@ -93,7 +93,7 @@ sealed interface HTProgressData : HTHasText { override fun getProcessTime(energyRate: Int): Int = value - override fun getText(): Text = HTCommonTranslation.SECONDS.translate(value, value / 20) + override fun getText(): Text = HTCommonTranslation.SECONDS.translate(value / 20, value) } /** diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTRecipeFactories.kt b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTRecipeFactories.kt index 194bd7c03b..612e4e5c23 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTRecipeFactories.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTRecipeFactories.kt @@ -27,9 +27,9 @@ data object HTRecipeFactories { override fun apply(input: INPUT_A): OUTPUT /** - * 入力の消費量を取得します。 + * 消費される入力を取得します。 */ - fun getRequiredAmount(input: INPUT_A): Int + fun getMatchingStack(input: INPUT_A): INPUT_A } /** @@ -54,9 +54,9 @@ data object HTRecipeFactories { override fun apply(first: INPUT_A, second: INPUT_B): OUTPUT /** - * 入力の消費量を取得します。 + * 消費される入力を取得します。 */ - fun getRequiredAmount(first: INPUT_A, second: INPUT_B): Pair + fun getMatchingStack(first: INPUT_A, second: INPUT_B): Pair } /** @@ -89,7 +89,10 @@ data object HTRecipeFactories { Function3 { override fun apply(first: INPUT_A, second: INPUT_B, third: INPUT_C): OUTPUT - fun getRequiredAmount(first: INPUT_A, second: INPUT_B, third: INPUT_C): Triple + /** + * 消費される入力を取得します。 + */ + fun getMatchingStack(first: INPUT_A, second: INPUT_B, third: INPUT_C): Triple } /** diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTRecipePredicates.kt b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTRecipePredicates.kt index a806066305..23f763fb41 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTRecipePredicates.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTRecipePredicates.kt @@ -4,6 +4,7 @@ import hiiragi283.lib.recipe.HTRecipePredicate import hiiragi283.lib.recipe.input.HTFluidRecipeInput import hiiragi283.lib.recipe.input.HTItemAndFluidRecipeInput 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 @@ -73,8 +74,7 @@ data object HTRecipePredicates { * 2種類のアイテムを判定する[DoubleInput]の拡張インターフェースです。 */ fun interface DoubleItem : DoubleInput { - override fun matches(input: RecipeInput): Boolean = - input.size() >= 2 && test(input.getItem(0), input.getItem(1)) + override fun matches(input: RecipeInput): Boolean = test(input.getItemOrEmpty(0), input.getItemOrEmpty(1)) } /** @@ -83,7 +83,7 @@ data object HTRecipePredicates { */ fun interface DoubleFluid : DoubleInput { override fun matches(input: HTFluidRecipeInput): Boolean = - input.size() >= 2 && test(input.getFluid(0), input.getFluid(1)) + test(input.getFluidOrEmpty(0), input.getFluidOrEmpty(1)) } // Triple Input // @@ -102,10 +102,10 @@ data object HTRecipePredicates { } /** - * 3種類のアイテムを判定する[TripleItem]の拡張インターフェースです。 + * 3種類のアイテムを判定する[TripleInput]の拡張インターフェースです。 */ fun interface TripleItem : TripleInput { override fun matches(input: RecipeInput): Boolean = - input.size() >= 3 && test(input.getItem(0), input.getItem(1), input.getItem(2)) + test(input.getItemOrEmpty(0), input.getItemOrEmpty(1), input.getItemOrEmpty(2)) } } diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTTripleItemToItemRecipe.kt b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTTripleItemToItemRecipe.kt new file mode 100644 index 0000000000..dd0489f74f --- /dev/null +++ b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTTripleItemToItemRecipe.kt @@ -0,0 +1,125 @@ +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.HTTripleItemToItemRecipeBuilder +import hiiragi283.lib.recipe.ingredient.HTItemIngredient +import hiiragi283.lib.recipe.result.HTItemResult +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.RecipeInput + +/** + * 2種類または3種類のアイテムから1種類のアイテムを作成するレシピを表すインターフェースです。 + * @author Hiiragi Tsubasa + * @since 26.1.7 + */ +interface HTTripleItemToItemRecipe : + HTRecipePredicates.TripleItem, + HTRecipeFactories.TripleItem, + HTProgressRecipe { + + fun asDoubleInput(): HTDoubleItemToItemRecipe? = null + + /** + * @author Hiiragi Tsubasa + * @since 26.1.7 + */ + open class Basic( + val ingredient: HTItemIngredient, + val extras: Nel, + val result: HTItemResult, + override val progressData: HTProgressData + ) : HTTripleItemToItemRecipe, + HTProgressRecipe.Simple { + companion object { + @JvmStatic + fun codec(factory: HTTripleItemToItemRecipeBuilder.Factory): MapCodec = + HTCodecs.recordMap { instance -> + instance.group( + HTItemIngredient.CODEC.fieldOf(HTConstants.INGREDIENT).forGetter(Basic::ingredient), + HTItemIngredient.CODEC.compactNelFieldOf("extra", "extras", 2).forGetter(Basic::extras), + HTItemResult.CODEC.fieldOf(HTConstants.RESULT).forGetter(Basic::result), + HTProgressData.CODEC.forGetter(Basic::progressData) + ).apply(instance, factory::create) + } + + @JvmField + val SIMPLE_CODEC: MapCodec = codec(::Basic) + + @JvmStatic + fun streamCodec( + factory: HTTripleItemToItemRecipeBuilder.Factory + ): StreamCodec = StreamCodec.composite( + HTItemIngredient.STREAM_CODEC, + Basic::ingredient, + HTItemIngredient.STREAM_CODEC.nelOf(), + Basic::extras, + HTItemResult.STREAM_CODEC, + Basic::result, + HTProgressData.STREAM_CODEC, + Basic::progressData, + factory::create + ) + } + + val secondary: HTItemIngredient get() = extras.head + val tertiary: HTItemIngredient? get() = extras.getOrNull(1) + + override fun asDoubleInput(): HTDoubleItemToItemRecipe? { + if (tertiary != null) return null + return object : HTDoubleItemToItemRecipe, HTProgressRecipe.Simple by this { + override fun test(first: ItemInstance, second: ItemInstance): Boolean = + ingredient.test(first) && secondary.test(second) + + override fun apply(first: ItemInstance, second: ItemInstance): ItemStack = result.create() + + override fun getMatchingStack( + first: ItemInstance, + second: ItemInstance + ): Pair = + ingredient.getMatchingStack(first) to secondary.getMatchingStack(second) + } + } + + override fun test(first: ItemInstance, second: ItemInstance, third: ItemInstance): Boolean { + if (!ingredient.test(first)) return false + return when { + secondary.test(second) -> tertiary?.test(third) ?: true + secondary.test(third) -> tertiary?.test(second) ?: true + else -> false + } + } + + override fun apply(first: ItemInstance, second: ItemInstance, third: ItemInstance): ItemStack = result.create() + + override fun getMatchingStack( + first: ItemInstance, + second: ItemInstance, + third: ItemInstance + ): Triple { + val firstInput = ingredient.getMatchingStack(first) + return when { + secondary.test(second) -> Triple( + firstInput, + secondary.getMatchingStack(second), + tertiary?.getMatchingStack(third) ?: ItemStack.EMPTY + ) + + secondary.test(third) -> Triple( + firstInput, + (tertiary?.getMatchingStack(second) ?: ItemStack.EMPTY), + secondary.getMatchingStack(third) + ) + + else -> Triple(ItemStack.EMPTY, ItemStack.EMPTY, ItemStack.EMPTY) + } + } + } +} diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/handler/HTFluidInputTank.kt b/src/lib/kotlin/hiiragi283/lib/recipe/handler/HTFluidInputTank.kt new file mode 100644 index 0000000000..de78421424 --- /dev/null +++ b/src/lib/kotlin/hiiragi283/lib/recipe/handler/HTFluidInputTank.kt @@ -0,0 +1,32 @@ +package hiiragi283.lib.recipe.handler + +import hiiragi283.lib.recipe.ingredient.HTIngredientHelper +import hiiragi283.lib.transfer.HTResourceSlot +import hiiragi283.lib.transfer.fluid.getFluidStack +import net.minecraft.world.level.material.Fluid +import net.neoforged.neoforge.fluids.FluidInstance +import net.neoforged.neoforge.fluids.FluidStack +import net.neoforged.neoforge.fluids.FluidStackTemplate +import net.neoforged.neoforge.transfer.fluid.FluidResource + +/** + * [Fluid]向けの[HTResourceInputSlot]の実装クラスです。 + * @author Hiiragi Tsubasa + * @since 26.1.7 + */ +class HTFluidInputTank(slot: HTResourceSlot) : + HTResourceInputSlot(slot) { + override fun getEmptyStack(): FluidStack = FluidStack.EMPTY + + override fun getAmount(instance: FluidInstance): Int = instance.amount() + + override fun asResource(instance: FluidInstance): FluidResource = when (instance) { + is FluidStack -> FluidResource.of(instance) + is FluidStackTemplate -> FluidResource.of(instance) + else -> FluidResource.of(instance.typeHolder()) + } + + override fun getStoredInput(): FluidStack = slot.getFluidStack() + + override fun isEmpty(instance: FluidInstance): Boolean = HTIngredientHelper.isEmpty(instance) +} diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/handler/HTInputSlot.kt b/src/lib/kotlin/hiiragi283/lib/recipe/handler/HTInputSlot.kt index b95db688af..dd64ec0e04 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/handler/HTInputSlot.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/handler/HTInputSlot.kt @@ -1,74 +1,76 @@ package hiiragi283.lib.recipe.handler -import hiiragi283.lib.transfer.HTTransferAccess -import hiiragi283.lib.transfer.fluid.HTFluidTank -import hiiragi283.lib.transfer.fluid.getFluidStack -import hiiragi283.lib.transfer.item.HTItemSlot -import hiiragi283.lib.transfer.item.getItemStack -import net.minecraft.world.item.ItemStack -import net.neoforged.neoforge.fluids.FluidStack +import hiiragi283.lib.recipe.ingredient.HTIngredient +import net.minecraft.core.TypedInstance import net.neoforged.neoforge.transfer.transaction.TransactionContext /** * レシピの入力となるスロットを表すクラスです。 + * + * 参考 : [Mekanism - IInputHandler](https://github.com/mekanism/Mekanism/blob/26.3/src/api/java/mekanism/api/recipes/inputs/IInputHandler.java) + * @param TYPE 材料の種類のクラス + * @param INSTANCE 材料の種類を保持するインスタンスのクラス * @author Hiiragi Tsubasa - * @since 26.1.0 + * @since 26.1.7 */ -interface HTInputSlot { +interface HTInputSlot> { /** - * 材料を消費します。 - * @param amount 搬出する数量 - * @param transaction 現在のトランザクション - * @return 実際に消費される数量 + * 現在保持している入力を取得します。 */ - fun extract(amount: Int, transaction: TransactionContext): Int + fun getStoredInput(): INSTANCE /** - * 材料を消費できるか判定します。 - * @param amount 搬出する数量 - * @param transaction 現在のトランザクション - * @return 実際に消費される数量が[amount]と等しい場合は`true` + * 指定した入力が空かどうか判定します。 + * @return 空の場合は`true` */ - fun canExtract(amount: Int, transaction: TransactionContext): Boolean = extract(amount, transaction) == amount - - // Single // + fun isEmpty(instance: INSTANCE): Boolean /** - * 単一のスロットに対する[HTInputSlot]の拡張インターフェースです。 - * @param STACK 保持しているスタックのクラス - * @author Hiiragi Tsubasa - * @since 26.1.0 + * 消費する入力を取得します。 + * @param ingredient 判定に用いる材料 + * @return 消費する入力 */ - interface Single : HTInputSlot { - /** - * 保持しているスタックを取得します。 - */ - fun getStack(): STACK - } + fun getRequiredInput(ingredient: HTIngredient): INSTANCE /** - * [アイテム][ItemStack]向けの[Single]の実装クラスです。 - * @author Hiiragi Tsubasa - * @since 26.1.0 + * 入力を消費します。 + * @param input 消費する入力 + * @param transaction 現在のトランザクション */ - @JvmRecord - data class SingleItem(private val slot: HTItemSlot) : Single { - override fun getStack(): ItemStack = slot.getItemStack() + fun use(input: INSTANCE?, transaction: TransactionContext): UseResult - override fun extract(amount: Int, transaction: TransactionContext): Int = - slot.extractSelf(amount, transaction, HTTransferAccess.INTERNAL) - } + // UseResult // /** - * [液体][FluidStack]向けの[Single]の実装クラスです。 + * [HTInputSlot.use]の結果を表すクラスです。 * @author Hiiragi Tsubasa - * @since 26.1.0 + * @since 26.1.7 */ - @JvmRecord - data class SingleFluid(private val tank: HTFluidTank) : Single { - override fun getStack(): FluidStack = tank.getFluidStack() + enum class UseResult { + /** + * 消費する入力が空の場合(触媒など) + */ + EMPTY, - override fun extract(amount: Int, transaction: TransactionContext): Int = - tank.extractSelf(amount, transaction, HTTransferAccess.INTERNAL) + /** + * 入力を消費できない場合 + */ + NOT_CONSUMED, + + /** + * 入力を消費できる場合 + */ + CONSUMED + ; + + /** + * 入力の消費に成功した場合は`true` + */ + val succeeded: Boolean get() = !failed + + /** + * 入力の消費に失敗した場合は`true` + */ + val failed: Boolean get() = this == NOT_CONSUMED } } diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/handler/HTItemInputSlot.kt b/src/lib/kotlin/hiiragi283/lib/recipe/handler/HTItemInputSlot.kt new file mode 100644 index 0000000000..71deea4e32 --- /dev/null +++ b/src/lib/kotlin/hiiragi283/lib/recipe/handler/HTItemInputSlot.kt @@ -0,0 +1,32 @@ +package hiiragi283.lib.recipe.handler + +import hiiragi283.lib.recipe.ingredient.HTIngredientHelper +import hiiragi283.lib.transfer.HTResourceSlot +import hiiragi283.lib.transfer.item.getItemStack +import net.minecraft.world.item.Item +import net.minecraft.world.item.ItemInstance +import net.minecraft.world.item.ItemStack +import net.minecraft.world.item.ItemStackTemplate +import net.neoforged.neoforge.transfer.item.ItemResource + +/** + * [Item]向けの[HTResourceInputSlot]の実装クラスです。 + * @author Hiiragi Tsubasa + * @since 26.1.7 + */ +class HTItemInputSlot(slot: HTResourceSlot) : + HTResourceInputSlot(slot) { + override fun getEmptyStack(): ItemStack = ItemStack.EMPTY + + override fun getAmount(instance: ItemInstance): Int = instance.count() + + override fun asResource(instance: ItemInstance): ItemResource = when (instance) { + is ItemStack -> ItemResource.of(instance) + is ItemStackTemplate -> ItemResource.of(instance) + else -> ItemResource.of(instance.typeHolder()) + } + + override fun getStoredInput(): ItemStack = slot.getItemStack() + + override fun isEmpty(instance: ItemInstance): Boolean = HTIngredientHelper.isEmpty(instance) +} diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/handler/HTOutputSlot.kt b/src/lib/kotlin/hiiragi283/lib/recipe/handler/HTOutputSlot.kt index e03eb4b2d1..a9d29fa583 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/handler/HTOutputSlot.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/handler/HTOutputSlot.kt @@ -1,14 +1,5 @@ package hiiragi283.lib.recipe.handler -import hiiragi283.lib.transfer.HTTransferAccess -import hiiragi283.lib.transfer.fluid.HTFluidTank -import hiiragi283.lib.transfer.fluid.toResourcePair -import hiiragi283.lib.transfer.item.HTItemSlot -import hiiragi283.lib.transfer.item.toResourcePair -import net.minecraft.world.item.ItemStack -import net.neoforged.neoforge.fluids.FluidStack -import net.neoforged.neoforge.transfer.fluid.FluidResource -import net.neoforged.neoforge.transfer.item.ItemResource import net.neoforged.neoforge.transfer.transaction.TransactionContext /** @@ -19,54 +10,43 @@ import net.neoforged.neoforge.transfer.transaction.TransactionContext */ interface HTOutputSlot { /** - * 完成品を搬入します。 - * @param stack 搬入する完成品 + * 出力を受け取ります。 + * @param stack 受け取る出力 * @param transaction 現在のトランザクション - * @return 実際に搬入される数量 */ - fun insert(stack: STACK, transaction: TransactionContext): Int + fun take(stack: STACK, transaction: TransactionContext): TakeResult - /** - * 完成品を搬入できるか判定します。 - * @param stack 搬入する完成品 - * @param transaction 現在のトランザクション - * @return 実際に消費される数量が[stack]の数量と等しい場合は`true` - */ - fun canInsert(stack: STACK, transaction: TransactionContext): Boolean - - // Single // + // TakeResult // /** - * [アイテム][ItemStack]向けの[HTOutputSlot]の実装クラスです。 + * [HTOutputSlot.take]の結果を表すクラスです。 * @author Hiiragi Tsubasa - * @since 26.1.0 + * @since 26.1.7 */ - @JvmRecord - data class SingleItem(private val slot: HTItemSlot) : HTOutputSlot { - override fun insert(stack: ItemStack, transaction: TransactionContext): Int { - if (stack.isEmpty) return 0 - val (resource: ItemResource, amount: Int) = stack.toResourcePair() - return slot.insert(resource, amount, transaction, HTTransferAccess.INTERNAL) - } - - override fun canInsert(stack: ItemStack, transaction: TransactionContext): Boolean = - insert(stack, transaction) == stack.count() - } - - /** - * [液体][FluidStack]向けの[HTOutputSlot]の実装クラスです。 - * @author Hiiragi Tsubasa - * @since 26.1.0 - */ - @JvmRecord - data class SingleFluid(private val tank: HTFluidTank) : HTOutputSlot { - override fun insert(stack: FluidStack, transaction: TransactionContext): Int { - if (stack.isEmpty) return 0 - val (resource: FluidResource, amount: Int) = stack.toResourcePair() - return tank.insert(resource, amount, transaction, HTTransferAccess.INTERNAL) - } - - override fun canInsert(stack: FluidStack, transaction: TransactionContext): Boolean = - insert(stack, transaction) == stack.amount() + enum class TakeResult { + /** + * 出力を受け取れない場合 + */ + NONE, + + /** + * 出力を一部だけ受け取れる場合 + */ + PARTIALLY, + + /** + * 出力をすべて受け取れる場合 + */ + FULL; + + /** + * 出力の受け取りに失敗した場合は`true` + */ + val noneTaken: Boolean get() = this == NONE + + /** + * 出力の受け取りに成功した場合は`true` + */ + val anyTaken: Boolean get() = !noneTaken } } diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/handler/HTOutputSlotHelper.kt b/src/lib/kotlin/hiiragi283/lib/recipe/handler/HTOutputSlotHelper.kt new file mode 100644 index 0000000000..3822b384e7 --- /dev/null +++ b/src/lib/kotlin/hiiragi283/lib/recipe/handler/HTOutputSlotHelper.kt @@ -0,0 +1,88 @@ +package hiiragi283.lib.recipe.handler + +import hiiragi283.lib.recipe.handler.HTOutputSlot.TakeResult +import hiiragi283.lib.transfer.HTTransferAccess +import hiiragi283.lib.transfer.fluid.HTFluidTank +import hiiragi283.lib.transfer.fluid.toResourcePair +import hiiragi283.lib.transfer.item.HTItemSlot +import hiiragi283.lib.transfer.item.toResourcePair +import net.minecraft.world.item.ItemStack +import net.neoforged.neoforge.fluids.FluidStack +import net.neoforged.neoforge.transfer.fluid.FluidResource +import net.neoforged.neoforge.transfer.item.ItemResource +import net.neoforged.neoforge.transfer.transaction.TransactionContext + +/** + * @author Hiiragi Tsubasa + * @since 26.1.7 + */ +data object HTOutputSlotHelper { + // Fluid // + + /** + * 単一の[HTFluidTank]を[液体][FluidStack]向けの[HTOutputSlot]に変換します。 + * @since 26.1.0 + */ + @JvmStatic + fun forFluid(tank: HTFluidTank): HTOutputSlot = SingleFluid(tank) + + @JvmRecord + private data class SingleFluid(private val tank: HTFluidTank) : HTOutputSlot { + override fun take(stack: FluidStack, transaction: TransactionContext): TakeResult { + if (stack.isEmpty) return TakeResult.NONE + val (resource: FluidResource, amount: Int) = stack.toResourcePair() + return when (tank.insert(resource, amount, transaction, HTTransferAccess.INTERNAL)) { + 0 -> TakeResult.NONE + amount -> TakeResult.FULL + else -> TakeResult.PARTIALLY + } + } + } + + // Item // + + /** + * 単一の[HTItemSlot]を[アイテム][ItemStack]向けの[HTOutputSlot]に変換します。 + * @since 26.1.0 + */ + @JvmStatic + fun forItem(slot: HTItemSlot): HTOutputSlot = SingleItem(slot) + + @JvmRecord + private data class SingleItem(private val slot: HTItemSlot) : HTOutputSlot { + override fun take(stack: ItemStack, transaction: TransactionContext): TakeResult { + if (stack.isEmpty) return TakeResult.NONE + val (resource: ItemResource, amount: Int) = stack.toResourcePair() + return when (slot.insert(resource, amount, transaction, HTTransferAccess.INTERNAL)) { + 0 -> TakeResult.NONE + amount -> TakeResult.FULL + else -> TakeResult.PARTIALLY + } + } + } + + /** + * 複数の[HTItemSlot]を[アイテム][ItemStack]向けの[HTOutputSlot]に変換します。 + * @since 26.1.7 + */ + @JvmStatic + fun forItems(slots: List): HTOutputSlot = MultiItems(slots) + + @JvmRecord + private data class MultiItems(private val slots: List) : HTOutputSlot { + override fun take(stack: ItemStack, transaction: TransactionContext): TakeResult { + if (stack.isEmpty) return TakeResult.NONE + val (resource: ItemResource, amount: Int) = stack.toResourcePair() + var inserted = 0 + for (slot: HTItemSlot in slots) { + inserted += slot.insert(resource, amount - inserted, transaction, HTTransferAccess.INTERNAL) + if (inserted == amount) break + } + return when (inserted) { + 0 -> TakeResult.NONE + amount -> TakeResult.FULL + else -> TakeResult.PARTIALLY + } + } + } +} diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/handler/HTResourceInputSlot.kt b/src/lib/kotlin/hiiragi283/lib/recipe/handler/HTResourceInputSlot.kt new file mode 100644 index 0000000000..f608048ad9 --- /dev/null +++ b/src/lib/kotlin/hiiragi283/lib/recipe/handler/HTResourceInputSlot.kt @@ -0,0 +1,61 @@ +package hiiragi283.lib.recipe.handler + +import hiiragi283.lib.recipe.ingredient.HTIngredient +import hiiragi283.lib.transfer.HTResourceSlot +import hiiragi283.lib.transfer.HTTransferAccess +import net.minecraft.core.TypedInstance +import net.neoforged.neoforge.transfer.resource.RegisteredResource +import net.neoforged.neoforge.transfer.transaction.TransactionContext + +/** + * [HTResourceSlot]に基づいた[HTInputSlot]の抽象クラスです。 + * + * 参考 : [Mekanism - InputResourceHandler](https://github.com/mekanism/Mekanism/blob/26.3/src/api/java/mekanism/api/recipes/inputs/InputResourceHandler.java) + * @param TYPE 材料の種類のクラス + * @param RESOURCE [slot]が保持するリソースのクラス + * @param INSTANCE 材料の種類を保持するインスタンスのクラス + * @param slot 入力を保持するスロット + * @author Hiiragi Tsubasa + * @since 26.1.7 + */ +abstract class HTResourceInputSlot< + TYPE : Any, + RESOURCE : RegisteredResource, + INSTANCE : TypedInstance + >( + protected val slot: HTResourceSlot +) : HTInputSlot { + /** + * 空の入力を取得します。 + */ + protected abstract fun getEmptyStack(): INSTANCE + + /** + * 入力から数量を取得します。 + */ + protected abstract fun getAmount(instance: INSTANCE): Int + + /** + * 入力をリソースに変換します。 + */ + protected abstract fun asResource(instance: INSTANCE): RESOURCE + + final override fun getRequiredInput(ingredient: HTIngredient): INSTANCE { + if (slot.isEmpty) { + return getEmptyStack() + } + return ingredient.getMatchingStack(getStoredInput()) + } + + final override fun use(input: INSTANCE?, transaction: TransactionContext): HTInputSlot.UseResult { + if (input == null || isEmpty(input)) { + return HTInputSlot.UseResult.EMPTY + } + val amount: Int = getAmount(input) + val extracted: Int = slot.extract(asResource(input), amount, transaction, HTTransferAccess.INTERNAL) + return when { + extracted == amount -> HTInputSlot.UseResult.CONSUMED + else -> HTInputSlot.UseResult.NOT_CONSUMED + } + } +} diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTBiomeCondition.kt b/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTBiomeCondition.kt new file mode 100644 index 0000000000..a761efe998 --- /dev/null +++ b/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTBiomeCondition.kt @@ -0,0 +1,72 @@ +package hiiragi283.lib.recipe.ingredient + +import com.mojang.serialization.Codec +import hiiragi283.lib.data.buildDataPatch +import hiiragi283.lib.recipe.display.SlotDisplay +import hiiragi283.lib.serialization.network.HTStreamCodecs +import hiiragi283.lib.text.HTCommonTranslation +import hiiragi283.lib.text.toText +import net.minecraft.core.Holder +import net.minecraft.core.HolderSet +import net.minecraft.core.component.DataComponents +import net.minecraft.core.registries.Registries +import net.minecraft.network.RegistryFriendlyByteBuf +import net.minecraft.network.codec.StreamCodec +import net.minecraft.tags.TagKey +import net.minecraft.world.item.ItemStackTemplate +import net.minecraft.world.item.Items +import net.minecraft.world.item.crafting.display.SlotDisplay +import net.minecraft.world.level.biome.Biome +import java.util.function.Predicate + +/** + * [HolderSet]に基づいて[バイオーム][Biome]を判定するクラスです。 + * + * 参照 : [Minecraft - Ingredient][net.minecraft.world.item.crafting.Ingredient] + * @author Hiiragi Tsubasa + * @since 26.1.7 + */ +@JvmRecord +data class HTBiomeCondition(val biomes: HolderSet) : Predicate> { + companion object { + @JvmField + val CODEC: Codec = Biome.LIST_CODEC.xmap(::HTBiomeCondition, HTBiomeCondition::biomes) + + @JvmField + val STREAM_CODEC: StreamCodec = + HTStreamCodecs.holderSet(Registries.BIOME).map(::HTBiomeCondition, HTBiomeCondition::biomes) + } + + init { + if (this@HTBiomeCondition.biomes.isImmediatelyResolvable) { + this@HTBiomeCondition.biomes.unwrap().ifRight { holders: List> -> + if (holders.isEmpty()) { + throw UnsupportedOperationException("Biomes can't be empty") + } + } + } + } + + val isEmpty: Boolean get() = this@HTBiomeCondition.biomes.size() == 0 + + override fun test(biome: Holder): Boolean = biome in this@HTBiomeCondition.biomes + + /** + * 一致するバイオームのプレビュー + */ + val display: SlotDisplay get() = this@HTBiomeCondition.biomes.unwrap().map( + { tagKey: TagKey -> createDisplay("#${tagKey.location()}") }, + { holders: Iterable> -> + holders + .mapNotNull { it.key?.identifier()?.toString() } + .map(::createDisplay) + .let(::SlotDisplay) + } + ) + + private fun createDisplay(biomeKey: String): SlotDisplay = biomeKey + .toText() + .let(HTCommonTranslation.BIOME::translate) + .let { ItemStackTemplate(Items.COMPASS, buildDataPatch { set(DataComponents.ITEM_NAME, it) }) } + .let(SlotDisplay::ItemStackSlotDisplay) +} diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTFluidIngredient.kt b/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTFluidIngredient.kt index 1c227a0c19..5361f52550 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTFluidIngredient.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTFluidIngredient.kt @@ -26,7 +26,7 @@ import java.util.Optional */ @JvmRecord data class HTFluidIngredient(val unsized: FluidIngredient, val amount: Int) : - HTIngredient, + HTIngredient, HTStackPreview { companion object { @JvmField @@ -55,9 +55,9 @@ data class HTFluidIngredient(val unsized: FluidIngredient, val amount: Int) : override fun testOnlyType(instance: FluidInstance): Boolean = HTIngredientHelper.unwrap(instance).let(unsized::test) - override fun getRequiredAmount(instance: FluidInstance): Int = when (testOnlyType(instance)) { - true -> amount - false -> 0 + override fun getMatchingStack(instance: FluidInstance): FluidInstance = when (testOnlyType(instance)) { + true -> HTIngredientHelper.copyWithAmount(instance, amount) + false -> FluidStack.EMPTY } override fun getPreviewStacks(contextMap: ContextMap): List = unsized diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTIngredient.kt b/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTIngredient.kt index 2cd4eeee12..21c1886929 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTIngredient.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTIngredient.kt @@ -1,19 +1,18 @@ package hiiragi283.lib.recipe.ingredient import net.minecraft.core.TypedInstance -import net.minecraft.core.component.DataComponentGetter import java.util.function.Predicate /** * Hiiragi Seriesで使用される,レシピの材料を判定するインターフェースです。 * * 参照 : [Mekanism - InputIngredient](https://github.com/mekanism/Mekanism/blob/26.1/src/api/java/mekanism/api/recipes/ingredients/InputIngredient.java) - * @param INSTANCE 材料の種類のクラス + * @param TYPE 材料の種類のクラス + * @param INSTANCE 材料の種類を保持するインスタンスのクラス * @author Hiiragi Tsubasa * @since 26.1.0 */ -interface HTIngredient : - Predicate where INSTANCE : TypedInstance<*>, INSTANCE : DataComponentGetter { +interface HTIngredient> : Predicate { /** * 条件を満たしているか判定します。 */ @@ -25,7 +24,7 @@ interface HTIngredient : fun testOnlyType(instance: INSTANCE): Boolean /** - * 消費される数量を取得します。 + * 消費される入力を取得します。 */ - fun getRequiredAmount(instance: INSTANCE): Int + fun getMatchingStack(instance: INSTANCE): INSTANCE } diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTIngredientHelper.kt b/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTIngredientHelper.kt index 819f0dd132..958b924cc9 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTIngredientHelper.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTIngredientHelper.kt @@ -38,6 +38,16 @@ data object HTIngredientHelper { else -> instance.typeHolder().isEmpty || instance.amount() <= 0 } + /** + * @since 26.1.7 + */ + @JvmStatic + fun copyWithAmount(instance: FluidInstance, newAmount: Int): FluidInstance = when (instance) { + is FluidStack -> instance.copyWithAmount(newAmount) + is FluidStackTemplate -> instance.withAmount(newAmount) + else -> FluidStack(instance.typeHolder(), newAmount) + } + // Item // /** @@ -53,11 +63,20 @@ data object HTIngredientHelper { /** * [ItemInstance]が空かどうか判定します。 */ - @JvmName("isEmptyItem") @JvmStatic fun isEmpty(instance: ItemInstance): Boolean = when (instance) { is ItemStack -> instance.isEmpty is ItemStackTemplate -> false else -> instance.typeHolder().isAir || instance.count() <= 0 } + + /** + * @since 26.1.7 + */ + @JvmStatic + fun copyWithCount(instance: ItemInstance, newCount: Int): ItemInstance = when (instance) { + is ItemStack -> instance.copyWithCount(newCount) + is ItemStackTemplate -> instance.withCount(newCount) + else -> ItemStack(instance.typeHolder(), newCount) + } } diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTItemIngredient.kt b/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTItemIngredient.kt index 0c53b986d0..369c271854 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTItemIngredient.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTItemIngredient.kt @@ -25,7 +25,7 @@ import java.util.Optional */ @JvmRecord data class HTItemIngredient(val unsized: Ingredient, val count: Int) : - HTIngredient, + HTIngredient, HTStackPreview { companion object { @JvmField @@ -54,9 +54,9 @@ data class HTItemIngredient(val unsized: Ingredient, val count: Int) : override fun testOnlyType(instance: ItemInstance): Boolean = HTIngredientHelper.unwrap(instance).let(unsized::test) - override fun getRequiredAmount(instance: ItemInstance): Int = when (testOnlyType(instance)) { - true -> count - false -> 0 + override fun getMatchingStack(instance: ItemInstance): ItemInstance = when (testOnlyType(instance)) { + true -> HTIngredientHelper.copyWithCount(instance, count) + false -> ItemStack.EMPTY } override fun getPreviewStacks(contextMap: ContextMap): List = unsized diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTMaterialTagsIngredient.kt b/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTMaterialTagsIngredient.kt new file mode 100644 index 0000000000..a19c247a38 --- /dev/null +++ b/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTMaterialTagsIngredient.kt @@ -0,0 +1,52 @@ +package hiiragi283.lib.recipe.ingredient + +import com.mojang.serialization.MapCodec +import hiiragi283.lib.collection.Nel +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 io.netty.buffer.ByteBuf +import net.minecraft.core.Holder +import net.minecraft.core.registries.BuiltInRegistries +import net.minecraft.core.registries.Registries +import net.minecraft.network.codec.StreamCodec +import net.minecraft.tags.TagKey +import net.minecraft.world.item.Item +import net.minecraft.world.item.ItemStack +import net.neoforged.neoforge.common.crafting.ICustomIngredient +import net.neoforged.neoforge.common.crafting.IngredientType +import java.util.stream.Stream + +/** + * @since 26.1.7 + * @author Hiiragi Tsubasa + */ +@JvmRecord +data class HTMaterialTagsIngredient(val tags: Nel>) : ICustomIngredient { + companion object { + @JvmField + val CODEC: MapCodec = HTCodecs.tagKey(Registries.ITEM, false) + .compactNelFieldOf("tag", "tags") + .xmap(::HTMaterialTagsIngredient, HTMaterialTagsIngredient::tags) + + @JvmField + val STREAM_CODEC: StreamCodec = HTStreamCodecs.tagKey(Registries.ITEM) + .nelOf() + .map(::HTMaterialTagsIngredient, HTMaterialTagsIngredient::tags) + + @JvmField + val TYPE: IngredientType = IngredientType(CODEC, STREAM_CODEC) + } + + override fun test(stack: ItemStack): Boolean = tags.any(stack::`is`) + + override fun items(): Stream> = tags.stream() + .map(BuiltInRegistries.ITEM::get) + .flatMap { it.stream() } + .flatMap { it.stream() } + + override fun isSimple(): Boolean = true + + override fun getType(): IngredientType<*> = TYPE +} diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTStackPreview.kt b/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTStackPreview.kt index 68d5ffd77a..9f443c3167 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTStackPreview.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTStackPreview.kt @@ -8,7 +8,7 @@ import net.minecraft.util.context.ContextMap * @author Hiiragi Tsubasa * @since 26.1.0 */ -interface HTStackPreview { +fun interface HTStackPreview { /** * 一致する材料のプレビューを取得します。 */ diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/lookup/HTRecipeLookup.kt b/src/lib/kotlin/hiiragi283/lib/recipe/lookup/HTRecipeLookup.kt index 4cc173dd3f..042fb2fb05 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/lookup/HTRecipeLookup.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/lookup/HTRecipeLookup.kt @@ -46,3 +46,17 @@ fun interface HTRecipeLookup { ): Sequence> = this.recipeMap.byType(recipeType).asSequence().map { it.kotlin } } } + +/** + * @author Hiiragi Tsubasa + * @since 26.1.7 + */ +fun HTRecipeLookup.map(transform: (T) -> R): HTRecipeLookup = + HTRecipeLookup { context -> this.getAllRecipes(context).map { it.map(transform) } } + +/** + * @author Hiiragi Tsubasa + * @since 26.1.7 + */ +fun HTRecipeLookup.mapNotNull(transform: (T) -> R?): HTRecipeLookup = + HTRecipeLookup { context -> this.getAllRecipes(context).mapNotNull { it.mapNotNull(transform) } } diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/result/HTItemAndFluidResult.kt b/src/lib/kotlin/hiiragi283/lib/recipe/result/HTItemAndFluidResult.kt index 82ae74f6b4..6fb8172e3c 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/result/HTItemAndFluidResult.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/result/HTItemAndFluidResult.kt @@ -1,6 +1,5 @@ package hiiragi283.lib.recipe.result -import hiiragi283.lib.util.Either import hiiragi283.lib.util.Ior import net.minecraft.world.item.ItemStack import net.neoforged.neoforge.fluids.FluidStack @@ -13,21 +12,37 @@ import java.util.Objects */ @JvmRecord data class HTItemAndFluidResult(val item: ItemStack, val fluid: FluidStack) { - constructor(item: ItemStack) : this(item, FluidStack.EMPTY) - - constructor(fluid: FluidStack) : this(ItemStack.EMPTY, fluid) - - constructor(pair: Pair) : this(pair.first, pair.second) - - constructor(either: Either) : this( - either.leftOrNull() ?: ItemStack.EMPTY, - either.getOrNull() ?: FluidStack.EMPTY - ) - - constructor(ior: Ior) : this( - ior.getLeft() ?: ItemStack.EMPTY, - ior.getRight() ?: FluidStack.EMPTY - ) + 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) diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/result/HTItemResult.kt b/src/lib/kotlin/hiiragi283/lib/recipe/result/HTItemResult.kt index 69a215797e..5634aa29c1 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/result/HTItemResult.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/result/HTItemResult.kt @@ -236,10 +236,44 @@ data class HTItemResult(val entry: Entry, val count: Int) : HTRecipeResult -> buildItemEnchantments { set(holder, holder.value().maxLevel) } } .unwrap() .let { buildDataPatch { set(DataComponents.STORED_ENCHANTMENTS, it) } } - .let { ItemStack(Items.ENCHANTED_BOOK, 1, it) } + .let { ItemStack(Items.ENCHANTED_BOOK, it) } override fun getId(): Identifier? = content.leftOrNull()?.key?.identifier() } + + /** + * @since 26.1.7 + */ + @JvmRecord + data class WithFallbackEntry(val base: Entry, val fallback: Entry) : Entry { + companion object { + @JvmField + val CODEC: MapCodec = HTCodecs.recordMap { instance -> + instance.group( + Entry.MAP_CODEC.fieldOf("base").forGetter(WithFallbackEntry::base), + Entry.MAP_CODEC.fieldOf("fallback").forGetter(WithFallbackEntry::fallback) + ).apply(instance, ::WithFallbackEntry) + } + + @JvmField + val STREAM_CODEC: StreamCodec = StreamCodec.composite( + Entry.STREAM_CODEC, + WithFallbackEntry::base, + Entry.STREAM_CODEC, + WithFallbackEntry::fallback, + ::WithFallbackEntry + ) + + @JvmField + val TYPE: HTItemResultType = HTItemResultType(CODEC, STREAM_CODEC) + } + + override fun type(): HTItemResultType<*> = TYPE + + override fun create(): ItemStack = base.create().takeUnless(ItemStack::isEmpty) ?: fallback.create() + + override fun getId(): Identifier? = base.getId() ?: fallback.getId() + } } // Extensions // diff --git a/src/lib/kotlin/hiiragi283/lib/registry/HTDeferredBlockAndItem.kt b/src/lib/kotlin/hiiragi283/lib/registry/HTDeferredBlockAndItem.kt index acb8658421..0ad706e5ad 100644 --- a/src/lib/kotlin/hiiragi283/lib/registry/HTDeferredBlockAndItem.kt +++ b/src/lib/kotlin/hiiragi283/lib/registry/HTDeferredBlockAndItem.kt @@ -2,7 +2,7 @@ package hiiragi283.lib.registry import hiiragi283.lib.item.HTItemInstanceLike import hiiragi283.lib.resource.BlockItemKey -import hiiragi283.lib.resource.HTBlockItemWithKey +import hiiragi283.lib.resource.HTValueWithKey import hiiragi283.lib.text.HTHasText import hiiragi283.lib.text.HTHasTranslationKey import net.minecraft.resources.Identifier @@ -10,6 +10,7 @@ import net.minecraft.world.item.BlockItem import net.minecraft.world.item.Item import net.minecraft.world.level.ItemLike import net.minecraft.world.level.block.Block +import net.minecraft.world.level.block.state.BlockState /** * シンプルな[HTBasicDeferredBlockAndItem]のエイリアスです。 @@ -34,9 +35,9 @@ typealias HTBasicDeferredBlockAndItem = HTDeferredBlockAndItem( - override val block: HTDeferredBlock, - override val item: HTDeferredItem -) : HTBlockItemWithKey, + val block: HTDeferredBlock, + val item: HTDeferredItem +) : HTValueWithKey by block, HTHasTranslationKey by item, HTHasText by item, ItemLike by item, @@ -47,4 +48,14 @@ data class HTDeferredBlockAndItem( constructor(key: BlockItemKey) : this(HTDeferredBlock(key.block), HTDeferredItem(key.item)) constructor(id: Identifier) : this(HTDeferredBlock(id), HTDeferredItem(id)) + + /** + * @since 26.1.7 + */ + val blockItemKey = BlockItemKey(block.key, item.key) + + /** + * @since 26.1.7 + */ + val defaultState: BlockState get() = block.defaultState } diff --git a/src/lib/kotlin/hiiragi283/lib/registry/HTDeferredBlockAndItemRegister.kt b/src/lib/kotlin/hiiragi283/lib/registry/HTDeferredBlockAndItemRegister.kt index 36ec672bf1..0c208b8c50 100644 --- a/src/lib/kotlin/hiiragi283/lib/registry/HTDeferredBlockAndItemRegister.kt +++ b/src/lib/kotlin/hiiragi283/lib/registry/HTDeferredBlockAndItemRegister.kt @@ -18,7 +18,7 @@ import net.neoforged.bus.api.IEventBus class HTDeferredBlockAndItemRegister( private val blockRegister: HTDeferredBlockRegister, private val itemRegister: HTDeferredItemRegister -) { +) : RegistryAliasAcceptor { constructor(namespace: String) : this(HTDeferredBlockRegister(namespace)) constructor(blockRegister: HTDeferredBlockRegister) : this( @@ -26,18 +26,12 @@ class HTDeferredBlockAndItemRegister( HTDeferredItemRegister(blockRegister.namespace) ) - /** - * @since 26.1.3 - */ - fun addAlias(from: String, to: String) { + override fun addAlias(from: String, to: String) { blockRegister.addAlias(from, to) itemRegister.addAlias(from, to) } - /** - * @since 26.1.3 - */ - fun addAlias(from: Identifier, to: Identifier) { + override fun addAlias(from: Identifier, to: Identifier) { blockRegister.addAlias(from, to) itemRegister.addAlias(from, to) } diff --git a/src/lib/kotlin/hiiragi283/lib/registry/HTDeferredHolder.kt b/src/lib/kotlin/hiiragi283/lib/registry/HTDeferredHolder.kt index 851f16cfb8..8997c70ece 100644 --- a/src/lib/kotlin/hiiragi283/lib/registry/HTDeferredHolder.kt +++ b/src/lib/kotlin/hiiragi283/lib/registry/HTDeferredHolder.kt @@ -3,6 +3,7 @@ package hiiragi283.lib.registry import hiiragi283.lib.resource.HTValueWithKey import hiiragi283.lib.util.Ior import hiiragi283.lib.util.fold +import net.minecraft.core.TypedInstance import net.minecraft.resources.Identifier import net.minecraft.resources.ResourceKey import net.neoforged.neoforge.registries.DeferredHolder @@ -28,6 +29,11 @@ open class HTDeferredHolder : constructor(key: RegistryKey, id: Identifier) : super(key.createKey(id)) + /** + * @since 26.1.7 + */ + 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) }) diff --git a/src/lib/kotlin/hiiragi283/lib/registry/HTDeferredRegister.kt b/src/lib/kotlin/hiiragi283/lib/registry/HTDeferredRegister.kt index b8fd8f2cec..d6d5185560 100644 --- a/src/lib/kotlin/hiiragi283/lib/registry/HTDeferredRegister.kt +++ b/src/lib/kotlin/hiiragi283/lib/registry/HTDeferredRegister.kt @@ -16,7 +16,8 @@ import java.util.function.Supplier * @since 26.1.0 */ open class HTDeferredRegister(registryKey: RegistryKey, namespace: String) : - DeferredRegister(registryKey, namespace) { + DeferredRegister(registryKey, namespace), + RegistryAliasAcceptor { /** * [名前空間][namespace]に基づいて,[パス][path]から[ID][Identifier]を作成します。 */ @@ -32,12 +33,7 @@ open class HTDeferredRegister(registryKey: RegistryKey, namespace: S */ fun createKey(id: Identifier): ResourceKey = this.registryKey.createKey(id) - /** - * [名前空間][namespace]に基づいて,IDのエイリアスを登録します。 - * @param from 変更前のIDの[パス][Identifier.getPath] - * @param to 変更後のIDの[パス][Identifier.getPath] - */ - fun addAlias(from: String, to: String) { + override fun addAlias(from: String, to: String) { this.addAlias(createId(from), createId(to)) } diff --git a/src/lib/kotlin/hiiragi283/lib/registry/HTFluidContent.kt b/src/lib/kotlin/hiiragi283/lib/registry/HTFluidContent.kt index 88ed7e73d1..bc0fc653cc 100644 --- a/src/lib/kotlin/hiiragi283/lib/registry/HTFluidContent.kt +++ b/src/lib/kotlin/hiiragi283/lib/registry/HTFluidContent.kt @@ -2,6 +2,7 @@ package hiiragi283.lib.registry import hiiragi283.lib.fluid.HTFluidInstanceLike import hiiragi283.lib.resource.HTSimpleValueWithKey +import net.minecraft.core.TypedInstance import net.minecraft.core.component.DataComponentPatch import net.minecraft.tags.TagKey import net.minecraft.world.item.Item @@ -35,6 +36,11 @@ sealed class HTFluidContent( */ fun getFluidType(): FluidType = typeHolder.get() + /** + * @since 26.1.7 + */ + fun isOf(instance: TypedInstance): Boolean = sourceHolder.isOf(instance) + /** * 新しい[FluidStackTemplate]のインスタンスを作成します。 */ diff --git a/src/lib/kotlin/hiiragi283/lib/registry/HTFluidContentRegister.kt b/src/lib/kotlin/hiiragi283/lib/registry/HTFluidContentRegister.kt index 939af49cea..4863755c02 100644 --- a/src/lib/kotlin/hiiragi283/lib/registry/HTFluidContentRegister.kt +++ b/src/lib/kotlin/hiiragi283/lib/registry/HTFluidContentRegister.kt @@ -24,8 +24,6 @@ import net.minecraft.world.level.material.Fluid import net.neoforged.bus.api.IEventBus import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent import net.neoforged.neoforge.fluids.BaseFlowingFluid -import net.neoforged.neoforge.fluids.BaseFlowingFluid.Flowing -import net.neoforged.neoforge.fluids.BaseFlowingFluid.Source import net.neoforged.neoforge.fluids.FluidType import net.neoforged.neoforge.transfer.fluid.DispenseFluidContainer @@ -34,7 +32,7 @@ import net.neoforged.neoforge.transfer.fluid.DispenseFluidContainer * @author Hiiragi Tsubasa * @since 26.1.0 */ -class HTFluidContentRegister(modId: String) { +class HTFluidContentRegister(modId: String) : RegistryAliasAcceptor { private val fluidRegister: HTDeferredRegister = HTDeferredRegister(Registries.FLUID, modId) private val typeRegister = HTDeferredFluidTypeRegister(modId) private val blockRegister = HTDeferredBlockRegister(modId) @@ -79,10 +77,7 @@ class HTFluidContentRegister(modId: String) { */ operator fun get(key: ResourceKey): HTFluidContent? = contentsCache[key] - /** - * @since 26.1.5 - */ - fun addAlias(from: Identifier, to: Identifier) { + override fun addAlias(from: Identifier, to: Identifier) { typeRegister.addAlias(from, to) fluidRegister.addAlias(from, to) @@ -93,7 +88,7 @@ class HTFluidContentRegister(modId: String) { itemRegister.addAlias(from.withSuffix("_bucket"), to.withSuffix("_bucket")) } - fun addAlias(from: String, to: String) { + override fun addAlias(from: String, to: String) { typeRegister.addAlias(from, to) fluidRegister.addAlias(from, to) @@ -158,7 +153,7 @@ class HTFluidContentRegister(modId: String) { lateinit var properties: FluidType.Properties /** - * [FluidType]をを作るブロック + * [FluidType]を作るブロック */ var typeFactory: (FluidType.Properties) -> FluidType = ::FluidType @@ -261,12 +256,12 @@ class HTFluidContentRegister(modId: String) { /** * 液体源を作るブロック */ - var sourceFactory: (BaseFlowingFluid.Properties) -> Source = BaseFlowingFluid::Source + var sourceFactory: (BaseFlowingFluid.Properties) -> BaseFlowingFluid.Source = BaseFlowingFluid::Source /** * 液体流を作るブロック */ - var flowingFactory: (BaseFlowingFluid.Properties) -> Flowing = BaseFlowingFluid::Flowing + var flowingFactory: (BaseFlowingFluid.Properties) -> BaseFlowingFluid.Flowing = BaseFlowingFluid::Flowing /** * 液体ブロックを作成するブロック @@ -290,7 +285,7 @@ class HTFluidContentRegister(modId: String) { ) { prop: BlockBehaviour.Properties -> blockFactory!!(sourceHolder.get(), prop) } } // Fluid - val flowingHolder: HTDeferredHolder = + val flowingHolder: HTDeferredHolder = HTDeferredHolder(fluidRegister.createKey("flowing_$name")) val fluidProperties: BaseFlowingFluid.Properties = BaseFlowingFluid .Properties(typeHolder, sourceHolder, flowingHolder) diff --git a/src/lib/kotlin/hiiragi283/lib/registry/HTPotionContentRegister.kt b/src/lib/kotlin/hiiragi283/lib/registry/HTPotionContentRegister.kt index 85f52bf98c..772cd4bada 100644 --- a/src/lib/kotlin/hiiragi283/lib/registry/HTPotionContentRegister.kt +++ b/src/lib/kotlin/hiiragi283/lib/registry/HTPotionContentRegister.kt @@ -4,6 +4,7 @@ import it.unimi.dsi.fastutil.objects.Object2ObjectLinkedOpenHashMap import it.unimi.dsi.fastutil.objects.ObjectLinkedOpenHashSet import net.minecraft.core.Holder import net.minecraft.core.registries.Registries +import net.minecraft.resources.Identifier import net.minecraft.resources.ResourceKey import net.minecraft.world.effect.MobEffect import net.minecraft.world.effect.MobEffectInstance @@ -17,7 +18,7 @@ private typealias PotionEffectProvider = () -> Array * @author Hiiragi Tsubasa * @since 26.1.0 */ -class HTPotionContentRegister(modId: String) { +class HTPotionContentRegister(modId: String) : RegistryAliasAcceptor { private val register: HTDeferredRegister = HTDeferredRegister(Registries.POTION, modId) /** @@ -39,12 +40,18 @@ class HTPotionContentRegister(modId: String) { */ operator fun get(key: ResourceKey): HTPotionContent? = contentsCache[key] - fun addAlias(from: String, to: String) { + override fun addAlias(from: String, to: String) { register.addAlias(from, to) register.addAlias("long_$from", "long_$to") register.addAlias("strong_$from", "strong_$to") } + override fun addAlias(from: Identifier, to: Identifier) { + register.addAlias(from, to) + register.addAlias(from.withPrefix("long_"), to.withPrefix("long_")) + register.addAlias(from.withPrefix("strong_"), to.withPrefix("strong_")) + } + /** * [IEventBus]に登録します。 */ diff --git a/src/lib/kotlin/hiiragi283/lib/registry/HolderGetters.kt b/src/lib/kotlin/hiiragi283/lib/registry/HolderGetters.kt index 16aae60eb6..a04ab24f39 100644 --- a/src/lib/kotlin/hiiragi283/lib/registry/HolderGetters.kt +++ b/src/lib/kotlin/hiiragi283/lib/registry/HolderGetters.kt @@ -2,10 +2,12 @@ package hiiragi283.lib.registry import net.minecraft.core.Holder import net.minecraft.core.HolderGetter +import net.minecraft.core.HolderLookup import net.minecraft.core.HolderSet import net.minecraft.resources.ResourceKey import net.minecraft.tags.TagKey import kotlin.jvm.optionals.getOrNull +import kotlin.streams.asSequence // HolderGetter // @@ -18,3 +20,15 @@ fun HolderGetter.getOrNull(key: TagKey): HolderSet.Named? = t fun HolderGetter.Provider.getOrNull(key: ResourceKey): Holder.Reference? = this.get(key).getOrNull() fun HolderGetter.Provider.getOrNull(key: TagKey): HolderSet.Named? = this.get(key).getOrNull() + +// HolderGetter.Provider // + +/** + * @since 26.1.7 + */ +fun HolderLookup.asHolderSequence(): Sequence> = this.listElements().asSequence() + +/** + * @since 26.1.7 + */ +fun HolderLookup.asKeySequence(): Sequence> = this.listElementIds().asSequence() diff --git a/src/lib/kotlin/hiiragi283/lib/registry/IntrusiveWrapper.kt b/src/lib/kotlin/hiiragi283/lib/registry/IntrusiveWrapper.kt deleted file mode 100644 index 24a076c072..0000000000 --- a/src/lib/kotlin/hiiragi283/lib/registry/IntrusiveWrapper.kt +++ /dev/null @@ -1,54 +0,0 @@ -@file:Suppress("DEPRECATION") - -package hiiragi283.lib.registry - -import hiiragi283.lib.resource.HTValueWithKey -import hiiragi283.lib.util.Ior -import net.minecraft.core.Holder -import net.minecraft.resources.ResourceKey -import net.minecraft.world.entity.Entity -import net.minecraft.world.entity.EntityType -import net.minecraft.world.item.Item -import net.minecraft.world.level.block.Block -import net.minecraft.world.level.material.Fluid - -/** - * @suppress - */ -private class IntrusiveWrapper(private val value: T, private val holderGetter: (T) -> Holder) : - HTValueWithKey { - override fun unwrapWithKey(): Ior, T> = Ior.Both(holderGetter(value).getKeyOrThrow(), value) - - override fun toString(): String = "IntrusiveWrapper(value=$value)" -} - -/** - * この[Block][this]を[HTValueWithKey]に変換します。 - * @author Hiiragi Tsubasa - * @since 26.1.0 - */ -fun BLOCK.asKeyOrValue(): HTValueWithKey = - IntrusiveWrapper(this, Block::builtInRegistryHolder) - -/** - * この[EntityType][this]を[HTValueWithKey]に変換します。 - * @author Hiiragi Tsubasa - * @since 26.1.0 - */ -fun EntityType.asKeyOrValue(): HTValueWithKey, EntityType> = - IntrusiveWrapper(this, EntityType<*>::builtInRegistryHolder) - -/** - * この[Fluid][this]を[HTValueWithKey]に変換します。 - * @author Hiiragi Tsubasa - * @since 26.1.0 - */ -fun FLUID.asKeyOrValue(): HTValueWithKey = - IntrusiveWrapper(this, Fluid::builtInRegistryHolder) - -/** - * この[Item][this]を[HTValueWithKey]に変換します。 - * @author Hiiragi Tsubasa - * @since 26.1.0 - */ -fun ITEM.asKeyOrValue(): HTValueWithKey = IntrusiveWrapper(this, Item::builtInRegistryHolder) diff --git a/src/lib/kotlin/hiiragi283/lib/registry/RegistryAliasAcceptor.kt b/src/lib/kotlin/hiiragi283/lib/registry/RegistryAliasAcceptor.kt new file mode 100644 index 0000000000..a6c5c846d0 --- /dev/null +++ b/src/lib/kotlin/hiiragi283/lib/registry/RegistryAliasAcceptor.kt @@ -0,0 +1,24 @@ +package hiiragi283.lib.registry + +import net.minecraft.resources.Identifier + +/** + * IDのエイリアスを登録できるレジストリに実装されるインターフェースです。 + * @author Hiiragi Tsubasa + * @since 26.1.7 + */ +interface RegistryAliasAcceptor { + /** + * IDのエイリアスを登録します。 + * @param from 変更前のIDの[パス][Identifier.getPath] + * @param to 変更後のIDの[パス][Identifier.getPath] + */ + fun addAlias(from: String, to: String) + + /** + * IDのエイリアスを登録します。 + * @param from 変更前のIDの + * @param to 変更後のIDの + */ + fun addAlias(from: Identifier, to: Identifier) +} diff --git a/src/lib/kotlin/hiiragi283/lib/resource/HTBlockItemWithKey.kt b/src/lib/kotlin/hiiragi283/lib/resource/HTBlockItemWithKey.kt deleted file mode 100644 index 5bdff5f2c3..0000000000 --- a/src/lib/kotlin/hiiragi283/lib/resource/HTBlockItemWithKey.kt +++ /dev/null @@ -1,27 +0,0 @@ -package hiiragi283.lib.resource - -import net.minecraft.resources.ResourceKey -import net.minecraft.world.item.Item -import net.minecraft.world.level.block.Block - -/** - * シンプルな[HTBlockItemWithKey]のエイリアスです。 - * @author Hiiragi Tsubasa - * @since 26.1.4 - */ -typealias HTSimpleBlockItemWithKey = HTBlockItemWithKey - -/** - * @author Hiiragi Tsubasa - * @since 26.1.4 - */ -interface HTBlockItemWithKey { - val block: HTValueWithKey - - val item: HTValueWithKey - - val keyOrNull: BlockItemKey? get() = block.keyOrNull?.let { blockKey: ResourceKey -> - item.keyOrNull?.let { itemKey: ResourceKey -> BlockItemKey(blockKey, itemKey) } - } - val keyOrThrow: BlockItemKey get() = BlockItemKey(block.keyOrThrow, item.keyOrThrow) -} diff --git a/src/lib/kotlin/hiiragi283/lib/resource/HTValueAndKey.kt b/src/lib/kotlin/hiiragi283/lib/resource/HTValueAndKey.kt new file mode 100644 index 0000000000..c0836be2c7 --- /dev/null +++ b/src/lib/kotlin/hiiragi283/lib/resource/HTValueAndKey.kt @@ -0,0 +1,20 @@ +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/Identifiers.kt b/src/lib/kotlin/hiiragi283/lib/resource/Identifiers.kt index b7dbf59976..d6726bbb4d 100644 --- a/src/lib/kotlin/hiiragi283/lib/resource/Identifiers.kt +++ b/src/lib/kotlin/hiiragi283/lib/resource/Identifiers.kt @@ -5,6 +5,7 @@ package hiiragi283.lib.resource import hiiragi283.lib.util.Identity import net.minecraft.resources.Identifier import net.minecraft.resources.ResourceKey +import net.neoforged.neoforge.common.Tags // Identifier // @@ -73,16 +74,36 @@ val Identifier.debugPath: String get() = this.path.replace('/', '_') /** * この[ResourceKey]を翻訳キーに変換します。 + * @see Tags.getTagTranslationKey * @author Hiiragi Tsubasa * @since 26.1.0 */ -inline fun ResourceKey<*>.toLanguageKey(): String = - this.identifier().toLanguageKey(this.registryKey().identifier().path) +inline fun ResourceKey<*>.toLanguageKey(): String = buildString { + val registryId: Identifier = this@toLanguageKey.registry() + val keyId: Identifier = this@toLanguageKey.identifier() + + append(registryId.toShortLanguageKey().replace('/', '.')) + append('.') + append(keyId.namespace) + append('.') + append(keyId.path.replace('/', '.')) +} /** * この[ResourceKey]を翻訳キーに変換します。 + * @see Tags.getTagTranslationKey * @author Hiiragi Tsubasa * @since 26.1.0 */ -inline fun ResourceKey<*>.toLanguageKey(suffix: String): String = - this.identifier().toLanguageKey(this.registryKey().identifier().path, suffix) +inline fun ResourceKey<*>.toLanguageKey(suffix: String): String = buildString { + val registryId: Identifier = this@toLanguageKey.registry() + val keyId: Identifier = this@toLanguageKey.identifier() + + append(registryId.toShortLanguageKey().replace('/', '.')) + append('.') + append(keyId.namespace) + append('.') + append(keyId.path.replace('/', '.')) + append('.') + append(suffix) +} diff --git a/src/lib/kotlin/hiiragi283/lib/serialization/codec/Codecs.kt b/src/lib/kotlin/hiiragi283/lib/serialization/codec/Codecs.kt index 33adcb2aed..bdc443da58 100644 --- a/src/lib/kotlin/hiiragi283/lib/serialization/codec/Codecs.kt +++ b/src/lib/kotlin/hiiragi283/lib/serialization/codec/Codecs.kt @@ -1,77 +1,100 @@ package hiiragi283.lib.serialization.codec import com.mojang.serialization.Codec +import com.mojang.serialization.MapCodec import hiiragi283.lib.collection.Nel +import hiiragi283.lib.collection.nelOf import hiiragi283.lib.collection.toNel +import hiiragi283.lib.util.Either import hiiragi283.lib.util.identity +import hiiragi283.lib.util.unwrap import net.minecraft.util.ExtraCodecs // List // /** - * この[Codec][this]を[List]の[Codec]に変換します。 - * @param range リストの[長さ][List.size]の範囲 - * @return リストの[長さ][List.size]が制限された[List]の[Codec] + * この[Codec][this]を,要素が一つの場合はそのままコーデックする[List]の[Codec]に変換します。 * @author Hiiragi Tsubasa * @since 26.1.0 */ -fun Codec.listOf(range: IntRange): Codec> = this.listOf(range.first, range.last) +fun Codec.listOrElement(): Codec> = ExtraCodecs.compactListCodec(this) /** * この[Codec][this]を,要素が一つの場合はそのままコーデックする[List]の[Codec]に変換します。 + * @param min リストの[長さ][List.size]の最小値 + * @param max リストの[長さ][List.size]の最大値 + * @return リストの[長さ][List.size]が制限された[List]の[Codec] * @author Hiiragi Tsubasa * @since 26.1.0 */ -fun Codec.listOrElement(): Codec> = ExtraCodecs.compactListCodec(this) +fun Codec.listOrElement(min: Int, max: Int): Codec> = + ExtraCodecs.compactListCodec(this, this.listOf(min, max)) /** - * この[Codec][this]を,要素が一つの場合はそのままコーデックする[List]の[Codec]に変換します。 - * @param range リストの[長さ][List.size]の範囲 - * @return リストの[長さ][List.size]が制限された[List]の[Codec] + * この[Codec][this]を[List]の[MapCodec]に変換します。 + * @param singleName 要素が一つの場合のキーの名前 + * @param listName 要素数が0または2以上の場合の名前 * @author Hiiragi Tsubasa - * @since 26.1.0 + * @since 26.1.7 */ -fun Codec.listOrElement(range: IntRange): Codec> = this.listOrElement(range.first, range.last) +fun Codec.compactListFieldOf(singleName: String, listName: String): MapCodec> = HTCodecs + .mapEither(this.listOf().fieldOf(listName), this.fieldOf(singleName)) + .xmap( + { either: Either, A> -> either.map(::listOf).unwrap() }, + { list: List -> list.singleOrNull()?.let { Either.Right(it) } ?: Either.Left(list) } + ) /** - * この[Codec][this]を,要素が一つの場合はそのままコーデックする[List]の[Codec]に変換します。 - * @param min リストの[長さ][List.size]の最小値 - * @param max リストの[長さ][List.size]の最大値 - * @return リストの[長さ][List.size]が制限された[List]の[Codec] + * この[Codec][this]を[List]の[MapCodec]に変換します。 + * @param singleName 要素が一つの場合のキーの名前 + * @param listName 要素数が0または2以上の場合の名前 * @author Hiiragi Tsubasa - * @since 26.1.0 + * @since 26.1.7 */ -fun Codec.listOrElement(min: Int, max: Int): Codec> = - ExtraCodecs.compactListCodec(this, this.listOf(min, max)) +fun Codec.compactListFieldOf(singleName: String, listName: String, min: Int, max: Int): MapCodec> = + HTCodecs + .mapEither(this.listOf(min, max).fieldOf(listName), this.fieldOf(singleName)) + .xmap( + { either: Either, A> -> either.map(::listOf).unwrap() }, + { list: List -> list.singleOrNull()?.let { Either.Right(it) } ?: Either.Left(list) } + ) // NonEmptyList // /** - * この[Codec][this]を,要素が一つの場合はそのままコーデックする[Nel]の[Codec]に変換します。 + * この[Codec][this]を[Nel]の[Codec]に変換します。 * @param max リストの[長さ][List.size]の最大値 * @return リストの[長さ][List.size]が制限された[List]の[Codec] * @author Hiiragi Tsubasa * @since 26.1.6 */ -fun Codec.nelOrElement(max: Int = Int.MAX_VALUE): Codec> = - this.listOrElement(1, max).xmap(List::toNel, identity()) +fun Codec.nelOf(max: Int = Int.MAX_VALUE): Codec> = + this.listOf(1, max).xmap(List::toNel, identity()) /** - * この[Codec][this]を[Nel]の[Codec]に変換します。 + * この[Codec][this]を,要素が一つの場合はそのままコーデックする[Nel]の[Codec]に変換します。 * @param max リストの[長さ][List.size]の最大値 * @return リストの[長さ][List.size]が制限された[List]の[Codec] * @author Hiiragi Tsubasa * @since 26.1.6 */ -fun Codec.nelOf(max: Int = Int.MAX_VALUE): Codec> = - this.listOf(1, max).xmap(List::toNel, identity()) - -// Set // +fun Codec.nelOrElement(max: Int = Int.MAX_VALUE): Codec> = + this.listOrElement(1, max).xmap(List::toNel, identity()) /** - * この[Codec][this]を[Set]の[Codec]に変換します。 - * @return [Set]の[Codec] + * この[Codec][this]を[Nel]の[MapCodec]に変換します。 + * @param singleName 要素が一つの場合のキーの名前 + * @param nelName 要素数が0または2以上の場合の名前 * @author Hiiragi Tsubasa - * @since 26.1.0 + * @since 26.1.7 */ -fun Codec>.setOf(): Codec> = this.xmap(List::toSet, Set::toList) +fun Codec.compactNelFieldOf( + singleName: String, + nelName: String, + max: Int = Int.MAX_VALUE +): MapCodec> = HTCodecs + .mapEither(this.nelOf(max).fieldOf(nelName), this.fieldOf(singleName)) + .xmap( + { either: Either, A> -> either.map(::nelOf).unwrap() }, + { list: Nel -> list.singleOrNull()?.let { Either.Right(it) } ?: Either.Left(list) } + ) diff --git a/src/lib/kotlin/hiiragi283/lib/tag/HTCommonTags.kt b/src/lib/kotlin/hiiragi283/lib/tag/HTCommonTags.kt index 01d9f5e80a..c265ff06e1 100644 --- a/src/lib/kotlin/hiiragi283/lib/tag/HTCommonTags.kt +++ b/src/lib/kotlin/hiiragi283/lib/tag/HTCommonTags.kt @@ -27,6 +27,12 @@ data object HTCommonTags { } data object Items { + /** + * @since 26.1.7 + */ + @JvmField + val COAL_COKE: TagKey = create("coal_coke") + @JvmField val FOODS_DOUGH_WHEAT: TagKey = create("foods", "dough", "wheat") @@ -39,6 +45,12 @@ data object HTCommonTags { @JvmField val PAPER: TagKey = create("paper") + /** + * @since 26.1.7 + */ + @JvmField + val PITCH_COKE: TagKey = create("pitch_coke") + @JvmField val PLASTICS: TagKey = create("plastics") diff --git a/src/lib/kotlin/hiiragi283/lib/tag/HTMaterialKey.kt b/src/lib/kotlin/hiiragi283/lib/tag/HTMaterialKey.kt new file mode 100644 index 0000000000..7e7c9c826d --- /dev/null +++ b/src/lib/kotlin/hiiragi283/lib/tag/HTMaterialKey.kt @@ -0,0 +1,16 @@ +package hiiragi283.lib.tag + +import net.minecraft.resources.Identifier + +/** + * @author Hiiragi Tsubasa + * @since 26.1.7 + */ +@JvmRecord +data class HTMaterialKey(override val materialName: String) : HTMaterialLike { + init { + require(Identifier.isValidPath(materialName)) { + "Material name $materialName is not valid for identifier path" + } + } +} diff --git a/src/lib/kotlin/hiiragi283/lib/text/HTCommonTranslation.kt b/src/lib/kotlin/hiiragi283/lib/text/HTCommonTranslation.kt index 687ae42fdb..9e7be15d2c 100644 --- a/src/lib/kotlin/hiiragi283/lib/text/HTCommonTranslation.kt +++ b/src/lib/kotlin/hiiragi283/lib/text/HTCommonTranslation.kt @@ -49,6 +49,8 @@ enum class HTCommonTranslation(type: String, vararg path: String) : HTTranslatio TICK(HTConstants.GUI, "tick"), SECONDS(HTConstants.GUI, "seconds"), + BIOME(HTConstants.GUI, "biome"), + // Item Description TOOLTIP_INTRINSIC_ENCHANTMENT(HTConstants.TOOLTIP, "intrinsic_enchantment"), TOOLTIP_SHOW_DESCRIPTION(HTConstants.TOOLTIP, "show_description"), diff --git a/src/lib/kotlin/hiiragi283/lib/text/HTTextUtil.kt b/src/lib/kotlin/hiiragi283/lib/text/HTTextUtil.kt index 95c9ac5570..541901f26a 100644 --- a/src/lib/kotlin/hiiragi283/lib/text/HTTextUtil.kt +++ b/src/lib/kotlin/hiiragi283/lib/text/HTTextUtil.kt @@ -39,11 +39,11 @@ object HTTextUtil { @JvmStatic private val TEXT_NULL: Text = "null".toText() - @JvmStatic - private val INT_FORMAT: NumberFormat = NumberFormat.getIntegerInstance() + @JvmField + val INT_FORMAT: NumberFormat = NumberFormat.getIntegerInstance() - @JvmStatic - private val DOUBLE_FORMAT: NumberFormat = NumberFormat.getNumberInstance() + @JvmField + val DOUBLE_FORMAT: NumberFormat = NumberFormat.getNumberInstance() /** * 指定した[MOD ID][modId]からMOD名を取得します。 diff --git a/src/lib/kotlin/hiiragi283/ragium/api/RagiumConfig.kt b/src/lib/kotlin/hiiragi283/ragium/api/RagiumConfig.kt index ffbf47ebd8..cdf93d6091 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/RagiumConfig.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/RagiumConfig.kt @@ -1,6 +1,7 @@ package hiiragi283.ragium.api import hiiragi283.lib.HTConstants +import hiiragi283.lib.config.definePositiveInt import hiiragi283.ragium.api.config.HTEnergyConfig import net.minecraft.resources.Identifier import net.neoforged.neoforge.common.ModConfigSpec @@ -59,6 +60,28 @@ data object RagiumConfig { @JvmField val machine: Machine + // Storage + @JvmField + val energyBarColor: ModConfigSpec.IntValue + + @JvmField + val batteryCapacity: ModConfigSpec.IntValue + + @JvmField + val crateCapacity: ModConfigSpec.IntValue + + @JvmField + val tankCapacity: ModConfigSpec.IntValue + + init { + builder.push("storage") + energyBarColor = builder.definePositiveInt("energy_bar_color", 0xFF0033, 0) + batteryCapacity = builder.definePositiveInt("battery_capacity", 1_024_000) + crateCapacity = builder.definePositiveInt("crate_capacity", 32 * 64) + tankCapacity = builder.definePositiveInt("tank_capacity", 16000) + builder.pop() + } + class Machine(builder: ModConfigSpec.Builder) { @JvmField val tankCapacity: ModConfigSpec.IntValue = builder.defineInRange("tank_capacity", 8000, 1, Int.MAX_VALUE) @@ -132,11 +155,19 @@ data object RagiumConfig { HTEnergyConfig.createMachine(builder, RagiumConstants.PLANTER) // Electronics + @JvmField + val precisionAssembler: HTEnergyConfig = + HTEnergyConfig.createMachine(builder, RagiumConstants.PRECISION_ASSEMBLER, 64) + @JvmField val scanner: HTEnergyConfig = - HTEnergyConfig.createMachine(builder, RagiumConstants.SCANNER) + HTEnergyConfig.createMachine(builder, RagiumConstants.SCANNER, 64) // Arcane + @JvmField + val enchanter: HTEnergyConfig = + HTEnergyConfig.createMachine(builder, RagiumConstants.ENCHANTER, 256) + @JvmField val fluidDuplicator: HTEnergyConfig = HTEnergyConfig.createMachine(builder, RagiumConstants.FLUID_DUPLICATOR, 1024) diff --git a/src/lib/kotlin/hiiragi283/ragium/api/RagiumConstants.kt b/src/lib/kotlin/hiiragi283/ragium/api/RagiumConstants.kt index 359fab2ee0..2016b67c66 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/RagiumConstants.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/RagiumConstants.kt @@ -33,9 +33,11 @@ data object RagiumConstants { const val PLANTER = "planter" // Electronics + const val PRECISION_ASSEMBLER = "precision_assembler" const val SCANNER = "scanner" // Arcane + const val ENCHANTER = "enchanter" const val FLUID_DUPLICATOR = "fluid_duplicator" const val MASS_FABRICATOR = "mass_fabricator" @@ -69,6 +71,8 @@ data object RagiumConstants { // Electronics const val PRINTING = "printing" + const val RESOURCE_EXTRACTING = "resource/extracting" + // Arcane const val ENCHANTING = "enchanting" } diff --git a/src/lib/kotlin/hiiragi283/ragium/api/RagiumRegistries.kt b/src/lib/kotlin/hiiragi283/ragium/api/RagiumRegistries.kt index 5eb92e9427..1957aa97be 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/RagiumRegistries.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/RagiumRegistries.kt @@ -10,6 +10,7 @@ import net.minecraft.core.Registry import net.minecraft.resources.ResourceKey import net.neoforged.bus.api.SubscribeEvent import net.neoforged.fml.common.EventBusSubscriber +import net.neoforged.neoforge.registries.DataPackRegistryEvent import net.neoforged.neoforge.registries.NewRegistryEvent import net.neoforged.neoforge.registries.RegistryBuilder @@ -40,6 +41,15 @@ data object RagiumRegistries { event.register(WIDGET_TYPE) } + @SubscribeEvent + fun registerDynamicRegistries(event: DataPackRegistryEvent.NewRegistry) { + event.dataPackRegistry( + Keys.ORE_SLURRY_DATA, + HTOreSlurryData.DIRECT_CODEC, + HTOreSlurryData.DIRECT_CODEC + ) + } + @JvmStatic private fun createRegistry(key: ResourceKey>): Registry = RegistryBuilder(key) .sync(true) diff --git a/src/lib/kotlin/hiiragi283/ragium/api/data/RagiumDataComponents.kt b/src/lib/kotlin/hiiragi283/ragium/api/data/RagiumDataComponents.kt index 1d36750347..ac165d95e4 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/data/RagiumDataComponents.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/data/RagiumDataComponents.kt @@ -2,12 +2,14 @@ package hiiragi283.ragium.api.data import hiiragi283.lib.data.DataComponentType import hiiragi283.lib.serialization.codec.HTCodecs +import hiiragi283.lib.serialization.network.HTStreamCodecs import hiiragi283.ragium.api.data.oreSlurry.HTOreSlurryData import net.minecraft.core.Holder import net.minecraft.core.component.DataComponentType import net.minecraft.network.codec.ByteBufCodecs import net.minecraft.world.item.ItemStackTemplate import net.neoforged.neoforge.fluids.SimpleFluidContent +import java.util.UUID /** * Ragiumで使用される[DataComponentType]をまとめたクラスです。 @@ -35,4 +37,10 @@ data object RagiumDataComponents { @JvmField val ORE_SLURRY_DATA: DataComponentType> = DataComponentType(HTOreSlurryData.CODEC, HTOreSlurryData.STREAM_CODEC) + + /** + * @since 26.1.7 + */ + @JvmField + val OWNER_ID: DataComponentType = DataComponentType(HTCodecs.UUID, HTStreamCodecs.UUID) } diff --git a/src/lib/kotlin/hiiragi283/ragium/api/data/oreSlurry/HTOreSlurryData.kt b/src/lib/kotlin/hiiragi283/ragium/api/data/oreSlurry/HTOreSlurryData.kt index b267dbbcb5..844915d74f 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/data/oreSlurry/HTOreSlurryData.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/data/oreSlurry/HTOreSlurryData.kt @@ -6,38 +6,26 @@ 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.lib.util.toOptional import hiiragi283.ragium.api.RagiumRegistries import net.minecraft.core.Holder -import net.minecraft.core.HolderSet -import net.minecraft.core.registries.Registries import net.minecraft.network.RegistryFriendlyByteBuf import net.minecraft.network.codec.ByteBufCodecs import net.minecraft.network.codec.StreamCodec -import net.minecraft.world.item.Item -import net.minecraft.world.item.ItemStackTemplate -import java.util.Optional -import kotlin.jvm.optionals.getOrNull +import net.minecraft.util.ExtraCodecs /** * @author Hiiragi Tsubasa * @since 26.1.5 */ @JvmRecord -data class HTOreSlurryData @JvmOverloads constructor( - val title: Text, - val result: HolderSet, - val fallback: Optional>, - val count: Int = 1 -) { +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), - HTCodecs.holderSet(Registries.ITEM).fieldOf(HTConstants.RESULT).forGetter(HTOreSlurryData::result), - Item.CODEC.optionalFieldOf("fallback").forGetter(HTOreSlurryData::fallback), - HTCodecs.POSITIVE_INT.optionalFieldOf(HTConstants.COUNT, 1).forGetter(HTOreSlurryData::count) + ExtraCodecs.STRING_RGB_COLOR.fieldOf("color").forGetter(HTOreSlurryData::color), + HTItemResult.CODEC.fieldOf(HTConstants.RESULT).forGetter(HTOreSlurryData::result) ).apply(instance, ::HTOreSlurryData) } @@ -48,12 +36,10 @@ data class HTOreSlurryData @JvmOverloads constructor( val DIRECT_STREAM_CODEC: StreamCodec = StreamCodec.composite( HTStreamCodecs.TEXT, HTOreSlurryData::title, - HTStreamCodecs.holderSet(Registries.ITEM), - HTOreSlurryData::result, - HTStreamCodecs.optional(Item.STREAM_CODEC), - HTOreSlurryData::fallback, ByteBufCodecs.VAR_INT, - HTOreSlurryData::count, + HTOreSlurryData::color, + HTItemResult.STREAM_CODEC, + HTOreSlurryData::result, ::HTOreSlurryData ) @@ -61,19 +47,4 @@ data class HTOreSlurryData @JvmOverloads constructor( val STREAM_CODEC: StreamCodec> = HTStreamCodecs.holder(RagiumRegistries.Keys.ORE_SLURRY_DATA, DIRECT_STREAM_CODEC) } - - @JvmOverloads constructor(title: Text, result: HolderSet, fallback: Holder?, count: Int = 1) : this( - title, - result, - fallback.toOptional(), - count - ) - - fun getFirstHolder(): Holder? = result - .asSequence() - .sortedWith(HTItemResult.TagEntry.HOLDER_COMPARATOR) - .firstOrNull() - ?: fallback.getOrNull() - - fun createTemplate(): ItemStackTemplate? = getFirstHolder()?.let { ItemStackTemplate(it, count) } } diff --git a/src/lib/kotlin/hiiragi283/ragium/api/data/oreSlurry/RagiumOreSlurryData.kt b/src/lib/kotlin/hiiragi283/ragium/api/data/oreSlurry/RagiumOreSlurryData.kt index 4525bfa6ed..90c231191f 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/data/oreSlurry/RagiumOreSlurryData.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/data/oreSlurry/RagiumOreSlurryData.kt @@ -1,20 +1,21 @@ 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.HTMaterialAccess import hiiragi283.ragium.api.material.RagiumMaterial -import net.minecraft.core.Holder 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.tags.TagKey import net.minecraft.world.item.Item +import net.minecraft.world.item.ItemStackTemplate +import net.minecraft.world.item.Items data object RagiumOreSlurryData { @JvmField @@ -26,6 +27,12 @@ data object RagiumOreSlurryData { @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)) @@ -34,24 +41,38 @@ data object RagiumOreSlurryData { fun bootstrap(context: BootstrapContext) { val getter: HolderGetter = context.lookup(Registries.ITEM) - fun register(key: ResourceKey, result: TagKey, fallback: Holder?, count: Int = 1) { + fun register(key: ResourceKey, color: Int, result: HTItemResult) { context.register( key, - HTOreSlurryData(translatableText(key.toLanguageKey()), getter.getOrThrow(result), fallback, count) + HTOreSlurryData(translatableText(key.toLanguageKey()), color, result) ) } - fun register(key: ResourceKey, part: HTItemPart, material: RagiumMaterial, count: Int = 1) { + 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, - part.tagPrefix.itemTagKey(material), - HTMaterialAccess.INSTANCE.getMaterialItem(part, material)?.item, - count + color, + entry.toResult(count) ) } - register(COPPER, HTItemPart.DUST, RagiumMaterial.Metal.COPPER, 3) - register(IRON, HTItemPart.DUST, RagiumMaterial.Metal.IRON, 2) - register(GOLD, HTItemPart.DUST, RagiumMaterial.Metal.GOLD, 2) + 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/RTResourceExtractingRecipeBuilder.kt b/src/lib/kotlin/hiiragi283/ragium/api/data/recipe/builder/RTResourceExtractingRecipeBuilder.kt new file mode 100644 index 0000000000..0a14553833 --- /dev/null +++ b/src/lib/kotlin/hiiragi283/ragium/api/data/recipe/builder/RTResourceExtractingRecipeBuilder.kt @@ -0,0 +1,52 @@ +@file:OptIn(ExperimentalContracts::class) + +package hiiragi283.ragium.api.data.recipe.builder + +import hiiragi283.lib.data.recipe.builder.HTProgressRecipeBuilder +import hiiragi283.lib.data.recipe.ingredient.HTBiomeConditionBuilder +import hiiragi283.lib.data.recipe.result.HTFluidResultBuilder +import hiiragi283.lib.recipe.ingredient.HTBiomeCondition +import hiiragi283.lib.recipe.result.HTFluidResult +import hiiragi283.lib.util.HTDelegates +import hiiragi283.ragium.api.RagiumConstants +import hiiragi283.ragium.api.recipe.RTResourceExtractingRecipe +import net.minecraft.resources.Identifier +import kotlin.contracts.ExperimentalContracts +import kotlin.contracts.InvocationKind +import kotlin.contracts.contract + +class RTResourceExtractingRecipeBuilder : + HTProgressRecipeBuilder(RagiumConstants.RESOURCE_EXTRACTING) { + override fun getRecipeId(): Identifier? = result.getId() + + override fun createRecipe(): RTResourceExtractingRecipe = + RTResourceExtractingRecipe(condition, result, progressData) + + // Biome Condition + var condition: HTBiomeCondition by HTDelegates.onceInitialize() + + operator fun HTBiomeCondition.unaryPlus() { + condition = this + } + + inline fun biomes(builderAction: HTBiomeConditionBuilder.() -> Unit) { + contract { + callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) + } + +HTBiomeConditionBuilder.build(builderAction) + } + + // Result + var result: HTFluidResult by HTDelegates.onceInitialize() + + operator fun HTFluidResult.unaryPlus() { + result = this + } + + inline fun result(builderAction: HTFluidResultBuilder.() -> Unit) { + contract { + callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) + } + +HTFluidResultBuilder.build(builderAction) + } +} diff --git a/src/lib/kotlin/hiiragi283/ragium/api/data/recipe/builder/RagiumRecipeBuilders.kt b/src/lib/kotlin/hiiragi283/ragium/api/data/recipe/builder/RagiumRecipeBuilders.kt index e7bc86fe1e..9fd9cbf0d2 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,12 +2,12 @@ package hiiragi283.ragium.api.data.recipe.builder -import hiiragi283.lib.data.recipe.builder.HTDoubleItemToItemRecipeBuilder import hiiragi283.lib.data.recipe.builder.HTFluidToRecipeBuilder import hiiragi283.lib.data.recipe.builder.HTItemAndFluidToRecipeBuilder import hiiragi283.lib.data.recipe.builder.HTItemToDoubleItemRecipeBuilder import hiiragi283.lib.data.recipe.builder.HTItemToItemAndFluidRecipeBuilder import hiiragi283.lib.data.recipe.builder.HTItemToRecipeBuilder +import hiiragi283.lib.data.recipe.builder.HTTripleItemToItemRecipeBuilder import hiiragi283.ragium.api.RagiumConstants import hiiragi283.ragium.api.recipe.RTAlloyingRecipe import hiiragi283.ragium.api.recipe.RTAssemblingRecipe @@ -37,12 +37,12 @@ data object RagiumRecipeBuilders { // Mechanical @JvmStatic inline fun assembling( - builderAction: HTDoubleItemToItemRecipeBuilder.() -> Unit - ): HTDoubleItemToItemRecipeBuilder { + builderAction: HTTripleItemToItemRecipeBuilder.() -> Unit + ): HTTripleItemToItemRecipeBuilder { contract { callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) } - return HTDoubleItemToItemRecipeBuilder(RagiumConstants.ASSEMBLING, ::RTAssemblingRecipe).apply(builderAction) + return HTTripleItemToItemRecipeBuilder(RagiumConstants.ASSEMBLING, ::RTAssemblingRecipe).apply(builderAction) } @JvmStatic @@ -98,12 +98,12 @@ data object RagiumRecipeBuilders { // Heat @JvmStatic inline fun alloying( - builderAction: HTDoubleItemToItemRecipeBuilder.() -> Unit - ): HTDoubleItemToItemRecipeBuilder { + builderAction: HTTripleItemToItemRecipeBuilder.() -> Unit + ): HTTripleItemToItemRecipeBuilder { contract { callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) } - return HTDoubleItemToItemRecipeBuilder(RagiumConstants.ALLOYING, ::RTAlloyingRecipe).apply(builderAction) + return HTTripleItemToItemRecipeBuilder(RagiumConstants.ALLOYING, ::RTAlloyingRecipe).apply(builderAction) } @JvmStatic @@ -202,6 +202,17 @@ data object RagiumRecipeBuilders { return HTItemToDoubleItemRecipeBuilder(RagiumConstants.PLANTING, ::RTPlantingRecipe).apply(builderAction) } + // Electronics + @JvmStatic + inline fun resourceExtracting( + builderAction: RTResourceExtractingRecipeBuilder.() -> Unit + ): RTResourceExtractingRecipeBuilder { + contract { + callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) + } + return RTResourceExtractingRecipeBuilder().apply(builderAction) + } + // Arcane @JvmStatic inline fun enchanting( diff --git a/src/lib/kotlin/hiiragi283/ragium/api/material/HTMaterialAccess.kt b/src/lib/kotlin/hiiragi283/ragium/api/material/HTMaterialAccess.kt deleted file mode 100644 index 750a714948..0000000000 --- a/src/lib/kotlin/hiiragi283/ragium/api/material/HTMaterialAccess.kt +++ /dev/null @@ -1,27 +0,0 @@ -package hiiragi283.ragium.api.material - -import hiiragi283.ragium.api.RagiumAPI - -/** - * @author Hiiragi Tsubasa - * @since 26.1.2 - */ -interface HTMaterialAccess { - companion object { - @JvmField - val INSTANCE: HTMaterialAccess = RagiumAPI.getService() - } - - val existing: HTMaterialContents.Provider - - val registered: HTMaterialContents.Provider - - fun getMaterialBlock(part: HTBlockPart, key: RagiumMaterial): HTMaterialContents.BlockEntry? = - existing.blocks[part, key] ?: registered.blocks[part, key] - - fun getMaterialItem(part: HTItemPart, key: RagiumMaterial): HTMaterialContents.ItemEntry? = - existing.items[part, key] ?: registered.items[part, key] - - fun getMaterialBlockOrItem(part: HTPart, key: RagiumMaterial): HTMaterialContents.ItemEntry? = - existing.getBlockOrItem(part, key) ?: registered.getBlockOrItem(part, key) -} diff --git a/src/lib/kotlin/hiiragi283/ragium/api/material/HTMaterialContents.kt b/src/lib/kotlin/hiiragi283/ragium/api/material/HTMaterialContents.kt deleted file mode 100644 index 67c8c69ec6..0000000000 --- a/src/lib/kotlin/hiiragi283/ragium/api/material/HTMaterialContents.kt +++ /dev/null @@ -1,80 +0,0 @@ -package hiiragi283.ragium.api.material - -import hiiragi283.lib.collection.Table -import hiiragi283.lib.item.HTItemInstanceLike -import hiiragi283.lib.registry.HTSimpleDeferredBlock -import hiiragi283.lib.registry.HTSimpleDeferredBlockAndItem -import hiiragi283.lib.registry.HTSimpleDeferredItem -import hiiragi283.lib.resource.HTSimpleBlockItemWithKey -import hiiragi283.lib.resource.HTSimpleValueWithKey -import net.minecraft.world.item.Item -import net.minecraft.world.level.ItemLike - -/** - * 素材に紐づいたコンテンツを管理するインターフェースです。 - * @author Hiiragi Tsubasa - * @since 26.1.2 - */ -interface HTMaterialContents : Table { - fun getOrThrow(row: R, column: RagiumMaterial): V = get(row, column) ?: error(getErrorMessage(row, column)) - - /** - * 対応する値がない場合のエラーメッセージを作成します。 - */ - fun getErrorMessage(row: R, column: RagiumMaterial): String - - // Provider // - - /** - * 部品と素材に対応するブロックやアイテムを管理するクラスです。 - * @param blocks 素材ブロックの一覧 - * @param items 素材アイテムの一覧 - * @author Hiiragi Tsubasa - * @since 26.1.2 - */ - data class Provider( - val blocks: HTMaterialContents, - val items: HTMaterialContents - ) { - /** - * 指定した部品と素材に対応する素材アイテムを取得します。 - * @return 対応するアイテムがない場合は`null` - */ - fun getBlockOrItem(part: HTPart, key: RagiumMaterial): ItemEntry? = when (part) { - is HTBlockPart -> blocks[part, key]?.asItemEntry() - is HTItemPart -> items[part, key] - } - } - - // BlockEntry // - - /** - * @author Hiiragi Tsubasa - * @since 26.1.2 - */ - data class BlockEntry( - override val block: HTSimpleDeferredBlock, - override val item: HTSimpleDeferredItem, - val isBuiltIn: Boolean - ) : HTSimpleBlockItemWithKey, - ItemLike by item, - HTItemInstanceLike by item { - constructor( - blockItem: HTSimpleDeferredBlockAndItem, - isBuiltIn: Boolean - ) : this(blockItem.block, blockItem.item, isBuiltIn) - - fun asItemEntry(): ItemEntry = ItemEntry(item, isBuiltIn) - } - - // ItemEntry // - - /** - * @author Hiiragi Tsubasa - * @since 26.1.2 - */ - data class ItemEntry(val item: HTSimpleDeferredItem, val isBuiltIn: Boolean) : - HTSimpleValueWithKey by item, - ItemLike by item, - HTItemInstanceLike by item -} diff --git a/src/lib/kotlin/hiiragi283/ragium/api/material/RagiumMaterial.kt b/src/lib/kotlin/hiiragi283/ragium/api/material/RagiumMaterial.kt index 0c55b00511..e72b74ffd3 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/material/RagiumMaterial.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/material/RagiumMaterial.kt @@ -28,7 +28,12 @@ sealed interface RagiumMaterial : CHARCOAL("Charcoal", "木炭"), // Common - COAL_COKE("Coal Coke", "石炭コークス") + COAL_COKE("Coal Coke", "石炭コークス"), + + /** + * @since 26.1.7 + */ + PITCH_COKE("Pitch Coke", "ピッチコークス") ; constructor(enName: String, jaName: String) : this(HTLangName(enName, jaName)) @@ -53,6 +58,11 @@ sealed interface RagiumMaterial : NITER("Niter", "硝石"), BORAX("Borax", "ホウ砂"), + /** + * @since 26.1.7 + */ + BAUXITE("Bauxite", "ボーキサイト"), + // Ragium RAGINITE("Raginite", "ラギナイト") ; @@ -74,7 +84,19 @@ sealed interface RagiumMaterial : DIAMOND("Diamond", "ダイヤモンド"), EMERALD("Emerald", "エメラルド"), ECHO("Echo", "残響"), - PRISMARINE("Prismarine", "プリズマリン") + PRISMARINE("Prismarine", "プリズマリン"), + + // Common + + /** + * @since 26.1.7 + */ + FLUORITE("Fluorite", "蛍石"), + + /** + * @since 26.1.7 + */ + CRYOLITE("Cryolite", "氷晶石") ; constructor(enName: String, jaName: String) : this(HTLangName(enName, jaName)) @@ -90,36 +112,43 @@ sealed interface RagiumMaterial : IRON("Iron", "鉄"), GOLD("Gold", "金"), NETHERITE("Netherite", "ネザライト") { - override val isElement: Boolean = false + override val hasRawVariant: Boolean = false }, + // Common + + /** + * @since 26.1.7 + */ + ALUMINUM("Aluminum", "アルミニウム"), + // Ragium /** * @since 26.1.3 */ SOOTY_IRON("Sooty Iron", "煤鉄") { - override val isElement: Boolean = false + override val hasRawVariant: Boolean = false }, /** * @since 26.1.3 */ BLACK_STEEL("Black Steel", "黒鋼") { - override val isElement: Boolean = false + override val hasRawVariant: Boolean = false }, /** * @since 26.1.4 */ VOID_METAL("Void Metal", "虚金") { - override val isElement: Boolean = false + override val hasRawVariant: Boolean = false } ; constructor(enName: String, jaName: String) : this(HTLangName(enName, jaName)) - open val isElement: Boolean = true + open val hasRawVariant: Boolean = true override val materialName: String = name.lowercase() } @@ -134,6 +163,16 @@ sealed interface RagiumMaterial : PAPER(true, "Paper", "紙"), // Common + CARBON(false, "Carbon", "炭素"), + + /** + * @since 26.1.7 + */ + ALUMINA(false, "Alumina", "アルミナ"), + + /** + * @since 26.1.7 + */ SILICON(false, "Silicon", "シリコン") ; diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTAlloyingRecipe.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTAlloyingRecipe.kt index 6bba9fa84d..3cd15ddfd1 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTAlloyingRecipe.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTAlloyingRecipe.kt @@ -1,20 +1,21 @@ 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.HTDoubleItemToItemRecipe import hiiragi283.lib.recipe.base.HTProgressData +import hiiragi283.lib.recipe.base.HTTripleItemToItemRecipe 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 class RTAlloyingRecipe( - primary: HTItemIngredient, - secondary: HTItemIngredient, + ingredient: HTItemIngredient, + extras: Nel, result: HTItemResult, progressData: HTProgressData -) : HTDoubleItemToItemRecipe.Basic(primary, secondary, result, progressData), +) : HTTripleItemToItemRecipe.Basic(ingredient, extras, result, progressData), HTSerializableRecipe { companion object { @JvmField diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTAssemblingRecipe.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTAssemblingRecipe.kt index 76f278e167..4d864d0739 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTAssemblingRecipe.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTAssemblingRecipe.kt @@ -1,20 +1,21 @@ 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.HTDoubleItemToItemRecipe import hiiragi283.lib.recipe.base.HTProgressData +import hiiragi283.lib.recipe.base.HTTripleItemToItemRecipe 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 class RTAssemblingRecipe( - primary: HTItemIngredient, - secondary: HTItemIngredient, + ingredient: HTItemIngredient, + extras: Nel, result: HTItemResult, progressData: HTProgressData -) : HTDoubleItemToItemRecipe.Basic(primary, secondary, result, progressData), +) : HTTripleItemToItemRecipe.Basic(ingredient, extras, result, progressData), HTSerializableRecipe { companion object { @JvmField diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTElectrolyzingRecipe.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTElectrolyzingRecipe.kt index 90574283b3..9c2f742687 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTElectrolyzingRecipe.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTElectrolyzingRecipe.kt @@ -16,13 +16,14 @@ import hiiragi283.lib.recipe.input.HTItemAndFluidRecipeInput import hiiragi283.lib.recipe.result.HTFluidResult import hiiragi283.lib.recipe.result.createOrEmpty import hiiragi283.lib.serialization.codec.HTCodecs -import hiiragi283.lib.serialization.codec.nelOf +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.neoforged.neoforge.fluids.FluidInstance import net.neoforged.neoforge.fluids.FluidStack @@ -48,7 +49,9 @@ data class RTElectrolyzingRecipe( HTFluidIngredient.CODEC .fieldOf(HTConstants.FLUID_INGREDIENT) .forGetter(RTElectrolyzingRecipe::fluidIngredient), - HTFluidResult.CODEC.nelOf(3).fieldOf(HTConstants.RESULTS).forGetter(RTElectrolyzingRecipe::results), + HTFluidResult.CODEC + .compactNelFieldOf(HTConstants.RESULT, HTConstants.RESULTS, 3) + .forGetter(RTElectrolyzingRecipe::results), HTProgressData.CODEC.forGetter(RTElectrolyzingRecipe::progressData) ).apply(instance, ::RTElectrolyzingRecipe) } @@ -73,9 +76,9 @@ data class RTElectrolyzingRecipe( override fun test(first: ItemInstance, second: FluidInstance): Boolean = itemIngredient.test(first) && fluidIngredient.test(second) - override fun getRequiredAmount(first: ItemInstance, second: FluidInstance): Pair = Pair( - itemIngredient.fold({ 0 }, { it.getRequiredAmount(first) }), - fluidIngredient.getRequiredAmount(second) + override fun getMatchingStack(first: ItemInstance, second: FluidInstance): Pair = Pair( + itemIngredient.fold(ItemStack::EMPTY) { it.getMatchingStack(first) }, + fluidIngredient.getMatchingStack(second) ) override fun apply(first: ItemInstance, second: FluidInstance): Triple = Triple( diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTEnchantingRecipe.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTEnchantingRecipe.kt index d2056fcbf1..2a0fac445c 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTEnchantingRecipe.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTEnchantingRecipe.kt @@ -60,8 +60,8 @@ data class RTEnchantingRecipe( override fun apply(first: ItemInstance, second: ItemInstance): ItemStack = result.create() - override fun getRequiredAmount(first: ItemInstance, second: ItemInstance): Pair = - BOOK_INGREDIENT.getRequiredAmount(first) to ingredient.getRequiredAmount(second) + override fun getMatchingStack(first: ItemInstance, second: ItemInstance): Pair = + BOOK_INGREDIENT.getMatchingStack(first) to ingredient.getMatchingStack(second) override fun getSerializer(): RecipeSerializer = RagiumRecipeSerializers.ENCHANTING diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTReactingRecipe.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTReactingRecipe.kt index 2b99f98b3c..7f71ef89f8 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTReactingRecipe.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTReactingRecipe.kt @@ -70,10 +70,10 @@ interface RTReactingRecipe : primary.test(first) && secondary.test(second) override fun apply(first: FluidInstance, second: FluidInstance): HTItemAndFluidResult = - results.mapLeft(HTItemResult::create).mapRight(HTFluidResult::create).let(::HTItemAndFluidResult) + HTItemAndFluidResult.from(results) - override fun getRequiredAmount(first: FluidInstance, second: FluidInstance): Pair = - primary.getRequiredAmount(first) to secondary.getRequiredAmount(second) + override fun getMatchingStack(first: FluidInstance, second: FluidInstance): Pair = + primary.getMatchingStack(first) to secondary.getMatchingStack(second) override fun getSerializer(): RecipeSerializer = RagiumRecipeSerializers.REACTING diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTRefiningRecipe.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTRefiningRecipe.kt index 196a519b9a..0a1798c58a 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTRefiningRecipe.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTRefiningRecipe.kt @@ -20,7 +20,6 @@ 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 -import net.neoforged.neoforge.fluids.FluidStack import java.util.Optional @JvmRecord @@ -63,15 +62,12 @@ data class RTRefiningRecipe( override fun test(input: FluidInstance): Boolean = ingredient.test(input) - override fun getRequiredAmount(input: FluidInstance): Int = ingredient.getRequiredAmount(input) + override fun getMatchingStack(input: FluidInstance): FluidInstance = ingredient.getMatchingStack(input) - override fun apply(input: FluidInstance): HTItemAndFluidResult { - val stack: FluidStack = fluidResult.create() - return itemResult.map(HTItemResult::create).fold( - { HTItemAndFluidResult(stack) }, - { HTItemAndFluidResult(it, stack) } - ) - } + override fun apply(input: FluidInstance): HTItemAndFluidResult = itemResult.fold( + { HTItemAndFluidResult.from(fluidResult) }, + { HTItemAndFluidResult.from(it, fluidResult) } + ) override fun getSerializer(): RecipeSerializer = RagiumRecipeSerializers.REFINING diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTResourceExtractingRecipe.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTResourceExtractingRecipe.kt new file mode 100644 index 0000000000..78c5943148 --- /dev/null +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTResourceExtractingRecipe.kt @@ -0,0 +1,75 @@ +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.ingredient.HTBiomeCondition +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.neoforged.neoforge.fluids.FluidStack + +class RTResourceExtractingRecipe( + val condition: HTBiomeCondition, + val result: HTFluidResult, + override val progressData: HTProgressData +) : HTRecipePredicate, + HTRecipeFactory, + HTProgressRecipe.Simple, + HTSerializableRecipe { + companion object { + @JvmField + val CODEC: MapCodec = HTCodecs.recordMap { instance -> + instance.group( + HTBiomeCondition.CODEC.fieldOf("condition").forGetter(RTResourceExtractingRecipe::condition), + HTFluidResult.CODEC.fieldOf(HTConstants.RESULT).forGetter(RTResourceExtractingRecipe::result), + HTProgressData.CODEC.forGetter(RTResourceExtractingRecipe::progressData) + ).apply(instance, ::RTResourceExtractingRecipe) + } + + @JvmField + val STREAM_CODEC: StreamCodec = StreamCodec.composite( + HTBiomeCondition.STREAM_CODEC, + RTResourceExtractingRecipe::condition, + HTFluidResult.STREAM_CODEC, + RTResourceExtractingRecipe::result, + HTProgressData.STREAM_CODEC, + RTResourceExtractingRecipe::progressData, + ::RTResourceExtractingRecipe + ) + + @JvmField + val SERIALIZER: RecipeSerializer = RecipeSerializer(CODEC, STREAM_CODEC) + } + + override fun matches(input: Input): Boolean = condition.test(input.biome) + + override fun produce(input: Input): 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 + } +} diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeLookups.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeLookups.kt index c37cbb7bdb..ae8e51d504 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeLookups.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeLookups.kt @@ -1,13 +1,13 @@ package hiiragi283.ragium.api.recipe import hiiragi283.lib.recipe.HTRecipeType -import hiiragi283.lib.recipe.base.HTDoubleItemToItemRecipe import hiiragi283.lib.recipe.base.HTItemAndFluidToFluidRecipe import hiiragi283.lib.recipe.base.HTItemAndFluidToItemRecipe import hiiragi283.lib.recipe.base.HTItemToDoubleItemRecipe import hiiragi283.lib.recipe.base.HTItemToFluidRecipe import hiiragi283.lib.recipe.base.HTItemToItemAndFluidRecipe import hiiragi283.lib.recipe.base.HTItemToItemRecipe +import hiiragi283.lib.recipe.base.HTTripleItemToItemRecipe import hiiragi283.lib.recipe.lookup.HTCompoundRecipeLookup import hiiragi283.lib.recipe.lookup.HTRecipeLookup import hiiragi283.lib.recipe.lookup.HTVanillaRecipeLookup @@ -33,7 +33,7 @@ data object RagiumRecipeLookups { // Mechanical @JvmField - val ASSEMBLING: HTCompoundRecipeLookup = create(RagiumConstants.ASSEMBLING) + val ASSEMBLING: HTCompoundRecipeLookup = create(RagiumConstants.ASSEMBLING) @JvmField val COMPRESSING: HTCompoundRecipeLookup = create(RagiumConstants.COMPRESSING) @@ -52,7 +52,7 @@ data object RagiumRecipeLookups { // Heat @JvmField - val ALLOYING: HTCompoundRecipeLookup = create(RagiumConstants.ALLOYING) + val ALLOYING: HTCompoundRecipeLookup = create(RagiumConstants.ALLOYING) @JvmField val FREEZING: HTCompoundRecipeLookup = create(RagiumConstants.FREEZING) @@ -87,6 +87,8 @@ data object RagiumRecipeLookups { val PLANTING: HTCompoundRecipeLookup = create(RagiumConstants.PLANTING) // Electronics + @JvmField + val RESOURCE_EXTRACTING: HTRecipeLookup = create(RagiumRecipeTypes.RESOURCE_EXTRACTING) // Arcane @JvmField diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeSerializers.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeSerializers.kt index ccf6df41bb..73d98844eb 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeSerializers.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeSerializers.kt @@ -109,6 +109,9 @@ data object RagiumRecipeSerializers { register(RagiumConstants.PLANTING, RTPlantingRecipe.SERIALIZER) // Electronics + @JvmField + val RESOURCE_EXTRACTING: RecipeSerializer = + register(RagiumConstants.RESOURCE_EXTRACTING, RTResourceExtractingRecipe.SERIALIZER) // Arcane @JvmField diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeTypes.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeTypes.kt index 1890c0b0b0..3a44487c4f 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeTypes.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeTypes.kt @@ -84,6 +84,8 @@ data object RagiumRecipeTypes { val PLANTING: HTRecipeType = create(RagiumConstants.PLANTING) // Electronics + @JvmField + val RESOURCE_EXTRACTING: HTRecipeType = create(RagiumConstants.RESOURCE_EXTRACTING) // Arcane @JvmField diff --git a/src/lib/kotlin/hiiragi283/ragium/api/tag/RagiumTags.kt b/src/lib/kotlin/hiiragi283/ragium/api/tag/RagiumTags.kt index 7ee33ac438..dce7951a7d 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/tag/RagiumTags.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/tag/RagiumTags.kt @@ -22,6 +22,12 @@ data object RagiumTags { @JvmField val QUARTZ_BLOCKS: BlockItemTag = create("quartz_blocks") + /** + * @since 26.1.7 + */ + @JvmField + val STORAGES_CREATIVE: BlockItemTag = create("storages", "creative") + @JvmStatic private fun create(vararg path: String): BlockItemTag = BlockItemTag(RagiumAPI.id(*path)) } @@ -31,6 +37,12 @@ data object RagiumTags { * @since 26.1.5 */ data object Fluids { + /** + * @since 26.1.7 + */ + @JvmField + val RESINS: TagKey = create("resins") + @JvmStatic private fun create(vararg path: String): TagKey = FluidTags.create(RagiumAPI.id(*path)) } @@ -40,6 +52,24 @@ data object RagiumTags { * @since 26.1.0 */ data object Items { + /** + * @since 26.1.7 + */ + @JvmField + val COALS: TagKey = create("coals") + + /** + * @since 26.1.7 + */ + @JvmField + val COKES: TagKey = create("cokes") + + /** + * @since 26.1.7 + */ + @JvmField + val SHOW_FLUID_TOOLTIPS: TagKey = create("show_fluid_tooltips") + @JvmField val SOOTY_IRON_TOOL_MATERIALS: TagKey = create("sooty_iron_tool_materials") diff --git a/src/lib/kotlin/hiiragi283/ragium/api/world/DamageSourcesExtensions.kt b/src/lib/kotlin/hiiragi283/ragium/api/world/DamageSourcesExtensions.kt new file mode 100644 index 0000000000..d9ef260e9a --- /dev/null +++ b/src/lib/kotlin/hiiragi283/ragium/api/world/DamageSourcesExtensions.kt @@ -0,0 +1,24 @@ +package hiiragi283.ragium.api.world + +import net.minecraft.world.damagesource.DamageSource +import net.minecraft.world.damagesource.DamageSources +import net.minecraft.world.entity.Entity + +/** + * @author Hiiragi Tsubasa + * @since 26.1.7 + */ +fun DamageSources.chemicalBurn(): DamageSource = this.source(RagiumDamageTypes.CHEMICAL_BURN) + +/** + * @author Hiiragi Tsubasa + * @since 26.1.7 + */ +fun DamageSources.chemicalBurn(cause: Entity?): DamageSource = this.source(RagiumDamageTypes.CHEMICAL_BURN, cause) + +/** + * @author Hiiragi Tsubasa + * @since 26.1.7 + */ +fun DamageSources.chemicalBurn(directEntity: Entity?, causeEntity: Entity?): DamageSource = + this.source(RagiumDamageTypes.CHEMICAL_BURN, directEntity, causeEntity) diff --git a/src/lib/kotlin/hiiragi283/ragium/api/world/RagiumDamageTypes.kt b/src/lib/kotlin/hiiragi283/ragium/api/world/RagiumDamageTypes.kt new file mode 100644 index 0000000000..398dc61107 --- /dev/null +++ b/src/lib/kotlin/hiiragi283/ragium/api/world/RagiumDamageTypes.kt @@ -0,0 +1,30 @@ +package hiiragi283.ragium.api.world + +import hiiragi283.lib.registry.createKey +import hiiragi283.ragium.api.RagiumAPI +import net.minecraft.core.registries.Registries +import net.minecraft.data.worldgen.BootstrapContext +import net.minecraft.resources.ResourceKey +import net.minecraft.world.damagesource.DamageEffects +import net.minecraft.world.damagesource.DamageScaling +import net.minecraft.world.damagesource.DamageType + +/** + * @author Hiiragi Tsubasa + * @since 26.1.7 + */ +data object RagiumDamageTypes { + @JvmField + val CHEMICAL_BURN: ResourceKey = create("chemical_burn") + + @JvmStatic + private fun create(name: String): ResourceKey = Registries.DAMAGE_TYPE.createKey(RagiumAPI.id(name)) + + @JvmStatic + fun bootstrap(context: BootstrapContext) { + context.register( + CHEMICAL_BURN, + DamageType("chemicalBurn", DamageScaling.ALWAYS, 0.1f, DamageEffects.BURNING) + ) + } +} diff --git a/src/client/kotlin/hiiragi283/lib/event/HTRegisterWidgetRendererEvent.kt b/src/libClient/kotlin/hiiragi283/lib/event/HTRegisterWidgetRendererEvent.kt similarity index 100% rename from src/client/kotlin/hiiragi283/lib/event/HTRegisterWidgetRendererEvent.kt rename to src/libClient/kotlin/hiiragi283/lib/event/HTRegisterWidgetRendererEvent.kt diff --git a/src/client/kotlin/hiiragi283/lib/fluid/FluidStackTintSource.kt b/src/libClient/kotlin/hiiragi283/lib/fluid/FluidStackTintSource.kt similarity index 100% rename from src/client/kotlin/hiiragi283/lib/fluid/FluidStackTintSource.kt rename to src/libClient/kotlin/hiiragi283/lib/fluid/FluidStackTintSource.kt diff --git a/src/client/kotlin/hiiragi283/lib/fluid/HTFluidModelBuilder.kt b/src/libClient/kotlin/hiiragi283/lib/fluid/HTFluidModelBuilder.kt similarity index 95% rename from src/client/kotlin/hiiragi283/lib/fluid/HTFluidModelBuilder.kt rename to src/libClient/kotlin/hiiragi283/lib/fluid/HTFluidModelBuilder.kt index 5ef3f10ebe..8e122ef15f 100644 --- a/src/client/kotlin/hiiragi283/lib/fluid/HTFluidModelBuilder.kt +++ b/src/libClient/kotlin/hiiragi283/lib/fluid/HTFluidModelBuilder.kt @@ -62,7 +62,8 @@ class HTFluidModelBuilder { } fun molten() { - still = Material(RagiumAPI.id(HTConstants.BLOCK, HTConstants.FLUID, "molten")) + still = Material(RagiumAPI.id(HTConstants.BLOCK, HTConstants.FLUID, "molten_still")) + flowing = Material(RagiumAPI.id(HTConstants.BLOCK, HTConstants.FLUID, "molten_flowing")) } /** diff --git a/src/client/kotlin/hiiragi283/lib/fluid/HTFluidModelRegister.kt b/src/libClient/kotlin/hiiragi283/lib/fluid/HTFluidModelRegister.kt similarity index 100% rename from src/client/kotlin/hiiragi283/lib/fluid/HTFluidModelRegister.kt rename to src/libClient/kotlin/hiiragi283/lib/fluid/HTFluidModelRegister.kt diff --git a/src/libClient/kotlin/hiiragi283/lib/gui/HTGuiRenderHelper.kt b/src/libClient/kotlin/hiiragi283/lib/gui/HTGuiRenderHelper.kt new file mode 100644 index 0000000000..4a44c1bb70 --- /dev/null +++ b/src/libClient/kotlin/hiiragi283/lib/gui/HTGuiRenderHelper.kt @@ -0,0 +1,60 @@ +package hiiragi283.lib.gui + +import net.minecraft.client.Minecraft +import net.minecraft.client.gui.GuiGraphicsExtractor +import net.minecraft.client.renderer.RenderPipelines +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.neoforged.neoforge.fluids.FluidStack + +/** + * @author Hiiragi Tsubasa + * @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() + + @JvmStatic + fun getColor(stack: FluidStack): Int = getModel(stack).fluidTintSource()?.colorAsStack(stack) ?: 0xffffffff.toInt() + + @JvmStatic + fun renderFluid(graphics: GuiGraphicsExtractor, stack: FluidStack, x: Int, y: Int, width: Int, height: Int) { + if (stack.isEmpty) return + getSprite(stack)?.let { sprite: TextureAtlasSprite -> + val spriteContents: SpriteContents = sprite.contents() + val tileScaling = GuiSpriteScaling.Tile(spriteContents.width(), spriteContents.height()) + + graphics.enableScissor(x, y, x + width, y + height) + graphics.blitTiledSprite( + RenderPipelines.GUI_TEXTURED, + sprite, + x, + y, + width, + height, + 0, + 0, + tileScaling.width, + tileScaling.height, + tileScaling.width, + tileScaling.height, + getColor(stack) + ) + graphics.disableScissor() + } + } +} diff --git a/src/client/kotlin/hiiragi283/lib/gui/widget/HTAbstractWidgetRenderer.kt b/src/libClient/kotlin/hiiragi283/lib/gui/widget/HTAbstractWidgetRenderer.kt similarity index 100% rename from src/client/kotlin/hiiragi283/lib/gui/widget/HTAbstractWidgetRenderer.kt rename to src/libClient/kotlin/hiiragi283/lib/gui/widget/HTAbstractWidgetRenderer.kt diff --git a/src/client/kotlin/hiiragi283/lib/gui/widget/HTWidgetRendererFactory.kt b/src/libClient/kotlin/hiiragi283/lib/gui/widget/HTWidgetRendererFactory.kt similarity index 100% rename from src/client/kotlin/hiiragi283/lib/gui/widget/HTWidgetRendererFactory.kt rename to src/libClient/kotlin/hiiragi283/lib/gui/widget/HTWidgetRendererFactory.kt diff --git a/src/lib/kotlin/hiiragi283/lib/integration/jei/HTJeiDrawables.kt b/src/libClient/kotlin/hiiragi283/lib/integration/jei/HTJeiDrawables.kt similarity index 100% rename from src/lib/kotlin/hiiragi283/lib/integration/jei/HTJeiDrawables.kt rename to src/libClient/kotlin/hiiragi283/lib/integration/jei/HTJeiDrawables.kt diff --git a/src/lib/kotlin/hiiragi283/lib/integration/jei/HTJeiPlugin.kt b/src/libClient/kotlin/hiiragi283/lib/integration/jei/HTJeiPlugin.kt similarity index 100% rename from src/lib/kotlin/hiiragi283/lib/integration/jei/HTJeiPlugin.kt rename to src/libClient/kotlin/hiiragi283/lib/integration/jei/HTJeiPlugin.kt diff --git a/src/lib/kotlin/hiiragi283/lib/integration/jei/HTJeiRecipeHelper.kt b/src/libClient/kotlin/hiiragi283/lib/integration/jei/HTJeiRecipeHelper.kt similarity index 100% rename from src/lib/kotlin/hiiragi283/lib/integration/jei/HTJeiRecipeHelper.kt rename to src/libClient/kotlin/hiiragi283/lib/integration/jei/HTJeiRecipeHelper.kt diff --git a/src/lib/kotlin/hiiragi283/lib/integration/jei/HTJeiRecipeType.kt b/src/libClient/kotlin/hiiragi283/lib/integration/jei/HTJeiRecipeType.kt similarity index 100% rename from src/lib/kotlin/hiiragi283/lib/integration/jei/HTJeiRecipeType.kt rename to src/libClient/kotlin/hiiragi283/lib/integration/jei/HTJeiRecipeType.kt diff --git a/src/lib/kotlin/hiiragi283/lib/integration/jei/JeiExtensions.kt b/src/libClient/kotlin/hiiragi283/lib/integration/jei/JeiExtensions.kt similarity index 100% rename from src/lib/kotlin/hiiragi283/lib/integration/jei/JeiExtensions.kt rename to src/libClient/kotlin/hiiragi283/lib/integration/jei/JeiExtensions.kt diff --git a/src/lib/kotlin/hiiragi283/lib/integration/jei/category/HTBasicRecipeCategory.kt b/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTBasicRecipeCategory.kt similarity index 83% rename from src/lib/kotlin/hiiragi283/lib/integration/jei/category/HTBasicRecipeCategory.kt rename to src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTBasicRecipeCategory.kt index 94e74d4545..defa8cd861 100644 --- a/src/lib/kotlin/hiiragi283/lib/integration/jei/category/HTBasicRecipeCategory.kt +++ b/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTBasicRecipeCategory.kt @@ -4,6 +4,7 @@ import com.mojang.serialization.Codec import hiiragi283.lib.gui.HTBackgroundType import hiiragi283.lib.integration.jei.HTJeiDrawables import hiiragi283.lib.integration.jei.HTJeiRecipeType +import hiiragi283.lib.integration.jei.ingredient.HTFluidSlotRenderer import hiiragi283.lib.recipe.base.HTProgressData import hiiragi283.lib.recipe.base.HTProgressRecipe import hiiragi283.lib.text.Text @@ -16,6 +17,7 @@ import mezz.jei.api.gui.widgets.IDrawableWidget import mezz.jei.api.gui.widgets.IRecipeExtrasBuilder import mezz.jei.api.helpers.ICodecHelper import mezz.jei.api.helpers.IGuiHelper +import mezz.jei.api.neoforge.NeoForgeTypes import mezz.jei.api.recipe.IFocusGroup import mezz.jei.api.recipe.IRecipeManager import mezz.jei.api.recipe.category.IRecipeCategory @@ -91,25 +93,10 @@ abstract class HTBasicRecipeCategory( fun getPosition(index: Double): Int = (index * 18).toInt() // IRecipeSlotBuilder - protected fun IRecipeSlotBuilder.setSlotBackground(type: HTBackgroundType): IRecipeSlotBuilder = - this.setBackground(HTJeiDrawables.getSlot(type, guiHelper), -1, -1).setSlotName(type.name) - - /** - * @since 26.1.6 - */ - protected fun IRecipeSlotBuilder.setFluidSlot(capacity: Int): IRecipeSlotBuilder = - this.setFluidRenderer(fixCapacity(capacity), false, 16, 16) - - protected fun IRecipeSlotBuilder.setSlotBackground(type: HTBackgroundType, capacity: Int): IRecipeSlotBuilder = this - .setSlotBackground(type) - .setFluidSlot(capacity) - - protected fun IRecipeSlotBuilder.setTankBackground(type: HTBackgroundType, capacity: Int): IRecipeSlotBuilder = this - .setBackground(HTJeiDrawables.getTank(type, guiHelper), -1, -1) + protected fun IRecipeSlotBuilder.setSlotBackground(type: HTBackgroundType): IRecipeSlotBuilder = this + .setBackground(HTJeiDrawables.getSlot(type, guiHelper), -1, -1) .setSlotName(type.name) - .setFluidSlot(capacity) - - private fun fixCapacity(capacity: Int): Long = maxOf(capacity, 1).toLong() + .setCustomRenderer(NeoForgeTypes.FLUID_STACK, HTFluidSlotRenderer) // IRecipeExtrasBuilder protected fun IRecipeExtrasBuilder.addRecipePlus(x: Int, y: Int = getPosition(0)): IDrawableWidget = @@ -119,7 +106,7 @@ abstract class HTBasicRecipeCategory( when (progressData) { is HTProgressData.Energy -> this.addRecipeArrowWidget() is HTProgressData.Time -> this.addAnimatedRecipeArrowWidget(progressData.value) - } + }.setTooltip(progressData.getText()) protected fun IRecipeExtrasBuilder.addRecipeArrow(recipe: HTProgressRecipe.Simple<*>): IDrawableWidget = this.addRecipeArrow(recipe.progressData) diff --git a/src/lib/kotlin/hiiragi283/lib/integration/jei/category/HTDoubleItemToRecipeCategory.kt b/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTDoubleItemToRecipeCategory.kt similarity index 100% rename from src/lib/kotlin/hiiragi283/lib/integration/jei/category/HTDoubleItemToRecipeCategory.kt rename to src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTDoubleItemToRecipeCategory.kt diff --git a/src/lib/kotlin/hiiragi283/lib/integration/jei/category/HTHolderRecipeCategory.kt b/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTHolderRecipeCategory.kt similarity index 100% rename from src/lib/kotlin/hiiragi283/lib/integration/jei/category/HTHolderRecipeCategory.kt rename to src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTHolderRecipeCategory.kt diff --git a/src/lib/kotlin/hiiragi283/lib/integration/jei/category/HTItemAndFluidToFluidRecipeCategory.kt b/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTItemAndFluidToFluidRecipeCategory.kt similarity index 76% rename from src/lib/kotlin/hiiragi283/lib/integration/jei/category/HTItemAndFluidToFluidRecipeCategory.kt rename to src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTItemAndFluidToFluidRecipeCategory.kt index 2a0c791c4b..85f68b30e1 100644 --- a/src/lib/kotlin/hiiragi283/lib/integration/jei/category/HTItemAndFluidToFluidRecipeCategory.kt +++ b/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTItemAndFluidToFluidRecipeCategory.kt @@ -25,23 +25,19 @@ class HTItemAndFluidToFluidRecipeCategory( focuses: IFocusGroup ) { // input - recipe.fluidIngredient.let { - builder - .addInputSlot(getPosition(0), getPosition(0)) - .add(it) - .setSlotBackground(HTBackgroundType.INPUT, it.amount) - } + builder + .addInputSlot(getPosition(0), getPosition(0)) + .add(recipe.fluidIngredient) + .setSlotBackground(HTBackgroundType.INPUT) builder .addInputSlot(getPosition(2), getPosition(0)) .add(recipe.itemIngredient) .setSlotBackground(HTBackgroundType.INPUT) // output - recipe.result.let { - builder - .addOutputSlot(getPosition(5), getPosition(0)) - .add(it) - .setSlotBackground(HTBackgroundType.OUTPUT, it.amount) - } + builder + .addOutputSlot(getPosition(5), getPosition(0)) + .add(recipe.result) + .setSlotBackground(HTBackgroundType.OUTPUT) } override fun setupRecipeExtras( diff --git a/src/lib/kotlin/hiiragi283/lib/integration/jei/category/HTItemAndFluidToItemRecipeCategory.kt b/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTItemAndFluidToItemRecipeCategory.kt similarity index 87% rename from src/lib/kotlin/hiiragi283/lib/integration/jei/category/HTItemAndFluidToItemRecipeCategory.kt rename to src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTItemAndFluidToItemRecipeCategory.kt index aa2461e4e9..c77df37a94 100644 --- a/src/lib/kotlin/hiiragi283/lib/integration/jei/category/HTItemAndFluidToItemRecipeCategory.kt +++ b/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTItemAndFluidToItemRecipeCategory.kt @@ -25,12 +25,10 @@ class HTItemAndFluidToItemRecipeCategory( focuses: IFocusGroup ) { // input - recipe.fluidIngredient.let { - builder - .addInputSlot(getPosition(0), getPosition(0)) - .add(it) - .setSlotBackground(HTBackgroundType.INPUT, it.amount) - } + builder + .addInputSlot(getPosition(0), getPosition(0)) + .add(recipe.fluidIngredient) + .setSlotBackground(HTBackgroundType.INPUT) builder .addInputSlot(getPosition(2), getPosition(0)) .add(recipe.itemIngredient) diff --git a/src/lib/kotlin/hiiragi283/lib/integration/jei/category/HTItemToDoubleItemRecipeCategory.kt b/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTItemToDoubleItemRecipeCategory.kt similarity index 100% rename from src/lib/kotlin/hiiragi283/lib/integration/jei/category/HTItemToDoubleItemRecipeCategory.kt rename to src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTItemToDoubleItemRecipeCategory.kt diff --git a/src/lib/kotlin/hiiragi283/lib/integration/jei/category/HTItemToItemAndFluidRecipeCategory.kt b/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTItemToItemAndFluidRecipeCategory.kt similarity index 87% rename from src/lib/kotlin/hiiragi283/lib/integration/jei/category/HTItemToItemAndFluidRecipeCategory.kt rename to src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTItemToItemAndFluidRecipeCategory.kt index ff3286c658..4f0280f4da 100644 --- a/src/lib/kotlin/hiiragi283/lib/integration/jei/category/HTItemToItemAndFluidRecipeCategory.kt +++ b/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTItemToItemAndFluidRecipeCategory.kt @@ -34,13 +34,10 @@ class HTItemToItemAndFluidRecipeCategory( .addOutputSlot(getPosition(3), getPosition(0)) .add(recipe.itemResult) .setSlotBackground(HTBackgroundType.OUTPUT) - - recipe.fluidResult.let { - builder - .addOutputSlot(getPosition(5), getPosition(0)) - .add(it) - .setSlotBackground(HTBackgroundType.OUTPUT, it.amount) - } + builder + .addOutputSlot(getPosition(5), getPosition(0)) + .add(recipe.fluidResult) + .setSlotBackground(HTBackgroundType.OUTPUT) } override fun setupRecipeExtras( diff --git a/src/lib/kotlin/hiiragi283/lib/integration/jei/category/HTSingleRecipeCategory.kt b/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTSingleRecipeCategory.kt similarity index 86% rename from src/lib/kotlin/hiiragi283/lib/integration/jei/category/HTSingleRecipeCategory.kt rename to src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTSingleRecipeCategory.kt index 12c938190b..72e3111ac7 100644 --- a/src/lib/kotlin/hiiragi283/lib/integration/jei/category/HTSingleRecipeCategory.kt +++ b/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTSingleRecipeCategory.kt @@ -7,8 +7,6 @@ import hiiragi283.lib.integration.jei.add import hiiragi283.lib.recipe.base.HTFluidToRecipe import hiiragi283.lib.recipe.base.HTItemToRecipe import hiiragi283.lib.recipe.base.HTProgressRecipe -import hiiragi283.lib.recipe.ingredient.HTFluidIngredient -import hiiragi283.lib.recipe.result.HTFluidResult import mezz.jei.api.gui.builder.IRecipeLayoutBuilder import mezz.jei.api.gui.builder.IRecipeSlotBuilder import mezz.jei.api.gui.widgets.IRecipeExtrasBuilder @@ -35,7 +33,7 @@ abstract class HTSingleRecipeCategory>( // output setOutput( builder - .addInputSlot(getPosition(3), getPosition(0)) + .addOutputSlot(getPosition(3), getPosition(0)) .setSlotBackground(HTBackgroundType.OUTPUT), recipe ) @@ -62,13 +60,11 @@ abstract class HTSingleRecipeCategory>( HTFluidToRecipe.BasicFluid.SIMPLE_CODEC ) { override fun setInput(builder: IRecipeSlotBuilder, recipe: HTFluidToRecipe.BasicFluid) { - val ingredient: HTFluidIngredient = recipe.ingredient - builder.add(ingredient).setFluidSlot(ingredient.amount) + builder.add(recipe.ingredient) } override fun setOutput(builder: IRecipeSlotBuilder, recipe: HTFluidToRecipe.BasicFluid) { - val result: HTFluidResult = recipe.result - builder.add(result).setFluidSlot(result.amount) + builder.add(recipe.result) } } @@ -85,8 +81,7 @@ abstract class HTSingleRecipeCategory>( HTFluidToRecipe.BasicItem.SIMPLE_CODEC ) { override fun setInput(builder: IRecipeSlotBuilder, recipe: HTFluidToRecipe.BasicItem) { - val ingredient: HTFluidIngredient = recipe.ingredient - builder.add(ingredient).setFluidSlot(ingredient.amount) + builder.add(recipe.ingredient) } override fun setOutput(builder: IRecipeSlotBuilder, recipe: HTFluidToRecipe.BasicItem) { @@ -111,8 +106,7 @@ abstract class HTSingleRecipeCategory>( } override fun setOutput(builder: IRecipeSlotBuilder, recipe: HTItemToRecipe.BasicFluid) { - val result: HTFluidResult = recipe.result - builder.add(result).setFluidSlot(result.amount) + builder.add(recipe.result) } } diff --git a/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTTripleItemToRecipeCategory.kt b/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTTripleItemToRecipeCategory.kt new file mode 100644 index 0000000000..5a53d98d0d --- /dev/null +++ b/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTTripleItemToRecipeCategory.kt @@ -0,0 +1,90 @@ +package hiiragi283.lib.integration.jei.category + +import com.mojang.serialization.MapCodec +import hiiragi283.lib.gui.HTBackgroundType +import hiiragi283.lib.integration.jei.HTHolderJeiRecipeType +import hiiragi283.lib.integration.jei.add +import hiiragi283.lib.recipe.base.HTProgressRecipe +import hiiragi283.lib.recipe.base.HTTripleItemToItemRecipe +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 + +/** + * @author Hiiragi Tsubasa + * @since 26.1.7 + */ +abstract class HTTripleItemToRecipeCategory>( + guiHelper: IGuiHelper, + recipeType: HTHolderJeiRecipeType, + codec: MapCodec +) : HTHolderRecipeCategory(guiHelper, recipeType, 18 * 7, 18 * 1, codec) { + override fun setupRecipe(builder: IRecipeLayoutBuilder, recipe: RECIPE, focuses: IFocusGroup) { + // input + setPrimaryInput( + builder + .addInputSlot(getPosition(0), getPosition(0)) + .setSlotBackground(HTBackgroundType.INPUT), + recipe + ) + setSecondaryInput( + builder + .addInputSlot(getPosition(2), getPosition(0)) + .setSlotBackground(HTBackgroundType.EXTRA_INPUT), + recipe + ) + setTertiaryInput( + builder + .addInputSlot(getPosition(3), getPosition(0)) + .setSlotBackground(HTBackgroundType.EXTRA_INPUT), + recipe + ) + // output + setOutput( + builder + .addOutputSlot(getPosition(6), getPosition(0)) + .setSlotBackground(HTBackgroundType.OUTPUT), + recipe + ) + } + + protected abstract fun setPrimaryInput(builder: IRecipeSlotBuilder, recipe: RECIPE) + + protected abstract fun setSecondaryInput(builder: IRecipeSlotBuilder, recipe: RECIPE) + + protected abstract fun setTertiaryInput(builder: IRecipeSlotBuilder, recipe: RECIPE) + + protected abstract fun setOutput(builder: IRecipeSlotBuilder, recipe: RECIPE) + + override fun setupRecipeExtras(builder: IRecipeExtrasBuilder, recipe: RECIPE, focuses: IFocusGroup) { + builder.addRecipePlus(getPosition(1)) + builder.addRecipeArrow(recipe).setPosition(getPosition(4.25), getPosition(0)) + } + + // Basic // + + class Basic(guiHelper: IGuiHelper, recipeType: HTHolderJeiRecipeType) : + HTTripleItemToRecipeCategory( + guiHelper, + recipeType, + HTTripleItemToItemRecipe.Basic.SIMPLE_CODEC + ) { + override fun setPrimaryInput(builder: IRecipeSlotBuilder, recipe: HTTripleItemToItemRecipe.Basic) { + builder.add(recipe.ingredient) + } + + override fun setSecondaryInput(builder: IRecipeSlotBuilder, recipe: HTTripleItemToItemRecipe.Basic) { + builder.add(recipe.secondary) + } + + override fun setTertiaryInput(builder: IRecipeSlotBuilder, recipe: HTTripleItemToItemRecipe.Basic) { + recipe.tertiary?.let(builder::add) + } + + override fun setOutput(builder: IRecipeSlotBuilder, recipe: HTTripleItemToItemRecipe.Basic) { + builder.add(recipe.result) + } + } +} diff --git a/src/libClient/kotlin/hiiragi283/lib/integration/jei/ingredient/HTFluidSlotRenderer.kt b/src/libClient/kotlin/hiiragi283/lib/integration/jei/ingredient/HTFluidSlotRenderer.kt new file mode 100644 index 0000000000..9ff20ac38c --- /dev/null +++ b/src/libClient/kotlin/hiiragi283/lib/integration/jei/ingredient/HTFluidSlotRenderer.kt @@ -0,0 +1,55 @@ +package hiiragi283.lib.integration.jei.ingredient + +import hiiragi283.lib.gui.HTGuiRenderHelper +import hiiragi283.lib.text.HTTextUtil +import hiiragi283.lib.text.translatableText +import mezz.jei.api.ingredients.IIngredientRenderer +import net.minecraft.ChatFormatting +import net.minecraft.client.Minecraft +import net.minecraft.client.gui.GuiGraphicsExtractor +import net.minecraft.network.chat.Component +import net.minecraft.world.entity.player.Player +import net.minecraft.world.item.Item +import net.minecraft.world.item.TooltipFlag +import net.neoforged.neoforge.fluids.FluidStack + +/** + * @author Hiiragi Tsubasa + * @since 26.1.7 + */ +data object HTFluidSlotRenderer : IIngredientRenderer { + override fun render(guiGraphics: GuiGraphicsExtractor, ingredient: FluidStack) { + render(guiGraphics, ingredient, 0, 0) + } + + override fun render(guiGraphics: GuiGraphicsExtractor, ingredient: FluidStack, posX: Int, posY: Int) { + HTGuiRenderHelper.renderFluid(guiGraphics, ingredient, posX, posY, width, height) + } + + @Suppress("removal") + @Deprecated("Deprecated in Java") + override fun getTooltip(ingredient: FluidStack, tooltipFlag: TooltipFlag): List { + val minecraft: Minecraft = Minecraft.getInstance() + val tooltipContext: Item.TooltipContext = Item.TooltipContext.of(minecraft.level) + return getTooltip(ingredient, tooltipContext, minecraft.player, tooltipFlag) + } + + override fun getTooltip( + ingredient: FluidStack, + tooltipContext: Item.TooltipContext, + player: Player?, + tooltipFlag: TooltipFlag + ): List = when { + ingredient.isEmpty -> listOf() + + else -> buildList { + addAll(ingredient.getTooltipLines(tooltipContext, player, tooltipFlag)) + add( + translatableText( + "jei.tooltip.liquid.amount", + HTTextUtil.INT_FORMAT.format(ingredient.amount) + ).withStyle(ChatFormatting.GRAY) + ) + } + } +} diff --git a/src/libClient/kotlin/hiiragi283/lib/integration/jei/ingredient/HTIngredientTypes.kt b/src/libClient/kotlin/hiiragi283/lib/integration/jei/ingredient/HTIngredientTypes.kt new file mode 100644 index 0000000000..033866190f --- /dev/null +++ b/src/libClient/kotlin/hiiragi283/lib/integration/jei/ingredient/HTIngredientTypes.kt @@ -0,0 +1,22 @@ +package hiiragi283.lib.integration.jei.ingredient + +import hiiragi283.ragium.api.RagiumAPI +import mezz.jei.api.ingredients.IIngredientType +import mezz.jei.api.registration.IModIngredientRegistration + +data object HTIngredientTypes { + + @JvmStatic + inline fun create(name: String): IIngredientType = create(name, T::class.java) + + @JvmStatic + fun create(name: String, clazz: Class): IIngredientType = object : IIngredientType { + override fun getIngredientClass(): Class = clazz + + override fun getUid(): String = "${RagiumAPI.MOD_ID}:$name" + } + + @JvmStatic + fun register(registration: IModIngredientRegistration) { + } +} diff --git a/src/client/kotlin/hiiragi283/lib/mod/HTClientMod.kt b/src/libClient/kotlin/hiiragi283/lib/mod/HTClientMod.kt similarity index 100% rename from src/client/kotlin/hiiragi283/lib/mod/HTClientMod.kt rename to src/libClient/kotlin/hiiragi283/lib/mod/HTClientMod.kt diff --git a/src/libClient/kotlin/hiiragi283/lib/renderer/HTBlockEntityRenderer.kt b/src/libClient/kotlin/hiiragi283/lib/renderer/HTBlockEntityRenderer.kt new file mode 100644 index 0000000000..5e6e630599 --- /dev/null +++ b/src/libClient/kotlin/hiiragi283/lib/renderer/HTBlockEntityRenderer.kt @@ -0,0 +1,17 @@ +package hiiragi283.lib.renderer + +import net.minecraft.client.renderer.blockentity.BlockEntityRenderer +import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider +import net.minecraft.client.renderer.blockentity.state.BlockEntityRenderState +import net.minecraft.world.level.block.entity.BlockEntity + +/** + * Hiiragi Seriesで使用される,[BlockEntityRenderer]の拡張クラスです。 + * @param BE 描画する[BlockEntity]のクラス + * @param S 描画に必要なデータを保持するクラス + * @author Hiiragi Tsubasa + * @since 26.1.7 + */ +abstract class HTBlockEntityRenderer( + context: BlockEntityRendererProvider.Context +) : BlockEntityRenderer diff --git a/src/libClient/kotlin/hiiragi283/lib/renderer/HTRenderHelper.kt b/src/libClient/kotlin/hiiragi283/lib/renderer/HTRenderHelper.kt new file mode 100644 index 0000000000..88901c4a77 --- /dev/null +++ b/src/libClient/kotlin/hiiragi283/lib/renderer/HTRenderHelper.kt @@ -0,0 +1,65 @@ +package hiiragi283.lib.renderer + +import com.mojang.blaze3d.vertex.PoseStack +import com.mojang.blaze3d.vertex.VertexConsumer +import net.minecraft.client.renderer.FaceInfo +import net.minecraft.client.renderer.SubmitNodeCollector +import net.minecraft.client.renderer.rendertype.RenderType +import net.minecraft.client.renderer.texture.OverlayTexture +import net.minecraft.client.renderer.texture.TextureAtlasSprite +import net.minecraft.core.Direction +import org.joml.Vector3f + +/** + * Hiiragi Seriesで使用される描画を補助するクラスです。 + * @author Hiiragi Tsubasa + * @since 26.1.7 + */ +data object HTRenderHelper { + /** + * キューブを描画します。 + * @see net.minecraft.client.renderer.blockentity.AbstractEndPortalRenderer.submitCube + */ + @JvmStatic + fun submitCube( + submitNodeCollector: SubmitNodeCollector, + poseStack: PoseStack, + renderType: RenderType, + from: Vector3f, + to: Vector3f, + sprite: TextureAtlasSprite, + color: Int, + light: Int + ) { + submitNodeCollector.submitCustomGeometry(poseStack, renderType) { + pose: PoseStack.Pose, + consumer: VertexConsumer + -> + for (direction: Direction in Direction.entries) { + val faceInfo: FaceInfo = FaceInfo.fromFacing(direction) + val positions: List = listOf( + faceInfo.getVertexInfo(0).select(from, to), + faceInfo.getVertexInfo(1).select(from, to), + faceInfo.getVertexInfo(2).select(from, to), + faceInfo.getVertexInfo(3).select(from, to) + ) + for (i: Int in positions.indices) { + val position: Vector3f = positions[i] + val (u: Float, v: Float) = when (i) { + 1 -> sprite.u1 to sprite.v0 + 2 -> sprite.u1 to sprite.v1 + 3 -> sprite.u0 to sprite.v1 + else -> sprite.u0 to sprite.v0 + } + consumer + .addVertex(pose, position) + .setUv(u, v) + .setColor(color) + .setLight(light) + .setOverlay(OverlayTexture.NO_OVERLAY) + .setNormal(pose, position) + } + } + } + } +} diff --git a/src/libClient/kotlin/hiiragi283/lib/renderer/state/HTFluidBERenderState.kt b/src/libClient/kotlin/hiiragi283/lib/renderer/state/HTFluidBERenderState.kt new file mode 100644 index 0000000000..48c5f2a9a6 --- /dev/null +++ b/src/libClient/kotlin/hiiragi283/lib/renderer/state/HTFluidBERenderState.kt @@ -0,0 +1,62 @@ +package hiiragi283.lib.renderer.state + +import hiiragi283.lib.transfer.fluid.HTFluidView +import hiiragi283.lib.transfer.fluid.getFluidStack +import net.minecraft.client.Minecraft +import net.minecraft.client.renderer.block.FluidModel +import net.minecraft.client.renderer.blockentity.state.BlockEntityRenderState +import net.minecraft.client.renderer.texture.TextureAtlasSprite +import net.neoforged.neoforge.transfer.fluid.FluidResource + +/** + * Hiiragi Seriesで使用される,液体を描画する[BlockEntityRenderState]の拡張クラスです。 + * @author Hiiragi Tsubasa + * @since 26.1.7 + */ +class HTFluidBERenderState : BlockEntityRenderState() { + /** + * 液体のスプライト + * + * `null`の場合は描画されません。 + */ + var sprite: TextureAtlasSprite? = null + + /** + * 液体の色 + */ + var color: Int = -1 + + /** + * 液体の充填率 + */ + var fillingLevel: Float = 0f + + /** + * 液体が空気より軽いか + */ + var isLighterThanAir: Boolean = false + + /** + * [HTFluidView]から情報を取得します。 + * @param view 液体の取得元 + */ + fun extractRenderState(view: HTFluidView) { + if (view.isEmpty) { + sprite = null + color = -1 + fillingLevel = 0f + isLighterThanAir = false + return + } + val resource: FluidResource = view.resource + + this.fillingLevel = view.currentFilledLevel + val model: FluidModel = Minecraft.getInstance() + .modelManager + .fluidStateModelSet + .get(resource.fluid.defaultFluidState()) + model.stillMaterial().sprite().let(this::sprite::set) + model.fluidTintSource()?.colorAsStack(view.getFluidStack())?.let(this::color::set) + this.isLighterThanAir = resource.fluidType.isLighterThanAir + } +} diff --git a/src/libClient/kotlin/hiiragi283/lib/renderer/state/HTItemBERenderState.kt b/src/libClient/kotlin/hiiragi283/lib/renderer/state/HTItemBERenderState.kt new file mode 100644 index 0000000000..e8ef969258 --- /dev/null +++ b/src/libClient/kotlin/hiiragi283/lib/renderer/state/HTItemBERenderState.kt @@ -0,0 +1,13 @@ +package hiiragi283.lib.renderer.state + +import net.minecraft.client.renderer.blockentity.state.BlockEntityRenderState +import net.minecraft.client.renderer.item.ItemStackRenderState + +/** + * Hiiragi Seriesで使用される,アイテムを描画する[BlockEntityRenderState]の拡張クラスです。 + * @author Hiiragi Tsubasa + * @since 26.1.7 + */ +class HTItemBERenderState : BlockEntityRenderState() { + val itemState: ItemStackRenderState = ItemStackRenderState() +} diff --git a/src/main/kotlin/hiiragi283/ragium/common/Ragium.kt b/src/main/kotlin/hiiragi283/ragium/common/Ragium.kt index c8a03544a2..19b1882712 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/Ragium.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/Ragium.kt @@ -1,8 +1,6 @@ package hiiragi283.ragium.common import hiiragi283.lib.HTConstants -import hiiragi283.lib.capability.HTEnergyCapabilities -import hiiragi283.lib.capability.HTFluidCapabilities import hiiragi283.lib.gui.sync.HTFluidSyncPayload import hiiragi283.lib.gui.sync.HTIntSyncPayload import hiiragi283.lib.gui.sync.HTItemSyncPayload @@ -11,6 +9,7 @@ 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 import hiiragi283.lib.recipe.result.HTItemResult @@ -18,54 +17,36 @@ 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.oreSlurry.HTOreSlurryData -import hiiragi283.ragium.api.data.oreSlurry.RagiumOreSlurryData -import hiiragi283.ragium.api.material.HTBlockPart -import hiiragi283.ragium.api.material.RagiumMaterial import hiiragi283.ragium.api.recipe.RagiumRecipeSerializers import hiiragi283.ragium.api.recipe.RagiumRecipeTypes import hiiragi283.ragium.api.text.RagiumTranslation import hiiragi283.ragium.common.block.RagiumBlocks import hiiragi283.ragium.common.block.entity.RagiumBlockEntityTypes -import hiiragi283.ragium.common.block.entity.machine.HTProcessorBlockEntity import hiiragi283.ragium.common.effect.RagiumMobEffects import hiiragi283.ragium.common.fluid.RagiumFluids import hiiragi283.ragium.common.gui.factory.HTBlockWidgetHolderContext import hiiragi283.ragium.common.gui.widget.RagiumWidgetTypes -import hiiragi283.ragium.common.item.HTOreSlurryBucketItem -import hiiragi283.ragium.common.item.HTPotionBucketItem import hiiragi283.ragium.common.item.RagiumItems import hiiragi283.ragium.common.item.alchemy.RagiumPotions import hiiragi283.ragium.common.network.HTUpdateBlockEntityPacket import hiiragi283.ragium.common.network.HTUpdateMenuPacket -import net.minecraft.core.HolderLookup -import net.minecraft.core.component.DataComponentMap -import net.minecraft.core.component.DataComponents import net.minecraft.core.registries.Registries import net.minecraft.world.item.CreativeModeTab import net.minecraft.world.item.Items -import net.minecraft.world.item.Rarity -import net.minecraft.world.level.ItemLike -import net.minecraft.world.level.block.entity.BlockEntityType import net.neoforged.bus.api.IEventBus import net.neoforged.fml.ModContainer import net.neoforged.fml.common.Mod import net.neoforged.fml.config.ModConfig import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent import net.neoforged.neoforge.common.extensions.IMenuTypeExtension -import net.neoforged.neoforge.event.ModifyDefaultComponentsEvent import net.neoforged.neoforge.network.registration.PayloadRegistrar -import net.neoforged.neoforge.registries.DataPackRegistryEvent import net.neoforged.neoforge.registries.NeoForgeRegistries import net.neoforged.neoforge.registries.RegisterEvent -import net.neoforged.neoforge.transfer.access.ItemAccess -import net.neoforged.neoforge.transfer.energy.InfiniteEnergyHandler @Mod(RagiumAPI.MOD_ID) data object Ragium : HTCommonMod() { override fun initialize(eventBus: IEventBus, container: ModContainer) { eventBus.addListener(::register) - eventBus.addListener(::modifyDefaultComponents) RagiumFluids.register(eventBus) RagiumBlocks.register(eventBus) @@ -109,6 +90,7 @@ data object Ragium : HTCommonMod() { helper.register(RagiumAPI.id(HTConstants.FLUID), RagiumDataComponents.FLUID) helper.register(RagiumAPI.id("memory_disc_data"), RagiumDataComponents.MEMORY_DISC_DATA) helper.register(RagiumAPI.id("ore_slurry_data"), RagiumDataComponents.ORE_SLURRY_DATA) + helper.register(RagiumAPI.id("owner_id"), RagiumDataComponents.OWNER_ID) } event.register(Registries.MENU) { helper -> helper.register( @@ -126,6 +108,9 @@ data object Ragium : HTCommonMod() { } } + event.register(NeoForgeRegistries.Keys.INGREDIENT_TYPES) { helper -> + helper.register(RagiumAPI.id("material_tags"), HTMaterialTagsIngredient.TYPE) + } event.register(NeoForgeRegistries.Keys.FLUID_INGREDIENT_TYPES) { helper -> helper.register(RagiumAPI.id(HTConstants.POTION), HTPotionFluidIngredient.TYPE) } @@ -138,6 +123,7 @@ data object Ragium : HTCommonMod() { helper.register(RagiumAPI.id("simple"), HTItemResult.SimpleEntry.TYPE) helper.register(RagiumAPI.id(HTConstants.TAG), HTItemResult.TagEntry.TYPE) helper.register(RagiumAPI.id("enchanted_book"), HTItemResult.EnchantedBookEntry.TYPE) + helper.register(RagiumAPI.id("with_fallback"), HTItemResult.WithFallbackEntry.TYPE) } event.register(RagiumRegistries.Keys.SYNCABLE_SLOT_TYPE) { helper -> helper.register(RagiumAPI.id("integer"), HTIntSyncPayload.TYPE) @@ -151,90 +137,10 @@ data object Ragium : HTCommonMod() { } } - private fun modifyDefaultComponents(event: ModifyDefaultComponentsEvent) { - // Block - setOf( - RagiumMaterial.Metal.BLACK_STEEL to Rarity.UNCOMMON, - RagiumMaterial.Metal.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 - event.modify(block) { builder: DataComponentMap.Builder, _, _ -> - builder.set(DataComponents.RARITY, rarity) - } - } - } - event.modify(RagiumBlocks.CREATIVE_BATTERY) { builder: DataComponentMap.Builder, _, _ -> - builder.set(DataComponents.RARITY, Rarity.EPIC) - } - // 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)) - } - } - - override fun registerDynamicRegistries(event: DataPackRegistryEvent.NewRegistry) { - event.dataPackRegistry( - RagiumRegistries.Keys.ORE_SLURRY_DATA, - HTOreSlurryData.DIRECT_CODEC, - HTOreSlurryData.DIRECT_CODEC - ) - } - override fun commonSetup(event: FMLCommonSetupEvent) { RagiumCommon.initialize(event) } - override fun registerCapabilities(helper: CapabilityHelper) { - registerBlockEntities(helper) - - helper.registerItem( - HTFluidCapabilities.item, - { _, access: ItemAccess -> HTPotionBucketItem.BucketHandler(access) }, - RagiumFluids.POTION.bucketHolder - ) - helper.registerItem( - HTFluidCapabilities.item, - { _, access: ItemAccess -> HTOreSlurryBucketItem.BucketHandler(access) }, - RagiumFluids.ORE_SLURRY.bucketHolder - ) - } - - private fun registerBlockEntities(helper: CapabilityHelper) { - fun registerProcessor(type: BlockEntityType) { - helper.registerBlockEntity(type) - helper.registerBlockEntity(HTEnergyCapabilities.block, type) { processor: BE, _ -> - processor.handler.asForge() - } - } - - // Machine - registerProcessor(RagiumBlockEntityTypes.ASSEMBLER.get()) - registerProcessor(RagiumBlockEntityTypes.CRUSHER.get()) - registerProcessor(RagiumBlockEntityTypes.COMPRESSOR.get()) - registerProcessor(RagiumBlockEntityTypes.CUTTING_MACHINE.get()) - - registerProcessor(RagiumBlockEntityTypes.ALLOY_SMELTER.get()) - registerProcessor(RagiumBlockEntityTypes.FREEZER.get()) - registerProcessor(RagiumBlockEntityTypes.MELTER.get()) - registerProcessor(RagiumBlockEntityTypes.SMELTER.get()) - - registerProcessor(RagiumBlockEntityTypes.CHEMICAL_BATH.get()) - - registerProcessor(RagiumBlockEntityTypes.BREWERY.get()) - // Storage - helper.registerBlockEntity( - HTEnergyCapabilities.block, - RagiumBlockEntityTypes.CREATIVE_BATTERY.get() - ) { _, _ -> InfiniteEnergyHandler.INSTANCE } - } - override fun registerPayload(registrar: PayloadRegistrar) { registrar.playToClient(HTUpdateBlockEntityPacket.TYPE, HTUpdateBlockEntityPacket.STREAM_CODEC) registrar.playBidirectional( diff --git a/src/main/kotlin/hiiragi283/ragium/common/RagiumCommon.kt b/src/main/kotlin/hiiragi283/ragium/common/RagiumCommon.kt index d098454130..fac9ba6330 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/RagiumCommon.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/RagiumCommon.kt @@ -9,6 +9,7 @@ import hiiragi283.lib.item.alchemy.HTBottleType import hiiragi283.lib.recipe.RecipeKey import hiiragi283.lib.recipe.ingredient.HTPotionFluidIngredient import hiiragi283.lib.recipe.lookup.fromRecipeType +import hiiragi283.lib.registry.HTFluidContent import hiiragi283.lib.registry.getKeyOrThrow import hiiragi283.lib.registry.getOrNull import hiiragi283.lib.resource.modifyPath @@ -19,10 +20,13 @@ 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.HolderSet import net.minecraft.core.RegistryAccess import net.minecraft.core.registries.BuiltInRegistries @@ -60,7 +64,7 @@ internal data object RagiumCommon { ) { state: FluidState -> when (state.isSource) { true -> Blocks.OBSIDIAN.defaultBlockState() - false -> VanillaColoredCollections.CONCRETE[color].block.defaultState + false -> VanillaColoredCollections.CONCRETE[color].defaultState } } ) @@ -106,8 +110,7 @@ internal data object RagiumCommon { ) RagiumRecipeLookups.BATHING.addSubLookup { (_, registries: RegistryAccess) -> - val oxygen: HolderSet.Named = - registries.getOrNull(RagiumFluids.OXYGEN.fluidTag) ?: return@addSubLookup sequenceOf() + val oxygen: HolderSet = registries.getOrNull(RagiumFluids.OXYGEN) ?: return@addSubLookup sequenceOf() BuiltInRegistries.BLOCK .getDataMap(NeoForgeDataMaps.OXIDIZABLES) .asSequence() @@ -124,8 +127,8 @@ internal data object RagiumCommon { } } RagiumRecipeLookups.BATHING.addSubLookup { (_, registries: RegistryAccess) -> - val hydrogen: HolderSet.Named = - registries.getOrNull(RagiumFluids.HYDROGEN.fluidTag) ?: return@addSubLookup sequenceOf() + val hydrogen: HolderSet = + registries.getOrNull(RagiumFluids.HYDROGEN) ?: return@addSubLookup sequenceOf() BuiltInRegistries.BLOCK .getDataMap(NeoForgeDataMaps.OXIDIZABLES) .asSequence() @@ -142,8 +145,8 @@ internal data object RagiumCommon { } } RagiumRecipeLookups.BATHING.addSubLookup { (_, registries: RegistryAccess) -> - val antiRustOil: HolderSet.Named = - registries.getOrNull(RagiumFluids.ANTI_RUST_OIL.fluidTag) ?: return@addSubLookup sequenceOf() + val antiRustOil: HolderSet = + registries.getOrNull(RagiumFluids.ANTI_RUST_OIL) ?: return@addSubLookup sequenceOf() BuiltInRegistries.BLOCK .getDataMap(NeoForgeDataMaps.WAXABLES) .asSequence() @@ -186,5 +189,15 @@ 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? = + this.getOrNull(content.fluidTag) } diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt b/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt index c4743f000d..bf74266fd5 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt @@ -1,33 +1,57 @@ package hiiragi283.ragium.common.block -import hiiragi283.lib.collection.ListMultiMap +import hiiragi283.lib.capability.HTEnergyCapabilities +import hiiragi283.lib.capability.HTFluidCapabilities import hiiragi283.lib.collection.Table import hiiragi283.lib.collection.buildListMultiMap -import hiiragi283.lib.collection.buildSortedSetMultiMap +import hiiragi283.lib.collection.buildSetMultiMap import hiiragi283.lib.collection.buildTable import hiiragi283.lib.collection.flatMapTable import hiiragi283.lib.collection.mutableEnumMapOf import hiiragi283.lib.registry.HTBasicDeferredBlockAndItem +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.ragium.api.RagiumAPI +import hiiragi283.ragium.api.RagiumConfig import hiiragi283.ragium.api.RagiumConstants +import hiiragi283.ragium.api.data.RagiumDataComponents 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.RagiumBlockEntityTypes +import hiiragi283.ragium.common.block.storage.HTTankBlock +import hiiragi283.ragium.common.block.storage.HTVoidTankBlock +import hiiragi283.ragium.common.item.block.HTCreativeTankBlockItem +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 +import net.minecraft.world.item.Rarity +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.SoundType +import net.minecraft.world.level.block.StairBlock import net.minecraft.world.level.block.state.BlockBehaviour import net.minecraft.world.level.material.MapColor import net.neoforged.bus.api.IEventBus +import net.neoforged.neoforge.capabilities.RegisterCapabilitiesEvent +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 @@ -40,6 +64,9 @@ data object RagiumBlocks { fun register(eventBus: IEventBus) { REGISTER.addAlias("steel_block", "sooty_iron_block") + eventBus.addListener(::registerCapabilities) + eventBus.addListener(::modifyDefaultComponents) + REGISTER.register(eventBus) } @@ -64,6 +91,15 @@ data object RagiumBlocks { ): HTBasicDeferredBlockAndItem = REGISTER.registerSimple(type.idOrThrow.path, { factory(type, properties.setId(it)) }) + @JvmStatic + private fun registerMachine( + type: HTDeferredBlockEntityType<*>, + factory: (HTDeferredBlockEntityType<*>, BlockBehaviour.Properties) -> BLOCK, + itemFactory: ItemWithContextFactory, + properties: BlockBehaviour.Properties = machine() + ): HTDeferredBlockAndItem = + REGISTER.register(type.idOrThrow.path, { factory(type, properties.setId(it)) }, itemFactory) + @JvmStatic private fun registerMachine( type: HTDeferredBlockEntityType<*>, @@ -82,10 +118,13 @@ data object RagiumBlocks { // Ingredient // @JvmField - val MATERIAL_ORES: Table = buildSortedSetMultiMap { - putAll(RagiumMaterial.Mineral.SULFUR, HTOreBlockPart.STONE, HTOreBlockPart.DEEPSLATE, HTOreBlockPart.NETHER) - putAll(RagiumMaterial.Mineral.NITER, HTOreBlockPart.STONE, HTOreBlockPart.DEEPSLATE, HTOreBlockPart.NETHER) - }.flatMapTable { (material: RagiumMaterial, parts: Collection) -> + val MATERIAL_ORES: Table = buildSetMultiMap( + { + putAll(RagiumMaterial.Mineral.SULFUR, HTOreBlockPart.STONE, HTOreBlockPart.DEEPSLATE, HTOreBlockPart.NETHER) + putAll(RagiumMaterial.Mineral.NITER, HTOreBlockPart.STONE, HTOreBlockPart.DEEPSLATE, HTOreBlockPart.NETHER) + }, + ::sortedSetOf + ).flatMapTable { (material: RagiumMaterial, parts: Collection) -> parts.map { part: HTOreBlockPart -> val properties: BlockBehaviour.Properties = when (part) { HTOreBlockPart.STONE -> Blocks.COAL_ORE @@ -108,7 +147,8 @@ data object RagiumBlocks { val STORAGE_BLOCKS: Map = setOf( RagiumMaterial.Fuel.CHARCOAL to copyOf(Blocks.COAL_BLOCK).sound(SoundType.TUFF), RagiumMaterial.Fuel.COAL_COKE to copyOf(Blocks.COAL_BLOCK).mapColor(MapColor.COLOR_GRAY), - RagiumMaterial.Gem.ECHO to copyOf(Blocks.AMETHYST_BLOCK).mapColor(MapColor.COLOR_CYAN), + 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) @@ -138,6 +178,51 @@ data object RagiumBlocks { fun getOrThrow(part: HTBlockPart, material: RagiumMaterial): HTSimpleDeferredBlockAndItem = MATERIAL_BLOCKS[part, material] ?: error("Unregistered block: ${part.createName(material)}") + // Echo + @JvmField + val ECHO_BLOCK: HTSimpleDeferredBlockAndItem = + REGISTER.registerSimple("echo_block", copyOf(Blocks.AMETHYST_BLOCK).mapColor(MapColor.COLOR_CYAN)) + + // 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 + ) + + @JvmField + val FLUORITE_STAIRS: HTBasicDeferredBlockAndItem = REGISTER.registerSimple( + "fluorite_stairs", + blockFactory = { key: ResourceKey -> + StairBlock(FLUORITE_BLOCK.defaultState, copyOf(FLUORITE_BLOCK.getOrThrow()).setId(key)) + } + ) + + // Cryolite + @JvmField + val CRYOLITE_BLOCK: HTSimpleDeferredBlockAndItem = + REGISTER.registerSimple("cryolite_block", copyOf(Blocks.QUARTZ_BLOCK)) + + @JvmField + val CRYOLITE_SLAB: HTBasicDeferredBlockAndItem = REGISTER.registerSimple( + "cryolite_slab", + copyOf(Blocks.QUARTZ_SLAB), + ::SlabBlock + ) + + @JvmField + val CRYOLITE_STAIRS: HTBasicDeferredBlockAndItem = REGISTER.registerSimple( + "cryolite_stairs", + blockFactory = { key: ResourceKey -> + StairBlock(CRYOLITE_BLOCK.defaultState, copyOf(CRYOLITE_BLOCK.getOrThrow()).setId(key)) + } + ) + // Machine // // Mechanical @@ -197,7 +282,7 @@ data object RagiumBlocks { @JvmField val MIXER: HTBasicDeferredBlockAndItem = - registerFakeMachine(RagiumConstants.MIXER) + registerMachine(RagiumBlockEntityTypes.MIXER) // Bio @JvmField @@ -206,47 +291,84 @@ data object RagiumBlocks { @JvmField val PLANTER: HTBasicDeferredBlockAndItem = - registerFakeMachine(RagiumConstants.PLANTER) + registerMachine(RagiumBlockEntityTypes.PLANTER) // Electronics + @JvmField + val PRECISION_ASSEMBLER: HTBasicDeferredBlockAndItem = + registerMachine(RagiumBlockEntityTypes.PRECISION_ASSEMBLER) + @JvmField val SCANNER: HTBasicDeferredBlockAndItem = registerFakeMachine(RagiumConstants.SCANNER) // Arcane - @JvmField - val MACHINES: ListMultiMap> = - buildListMultiMap(sortedMapOf()) { - put(HTMachineType.MECHANICAL, ASSEMBLER) - put(HTMachineType.MECHANICAL, CRUSHER) - put(HTMachineType.MECHANICAL, COMPRESSOR) - put(HTMachineType.MECHANICAL, CUTTING_MACHINE) - - put(HTMachineType.HEAT, ALLOY_SMELTER) - put(HTMachineType.HEAT, FREEZER) - put(HTMachineType.HEAT, MELTER) - put(HTMachineType.HEAT, PYROLYZER) - put(HTMachineType.HEAT, REFINERY) - put(HTMachineType.HEAT, SMELTER) + val ENCHANTER: HTBasicDeferredBlockAndItem = + registerMachine(RagiumBlockEntityTypes.ENCHANTER) - put(HTMachineType.CHEMICAL, CHEMICAL_BATH) - put(HTMachineType.CHEMICAL, CHEMICAL_REACTOR) - put(HTMachineType.CHEMICAL, ELECTROLYZER) - put(HTMachineType.CHEMICAL, MIXER) + @JvmField + val MACHINES: Map>> = + buildListMultiMap( + sortedMapOf(), + { + put(HTMachineType.MECHANICAL, ASSEMBLER) + put(HTMachineType.MECHANICAL, CRUSHER) + put(HTMachineType.MECHANICAL, COMPRESSOR) + put(HTMachineType.MECHANICAL, CUTTING_MACHINE) + + put(HTMachineType.HEAT, ALLOY_SMELTER) + put(HTMachineType.HEAT, FREEZER) + put(HTMachineType.HEAT, MELTER) + put(HTMachineType.HEAT, PYROLYZER) + put(HTMachineType.HEAT, REFINERY) + put(HTMachineType.HEAT, SMELTER) + + 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, PRECISION_ASSEMBLER) + put(HTMachineType.ELECTRONICS, SCANNER) + + put(HTMachineType.ARCANE, ENCHANTER) + } + ) - put(HTMachineType.BIO, BREWERY) - put(HTMachineType.BIO, PLANTER) + // Storage // - put(HTMachineType.ELECTRONICS, SCANNER) - } + @JvmField + val TANK: HTBasicDeferredBlockAndItem = registerMachine( + RagiumBlockEntityTypes.TANK, + ::HTTankBlock, + machine().noOcclusion() + ) - // Storage // + // Void + @JvmField + val VOID_TANK: HTBasicDeferredBlockAndItem = REGISTER.registerSimple( + "void_tank", + machine().noOcclusion(), + ::HTVoidTankBlock + ) + // Creative @JvmField val CREATIVE_BATTERY: HTBasicDeferredBlockAndItem = registerMachine(RagiumBlockEntityTypes.CREATIVE_BATTERY, ::HTBasicEntityBlock) + @JvmField + val CREATIVE_TANK: HTDeferredBlockAndItem = registerMachine( + RagiumBlockEntityTypes.CREATIVE_TANK, + ::HTTankBlock, + ::HTCreativeTankBlockItem, + machine().noOcclusion() + ) + // Decoration // @JvmField @@ -260,4 +382,61 @@ data object RagiumBlocks { @JvmStatic fun getCasing(machineType: HTMachineType): HTSimpleDeferredBlockAndItem = MACHINE_CASINGS[machineType]!! + + // Events // + + @JvmStatic + private fun registerCapabilities(event: RegisterCapabilitiesEvent) { + // Block + event.registerItem( + HTFluidCapabilities.item, + { _, access -> + ItemAccessFluidHandler( + access, + RagiumDataComponents.FLUID, + RagiumConfig.SERVER.tankCapacity.asInt + ) + }, + TANK + ) + event.registerItem( + HTFluidCapabilities.item, + { _, _ -> HTVoidTankBlock.VOIDING_HANDLER }, + VOID_TANK + ) + event.registerItem( + HTEnergyCapabilities.item, + { _, _ -> InfiniteEnergyHandler.INSTANCE }, + CREATIVE_BATTERY + ) + event.registerItem( + HTFluidCapabilities.item, + { stack: ItemStack, _ -> + HTStorageHelper.getFluid(stack) + .let(FluidResource::of) + .takeUnless(FluidResource::isEmpty) + ?.let(::InfiniteResourceHandler) + }, + CREATIVE_TANK + ) + } + + @JvmStatic + private fun modifyDefaultComponents(event: ModifyDefaultComponentsEvent) { + // Block + setOf( + RagiumMaterial.Metal.BLACK_STEEL to Rarity.UNCOMMON, + RagiumMaterial.Metal.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 + event.modify(block) { builder: DataComponentMap.Builder, _, _ -> + builder.set(DataComponents.RARITY, rarity) + } + } + } + event.modify(RagiumBlocks.CREATIVE_BATTERY) { builder: DataComponentMap.Builder, _, _ -> + builder.set(DataComponents.RARITY, Rarity.EPIC) + } + } } diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTBlockEntity.kt index aa195aa336..1699b862a8 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/HTBlockEntity.kt @@ -14,9 +14,13 @@ import hiiragi283.lib.transfer.item.HTItemSlot import hiiragi283.lib.transfer.item.ItemResourceHandler import hiiragi283.lib.transfer.item.getItemStack import hiiragi283.lib.transfer.resolver.HTResourceCapabilityManager +import hiiragi283.ragium.api.data.RagiumDataComponents import hiiragi283.ragium.common.transfer.HTCapabilityCodec import net.minecraft.core.BlockPos import net.minecraft.core.Direction +import net.minecraft.core.component.DataComponentGetter +import net.minecraft.core.component.DataComponentMap +import net.minecraft.core.component.DataComponents import net.minecraft.server.level.ServerLevel import net.minecraft.world.Nameable import net.minecraft.world.level.Level @@ -105,6 +109,18 @@ abstract class HTBlockEntity(type: BlockEntityType<*>, worldPosition: BlockPos, input.read(HTConstants.OWNER, HTCodecs.UUID).ifPresent(::ownerId::set) } + override fun applyImplicitComponents(components: DataComponentGetter) { + super.applyImplicitComponents(components) + components.get(DataComponents.CUSTOM_NAME)?.let(::customName::set) + components.get(RagiumDataComponents.OWNER_ID)?.let(::ownerId::set) + } + + override fun collectImplicitComponents(components: DataComponentMap.Builder) { + super.collectImplicitComponents(components) + components[DataComponents.CUSTOM_NAME] = customName + components[RagiumDataComponents.OWNER_ID] = ownerId + } + // Nameable // private var customName: Text? = 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 c0e707aabf..d354f3c0e2 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/RagiumBlockEntityTypes.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/RagiumBlockEntityTypes.kt @@ -1,8 +1,13 @@ package hiiragi283.ragium.common.block.entity +import hiiragi283.lib.HTConstants +import hiiragi283.lib.capability.HTEnergyCapabilities +import hiiragi283.lib.capability.HTFluidCapabilities +import hiiragi283.lib.capability.HTItemCapabilities import hiiragi283.lib.registry.HTDeferredBlock import hiiragi283.lib.registry.HTDeferredBlockEntityType import hiiragi283.lib.registry.HTDeferredBlockEntityTypeRegister +import hiiragi283.lib.transfer.HTHandlerProvider import hiiragi283.ragium.api.RagiumAPI import hiiragi283.ragium.api.RagiumConstants import hiiragi283.ragium.common.block.HTBasicEntityBlock @@ -14,14 +19,26 @@ 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.HTEnchanterBlockEntity import hiiragi283.ragium.common.block.entity.machine.HTFreezerBlockEntity import hiiragi283.ragium.common.block.entity.machine.HTMelterBlockEntity +import hiiragi283.ragium.common.block.entity.machine.HTMixerBlockEntity +import hiiragi283.ragium.common.block.entity.machine.HTPlanterBlockEntity +import hiiragi283.ragium.common.block.entity.machine.HTPrecisionAssemblerBlockEntity +import hiiragi283.ragium.common.block.entity.machine.HTProcessorBlockEntity import hiiragi283.ragium.common.block.entity.machine.HTSmelterBlockEntity import hiiragi283.ragium.common.block.entity.storage.HTCreativeBatteryBlockEntity +import hiiragi283.ragium.common.block.entity.storage.HTCreativeTankBlockEntity +import hiiragi283.ragium.common.block.entity.storage.HTTankBlockEntity +import hiiragi283.ragium.common.block.storage.HTVoidTankBlock +import net.minecraft.core.Direction import net.minecraft.world.level.block.Block +import net.minecraft.world.level.block.entity.BlockEntity import net.minecraft.world.level.block.entity.BlockEntityType import net.neoforged.bus.api.IEventBus +import net.neoforged.neoforge.capabilities.RegisterCapabilitiesEvent import net.neoforged.neoforge.event.BlockEntityTypeAddBlocksEvent +import net.neoforged.neoforge.transfer.energy.InfiniteEnergyHandler data object RagiumBlockEntityTypes { @JvmField @@ -30,6 +47,7 @@ data object RagiumBlockEntityTypes { @JvmStatic fun register(event: IEventBus) { event.addListener(::addSupportedBlocks) + event.addListener(::registerCapabilities) REGISTER.register(event) } @@ -80,23 +98,45 @@ data object RagiumBlockEntityTypes { val CHEMICAL_BATH: HTDeferredBlockEntityType = registerTick(RagiumConstants.CHEMICAL_BATH, ::HTChemicalBathBlockEntity) + @JvmField + val MIXER: HTDeferredBlockEntityType = + registerTick(RagiumConstants.MIXER, ::HTMixerBlockEntity) + // Bio @JvmField val BREWERY: HTDeferredBlockEntityType = registerTick(RagiumConstants.BREWERY, ::HTBreweryBlockEntity) + @JvmField + val PLANTER: HTDeferredBlockEntityType = + registerTick(RagiumConstants.PLANTER, ::HTPlanterBlockEntity) + // Electronics + @JvmField + val PRECISION_ASSEMBLER: HTDeferredBlockEntityType = + registerTick(RagiumConstants.PRECISION_ASSEMBLER, ::HTPrecisionAssemblerBlockEntity) + // Arcane + @JvmField + val ENCHANTER: HTDeferredBlockEntityType = + registerTick(RagiumConstants.ENCHANTER, ::HTEnchanterBlockEntity) // Storage // + @JvmField + val TANK: HTDeferredBlockEntityType = + registerTick(HTConstants.TANK, ::HTTankBlockEntity) + @JvmField val CREATIVE_BATTERY: HTDeferredBlockEntityType = registerTick("creative_battery", ::HTCreativeBatteryBlockEntity) - // Event // + @JvmField + val CREATIVE_TANK: HTDeferredBlockEntityType = + registerTick("creative_tank", ::HTCreativeTankBlockEntity) + + // Events // - // Supported Blocks @JvmStatic private fun addSupportedBlocks(event: BlockEntityTypeAddBlocksEvent) { for (holder: HTDeferredBlock<*> in RagiumBlocks.REGISTER.asBlockSequence()) { @@ -106,4 +146,60 @@ data object RagiumBlockEntityTypes { } } } + + @JvmStatic + private fun registerCapabilities(event: RegisterCapabilitiesEvent) { + fun registerBlockEntity(type: BlockEntityType) where BE : BlockEntity, BE : HTHandlerProvider { + event.registerBlockEntity(HTItemCapabilities.block, type) { blockEntity: BE, side: Direction? -> + blockEntity.getItemHandler(side) + } + event.registerBlockEntity(HTFluidCapabilities.block, type) { blockEntity: BE, side: Direction? -> + blockEntity.getFluidHandler(side) + } + } + + fun registerProcessor(type: BlockEntityType) { + registerBlockEntity(type) + event.registerBlockEntity(HTEnergyCapabilities.block, type) { processor: BE, _ -> + processor.handler.asForge() + } + } + + // Machine + registerProcessor(ASSEMBLER.get()) + registerProcessor(CRUSHER.get()) + registerProcessor(COMPRESSOR.get()) + registerProcessor(CUTTING_MACHINE.get()) + + registerProcessor(ALLOY_SMELTER.get()) + registerProcessor(FREEZER.get()) + registerProcessor(MELTER.get()) + registerProcessor(SMELTER.get()) + + registerProcessor(CHEMICAL_BATH.get()) + registerProcessor(MIXER.get()) + + registerProcessor(BREWERY.get()) + registerProcessor(PLANTER.get()) + + registerProcessor(PRECISION_ASSEMBLER.get()) + + registerProcessor(ENCHANTER.get()) + // Storage + registerBlockEntity(TANK.get()) + + event.registerBlock( + HTFluidCapabilities.block, + { _, _, _, _, _ -> + HTVoidTankBlock.VOIDING_HANDLER + }, + RagiumBlocks.VOID_TANK.getOrThrow() + ) + + event.registerBlockEntity( + HTEnergyCapabilities.block, + CREATIVE_BATTERY.get() + ) { _, _ -> InfiniteEnergyHandler.INSTANCE } + registerBlockEntity(CREATIVE_TANK.get()) + } } diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTAlloySmelterBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTAlloySmelterBlockEntity.kt index 6554c80f84..0c0a61ed5e 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTAlloySmelterBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTAlloySmelterBlockEntity.kt @@ -1,5 +1,7 @@ package hiiragi283.ragium.common.block.entity.machine +import hiiragi283.lib.recipe.base.HTTripleItemToItemRecipe +import hiiragi283.lib.recipe.lookup.mapNotNull import hiiragi283.lib.sounds.HTSoundInstance import hiiragi283.ragium.api.RagiumConfig import hiiragi283.ragium.api.config.HTEnergyConfig @@ -13,7 +15,7 @@ import net.minecraft.world.level.block.state.BlockState class HTAlloySmelterBlockEntity(pos: BlockPos, state: BlockState) : HTDoubleItemToItemBlockEntity( RagiumBlockEntityTypes.ALLOY_SMELTER.get(), - RagiumRecipeLookups.ALLOYING, + RagiumRecipeLookups.ALLOYING.mapNotNull(HTTripleItemToItemRecipe::asDoubleInput), pos, state ) { diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTAssemblerBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTAssemblerBlockEntity.kt index cda50d42be..7bcd8a162d 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTAssemblerBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTAssemblerBlockEntity.kt @@ -1,5 +1,7 @@ package hiiragi283.ragium.common.block.entity.machine +import hiiragi283.lib.recipe.base.HTTripleItemToItemRecipe +import hiiragi283.lib.recipe.lookup.mapNotNull import hiiragi283.lib.sounds.HTSoundInstance import hiiragi283.ragium.api.RagiumConfig import hiiragi283.ragium.api.config.HTEnergyConfig @@ -11,7 +13,12 @@ import net.minecraft.sounds.SoundEvents import net.minecraft.world.level.block.state.BlockState class HTAssemblerBlockEntity(pos: BlockPos, state: BlockState) : - HTDoubleItemToItemBlockEntity(RagiumBlockEntityTypes.ASSEMBLER.get(), RagiumRecipeLookups.ASSEMBLING, pos, state) { + HTDoubleItemToItemBlockEntity( + RagiumBlockEntityTypes.ASSEMBLER.get(), + RagiumRecipeLookups.ASSEMBLING.mapNotNull(HTTripleItemToItemRecipe::asDoubleInput), + pos, + state + ) { override fun getCompletedSound(): HTSoundInstance = HTSoundInstance(SoundEvents.CRAFTER_CRAFT) override fun getConfig(): HTEnergyConfig = RagiumConfig.SERVER.machine.assembler diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTBreweryBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTBreweryBlockEntity.kt index bacb327a11..ce321bfc35 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTBreweryBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTBreweryBlockEntity.kt @@ -1,116 +1,18 @@ package hiiragi283.ragium.common.block.entity.machine -import hiiragi283.lib.HTConstants -import hiiragi283.lib.recipe.base.HTItemAndFluidToFluidRecipe -import hiiragi283.lib.recipe.handler.HTInputSlot -import hiiragi283.lib.recipe.handler.HTOutputSlot -import hiiragi283.lib.recipe.input.HTItemAndFluidRecipeInput -import hiiragi283.lib.recipe.lookup.HTRecipeCache -import hiiragi283.lib.transfer.fluid.HTBasicFluidTank -import hiiragi283.lib.transfer.item.HTBasicItemSlot -import hiiragi283.lib.transfer.useTransaction +import hiiragi283.lib.sounds.HTSoundInstance import hiiragi283.ragium.api.RagiumConfig import hiiragi283.ragium.api.config.HTEnergyConfig import hiiragi283.ragium.api.recipe.RagiumRecipeLookups import hiiragi283.ragium.common.block.entity.RagiumBlockEntityTypes -import hiiragi283.ragium.common.transfer.holder.HTBasicFluidTankHolder -import hiiragi283.ragium.common.transfer.holder.HTBasicItemSlotHolder -import hiiragi283.ragium.common.transfer.holder.HTSlotInfo +import hiiragi283.ragium.common.block.entity.machine.base.HTItemAndFluidToFluidBlockEntity import net.minecraft.core.BlockPos -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.FluidStack -import net.neoforged.neoforge.transfer.transaction.Transaction class HTBreweryBlockEntity(pos: BlockPos, state: BlockState) : - HTProcessorBlockEntity.Energized(RagiumBlockEntityTypes.BREWERY.get(), pos, state) { - private val cache: HTRecipeCache = - HTRecipeCache(RagiumRecipeLookups.BREWING) - - override fun writeValue(output: ValueOutput) { - super.writeValue(output) - output.putChild(HTConstants.LAST_RECIPE, cache) - } - - override fun readValue(input: ValueInput) { - super.readValue(input) - input.readChild(HTConstants.LAST_RECIPE, cache) - } - - override fun initializeVariables(listener: Runnable) { - super.initializeVariables(listener) - recipeHandler = - object : EnergizedHandler() { - private val inputSlot: HTInputSlot.SingleItem by lazy { - HTInputSlot.SingleItem(this@HTBreweryBlockEntity.inputSlot) - } - private val inputTank: HTInputSlot.SingleFluid by lazy { - HTInputSlot.SingleFluid(this@HTBreweryBlockEntity.inputTank) - } - private val outputTank: HTOutputSlot by lazy { - HTOutputSlot.SingleFluid(this@HTBreweryBlockEntity.outputTank) - } - - override fun createInput(): HTItemAndFluidRecipeInput = - HTItemAndFluidRecipeInput(inputSlot.getStack(), inputTank.getStack()) - - override fun findRecipe( - level: ServerLevel, - input: HTItemAndFluidRecipeInput - ): HTItemAndFluidToFluidRecipe? = cache.findFirstRecipe(input, level) - - override fun canComplete( - recipe: HTItemAndFluidToFluidRecipe, - input: HTItemAndFluidRecipeInput, - output: FluidStack - ): Boolean { - val (inputCount: Int, inputAmount: Int) = recipe.getRequiredAmount(input.item, input.fluid) - return useTransaction { transaction: Transaction -> - when { - inputCount > 0 && !inputSlot.canExtract(inputCount, transaction) -> false - inputAmount > 0 && !inputTank.canExtract(inputAmount, transaction) -> false - else -> outputTank.canInsert(output, transaction) - } - } - } - - override fun onComplete( - recipe: HTItemAndFluidToFluidRecipe, - input: HTItemAndFluidRecipeInput, - output: FluidStack - ) { - val (inputCount: Int, inputAmount: Int) = recipe.getRequiredAmount(input.item, input.fluid) - useTransaction { transaction: Transaction -> - if (inputCount > 0) { - inputSlot.extract(inputCount, transaction) - } - if (inputAmount > 0) { - inputTank.extract(inputAmount, transaction) - } - outputTank.insert(output, transaction) - transaction.commit() - } - playSound(SoundEvents.BREWING_STAND_BREW) - } - } - } - - private lateinit var inputTank: HTBasicFluidTank - private lateinit var outputTank: HTBasicFluidTank - - override fun createFluidTanks(builder: HTBasicFluidTankHolder.Builder, listener: Runnable) { - inputTank = builder.addSlot(HTSlotInfo.INPUT, HTBasicFluidTank.input(getTankCapacity().asInt, listener)) - outputTank = builder.addSlot(HTSlotInfo.OUTPUT, HTBasicFluidTank.output(getTankCapacity().asInt, listener)) - } - - private lateinit var inputSlot: HTBasicItemSlot - - override fun createItemSlots(builder: HTBasicItemSlotHolder.Builder, listener: Runnable) { - inputSlot = builder.addSlot(HTSlotInfo.INPUT, HTBasicItemSlot.input(listener)) - } + HTItemAndFluidToFluidBlockEntity(RagiumBlockEntityTypes.BREWERY.get(), RagiumRecipeLookups.BREWING, pos, state) { + override fun getCompletedSound(): HTSoundInstance = HTSoundInstance(SoundEvents.BREWING_STAND_BREW) override fun getConfig(): HTEnergyConfig = RagiumConfig.SERVER.machine.brewery } diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTEnchanterBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTEnchanterBlockEntity.kt new file mode 100644 index 0000000000..dc865f4f62 --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTEnchanterBlockEntity.kt @@ -0,0 +1,23 @@ +package hiiragi283.ragium.common.block.entity.machine + +import hiiragi283.lib.sounds.HTSoundInstance +import hiiragi283.ragium.api.RagiumConfig +import hiiragi283.ragium.api.config.HTEnergyConfig +import hiiragi283.ragium.api.recipe.RagiumRecipeLookups +import hiiragi283.ragium.common.block.entity.RagiumBlockEntityTypes +import hiiragi283.ragium.common.block.entity.machine.base.HTDoubleItemToItemBlockEntity +import net.minecraft.core.BlockPos +import net.minecraft.sounds.SoundEvents +import net.minecraft.world.level.block.state.BlockState + +class HTEnchanterBlockEntity(pos: BlockPos, state: BlockState) : + HTDoubleItemToItemBlockEntity( + RagiumBlockEntityTypes.ENCHANTER.get(), + RagiumRecipeLookups.ENCHANTING, + pos, + state + ) { + override fun getCompletedSound(): HTSoundInstance = HTSoundInstance(SoundEvents.ENCHANTMENT_TABLE_USE) + + override fun getConfig(): HTEnergyConfig = RagiumConfig.SERVER.machine.enchanter +} diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTMelterBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTMelterBlockEntity.kt index 3a7f28cc69..cb5ffc5b24 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTMelterBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTMelterBlockEntity.kt @@ -5,10 +5,10 @@ import hiiragi283.lib.gui.HTBackgroundType import hiiragi283.lib.gui.HTSlotHelper import hiiragi283.lib.gui.widget.HTWidgetHolder import hiiragi283.lib.recipe.base.HTItemToFluidRecipe -import hiiragi283.lib.recipe.handler.HTInputSlot +import hiiragi283.lib.recipe.handler.HTItemInputSlot import hiiragi283.lib.recipe.handler.HTOutputSlot +import hiiragi283.lib.recipe.handler.HTOutputSlotHelper import hiiragi283.lib.recipe.lookup.HTRecipeCache -import hiiragi283.lib.transfer.fluid.HTBasicFluidTank import hiiragi283.lib.transfer.item.HTBasicItemSlot import hiiragi283.lib.transfer.useTransaction import hiiragi283.ragium.api.RagiumConfig @@ -17,12 +17,14 @@ import hiiragi283.ragium.api.recipe.RagiumRecipeLookups import hiiragi283.ragium.common.block.entity.RagiumBlockEntityTypes import hiiragi283.ragium.common.gui.widget.HTFluidWidget import hiiragi283.ragium.common.gui.widget.HTItemWidget +import hiiragi283.ragium.common.transfer.fluid.HTVariableFluidTank import hiiragi283.ragium.common.transfer.holder.HTBasicFluidTankHolder import hiiragi283.ragium.common.transfer.holder.HTBasicItemSlotHolder import hiiragi283.ragium.common.transfer.holder.HTSlotInfo import net.minecraft.core.BlockPos import net.minecraft.server.level.ServerLevel import net.minecraft.sounds.SoundEvents +import net.minecraft.world.item.ItemInstance import net.minecraft.world.item.crafting.SingleRecipeInput import net.minecraft.world.level.block.state.BlockState import net.minecraft.world.level.storage.ValueInput @@ -48,14 +50,12 @@ class HTMelterBlockEntity(pos: BlockPos, state: BlockState) : override fun initializeVariables(listener: Runnable) { super.initializeVariables(listener) recipeHandler = object : EnergizedHandler() { - private val inputSlot: HTInputSlot.SingleItem by lazy { - HTInputSlot.SingleItem(this@HTMelterBlockEntity.inputSlot) - } + private val inputSlot: HTItemInputSlot by lazy { HTItemInputSlot(this@HTMelterBlockEntity.inputSlot) } private val outputSlot: HTOutputSlot by lazy { - HTOutputSlot.SingleFluid(this@HTMelterBlockEntity.outputTank) + HTOutputSlotHelper.forFluid(this@HTMelterBlockEntity.outputTank) } - override fun createInput(): SingleRecipeInput = SingleRecipeInput(inputSlot.getStack()) + override fun createInput(): SingleRecipeInput = SingleRecipeInput(inputSlot.getStoredInput()) override fun findRecipe(level: ServerLevel, input: SingleRecipeInput): HTItemToFluidRecipe? = cache.findFirstRecipe(input, level) @@ -64,19 +64,18 @@ class HTMelterBlockEntity(pos: BlockPos, state: BlockState) : recipe: HTItemToFluidRecipe, input: SingleRecipeInput, output: FluidStack - ): Boolean { - val inputCount: Int = recipe.getRequiredAmount(input.item()) - return inputCount != 0 && - useTransaction { transaction: Transaction -> - inputSlot.canExtract(inputCount, transaction) && - outputSlot.canInsert(output, transaction) - } + ): Boolean = useTransaction { transaction: Transaction -> + val inputConsume: ItemInstance = recipe.getMatchingStack(input.item()) + when { + inputSlot.use(inputConsume, transaction).failed -> false + else -> outputSlot.take(output, transaction) == HTOutputSlot.TakeResult.FULL + } } override fun onComplete(recipe: HTItemToFluidRecipe, input: SingleRecipeInput, output: FluidStack) { useTransaction { transaction: Transaction -> - inputSlot.extract(recipe.getRequiredAmount(input.item()), transaction) - outputSlot.insert(output, transaction) + inputSlot.use(recipe.getMatchingStack(input.item()), transaction) + outputSlot.take(output, transaction) transaction.commit() } playSound(SoundEvents.LAVA_POP) @@ -84,10 +83,10 @@ class HTMelterBlockEntity(pos: BlockPos, state: BlockState) : } } - private lateinit var outputTank: HTBasicFluidTank + private lateinit var outputTank: HTVariableFluidTank override fun createFluidTanks(builder: HTBasicFluidTankHolder.Builder, listener: Runnable) { - outputTank = builder.addSlot(HTSlotInfo.OUTPUT, HTBasicFluidTank.output(getTankCapacity().asInt, listener)) + outputTank = builder.addSlot(HTSlotInfo.OUTPUT, HTVariableFluidTank.output(getTankCapacity(), listener)) } private lateinit var inputSlot: HTBasicItemSlot diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTMixerBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTMixerBlockEntity.kt new file mode 100644 index 0000000000..b5a6932b61 --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTMixerBlockEntity.kt @@ -0,0 +1,18 @@ +package hiiragi283.ragium.common.block.entity.machine + +import hiiragi283.lib.sounds.HTSoundInstance +import hiiragi283.ragium.api.RagiumConfig +import hiiragi283.ragium.api.config.HTEnergyConfig +import hiiragi283.ragium.api.recipe.RagiumRecipeLookups +import hiiragi283.ragium.common.block.entity.RagiumBlockEntityTypes +import hiiragi283.ragium.common.block.entity.machine.base.HTItemAndFluidToFluidBlockEntity +import net.minecraft.core.BlockPos +import net.minecraft.sounds.SoundEvents +import net.minecraft.world.level.block.state.BlockState + +class HTMixerBlockEntity(pos: BlockPos, state: BlockState) : + HTItemAndFluidToFluidBlockEntity(RagiumBlockEntityTypes.MIXER.get(), RagiumRecipeLookups.MIXING, pos, state) { + override fun getCompletedSound(): HTSoundInstance = HTSoundInstance(SoundEvents.BUBBLE_COLUMN_WHIRLPOOL_INSIDE) + + override fun getConfig(): HTEnergyConfig = RagiumConfig.SERVER.machine.mixer +} diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTPlanterBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTPlanterBlockEntity.kt new file mode 100644 index 0000000000..c0a9d03871 --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTPlanterBlockEntity.kt @@ -0,0 +1,18 @@ +package hiiragi283.ragium.common.block.entity.machine + +import hiiragi283.lib.sounds.HTSoundInstance +import hiiragi283.ragium.api.RagiumConfig +import hiiragi283.ragium.api.config.HTEnergyConfig +import hiiragi283.ragium.api.recipe.RagiumRecipeLookups +import hiiragi283.ragium.common.block.entity.RagiumBlockEntityTypes +import hiiragi283.ragium.common.block.entity.machine.base.HTItemToDoubleItemBlockEntity +import net.minecraft.core.BlockPos +import net.minecraft.sounds.SoundEvents +import net.minecraft.world.level.block.state.BlockState + +class HTPlanterBlockEntity(pos: BlockPos, state: BlockState) : + HTItemToDoubleItemBlockEntity(RagiumBlockEntityTypes.PLANTER.get(), RagiumRecipeLookups.PLANTING, pos, state) { + override fun getCompletedSound(): HTSoundInstance = HTSoundInstance(SoundEvents.BONE_MEAL_USE) + + override fun getConfig(): HTEnergyConfig = RagiumConfig.SERVER.machine.planter +} diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTPrecisionAssemblerBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTPrecisionAssemblerBlockEntity.kt new file mode 100644 index 0000000000..175bd41bac --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTPrecisionAssemblerBlockEntity.kt @@ -0,0 +1,23 @@ +package hiiragi283.ragium.common.block.entity.machine + +import hiiragi283.lib.sounds.HTSoundInstance +import hiiragi283.ragium.api.RagiumConfig +import hiiragi283.ragium.api.config.HTEnergyConfig +import hiiragi283.ragium.api.recipe.RagiumRecipeLookups +import hiiragi283.ragium.common.block.entity.RagiumBlockEntityTypes +import hiiragi283.ragium.common.block.entity.machine.base.HTTripleItemToItemBlockEntity +import net.minecraft.core.BlockPos +import net.minecraft.sounds.SoundEvents +import net.minecraft.world.level.block.state.BlockState + +class HTPrecisionAssemblerBlockEntity(pos: BlockPos, state: BlockState) : + HTTripleItemToItemBlockEntity( + RagiumBlockEntityTypes.PRECISION_ASSEMBLER.get(), + RagiumRecipeLookups.ASSEMBLING, + pos, + state + ) { + override fun getCompletedSound(): HTSoundInstance = HTSoundInstance(SoundEvents.CRAFTER_CRAFT) + + override fun getConfig(): HTEnergyConfig = RagiumConfig.SERVER.machine.precisionAssembler +} diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTSmelterBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTSmelterBlockEntity.kt index 6e60fd2ad0..5f29bbf4f0 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTSmelterBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTSmelterBlockEntity.kt @@ -6,9 +6,11 @@ import hiiragi283.lib.gui.HTSlotHelper import hiiragi283.lib.gui.widget.HTWidgetHolder import hiiragi283.lib.recipe.base.HTItemToItemRecipe import hiiragi283.lib.recipe.base.HTProgressData -import hiiragi283.lib.recipe.handler.HTInputSlot +import hiiragi283.lib.recipe.handler.HTItemInputSlot import hiiragi283.lib.recipe.handler.HTOutputSlot +import hiiragi283.lib.recipe.handler.HTOutputSlotHelper import hiiragi283.lib.recipe.ingredient.HTIngredientHelper +import hiiragi283.lib.recipe.ingredient.HTItemIngredient import hiiragi283.lib.recipe.lookup.HTVanillaRecipeCache import hiiragi283.lib.transfer.item.HTBasicItemSlot import hiiragi283.lib.transfer.useTransaction @@ -61,14 +63,12 @@ class HTSmelterBlockEntity(pos: BlockPos, state: BlockState) : override fun initializeVariables(listener: Runnable) { super.initializeVariables(listener) recipeHandler = object : EnergizedHandler() { - private val inputSlot: HTInputSlot.SingleItem by lazy { - HTInputSlot.SingleItem(this@HTSmelterBlockEntity.inputSlot) - } + private val inputSlot: HTItemInputSlot by lazy { HTItemInputSlot(this@HTSmelterBlockEntity.inputSlot) } private val outputSlot: HTOutputSlot by lazy { - HTOutputSlot.SingleItem(this@HTSmelterBlockEntity.outputSlot) + HTOutputSlotHelper.forItem(this@HTSmelterBlockEntity.outputSlot) } - override fun createInput(): SingleRecipeInput = SingleRecipeInput(inputSlot.getStack()) + override fun createInput(): SingleRecipeInput = SingleRecipeInput(inputSlot.getStoredInput()) override fun findRecipe(level: ServerLevel, input: SingleRecipeInput): HTItemToItemRecipe? { val stackIn: ItemStack = typeSlot.getStackCopy() @@ -81,38 +81,32 @@ class HTSmelterBlockEntity(pos: BlockPos, state: BlockState) : } private fun wrapRecipe(recipe: AbstractCookingRecipe): HTItemToItemRecipe = object : HTItemToItemRecipe { - override fun test(input: ItemInstance): Boolean = - HTIngredientHelper.unwrap(input).let(recipe.input()::test) + val ingredient = HTItemIngredient(recipe.input(), 1) + + override fun test(input: ItemInstance): Boolean = ingredient.test(input) override fun apply(input: ItemInstance): ItemStack = HTIngredientHelper.unwrap(input).let(::SingleRecipeInput).let(recipe::assemble) - override fun getRequiredAmount(input: ItemInstance): Int = when { - test(input) -> 1 - else -> 0 - } + override fun getMatchingStack(input: ItemInstance): ItemInstance = ingredient.getMatchingStack(input) override fun getProgressData(input: SingleRecipeInput): HTProgressData = HTProgressData.time(recipe.cookingTime()) } - override fun canComplete(recipe: HTItemToItemRecipe, input: SingleRecipeInput, output: ItemStack): Boolean { - val inputCount: Int = recipe.getRequiredAmount(input.item()) - return inputCount != 0 && useTransaction { transaction: Transaction -> + override fun canComplete(recipe: HTItemToItemRecipe, input: SingleRecipeInput, output: ItemStack): Boolean = + useTransaction { transaction: Transaction -> + val inputConsume: ItemInstance = recipe.getMatchingStack(input.item()) when { - !inputSlot.canExtract(inputCount, transaction) -> false - else -> outputSlot.canInsert(output, transaction) + inputSlot.use(inputConsume, transaction).failed -> false + else -> outputSlot.take(output, transaction) == HTOutputSlot.TakeResult.FULL } } - } override fun onComplete(recipe: HTItemToItemRecipe, input: SingleRecipeInput, output: ItemStack) { - val inputCount: Int = recipe.getRequiredAmount(input.item()) useTransaction { transaction: Transaction -> - if (inputCount > 0) { - inputSlot.extract(inputCount, transaction) - } - outputSlot.insert(output, transaction) + inputSlot.use(recipe.getMatchingStack(input.item()), transaction) + outputSlot.take(output, transaction) transaction.commit() } playSound(SoundEvents.FIRE_EXTINGUISH) diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTDoubleItemToItemBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTDoubleItemToItemBlockEntity.kt index 234427cb4e..fa103cea2b 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTDoubleItemToItemBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTDoubleItemToItemBlockEntity.kt @@ -5,8 +5,9 @@ import hiiragi283.lib.gui.HTBackgroundType import hiiragi283.lib.gui.HTSlotHelper import hiiragi283.lib.gui.widget.HTWidgetHolder import hiiragi283.lib.recipe.base.HTDoubleItemToItemRecipe -import hiiragi283.lib.recipe.handler.HTInputSlot +import hiiragi283.lib.recipe.handler.HTItemInputSlot import hiiragi283.lib.recipe.handler.HTOutputSlot +import hiiragi283.lib.recipe.handler.HTOutputSlotHelper import hiiragi283.lib.recipe.input.HTItemListRecipeInput import hiiragi283.lib.recipe.input.getItemOrEmpty import hiiragi283.lib.recipe.lookup.HTRecipeCache @@ -20,6 +21,7 @@ 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.world.item.ItemInstance import net.minecraft.world.item.ItemStack import net.minecraft.world.item.crafting.RecipeInput import net.minecraft.world.level.block.entity.BlockEntityType @@ -54,51 +56,41 @@ abstract class HTDoubleItemToItemBlockEntity( override fun initializeVariables(listener: Runnable) { super.initializeVariables(listener) recipeHandler = object : EnergizedHandler() { - private val primarySlot: HTInputSlot.SingleItem by lazy { - HTInputSlot.SingleItem(this@HTDoubleItemToItemBlockEntity.primarySlot) + private val primarySlot: HTItemInputSlot by lazy { + HTItemInputSlot(this@HTDoubleItemToItemBlockEntity.primarySlot) } - private val secondarySlot: HTInputSlot.SingleItem by lazy { - HTInputSlot.SingleItem(this@HTDoubleItemToItemBlockEntity.secondarySlot) + private val secondarySlot: HTItemInputSlot by lazy { + HTItemInputSlot(this@HTDoubleItemToItemBlockEntity.secondarySlot) } private val outputSlot: HTOutputSlot by lazy { - HTOutputSlot.SingleItem(this@HTDoubleItemToItemBlockEntity.outputSlot) + HTOutputSlotHelper.forItem(this@HTDoubleItemToItemBlockEntity.outputSlot) } override fun createInput(): RecipeInput = - HTItemListRecipeInput(primarySlot.getStack(), secondarySlot.getStack()) + HTItemListRecipeInput(primarySlot.getStoredInput(), secondarySlot.getStoredInput()) override fun findRecipe(level: ServerLevel, input: RecipeInput): HTDoubleItemToItemRecipe? = cache.findFirstRecipe(input, level) override fun canComplete(recipe: HTDoubleItemToItemRecipe, input: RecipeInput, output: ItemStack): Boolean { - val (firstCount: Int, secondCount: Int) = recipe.getRequiredAmount( - input.getItemOrEmpty(0), - input.getItemOrEmpty(1) - ) - useTransaction { transaction: Transaction -> - if (firstCount > 0 && !primarySlot.canExtract(firstCount, transaction)) { - return false - } - if (secondCount > 0 && !secondarySlot.canExtract(secondCount, transaction)) { - return false + val (firstConsume: ItemInstance, secondConsume: ItemInstance) = + recipe.getMatchingStack(input.getItemOrEmpty(0), input.getItemOrEmpty(1)) + return useTransaction { transaction: Transaction -> + when { + primarySlot.use(firstConsume, transaction).failed -> false + secondarySlot.use(secondConsume, transaction).failed -> false + else -> outputSlot.take(output, transaction) == HTOutputSlot.TakeResult.FULL } - return outputSlot.canInsert(output, transaction) } } override fun onComplete(recipe: HTDoubleItemToItemRecipe, input: RecipeInput, output: ItemStack) { - val (firstCount: Int, secondCount: Int) = recipe.getRequiredAmount( - input.getItemOrEmpty(0), - input.getItemOrEmpty(1) - ) + val (firstConsume: ItemInstance, secondConsume: ItemInstance) = + recipe.getMatchingStack(input.getItemOrEmpty(0), input.getItemOrEmpty(1)) useTransaction { transaction: Transaction -> - if (firstCount > 0) { - primarySlot.extract(firstCount, transaction) - } - if (secondCount > 0) { - secondarySlot.extract(secondCount, transaction) - } - outputSlot.insert(output, transaction) + primarySlot.use(firstConsume, transaction) + secondarySlot.use(secondConsume, transaction) + outputSlot.take(output, transaction) transaction.commit() } playSound(getCompletedSound()) @@ -133,7 +125,7 @@ abstract class HTDoubleItemToItemBlockEntity( ) widgetHolder.track(primarySlot) widgetHolder += HTItemWidget.Container( - primarySlot, + secondarySlot, 1, HTSlotHelper.getSlotPosX(2.5), HTSlotHelper.getSlotPosY(0.5), 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 new file mode 100644 index 0000000000..2de31fd35a --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemAndFluidToFluidBlockEntity.kt @@ -0,0 +1,165 @@ +package hiiragi283.ragium.common.block.entity.machine.base + +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.HTItemAndFluidToFluidRecipe +import hiiragi283.lib.recipe.handler.HTFluidInputTank +import hiiragi283.lib.recipe.handler.HTItemInputSlot +import hiiragi283.lib.recipe.handler.HTOutputSlot +import hiiragi283.lib.recipe.handler.HTOutputSlotHelper +import hiiragi283.lib.recipe.input.HTItemAndFluidRecipeInput +import hiiragi283.lib.recipe.lookup.HTRecipeCache +import hiiragi283.lib.recipe.lookup.HTRecipeLookup +import hiiragi283.lib.sounds.HTSoundInstance +import hiiragi283.lib.transfer.item.HTBasicItemSlot +import hiiragi283.lib.transfer.useTransaction +import hiiragi283.ragium.common.block.entity.machine.HTProcessorBlockEntity +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.world.item.ItemInstance +import net.minecraft.world.level.block.entity.BlockEntityType +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 + +abstract class HTItemAndFluidToFluidBlockEntity( + type: BlockEntityType<*>, + private val cache: HTRecipeCache, + pos: BlockPos, + state: BlockState +) : HTProcessorBlockEntity.Energized(type, pos, state) { + constructor( + type: BlockEntityType<*>, + lookup: HTRecipeLookup, + pos: BlockPos, + state: BlockState + ) : this(type, HTRecipeCache(lookup), pos, state) + + 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@HTItemAndFluidToFluidBlockEntity.inputTank) + } + private val inputSlot: HTItemInputSlot by lazy { + HTItemInputSlot(this@HTItemAndFluidToFluidBlockEntity.inputSlot) + } + private val outputTank: HTOutputSlot by lazy { + HTOutputSlotHelper.forFluid(this@HTItemAndFluidToFluidBlockEntity.outputTank) + } + + override fun createInput(): HTItemAndFluidRecipeInput = + HTItemAndFluidRecipeInput(inputSlot.getStoredInput(), inputTank.getStoredInput()) + + override fun findRecipe( + level: ServerLevel, + input: HTItemAndFluidRecipeInput + ): HTItemAndFluidToFluidRecipe? = cache.findFirstRecipe(input, level) + + override fun canComplete( + recipe: HTItemAndFluidToFluidRecipe, + input: HTItemAndFluidRecipeInput, + output: FluidStack + ): Boolean = useTransaction { transaction: Transaction -> + val (itemInput: ItemInstance, fluidInput: FluidInstance) = recipe.getMatchingStack( + input.item, + input.fluid + ) + when { + inputSlot.use(itemInput, transaction).failed -> false + inputTank.use(fluidInput, transaction).failed -> false + else -> outputTank.take(output, transaction) == HTOutputSlot.TakeResult.FULL + } + } + + override fun onComplete( + recipe: HTItemAndFluidToFluidRecipe, + input: HTItemAndFluidRecipeInput, + output: FluidStack + ) { + useTransaction { transaction: Transaction -> + val (itemInput: ItemInstance, fluidInput: FluidInstance) = recipe.getMatchingStack( + input.item, + input.fluid + ) + inputSlot.use(itemInput, transaction) + inputTank.use(fluidInput, transaction) + outputTank.take(output, transaction) + transaction.commit() + } + playSound(getCompletedSound()) + } + } + } + + protected abstract fun getCompletedSound(): HTSoundInstance + + private lateinit var inputTank: HTVariableFluidTank + private lateinit var outputTank: HTVariableFluidTank + + override fun createFluidTanks(builder: HTBasicFluidTankHolder.Builder, listener: Runnable) { + inputTank = builder.addSlot(HTSlotInfo.INPUT, HTVariableFluidTank.input(getTankCapacity(), listener)) + outputTank = builder.addSlot(HTSlotInfo.OUTPUT, HTVariableFluidTank.output(getTankCapacity(), listener)) + } + + private lateinit var inputSlot: HTBasicItemSlot + + override fun createItemSlots(builder: HTBasicItemSlotHolder.Builder, listener: Runnable) { + inputSlot = builder.addSlot(HTSlotInfo.INPUT, HTBasicItemSlot.input(listener)) + } + + override fun setupMenu(widgetHolder: HTWidgetHolder) { + super.setupMenu(widgetHolder) + addEnergySlot(widgetHolder, HTSlotHelper.getSlotPosX(2.5), HTSlotHelper.getSlotPosY(1.5)) + // progress + addProgressBar(widgetHolder) + // inputs + widgetHolder += HTItemWidget.Container( + inputSlot, + 0, + HTSlotHelper.getSlotPosX(2.5), + HTSlotHelper.getSlotPosY(0.5), + HTBackgroundType.INPUT + ) + widgetHolder.track(inputSlot) + widgetHolder += HTFluidWidget.Tank( + inputTank, + HTSlotHelper.getSlotPosX(1), + 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) + } +} 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 4c8673d47a..3c6b7d0374 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 @@ -5,28 +5,32 @@ import hiiragi283.lib.gui.HTBackgroundType import hiiragi283.lib.gui.HTSlotHelper import hiiragi283.lib.gui.widget.HTWidgetHolder import hiiragi283.lib.recipe.base.HTItemAndFluidToItemRecipe -import hiiragi283.lib.recipe.handler.HTInputSlot +import hiiragi283.lib.recipe.handler.HTFluidInputTank +import hiiragi283.lib.recipe.handler.HTItemInputSlot import hiiragi283.lib.recipe.handler.HTOutputSlot +import hiiragi283.lib.recipe.handler.HTOutputSlotHelper import hiiragi283.lib.recipe.input.HTItemAndFluidRecipeInput import hiiragi283.lib.recipe.lookup.HTRecipeCache import hiiragi283.lib.recipe.lookup.HTRecipeLookup import hiiragi283.lib.sounds.HTSoundInstance -import hiiragi283.lib.transfer.fluid.HTBasicFluidTank import hiiragi283.lib.transfer.item.HTBasicItemSlot import hiiragi283.lib.transfer.useTransaction import hiiragi283.ragium.common.block.entity.machine.HTProcessorBlockEntity 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.world.item.ItemInstance import net.minecraft.world.item.ItemStack import net.minecraft.world.level.block.entity.BlockEntityType 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 abstract class HTItemAndFluidToItemBlockEntity( @@ -55,18 +59,18 @@ abstract class HTItemAndFluidToItemBlockEntity( override fun initializeVariables(listener: Runnable) { super.initializeVariables(listener) recipeHandler = object : EnergizedHandler() { - private val inputTank: HTInputSlot.SingleFluid by lazy { - HTInputSlot.SingleFluid(this@HTItemAndFluidToItemBlockEntity.inputTank) + private val inputTank: HTFluidInputTank by lazy { + HTFluidInputTank(this@HTItemAndFluidToItemBlockEntity.inputTank) } - private val inputSlot: HTInputSlot.SingleItem by lazy { - HTInputSlot.SingleItem(this@HTItemAndFluidToItemBlockEntity.inputSlot) + private val inputSlot: HTItemInputSlot by lazy { + HTItemInputSlot(this@HTItemAndFluidToItemBlockEntity.inputSlot) } private val outputSlot: HTOutputSlot by lazy { - HTOutputSlot.SingleItem(this@HTItemAndFluidToItemBlockEntity.outputSlot) + HTOutputSlotHelper.forItem(this@HTItemAndFluidToItemBlockEntity.outputSlot) } override fun createInput(): HTItemAndFluidRecipeInput = - HTItemAndFluidRecipeInput(inputSlot.getStack(), inputTank.getStack()) + HTItemAndFluidRecipeInput(inputSlot.getStoredInput(), inputTank.getStoredInput()) override fun findRecipe(level: ServerLevel, input: HTItemAndFluidRecipeInput): HTItemAndFluidToItemRecipe? = cache.findFirstRecipe(input, level) @@ -75,16 +79,15 @@ abstract class HTItemAndFluidToItemBlockEntity( recipe: HTItemAndFluidToItemRecipe, input: HTItemAndFluidRecipeInput, output: ItemStack - ): Boolean { - val (itemCount: Int, fluidAmount: Int) = recipe.getRequiredAmount(input.item, input.fluid) - useTransaction { transaction: Transaction -> - if (itemCount > 0 && !inputSlot.canExtract(itemCount, transaction)) { - return false - } - if (fluidAmount > 0 && !inputTank.canExtract(fluidAmount, transaction)) { - return false - } - return outputSlot.canInsert(output, transaction) + ): Boolean = useTransaction { transaction: Transaction -> + val (itemInput: ItemInstance, fluidInput: FluidInstance) = recipe.getMatchingStack( + input.item, + input.fluid + ) + when { + inputSlot.use(itemInput, transaction).failed -> false + inputTank.use(fluidInput, transaction).failed -> false + else -> outputSlot.take(output, transaction) == HTOutputSlot.TakeResult.FULL } } @@ -93,15 +96,14 @@ abstract class HTItemAndFluidToItemBlockEntity( input: HTItemAndFluidRecipeInput, output: ItemStack ) { - val (itemCount: Int, fluidAmount: Int) = recipe.getRequiredAmount(input.item, input.fluid) useTransaction { transaction: Transaction -> - if (itemCount > 0) { - inputSlot.extract(itemCount, transaction) - } - if (fluidAmount > 0) { - inputTank.extract(fluidAmount, transaction) - } - outputSlot.insert(output, transaction) + val (itemInput: ItemInstance, fluidInput: FluidInstance) = recipe.getMatchingStack( + input.item, + input.fluid + ) + inputSlot.use(itemInput, transaction) + inputTank.use(fluidInput, transaction) + outputSlot.take(output, transaction) transaction.commit() } playSound(getCompletedSound()) @@ -111,10 +113,10 @@ abstract class HTItemAndFluidToItemBlockEntity( protected abstract fun getCompletedSound(): HTSoundInstance - private lateinit var inputTank: HTBasicFluidTank + private lateinit var inputTank: HTVariableFluidTank override fun createFluidTanks(builder: HTBasicFluidTankHolder.Builder, listener: Runnable) { - inputTank = builder.addSlot(HTSlotInfo.INPUT, HTBasicFluidTank.input(getTankCapacity().asInt, listener)) + inputTank = builder.addSlot(HTSlotInfo.INPUT, HTVariableFluidTank.input(getTankCapacity(), listener)) } private lateinit var inputSlot: HTBasicItemSlot 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 b0734ffa42..511f0332fd 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 @@ -5,8 +5,9 @@ import hiiragi283.lib.gui.HTBackgroundType import hiiragi283.lib.gui.HTSlotHelper import hiiragi283.lib.gui.widget.HTWidgetHolder import hiiragi283.lib.recipe.base.HTItemToDoubleItemRecipe -import hiiragi283.lib.recipe.handler.HTInputSlot +import hiiragi283.lib.recipe.handler.HTItemInputSlot import hiiragi283.lib.recipe.handler.HTOutputSlot +import hiiragi283.lib.recipe.handler.HTOutputSlotHelper import hiiragi283.lib.recipe.lookup.HTRecipeCache import hiiragi283.lib.recipe.lookup.HTRecipeLookup import hiiragi283.lib.sounds.HTSoundInstance @@ -18,6 +19,7 @@ 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.world.item.ItemInstance import net.minecraft.world.item.ItemStack import net.minecraft.world.item.crafting.SingleRecipeInput import net.minecraft.world.level.block.entity.BlockEntityType @@ -53,17 +55,17 @@ abstract class HTItemToDoubleItemBlockEntity( super.initializeVariables(listener) recipeHandler = object : EnergizedHandler, HTItemToDoubleItemRecipe>() { - private val inputSlot: HTInputSlot.SingleItem by lazy { - HTInputSlot.SingleItem(this@HTItemToDoubleItemBlockEntity.inputSlot) + private val inputSlot: HTItemInputSlot by lazy { + HTItemInputSlot(this@HTItemToDoubleItemBlockEntity.inputSlot) } private val primarySlot: HTOutputSlot by lazy { - HTOutputSlot.SingleItem(this@HTItemToDoubleItemBlockEntity.primarySlot) + HTOutputSlotHelper.forItem(this@HTItemToDoubleItemBlockEntity.primarySlot) } private val secondarySlot: HTOutputSlot by lazy { - HTOutputSlot.SingleItem(this@HTItemToDoubleItemBlockEntity.secondarySlot) + HTOutputSlotHelper.forItem(this@HTItemToDoubleItemBlockEntity.secondarySlot) } - override fun createInput(): SingleRecipeInput = SingleRecipeInput(inputSlot.getStack()) + override fun createInput(): SingleRecipeInput = SingleRecipeInput(inputSlot.getStoredInput()) override fun findRecipe(level: ServerLevel, input: SingleRecipeInput): HTItemToDoubleItemRecipe? = cache.findFirstRecipe(input, level) @@ -72,14 +74,12 @@ abstract class HTItemToDoubleItemBlockEntity( recipe: HTItemToDoubleItemRecipe, input: SingleRecipeInput, output: Pair - ): Boolean { - val inputCount: Int = recipe.getRequiredAmount(input.item()) - return inputCount != 0 && useTransaction { transaction: Transaction -> - when { - !inputSlot.canExtract(inputCount, transaction) -> false - !primarySlot.canInsert(output.first, transaction) -> false - else -> secondarySlot.canInsert(output.second, transaction) - } + ): Boolean = useTransaction { transaction: Transaction -> + val inputConsume: ItemInstance = recipe.getMatchingStack(input.item()) + 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 } } @@ -88,13 +88,10 @@ abstract class HTItemToDoubleItemBlockEntity( input: SingleRecipeInput, output: Pair ) { - val inputCount: Int = recipe.getRequiredAmount(input.item()) useTransaction { transaction: Transaction -> - if (inputCount > 0) { - inputSlot.extract(inputCount, transaction) - } - primarySlot.insert(output.first, transaction) - secondarySlot.insert(output.second, transaction) + inputSlot.use(recipe.getMatchingStack(input.item()), transaction) + primarySlot.take(output.first, transaction) + secondarySlot.take(output.second, transaction) transaction.commit() } playSound(getCompletedSound()) diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemToItemBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemToItemBlockEntity.kt index b8526b020e..ccfcbe7151 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemToItemBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemToItemBlockEntity.kt @@ -5,8 +5,9 @@ import hiiragi283.lib.gui.HTBackgroundType import hiiragi283.lib.gui.HTSlotHelper import hiiragi283.lib.gui.widget.HTWidgetHolder import hiiragi283.lib.recipe.base.HTItemToItemRecipe -import hiiragi283.lib.recipe.handler.HTInputSlot +import hiiragi283.lib.recipe.handler.HTItemInputSlot import hiiragi283.lib.recipe.handler.HTOutputSlot +import hiiragi283.lib.recipe.handler.HTOutputSlotHelper import hiiragi283.lib.recipe.lookup.HTRecipeCache import hiiragi283.lib.recipe.lookup.HTRecipeLookup import hiiragi283.lib.sounds.HTSoundInstance @@ -18,6 +19,7 @@ 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.world.item.ItemInstance import net.minecraft.world.item.ItemStack import net.minecraft.world.item.crafting.SingleRecipeInput import net.minecraft.world.level.block.entity.BlockEntityType @@ -52,35 +54,29 @@ abstract class HTItemToItemBlockEntity( override fun initializeVariables(listener: Runnable) { super.initializeVariables(listener) recipeHandler = object : EnergizedHandler() { - private val inputSlot: HTInputSlot.SingleItem by lazy { - HTInputSlot.SingleItem(this@HTItemToItemBlockEntity.inputSlot) - } + private val inputSlot: HTItemInputSlot by lazy { HTItemInputSlot(this@HTItemToItemBlockEntity.inputSlot) } private val outputSlot: HTOutputSlot by lazy { - HTOutputSlot.SingleItem(this@HTItemToItemBlockEntity.outputSlot) + HTOutputSlotHelper.forItem(this@HTItemToItemBlockEntity.outputSlot) } - override fun createInput(): SingleRecipeInput = SingleRecipeInput(inputSlot.getStack()) + override fun createInput(): SingleRecipeInput = SingleRecipeInput(inputSlot.getStoredInput()) override fun findRecipe(level: ServerLevel, input: SingleRecipeInput): HTItemToItemRecipe? = cache.findFirstRecipe(input, level) - override fun canComplete(recipe: HTItemToItemRecipe, input: SingleRecipeInput, output: ItemStack): Boolean { - val inputCount: Int = recipe.getRequiredAmount(input.item()) - return inputCount != 0 && useTransaction { transaction: Transaction -> + override fun canComplete(recipe: HTItemToItemRecipe, input: SingleRecipeInput, output: ItemStack): Boolean = + useTransaction { transaction: Transaction -> + val inputConsume: ItemInstance = recipe.getMatchingStack(input.item()) when { - !inputSlot.canExtract(inputCount, transaction) -> false - else -> outputSlot.canInsert(output, transaction) + inputSlot.use(inputConsume, transaction).failed -> false + else -> outputSlot.take(output, transaction) == HTOutputSlot.TakeResult.FULL } } - } override fun onComplete(recipe: HTItemToItemRecipe, input: SingleRecipeInput, output: ItemStack) { - val inputCount: Int = recipe.getRequiredAmount(input.item()) useTransaction { transaction: Transaction -> - if (inputCount > 0) { - inputSlot.extract(inputCount, transaction) - } - outputSlot.insert(output, transaction) + inputSlot.use(recipe.getMatchingStack(input.item()), transaction) + outputSlot.take(output, transaction) transaction.commit() } playSound(getCompletedSound()) diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTTripleItemToItemBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTTripleItemToItemBlockEntity.kt new file mode 100644 index 0000000000..5fda3b8e2a --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTTripleItemToItemBlockEntity.kt @@ -0,0 +1,174 @@ +package hiiragi283.ragium.common.block.entity.machine.base + +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.HTTripleItemToItemRecipe +import hiiragi283.lib.recipe.handler.HTItemInputSlot +import hiiragi283.lib.recipe.handler.HTOutputSlot +import hiiragi283.lib.recipe.handler.HTOutputSlotHelper +import hiiragi283.lib.recipe.input.HTItemListRecipeInput +import hiiragi283.lib.recipe.input.getItemOrEmpty +import hiiragi283.lib.recipe.lookup.HTRecipeCache +import hiiragi283.lib.recipe.lookup.HTRecipeLookup +import hiiragi283.lib.sounds.HTSoundInstance +import hiiragi283.lib.transfer.item.HTBasicItemSlot +import hiiragi283.lib.transfer.useTransaction +import hiiragi283.ragium.common.block.entity.machine.HTProcessorBlockEntity +import hiiragi283.ragium.common.gui.widget.HTItemWidget +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.world.item.ItemInstance +import net.minecraft.world.item.ItemStack +import net.minecraft.world.item.crafting.RecipeInput +import net.minecraft.world.level.block.entity.BlockEntityType +import net.minecraft.world.level.block.state.BlockState +import net.minecraft.world.level.storage.ValueInput +import net.minecraft.world.level.storage.ValueOutput +import net.neoforged.neoforge.transfer.item.ItemResource +import net.neoforged.neoforge.transfer.transaction.Transaction + +abstract class HTTripleItemToItemBlockEntity( + type: BlockEntityType<*>, + private val cache: HTRecipeCache, + pos: BlockPos, + state: BlockState +) : HTProcessorBlockEntity.Energized(type, pos, state) { + constructor( + type: BlockEntityType<*>, + lookup: HTRecipeLookup, + pos: BlockPos, + state: BlockState + ) : this(type, HTRecipeCache(lookup), pos, state) + + 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 primarySlot: HTItemInputSlot by lazy { + HTItemInputSlot(this@HTTripleItemToItemBlockEntity.primarySlot) + } + private val secondarySlot: HTItemInputSlot by lazy { + HTItemInputSlot(this@HTTripleItemToItemBlockEntity.secondarySlot) + } + private val tertiarySlot: HTItemInputSlot by lazy { + HTItemInputSlot(this@HTTripleItemToItemBlockEntity.tertiarySlot) + } + private val outputSlot: HTOutputSlot by lazy { + HTOutputSlotHelper.forItem(this@HTTripleItemToItemBlockEntity.outputSlot) + } + + override fun createInput(): RecipeInput = HTItemListRecipeInput( + primarySlot.getStoredInput(), + secondarySlot.getStoredInput(), + tertiarySlot.getStoredInput() + ) + + override fun findRecipe(level: ServerLevel, input: RecipeInput): HTTripleItemToItemRecipe? = + cache.findFirstRecipe(input, level) + + override fun canComplete(recipe: HTTripleItemToItemRecipe, input: RecipeInput, output: ItemStack): Boolean { + val (firstInput: ItemInstance, secondInput: ItemInstance, thirdInput: ItemInstance) = + recipe.getMatchingStack(input.getItemOrEmpty(0), input.getItemOrEmpty(1), input.getItemOrEmpty(2)) + return useTransaction { transaction: Transaction -> + when { + primarySlot.use(firstInput, transaction).failed -> false + secondarySlot.use(secondInput, transaction).failed -> false + tertiarySlot.use(thirdInput, transaction).failed -> false + else -> outputSlot.take(output, transaction) == HTOutputSlot.TakeResult.FULL + } + } + } + + override fun onComplete(recipe: HTTripleItemToItemRecipe, input: RecipeInput, output: ItemStack) { + val (firstInput: ItemInstance, secondInput: ItemInstance, thirdInput: ItemInstance) = + recipe.getMatchingStack(input.getItemOrEmpty(0), input.getItemOrEmpty(1), input.getItemOrEmpty(2)) + useTransaction { transaction: Transaction -> + primarySlot.use(firstInput, transaction) + secondarySlot.use(secondInput, transaction) + tertiarySlot.use(thirdInput, transaction) + outputSlot.take(output, transaction) + transaction.commit() + } + playSound(getCompletedSound()) + } + } + } + + protected abstract fun getCompletedSound(): HTSoundInstance + + private lateinit var primarySlot: HTBasicItemSlot + private lateinit var secondarySlot: HTBasicItemSlot + private lateinit var tertiarySlot: HTBasicItemSlot + private lateinit var outputSlot: HTBasicItemSlot + + override fun createItemSlots(builder: HTBasicItemSlotHolder.Builder, listener: Runnable) { + primarySlot = builder.addSlot(HTSlotInfo.INPUT, HTBasicItemSlot.input(listener)) + secondarySlot = builder.addSlot( + HTSlotInfo.EXTRA_INPUT, + HTBasicItemSlot.input(listener, filter = { resource: ItemResource -> + tertiarySlot.resource.isEmpty || tertiarySlot.resource != resource + }) + ) + tertiarySlot = builder.addSlot( + HTSlotInfo.EXTRA_INPUT, + HTBasicItemSlot.input(listener, filter = { resource: ItemResource -> + secondarySlot.resource.isEmpty || secondarySlot.resource != resource + }) + ) + outputSlot = builder.addSlot(HTSlotInfo.OUTPUT, HTBasicItemSlot.output(listener)) + } + + override fun setupMenu(widgetHolder: HTWidgetHolder) { + super.setupMenu(widgetHolder) + addEnergySlot(widgetHolder, HTSlotHelper.getSlotPosX(1.5), HTSlotHelper.getSlotPosY(1)) + // progress + addProgressBar(widgetHolder) + // inputs + widgetHolder += HTItemWidget.Container( + primarySlot, + 0, + HTSlotHelper.getSlotPosX(1.5), + HTSlotHelper.getSlotPosY(0), + HTBackgroundType.INPUT + ) + widgetHolder.track(primarySlot) + widgetHolder += HTItemWidget.Container( + secondarySlot, + 1, + HTSlotHelper.getSlotPosX(1), + HTSlotHelper.getSlotPosY(2), + HTBackgroundType.EXTRA_INPUT + ) + widgetHolder.track(secondarySlot) + widgetHolder += HTItemWidget.Container( + tertiarySlot, + 2, + HTSlotHelper.getSlotPosX(2), + HTSlotHelper.getSlotPosY(2), + HTBackgroundType.EXTRA_INPUT + ) + widgetHolder.track(tertiarySlot) + // output + widgetHolder += HTItemWidget.Container( + outputSlot, + 3, + HTSlotHelper.getSlotPosX(6), + HTSlotHelper.getSlotPosY(1), + HTBackgroundType.OUTPUT + ) + widgetHolder.track(outputSlot) + } +} 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 new file mode 100644 index 0000000000..19aa9a1a61 --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTCreativeTankBlockEntity.kt @@ -0,0 +1,37 @@ +package hiiragi283.ragium.common.block.entity.storage + +import hiiragi283.ragium.api.data.RagiumDataComponents +import hiiragi283.ragium.common.block.entity.RagiumBlockEntityTypes +import hiiragi283.ragium.common.block.entity.storage.base.HTBaseTankBlockEntity +import hiiragi283.ragium.common.transfer.fluid.HTCreativeFluidTank +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 fun initTank(listener: Runnable) {} + + // Sync // + + override fun applyImplicitComponents(components: DataComponentGetter) { + super.applyImplicitComponents(components) + components.get(RagiumDataComponents.FLUID) + ?.copy() + ?.let(FluidResource::of) + ?.let(tank::resource::set) + } + + 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) + } + } +} diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTTankBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTTankBlockEntity.kt new file mode 100644 index 0000000000..72f8e12820 --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTTankBlockEntity.kt @@ -0,0 +1,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.common.block.entity.RagiumBlockEntityTypes +import hiiragi283.ragium.common.block.entity.storage.base.HTBaseTankBlockEntity +import hiiragi283.ragium.common.transfer.fluid.HTVariableFluidTank +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) + } + + // Sync // + + override fun applyImplicitComponents(components: DataComponentGetter) { + super.applyImplicitComponents(components) + components.get(RagiumDataComponents.FLUID)?.copy()?.let(tank::setStack) + } + + 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) + } + } +} 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 new file mode 100644 index 0000000000..311257a9bb --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/base/HTBaseTankBlockEntity.kt @@ -0,0 +1,64 @@ +package hiiragi283.ragium.common.block.entity.storage.base + +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 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 +import net.minecraft.world.level.block.state.BlockState +import net.minecraft.world.level.storage.ValueInput +import net.minecraft.world.level.storage.ValueOutput + +abstract class HTBaseTankBlockEntity(type: BlockEntityType<*>, pos: BlockPos, state: BlockState) : + 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 + } + } + + protected abstract fun initTank(listener: Runnable) + + override fun markDirtyComparator() { + level?.updateNeighbourForOutputSignal(blockPos, blockState.block) + } + + override fun getComparatorOutput(state: BlockState, level: Level, pos: BlockPos): Int = + HTStorageHelper.calculateRedstoneLevel(tank) + + // Sync // + + override fun writeReducedUpdateTag(output: ValueOutput) { + super.writeReducedUpdateTag(output) + tank.serialize(output) + } + + override fun readUpdateTag(input: ValueInput) { + tank.deserialize(input) + } + + // Ticking // + + private var oldScale: Float = 0f + + override fun onUpdateServer(level: ServerLevel, pos: BlockPos, state: BlockState): Boolean { + // 保持する量の変化があれば更新させる + val scale: Float = tank.currentFilledLevel + if (scale != this.oldScale) { + this.oldScale = scale + 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 new file mode 100644 index 0000000000..7138717eb7 --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/block/storage/HTTankBlock.kt @@ -0,0 +1,46 @@ +package hiiragi283.ragium.common.block.storage + +import hiiragi283.lib.registry.HTDeferredBlockEntityType +import hiiragi283.ragium.common.block.HTBasicEntityBlock +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) { + 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/block/storage/HTVoidTankBlock.kt b/src/main/kotlin/hiiragi283/ragium/common/block/storage/HTVoidTankBlock.kt new file mode 100644 index 0000000000..2be76c331b --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/block/storage/HTVoidTankBlock.kt @@ -0,0 +1,47 @@ +package hiiragi283.ragium.common.block.storage + +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.Block +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.VoidingResourceHandler +import net.neoforged.neoforge.transfer.fluid.FluidResource +import net.neoforged.neoforge.transfer.fluid.FluidUtil + +class HTVoidTankBlock(properties: Properties) : Block(properties) { + companion object { + @JvmField + val VOIDING_HANDLER: VoidingResourceHandler = VoidingResourceHandler(FluidResource.EMPTY) + } + + 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 = + HTTankBlock.SHAPE +} diff --git a/src/main/kotlin/hiiragi283/ragium/common/effect/RagiumMobEffects.kt b/src/main/kotlin/hiiragi283/ragium/common/effect/RagiumMobEffects.kt index 4a0bdf6727..764fece347 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/effect/RagiumMobEffects.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/effect/RagiumMobEffects.kt @@ -3,6 +3,7 @@ package hiiragi283.ragium.common.effect import hiiragi283.lib.registry.HTDeferredMobEffect import hiiragi283.lib.registry.HTDeferredMobEffectRegister import hiiragi283.ragium.api.RagiumAPI +import hiiragi283.ragium.api.world.chemicalBurn import net.minecraft.world.damagesource.DamageSources import net.minecraft.world.effect.MobEffectCategory import net.neoforged.bus.api.IEventBus @@ -20,4 +21,9 @@ data object RagiumMobEffects { val FROSTBITE: HTDeferredMobEffect = REGISTER.register("frostbite") { _ -> HTDamageMobEffect(MobEffectCategory.HARMFUL, 0x3399cc, DamageSources::freeze) } + + @JvmField + val CHEMICAL_BURN: HTDeferredMobEffect = REGISTER.register("chemical_burn") { _ -> + HTDamageMobEffect(MobEffectCategory.HARMFUL, 0xcc9900, DamageSources::chemicalBurn) + } } diff --git a/src/main/kotlin/hiiragi283/ragium/common/event/RagiumEventHandlers.kt b/src/main/kotlin/hiiragi283/ragium/common/event/RagiumEventHandlers.kt index ba0a914a90..f157f4cf57 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/event/RagiumEventHandlers.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/event/RagiumEventHandlers.kt @@ -1,5 +1,8 @@ package hiiragi283.ragium.common.event +import hiiragi283.ragium.api.material.HTItemPart +import hiiragi283.ragium.api.material.RagiumMaterial +import hiiragi283.ragium.common.item.RagiumItems import hiiragi283.ragium.common.item.alchemy.RagiumPotions import net.minecraft.world.item.Items import net.minecraft.world.item.alchemy.PotionBrewing @@ -13,5 +16,9 @@ data object RagiumEventHandlers { private fun registerBrewingRecipes(event: RegisterBrewingRecipesEvent) { val builder: PotionBrewing.Builder = event.builder RagiumPotions.FROSTBITE.registerMix(builder, Items.SNOW_BLOCK) + RagiumPotions.CHEMICAL_BURN.registerMix( + builder, + RagiumItems.getOrThrow(HTItemPart.DUST, RagiumMaterial.Mineral.SULFUR) + ) } } diff --git a/src/main/kotlin/hiiragi283/ragium/common/fluid/RagiumFluids.kt b/src/main/kotlin/hiiragi283/ragium/common/fluid/RagiumFluids.kt index 47bba7a2ea..f8be09857c 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/fluid/RagiumFluids.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/fluid/RagiumFluids.kt @@ -31,6 +31,7 @@ data object RagiumFluids { REGISTER.addAlias("calcium_hydroxide_solution", "sodium_hydroxide_solution") REGISTER.addAlias(RagiumAPI.id("molten_blaze"), vanillaId("lava")) REGISTER.addAlias("creosote", "coal_tar") + REGISTER.addAlias("chloride", "chlorine") REGISTER.register(eventBus) } @@ -91,6 +92,12 @@ data object RagiumFluids { fluidProperties = STICK_PROPERTY } + @JvmField + val RESIN: HTFluidContent.Flowing = REGISTER.registerFlowing("resin") { + properties = create(SoundEvents.RESIN_PLACE, SoundEvents.RESIN_BREAK) + fluidProperties = STICK_PROPERTY + } + @JvmField val OMINOUS_FLUX: HTFluidContent.Virtual = REGISTER.registerVirtual("ominous_flux") { properties = molten() @@ -128,11 +135,11 @@ data object RagiumFluids { // 4th @JvmField - val CHLORINE: HTFluidContent.Virtual = REGISTER.registerVirtual("chloride") { properties = gaseous() } + val CHLORINE: HTFluidContent.Virtual = REGISTER.registerVirtual("chlorine") { properties = gaseous() } // Chemical // - // 3rd + // C @JvmField val WOOD_TAR: HTFluidContent.Virtual = REGISTER.registerVirtual("wood_tar") { properties = liquid() @@ -175,6 +182,10 @@ data object RagiumFluids { @JvmField val ANTI_RUST_OIL: HTFluidContent.Virtual = REGISTER.registerVirtual("anti_rust_oil") { properties = liquid() } + @JvmField + val SYNTHETIC_RESIN: HTFluidContent.Virtual = REGISTER.registerVirtual("synthetic_resin") { properties = liquid() } + + // N @JvmField val NITRIC_ACID: HTFluidContent.Flowing = REGISTER.registerFlowing("nitric_acid") { properties = liquid() } @@ -184,12 +195,30 @@ data object RagiumFluids { typeFactory = { HTExplosiveFluidType(6f, it) } } - // 4th + // F + @JvmField + val HYDROGEN_FLUORIDE: HTFluidContent.Virtual = REGISTER.registerVirtual("hydrogen_fluoride") { + properties = gaseous() + } + + @JvmField + val HYDROFLUORIC_ACID: HTFluidContent.Flowing = REGISTER.registerFlowing("hydrofluoric_acid") { + properties = liquid() + } + + // Na @JvmField val NAOH_SOLUTION: HTFluidContent.Flowing = REGISTER.registerFlowing("sodium_hydroxide_solution") { properties = liquid() } + // Al + @JvmField + val ALUMINA_SOLUTION: HTFluidContent.Virtual = REGISTER.registerVirtual("alumina_solution") { + properties = liquid() + } + + // S @JvmField val SULFUR_DIOXIDE: HTFluidContent.Virtual = REGISTER.registerVirtual("sulfur_dioxide") { properties = gaseous() } @@ -202,6 +231,7 @@ data object RagiumFluids { fluidProperties = STICK_PROPERTY } + // Cl @JvmField val HYDROGEN_CHLORIDE: HTFluidContent.Virtual = REGISTER.registerVirtual("hydrogen_chloride") { properties = gaseous() diff --git a/src/main/kotlin/hiiragi283/ragium/common/gui/HTContainerItemSlot.kt b/src/main/kotlin/hiiragi283/ragium/common/gui/HTContainerItemSlot.kt index 16faec5005..8ab60606dc 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/gui/HTContainerItemSlot.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/gui/HTContainerItemSlot.kt @@ -5,7 +5,6 @@ import hiiragi283.lib.transfer.HTTransferAccess import hiiragi283.lib.transfer.item.HTBasicItemSlot import hiiragi283.lib.transfer.item.HTItemSlot import hiiragi283.lib.transfer.item.getItemStack -import hiiragi283.lib.transfer.item.toResourcePair import hiiragi283.lib.transfer.useTransaction import net.minecraft.world.entity.player.Player import net.minecraft.world.item.ItemStack @@ -44,14 +43,8 @@ class HTContainerItemSlot( stackSetter.accept(stack) } - override fun mayPlace(itemStack: ItemStack): Boolean { - val (resource: ItemResource, count: Int) = itemStack.toResourcePair() - if (slot.resource.isEmpty) { - return useTransaction { slot.insert(resource, count, it, HTTransferAccess.MANUAL) } <= count - } - if (useTransaction { slot.extractSelf(1, it, HTTransferAccess.MANUAL) } == 0) return false - return manualFilter.test(resource, HTTransferAccess.MANUAL) - } + override fun mayPlace(itemStack: ItemStack): Boolean = + !itemStack.isEmpty && manualFilter.test(ItemResource.of(itemStack), HTTransferAccess.MANUAL) override fun getMaxStackSize(): Int = slot.currentCapacity diff --git a/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt b/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt index 418d13a24d..9d0aa3b27c 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt @@ -1,22 +1,42 @@ package hiiragi283.ragium.common.item +import hiiragi283.lib.capability.HTFluidCapabilities import hiiragi283.lib.collection.Table -import hiiragi283.lib.collection.buildSortedSetMultiMap +import hiiragi283.lib.collection.buildSetMultiMap import hiiragi283.lib.collection.flatMapTable import hiiragi283.lib.collection.mutableEnumMapOf 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.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.HolderLookup +import net.minecraft.core.component.DataComponentMap 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.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 @@ -27,6 +47,11 @@ data object RagiumItems { REGISTER.addAlias("steel_dust", "sooty_iron_dust") REGISTER.addAlias("steel_ingot", "sooty_iron_ingot") REGISTER.addAlias("steel_nugget", "sooty_iron_nugget") + REGISTER.addAlias("coal_coke_dust", "carbon_dust") + + eventBus.addListener(::registerTooltipAppenders) + eventBus.addListener(::registerCapabilities) + eventBus.addListener(::modifyDefaultComponents) REGISTER.register(eventBus) } @@ -35,39 +60,50 @@ data object RagiumItems { @JvmField val MATERIAL_ITEMS: Table = - buildSortedSetMultiMap(sortedMapOf(RagiumMaterial.COMPARATOR)) { - // Fuel - putAll(RagiumMaterial.Fuel.COAL, HTItemPart.DUST, HTItemPart.TINY) - putAll(RagiumMaterial.Fuel.CHARCOAL, HTItemPart.DUST, HTItemPart.TINY) - putAll(RagiumMaterial.Fuel.COAL_COKE, HTItemPart.DUST, HTItemPart.TINY) - // Mineral - for (mineral: RagiumMaterial.Mineral in RagiumMaterial.Mineral.entries) { - if (!mineral.isVanilla) { - putAll(mineral, HTItemPart.DUST) + buildSetMultiMap( + sortedMapOf(RagiumMaterial.COMPARATOR), + { + // Fuel + putAll(RagiumMaterial.Fuel.COAL, HTItemPart.DUST, HTItemPart.TINY) + putAll(RagiumMaterial.Fuel.CHARCOAL, HTItemPart.DUST, HTItemPart.TINY) + 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) + } } - } - // Gem - putAll(RagiumMaterial.Gem.LAPIS, HTItemPart.DUST) - putAll(RagiumMaterial.Gem.QUARTZ, HTItemPart.DUST) - putAll(RagiumMaterial.Gem.AMETHYST, HTItemPart.DUST) - putAll(RagiumMaterial.Gem.DIAMOND, HTItemPart.DUST, HTItemPart.GEAR) - putAll(RagiumMaterial.Gem.EMERALD, HTItemPart.DUST, HTItemPart.GEAR) - putAll(RagiumMaterial.Gem.ECHO, HTItemPart.DUST) - putAll(RagiumMaterial.Gem.PRISMARINE, HTItemPart.DUST) - // 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.SOOTY_IRON, HTItemPart.INGOT, HTItemPart.NUGGET) - putAll(RagiumMaterial.Metal.BLACK_STEEL, HTItemPart.INGOT, HTItemPart.NUGGET) - putAll(RagiumMaterial.Metal.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) - }.flatMapTable { (material: RagiumMaterial, parts: Collection) -> + // Gem + putAll(RagiumMaterial.Gem.LAPIS, HTItemPart.DUST) + putAll(RagiumMaterial.Gem.QUARTZ, HTItemPart.DUST) + putAll(RagiumMaterial.Gem.AMETHYST, HTItemPart.DUST) + putAll(RagiumMaterial.Gem.DIAMOND, HTItemPart.DUST, HTItemPart.GEAR) + putAll(RagiumMaterial.Gem.EMERALD, HTItemPart.DUST, HTItemPart.GEAR) + 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) + // 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) + // 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) + }, + ::sortedSetOf + ).flatMapTable { (material: RagiumMaterial, parts: Collection) -> parts.map { part: HTItemPart -> Triple( part, @@ -104,7 +140,7 @@ data object RagiumItems { val TAR: HTSimpleDeferredItem = REGISTER.registerSimpleItem("tar") @JvmField - val PITCH_COKE: HTSimpleDeferredItem = REGISTER.registerSimpleItem("pitch_coke") + val PITCH_COKE: HTSimpleDeferredItem = REGISTER.registerSimpleItem(RagiumMaterial.Fuel.PITCH_COKE.materialName) // Chemical @JvmField @@ -133,6 +169,20 @@ data object RagiumItems { val LINGERING_BOTTLE: HTSimpleDeferredItem = REGISTER.registerSimpleItem("lingering_bottle") // Electronics + @JvmField + val CRUDE_SILICON: HTSimpleDeferredItem = REGISTER.registerSimpleItem("crude_silicon") + + @JvmField + val SILICON_WAFER: HTSimpleDeferredItem = REGISTER.registerSimpleItem("silicon_wafer") + + @JvmField + val CIRCUIT_CHIP: HTSimpleDeferredItem = REGISTER.registerSimpleItem("circuit_chip") + + @JvmField + val CIRCUIT_BOARD: HTSimpleDeferredItem = REGISTER.registerSimpleItem("circuit_board") + + @JvmField + val ELECTRIC_CIRCUIT: HTSimpleDeferredItem = REGISTER.registerSimpleItem("electric_circuit") // Arcane @JvmField @@ -178,4 +228,83 @@ data object RagiumItems { { 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 + event.registerItem( + HTFluidCapabilities.item, + { _, 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)) + } + } } diff --git a/src/main/kotlin/hiiragi283/ragium/common/item/alchemy/RagiumPotions.kt b/src/main/kotlin/hiiragi283/ragium/common/item/alchemy/RagiumPotions.kt index 16c31a37f9..4ede7bcb70 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/item/alchemy/RagiumPotions.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/item/alchemy/RagiumPotions.kt @@ -17,4 +17,7 @@ data object RagiumPotions { @JvmField val FROSTBITE: HTPotionContent = REGISTER.registerHarmful("frostbite", RagiumMobEffects.FROSTBITE) + + @JvmField + val CHEMICAL_BURN: HTPotionContent = REGISTER.registerHarmful("chemical_burn", RagiumMobEffects.CHEMICAL_BURN) } diff --git a/src/main/kotlin/hiiragi283/ragium/common/item/block/HTCreativeTankBlockItem.kt b/src/main/kotlin/hiiragi283/ragium/common/item/block/HTCreativeTankBlockItem.kt new file mode 100644 index 0000000000..8d5ca061fe --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/item/block/HTCreativeTankBlockItem.kt @@ -0,0 +1,38 @@ +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 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.level.block.Block +import net.neoforged.neoforge.fluids.SimpleFluidContent + +class HTCreativeTankBlockItem(block: Block, properties: Properties) : + BlockItem(block, properties), + HTSubCreativeTabContents { + override fun addItems( + baseItem: Holder, + parameters: CreativeModeTab.ItemDisplayParameters, + output: CreativeModeTab.Output + ) { + 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) + } + + override fun shouldAddDefault(): Boolean = false +} diff --git a/src/main/kotlin/hiiragi283/ragium/common/material/HTMaterialAccessImpl.kt b/src/main/kotlin/hiiragi283/ragium/common/material/HTMaterialAccessImpl.kt deleted file mode 100644 index 363ac24dbc..0000000000 --- a/src/main/kotlin/hiiragi283/ragium/common/material/HTMaterialAccessImpl.kt +++ /dev/null @@ -1,141 +0,0 @@ -package hiiragi283.ragium.common.material - -import hiiragi283.lib.collection.buildTable -import hiiragi283.lib.collection.mapValue -import hiiragi283.lib.registry.HTSimpleDeferredBlockAndItem -import hiiragi283.lib.registry.HTSimpleDeferredItem -import hiiragi283.lib.registry.getKeyOrThrow -import hiiragi283.ragium.api.material.HTBlockPart -import hiiragi283.ragium.api.material.HTItemPart -import hiiragi283.ragium.api.material.HTMaterialAccess -import hiiragi283.ragium.api.material.HTMaterialContents -import hiiragi283.ragium.api.material.HTOreBlockPart -import hiiragi283.ragium.api.material.HTStorageBlockPart -import hiiragi283.ragium.api.material.RagiumMaterial -import hiiragi283.ragium.common.block.RagiumBlocks -import hiiragi283.ragium.common.item.RagiumItems -import net.minecraft.resources.ResourceKey -import net.minecraft.world.item.Item -import net.minecraft.world.item.Items -import net.minecraft.world.level.block.Block -import net.minecraft.world.level.block.Blocks - -class HTMaterialAccessImpl : HTMaterialAccess { - companion object { - @JvmField - val VANILLA_BLOCKS: HTMaterialContents = HTMaterialContentsImpl( - buildTable { - @Suppress("DEPRECATION") - fun accept(part: HTBlockPart, material: RagiumMaterial, block: Block) { - this[part, material] = block.builtInRegistryHolder() - .getKeyOrThrow() - .let(ResourceKey::identifier) - .let(::HTSimpleDeferredBlockAndItem) - .let { HTMaterialContents.BlockEntry(it, true) } - } - - // Fuels - accept(HTOreBlockPart.STONE, RagiumMaterial.Fuel.COAL, Blocks.COAL_ORE) - accept(HTOreBlockPart.DEEPSLATE, RagiumMaterial.Fuel.COAL, Blocks.DEEPSLATE_COAL_ORE) - accept(HTStorageBlockPart.DEFAULT, RagiumMaterial.Fuel.COAL, Blocks.COAL_BLOCK) - // Mineral - accept(HTOreBlockPart.STONE, RagiumMaterial.Mineral.REDSTONE, Blocks.REDSTONE_ORE) - accept(HTOreBlockPart.DEEPSLATE, RagiumMaterial.Mineral.REDSTONE, Blocks.DEEPSLATE_REDSTONE_ORE) - accept(HTStorageBlockPart.DEFAULT, RagiumMaterial.Mineral.REDSTONE, Blocks.REDSTONE_BLOCK) - - accept(HTStorageBlockPart.DEFAULT, RagiumMaterial.Mineral.GLOWSTONE, Blocks.GLOWSTONE) - // Gem - accept(HTOreBlockPart.STONE, RagiumMaterial.Gem.LAPIS, Blocks.LAPIS_ORE) - accept(HTOreBlockPart.DEEPSLATE, RagiumMaterial.Gem.LAPIS, Blocks.DEEPSLATE_LAPIS_ORE) - accept(HTStorageBlockPart.DEFAULT, RagiumMaterial.Gem.LAPIS, Blocks.LAPIS_BLOCK) - - accept(HTOreBlockPart.NETHER, RagiumMaterial.Gem.QUARTZ, Blocks.NETHER_QUARTZ_ORE) - accept(HTStorageBlockPart.DEFAULT, RagiumMaterial.Gem.QUARTZ, Blocks.QUARTZ_BLOCK) - - accept(HTStorageBlockPart.DEFAULT, RagiumMaterial.Gem.AMETHYST, Blocks.AMETHYST_BLOCK) - - accept(HTOreBlockPart.STONE, RagiumMaterial.Gem.DIAMOND, Blocks.DIAMOND_ORE) - accept(HTOreBlockPart.DEEPSLATE, RagiumMaterial.Gem.DIAMOND, Blocks.DEEPSLATE_DIAMOND_ORE) - accept(HTStorageBlockPart.DEFAULT, RagiumMaterial.Gem.DIAMOND, Blocks.DIAMOND_BLOCK) - - accept(HTOreBlockPart.STONE, RagiumMaterial.Gem.EMERALD, Blocks.EMERALD_ORE) - accept(HTOreBlockPart.DEEPSLATE, RagiumMaterial.Gem.EMERALD, Blocks.DEEPSLATE_EMERALD_ORE) - accept(HTStorageBlockPart.DEFAULT, RagiumMaterial.Gem.EMERALD, Blocks.EMERALD_BLOCK) - // Metal - accept(HTOreBlockPart.STONE, RagiumMaterial.Metal.COPPER, Blocks.COPPER_ORE) - accept(HTOreBlockPart.DEEPSLATE, RagiumMaterial.Metal.COPPER, Blocks.DEEPSLATE_COPPER_ORE) - accept(HTStorageBlockPart.RAW, RagiumMaterial.Metal.COPPER, Blocks.RAW_COPPER_BLOCK) - accept(HTStorageBlockPart.DEFAULT, RagiumMaterial.Metal.COPPER, Blocks.COPPER_BLOCK) - - accept(HTOreBlockPart.STONE, RagiumMaterial.Metal.IRON, Blocks.IRON_ORE) - accept(HTOreBlockPart.DEEPSLATE, RagiumMaterial.Metal.IRON, Blocks.DEEPSLATE_IRON_ORE) - accept(HTStorageBlockPart.RAW, RagiumMaterial.Metal.IRON, Blocks.RAW_IRON_BLOCK) - accept(HTStorageBlockPart.DEFAULT, RagiumMaterial.Metal.IRON, Blocks.IRON_BLOCK) - - accept(HTOreBlockPart.STONE, RagiumMaterial.Metal.GOLD, Blocks.GOLD_ORE) - accept(HTOreBlockPart.DEEPSLATE, RagiumMaterial.Metal.GOLD, Blocks.DEEPSLATE_GOLD_ORE) - accept(HTOreBlockPart.NETHER, RagiumMaterial.Metal.GOLD, Blocks.NETHER_GOLD_ORE) - accept(HTStorageBlockPart.RAW, RagiumMaterial.Metal.GOLD, Blocks.RAW_GOLD_BLOCK) - accept(HTStorageBlockPart.DEFAULT, RagiumMaterial.Metal.GOLD, Blocks.GOLD_BLOCK) - // Alloy - accept(HTStorageBlockPart.DEFAULT, RagiumMaterial.Metal.NETHERITE, Blocks.NETHERITE_BLOCK) - } - ) { part: HTBlockPart, material: RagiumMaterial -> "Unknown $part block for $material" } - - @JvmField - val VANILLA_ITEMS: HTMaterialContents = HTMaterialContentsImpl( - buildTable { - @Suppress("DEPRECATION") - fun accept(part: HTItemPart, material: RagiumMaterial, item: Item) { - this[part, material] = item.builtInRegistryHolder() - .getKeyOrThrow() - .let(::HTSimpleDeferredItem) - .let { HTMaterialContents.ItemEntry(it, true) } - } - - // Mineral - accept(HTItemPart.DUST, RagiumMaterial.Mineral.REDSTONE, Items.REDSTONE) - accept(HTItemPart.DUST, RagiumMaterial.Mineral.GLOWSTONE, Items.GLOWSTONE_DUST) - // Gem - accept(HTItemPart.GEM, RagiumMaterial.Gem.LAPIS, Items.LAPIS_LAZULI) - accept(HTItemPart.GEM, RagiumMaterial.Gem.QUARTZ, Items.QUARTZ) - accept(HTItemPart.GEM, RagiumMaterial.Gem.AMETHYST, Items.AMETHYST_SHARD) - accept(HTItemPart.GEM, RagiumMaterial.Gem.DIAMOND, Items.DIAMOND) - accept(HTItemPart.GEM, RagiumMaterial.Gem.EMERALD, Items.EMERALD) - accept(HTItemPart.GEM, RagiumMaterial.Gem.ECHO, Items.ECHO_SHARD) - accept(HTItemPart.DUST, RagiumMaterial.Gem.PRISMARINE, Items.PRISMARINE_SHARD) - accept(HTItemPart.GEM, RagiumMaterial.Gem.PRISMARINE, Items.PRISMARINE_CRYSTALS) - // Metal - accept(HTItemPart.RAW, RagiumMaterial.Metal.COPPER, Items.RAW_COPPER) - accept(HTItemPart.INGOT, RagiumMaterial.Metal.COPPER, Items.COPPER_INGOT) - accept(HTItemPart.NUGGET, RagiumMaterial.Metal.COPPER, Items.COPPER_NUGGET) - - accept(HTItemPart.RAW, RagiumMaterial.Metal.IRON, Items.RAW_IRON) - accept(HTItemPart.INGOT, RagiumMaterial.Metal.IRON, Items.IRON_INGOT) - accept(HTItemPart.NUGGET, RagiumMaterial.Metal.IRON, Items.IRON_NUGGET) - - accept(HTItemPart.RAW, RagiumMaterial.Metal.GOLD, Items.RAW_GOLD) - accept(HTItemPart.INGOT, RagiumMaterial.Metal.GOLD, Items.GOLD_INGOT) - accept(HTItemPart.NUGGET, RagiumMaterial.Metal.GOLD, Items.GOLD_NUGGET) - // Alloy - accept(HTItemPart.INGOT, RagiumMaterial.Metal.NETHERITE, Items.NETHERITE_INGOT) - } - ) { part: HTItemPart, material: RagiumMaterial -> "Unknown $part item for $material" } - } - - override val existing: HTMaterialContents.Provider = HTMaterialContents.Provider(VANILLA_BLOCKS, VANILLA_ITEMS) - override val registered: HTMaterialContents.Provider by lazy { - HTMaterialContents.Provider( - HTMaterialContentsImpl( - RagiumBlocks.MATERIAL_BLOCKS.mapValue { (_, _, block: HTSimpleDeferredBlockAndItem) -> - HTMaterialContents.BlockEntry(block, false) - } - ) { part: HTBlockPart, material: RagiumMaterial -> "Unregistered $part block for $material" }, - HTMaterialContentsImpl( - RagiumItems.MATERIAL_ITEMS.mapValue { (_, _, item: HTSimpleDeferredItem) -> - HTMaterialContents.ItemEntry(item, false) - } - ) { part: HTItemPart, material: RagiumMaterial -> "Unregistered $part item for $material" } - ) - } -} diff --git a/src/main/kotlin/hiiragi283/ragium/common/material/HTMaterialContentsImpl.kt b/src/main/kotlin/hiiragi283/ragium/common/material/HTMaterialContentsImpl.kt deleted file mode 100644 index a2c1eeddae..0000000000 --- a/src/main/kotlin/hiiragi283/ragium/common/material/HTMaterialContentsImpl.kt +++ /dev/null @@ -1,14 +0,0 @@ -package hiiragi283.ragium.common.material - -import hiiragi283.lib.collection.Table -import hiiragi283.ragium.api.material.HTMaterialContents -import hiiragi283.ragium.api.material.HTPart -import hiiragi283.ragium.api.material.RagiumMaterial - -internal class HTMaterialContentsImpl( - table: Table, - private val errorFactory: (R, RagiumMaterial) -> String -) : HTMaterialContents, - Table by table { - override fun getErrorMessage(row: R, column: RagiumMaterial): String = errorFactory(row, column) -} diff --git a/src/main/kotlin/hiiragi283/ragium/common/material/RagiumMaterialHelper.kt b/src/main/kotlin/hiiragi283/ragium/common/material/RagiumMaterialHelper.kt index 828918ce80..a04e052d4e 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/material/RagiumMaterialHelper.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/material/RagiumMaterialHelper.kt @@ -11,5 +11,6 @@ data object RagiumMaterialHelper { 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 } } diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/RTOreSlurryWashingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/RTOreSlurryWashingRecipe.kt new file mode 100644 index 0000000000..1efc431272 --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/RTOreSlurryWashingRecipe.kt @@ -0,0 +1,34 @@ +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 index 7a43af19c1..e0de1baa61 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/recipe/RTOreSolvingRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/RTOreSolvingRecipe.kt @@ -3,8 +3,8 @@ 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.RagiumDataComponents import hiiragi283.ragium.api.data.oreSlurry.HTOreSlurryDataHelper import hiiragi283.ragium.common.fluid.RagiumFluids import net.minecraft.world.item.ItemInstance @@ -13,20 +13,20 @@ import net.neoforged.neoforge.fluids.FluidStack import net.neoforged.neoforge.fluids.FluidType data object RTOreSolvingRecipe : HTItemAndFluidToFluidRecipe, HTProgressRecipe.Simple { - override val progressData: HTProgressData = HTProgressData.time(200) - 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 first.has(RagiumDataComponents.ORE_SLURRY_DATA) + return HTOreSlurryDataHelper.getHolder(first) != null } override fun apply(first: ItemInstance, second: FluidInstance): FluidStack = HTOreSlurryDataHelper.createFluid(first) ?: FluidStack.EMPTY - override fun getRequiredAmount(first: ItemInstance, second: FluidInstance): Pair = when { - test(first, second) -> 1 to FluidType.BUCKET_VOLUME - else -> 0 to 0 - } + 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 9c21ff5cd6..037b4bbdc6 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/recipe/RTPotionBottleDrainingRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/RTPotionBottleDrainingRecipe.kt @@ -5,26 +5,33 @@ import hiiragi283.lib.item.alchemy.HTPotionHelper import hiiragi283.lib.recipe.base.HTItemToItemAndFluidRecipe import hiiragi283.lib.recipe.base.HTProgressData import hiiragi283.lib.recipe.base.HTProgressRecipe +import hiiragi283.lib.recipe.ingredient.HTIngredientHelper import hiiragi283.lib.recipe.result.HTItemAndFluidResult import net.minecraft.world.item.ItemInstance +import net.minecraft.world.item.ItemStack import net.minecraft.world.item.crafting.SingleRecipeInput @JvmRecord data class RTPotionBottleDrainingRecipe(val bottleType: HTBottleType, override val progressData: HTProgressData) : HTItemToItemAndFluidRecipe, HTProgressRecipe.Simple { - constructor(bottleType: HTBottleType) : this(bottleType, HTProgressData.time(60)) + companion object { + @JvmField + val PROGRESS_DATA: HTProgressData = HTProgressData.time(60) + } + + constructor(bottleType: HTBottleType) : this(bottleType, PROGRESS_DATA) override fun test(input: ItemInstance): Boolean = - input.`is`(bottleType.filledItem) && HTPotionHelper.hasAnyEffect(input) + bottleType.filledItem.isOf(input) && HTPotionHelper.hasAnyEffect(input) override fun apply(input: ItemInstance): HTItemAndFluidResult = HTItemAndFluidResult( bottleType.emptyItem.toStack(), HTPotionHelper.createFluid(input, HTPotionHelper.BOTTLE_AMOUNT) ) - override fun getRequiredAmount(input: ItemInstance): Int = when { - test(input) -> 1 - else -> 0 + override fun getMatchingStack(input: ItemInstance): ItemInstance = when { + test(input) -> HTIngredientHelper.copyWithCount(input, 1) + else -> ItemStack.EMPTY } } diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/RTPotionBottleFillingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/RTPotionBottleFillingRecipe.kt index 3a3b073710..421a686e12 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/recipe/RTPotionBottleFillingRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/RTPotionBottleFillingRecipe.kt @@ -5,6 +5,7 @@ import hiiragi283.lib.item.alchemy.HTPotionHelper import hiiragi283.lib.recipe.base.HTItemAndFluidToItemRecipe import hiiragi283.lib.recipe.base.HTProgressData import hiiragi283.lib.recipe.base.HTProgressRecipe +import hiiragi283.lib.recipe.ingredient.HTIngredientHelper import hiiragi283.lib.recipe.input.HTItemAndFluidRecipeInput import net.minecraft.world.item.ItemInstance import net.minecraft.world.item.ItemStack @@ -14,10 +15,15 @@ import net.neoforged.neoforge.fluids.FluidInstance data class RTPotionBottleFillingRecipe(val bottleType: HTBottleType, override val progressData: HTProgressData) : HTItemAndFluidToItemRecipe, HTProgressRecipe.Simple { - constructor(bottleType: HTBottleType) : this(bottleType, HTProgressData.time(60)) + companion object { + @JvmField + val PROGRESS_DATA: HTProgressData = HTProgressData.time(60) + } + + constructor(bottleType: HTBottleType) : this(bottleType, PROGRESS_DATA) override fun test(first: ItemInstance, second: FluidInstance): Boolean = when { - !first.`is`(bottleType.emptyItem) -> false + !bottleType.emptyItem.isOf(first) -> false !HTPotionHelper.hasAnyEffect(second) -> false else -> second.amount() >= HTPotionHelper.BOTTLE_AMOUNT } @@ -25,8 +31,8 @@ data class RTPotionBottleFillingRecipe(val bottleType: HTBottleType, override va override fun apply(first: ItemInstance, second: FluidInstance): ItemStack = bottleType.filledItem.toStack(patch = HTPotionHelper.createPotionPatch(second)) - override fun getRequiredAmount(first: ItemInstance, second: FluidInstance): Pair = when { - test(first, second) -> 1 to HTPotionHelper.BOTTLE_AMOUNT - else -> 0 to 0 - } + override fun getMatchingStack(first: ItemInstance, second: FluidInstance): Pair = Pair( + HTIngredientHelper.copyWithCount(first, 1), + HTIngredientHelper.copyWithAmount(second, HTPotionHelper.BOTTLE_AMOUNT) + ) } diff --git a/src/main/kotlin/hiiragi283/ragium/common/transfer/fluid/HTCreativeFluidTank.kt b/src/main/kotlin/hiiragi283/ragium/common/transfer/fluid/HTCreativeFluidTank.kt new file mode 100644 index 0000000000..8704c5b333 --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/transfer/fluid/HTCreativeFluidTank.kt @@ -0,0 +1,66 @@ +package hiiragi283.ragium.common.transfer.fluid + +import hiiragi283.lib.HTConstants +import hiiragi283.lib.transfer.HTTransferAccess +import hiiragi283.lib.transfer.fluid.HTFluidTank +import net.minecraft.world.level.storage.ValueInput +import net.minecraft.world.level.storage.ValueOutput +import net.neoforged.neoforge.transfer.TransferPreconditions +import net.neoforged.neoforge.transfer.fluid.FluidResource +import net.neoforged.neoforge.transfer.transaction.TransactionContext + +/** + * @see net.neoforged.neoforge.transfer.InfiniteResourceHandler + */ +class HTCreativeFluidTank : HTFluidTank { + override fun isValid(resource: FluidResource): Boolean = resource == this.resource + + override fun insert( + resource: FluidResource, + amount: Int, + transaction: TransactionContext, + access: HTTransferAccess + ): Int { + TransferPreconditions.checkNonEmptyNonNegative(resource, amount) + return when { + this.resource.isEmpty -> { + this.resource = resource + amount + } + + this.resource == resource -> amount + + else -> 0 + } + } + + override fun extract( + resource: FluidResource, + amount: Int, + transaction: TransactionContext, + access: HTTransferAccess + ): Int { + TransferPreconditions.checkNonEmptyNonNegative(resource, amount) + return when (resource) { + this.resource -> amount + else -> 0 + } + } + + override var resource: FluidResource = FluidResource.EMPTY + + override val amount: Int get() = when (resource.isEmpty) { + true -> 0 + false -> Int.MAX_VALUE + } + + override fun getCapacity(resource: FluidResource): Int = Int.MAX_VALUE + + override fun serialize(output: ValueOutput) { + output.store(HTConstants.FLUID, FluidResource.OPTIONAL_CODEC, this.resource) + } + + override fun deserialize(input: ValueInput) { + input.read(HTConstants.FLUID, FluidResource.OPTIONAL_CODEC).ifPresent(this::resource::set) + } +} diff --git a/src/main/kotlin/hiiragi283/ragium/common/transfer/fluid/HTVariableFluidTank.kt b/src/main/kotlin/hiiragi283/ragium/common/transfer/fluid/HTVariableFluidTank.kt new file mode 100644 index 0000000000..740a8452c8 --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/transfer/fluid/HTVariableFluidTank.kt @@ -0,0 +1,44 @@ +package hiiragi283.ragium.common.transfer.fluid + +import hiiragi283.lib.transfer.HTTransferAccess +import hiiragi283.lib.transfer.HTTransferPredicates +import hiiragi283.lib.transfer.fluid.HTBasicFluidTank +import net.neoforged.neoforge.transfer.fluid.FluidResource +import java.util.function.BiPredicate +import java.util.function.IntSupplier +import java.util.function.Predicate + +class HTVariableFluidTank( + private val capacitySupplier: IntSupplier, + canExtract: BiPredicate, + canInsert: BiPredicate, + filter: Predicate, + listener: Runnable? +) : HTBasicFluidTank(capacitySupplier.asInt, canExtract, canInsert, filter, listener) { + companion object { + @JvmStatic + fun create( + capacity: IntSupplier, + listener: Runnable?, + canExtract: BiPredicate = HTTransferPredicates.alwaysTrueBi(), + canInsert: BiPredicate = HTTransferPredicates.alwaysTrueBi(), + filter: Predicate = HTTransferPredicates.alwaysTrue() + ): HTVariableFluidTank = HTVariableFluidTank(capacity, canExtract, canInsert, filter, listener) + + @JvmStatic + fun input( + capacity: IntSupplier, + listener: Runnable?, + canInsert: Predicate = HTTransferPredicates.alwaysTrue(), + filter: Predicate = canInsert + ): HTVariableFluidTank = create(capacity, listener, HTTransferPredicates.notExternal(), { resource, _ -> + canInsert.test(resource) + }, filter) + + @JvmStatic + fun output(capacity: IntSupplier, listener: Runnable?): HTVariableFluidTank = + create(capacity, listener, canInsert = HTTransferPredicates.internalOnly()) + } + + override fun getCapacity(resource: FluidResource): Int = capacitySupplier.asInt +} diff --git a/src/main/resources/META-INF/services/hiiragi283.ragium.api.material.HTMaterialAccess b/src/main/resources/META-INF/services/hiiragi283.ragium.api.material.HTMaterialAccess deleted file mode 100644 index d0c006ee7e..0000000000 --- a/src/main/resources/META-INF/services/hiiragi283.ragium.api.material.HTMaterialAccess +++ /dev/null @@ -1 +0,0 @@ -hiiragi283.ragium.common.material.HTMaterialAccessImpl diff --git a/src/main/resources/assets/ragium/models/block/tank_template.json b/src/main/resources/assets/ragium/models/block/tank_template.json new file mode 100644 index 0000000000..2f0f86b8bf --- /dev/null +++ b/src/main/resources/assets/ragium/models/block/tank_template.json @@ -0,0 +1,54 @@ +{ + "format_version": "1.9.0", + "credit": "Made by Hiiragi Russell Tsubasa", + "render_type": "minecraft:cutout", + "textures": { + "particle": "#side" + }, + "elements": [ + { + "from": [2, 0, 2], + "to": [14, 16, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [2, 0, 2]}, + "faces": { + "north": {"uv": [2, 0, 14, 16], "texture": "#side"}, + "east": {"uv": [2, 0, 14, 16], "texture": "#side"}, + "south": {"uv": [2, 0, 14, 16], "texture": "#side"}, + "west": {"uv": [2, 0, 14, 16], "texture": "#side"}, + "up": {"uv": [2, 2, 14, 14], "texture": "#top"}, + "down": {"uv": [2, 2, 14, 14], "texture": "#top"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, -135, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, -135, 0], + "scale": [0.625, 0.625, 0.625] + }, + "fixed": { + "scale": [0.5, 0.5, 0.5] + } + } +} diff --git a/src/main/resources/assets/ragium/textures/block/aluminum_block.png b/src/main/resources/assets/ragium/textures/block/aluminum_block.png new file mode 100644 index 0000000000..d7871c199f Binary files /dev/null and b/src/main/resources/assets/ragium/textures/block/aluminum_block.png differ diff --git a/src/main/resources/assets/ragium/textures/block/creative_tank_side.png b/src/main/resources/assets/ragium/textures/block/creative_tank_side.png new file mode 100644 index 0000000000..973c628933 Binary files /dev/null and b/src/main/resources/assets/ragium/textures/block/creative_tank_side.png differ diff --git a/src/main/resources/assets/ragium/textures/block/creative_tank_top.png b/src/main/resources/assets/ragium/textures/block/creative_tank_top.png new file mode 100644 index 0000000000..a0e35e3ce1 Binary files /dev/null and b/src/main/resources/assets/ragium/textures/block/creative_tank_top.png differ diff --git a/src/main/resources/assets/ragium/textures/block/cryolite_block.png b/src/main/resources/assets/ragium/textures/block/cryolite_block.png new file mode 100644 index 0000000000..b375b5bdb8 Binary files /dev/null and b/src/main/resources/assets/ragium/textures/block/cryolite_block.png differ diff --git a/src/main/resources/assets/ragium/textures/block/fluid/molten.png b/src/main/resources/assets/ragium/textures/block/fluid/molten.png deleted file mode 100644 index 5d8dbca7b0..0000000000 Binary files a/src/main/resources/assets/ragium/textures/block/fluid/molten.png and /dev/null differ diff --git a/src/main/resources/assets/ragium/textures/block/fluid/molten_flowing.png b/src/main/resources/assets/ragium/textures/block/fluid/molten_flowing.png new file mode 100644 index 0000000000..b90273a044 Binary files /dev/null and b/src/main/resources/assets/ragium/textures/block/fluid/molten_flowing.png differ diff --git a/src/main/resources/assets/ragium/textures/block/fluid/molten_flowing.png.mcmeta b/src/main/resources/assets/ragium/textures/block/fluid/molten_flowing.png.mcmeta new file mode 100644 index 0000000000..a100e5500a --- /dev/null +++ b/src/main/resources/assets/ragium/textures/block/fluid/molten_flowing.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 3 + } +} diff --git a/src/main/resources/assets/ragium/textures/block/fluid/molten_still.png b/src/main/resources/assets/ragium/textures/block/fluid/molten_still.png new file mode 100644 index 0000000000..0c2466a5f0 Binary files /dev/null and b/src/main/resources/assets/ragium/textures/block/fluid/molten_still.png differ diff --git a/src/main/resources/assets/ragium/textures/block/fluid/molten_still.png.mcmeta b/src/main/resources/assets/ragium/textures/block/fluid/molten_still.png.mcmeta new file mode 100644 index 0000000000..04867655f0 --- /dev/null +++ b/src/main/resources/assets/ragium/textures/block/fluid/molten_still.png.mcmeta @@ -0,0 +1,45 @@ +{ + "animation": { + "frametime": 2, + "frames": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 18, + 17, + 16, + 15, + 14, + 13, + 12, + 11, + 10, + 9, + 8, + 7, + 6, + 5, + 4, + 3, + 2, + 1 + ] + } +} diff --git a/src/main/resources/assets/ragium/textures/block/fluorite_block.png b/src/main/resources/assets/ragium/textures/block/fluorite_block.png new file mode 100644 index 0000000000..b3984ef61d Binary files /dev/null and b/src/main/resources/assets/ragium/textures/block/fluorite_block.png differ diff --git a/src/main/resources/assets/ragium/textures/block/pitch_coke_block.png b/src/main/resources/assets/ragium/textures/block/pitch_coke_block.png new file mode 100644 index 0000000000..70eb3606fb Binary files /dev/null and b/src/main/resources/assets/ragium/textures/block/pitch_coke_block.png differ diff --git a/src/main/resources/assets/ragium/textures/block/tank_side.png b/src/main/resources/assets/ragium/textures/block/tank_side.png new file mode 100644 index 0000000000..f54be20287 Binary files /dev/null and b/src/main/resources/assets/ragium/textures/block/tank_side.png differ diff --git a/src/main/resources/assets/ragium/textures/block/tank_top.png b/src/main/resources/assets/ragium/textures/block/tank_top.png new file mode 100644 index 0000000000..74c124cb27 Binary files /dev/null and b/src/main/resources/assets/ragium/textures/block/tank_top.png differ diff --git a/src/main/resources/assets/ragium/textures/block/void_tank_side.png b/src/main/resources/assets/ragium/textures/block/void_tank_side.png new file mode 100644 index 0000000000..2dd99509b7 Binary files /dev/null and b/src/main/resources/assets/ragium/textures/block/void_tank_side.png differ diff --git a/src/main/resources/assets/ragium/textures/block/void_tank_top.png b/src/main/resources/assets/ragium/textures/block/void_tank_top.png new file mode 100644 index 0000000000..11670558c2 Binary files /dev/null and b/src/main/resources/assets/ragium/textures/block/void_tank_top.png differ diff --git a/src/main/resources/assets/ragium/textures/item/alumina_dust.png b/src/main/resources/assets/ragium/textures/item/alumina_dust.png new file mode 100644 index 0000000000..d4aae0120a Binary files /dev/null and b/src/main/resources/assets/ragium/textures/item/alumina_dust.png differ diff --git a/src/main/resources/assets/ragium/textures/item/aluminum_ingot.png b/src/main/resources/assets/ragium/textures/item/aluminum_ingot.png new file mode 100644 index 0000000000..27ce28cb1f Binary files /dev/null and b/src/main/resources/assets/ragium/textures/item/aluminum_ingot.png differ diff --git a/src/main/resources/assets/ragium/textures/item/aluminum_nugget.png b/src/main/resources/assets/ragium/textures/item/aluminum_nugget.png new file mode 100644 index 0000000000..3df50db438 Binary files /dev/null and b/src/main/resources/assets/ragium/textures/item/aluminum_nugget.png differ diff --git a/src/main/resources/assets/ragium/textures/item/bauxite_dust.png b/src/main/resources/assets/ragium/textures/item/bauxite_dust.png new file mode 100644 index 0000000000..0a0fc3a57a Binary files /dev/null and b/src/main/resources/assets/ragium/textures/item/bauxite_dust.png differ diff --git a/src/main/resources/assets/ragium/textures/item/carbon_dust.png b/src/main/resources/assets/ragium/textures/item/carbon_dust.png new file mode 100644 index 0000000000..10f2e43372 Binary files /dev/null and b/src/main/resources/assets/ragium/textures/item/carbon_dust.png differ diff --git a/src/main/resources/assets/ragium/textures/item/cryolite.png b/src/main/resources/assets/ragium/textures/item/cryolite.png new file mode 100644 index 0000000000..a4434853e6 Binary files /dev/null and b/src/main/resources/assets/ragium/textures/item/cryolite.png differ diff --git a/src/main/resources/assets/ragium/textures/item/cryolite_dust.png b/src/main/resources/assets/ragium/textures/item/cryolite_dust.png new file mode 100644 index 0000000000..5a9b530630 Binary files /dev/null and b/src/main/resources/assets/ragium/textures/item/cryolite_dust.png differ diff --git a/src/main/resources/assets/ragium/textures/item/fluorite.png b/src/main/resources/assets/ragium/textures/item/fluorite.png new file mode 100644 index 0000000000..f3f834af82 Binary files /dev/null and b/src/main/resources/assets/ragium/textures/item/fluorite.png differ diff --git a/src/main/resources/assets/ragium/textures/item/fluorite_dust.png b/src/main/resources/assets/ragium/textures/item/fluorite_dust.png new file mode 100644 index 0000000000..b0cb4fc73d Binary files /dev/null and b/src/main/resources/assets/ragium/textures/item/fluorite_dust.png differ diff --git a/src/main/resources/assets/ragium/textures/item/silicon_dust.png b/src/main/resources/assets/ragium/textures/item/silicon_dust.png new file mode 100644 index 0000000000..47d4b73e3e Binary files /dev/null and b/src/main/resources/assets/ragium/textures/item/silicon_dust.png differ diff --git a/src/main/resources/assets/ragium/textures/item/tiny_pitch_coke.png b/src/main/resources/assets/ragium/textures/item/tiny_pitch_coke.png new file mode 100644 index 0000000000..e61f18bcdf Binary files /dev/null and b/src/main/resources/assets/ragium/textures/item/tiny_pitch_coke.png differ