From 5a35d541139537e4649187de5f9ab598c1f0fd19 Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Fri, 18 Sep 2026 22:26:05 +0900 Subject: [PATCH 01/44] Feat/silicon (#77) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: 新しいアイテム「Crude Silicon / 粗製シリコン」「Silicon Dust / シリコンの粉」「Carbon Dust / 炭素の粉」を追加 feat!: アイテム「Coal Coke Dust」を「Carbon Dust」にリダイレクト * feat: 新しいアイテムタグ #ragium:coals を追加 * feat: 新しいアイテムを追加 - Silicon Wafer / シリコンウェハ - Circuit Chip / 回路チップ - Circuit Board / 回路基板 - Electric Circuit / 電子回路 --- .../data/lang/RagiumEnglishLangProvider.kt | 5 + .../data/lang/RagiumJapaneseLangProvider.kt | 5 + .../data/recipe/RagiumCommonRecipeProvider.kt | 132 ++++++++++++++- .../data/recipe/RagiumHeatRecipeProvider.kt | 21 +++ .../recipe/RagiumMechanicalRecipeProvider.kt | 20 ++- .../recipe/RagiumVanillaRecipeProvider.kt | 158 +++++++----------- .../ragium/data/tag/RagiumItemTagsProvider.kt | 11 ++ .../{coal_coke_dust.json => carbon_dust.json} | 2 +- .../assets/ragium/items/circuit_board.json | 6 + .../assets/ragium/items/circuit_chip.json | 6 + .../assets/ragium/items/crude_silicon.json | 6 + .../assets/ragium/items/electric_circuit.json | 6 + .../assets/ragium/items/silicon_dust.json | 6 + .../assets/ragium/items/silicon_wafer.json | 6 + .../resources/assets/ragium/lang/en_us.json | 8 +- .../resources/assets/ragium/lang/ja_jp.json | 8 +- .../{coal_coke_dust.json => carbon_dust.json} | 2 +- .../ragium/models/item/circuit_board.json | 6 + .../ragium/models/item/circuit_chip.json | 6 + .../ragium/models/item/crude_silicon.json | 6 + .../ragium/models/item/electric_circuit.json | 6 + .../ragium/models/item/silicon_dust.json | 6 + .../ragium/models/item/silicon_wafer.json | 6 + .../resources/data/c/tags/item/coal_coke.json | 5 + .../resources/data/c/tags/item/dusts.json | 3 +- .../data/c/tags/item/dusts/carbon.json | 5 + .../data/c/tags/item/dusts/coal_coke.json | 5 - .../data/c/tags/item/dusts/silicon.json | 5 + .../data/c/tags/item/pitch_coke.json | 5 + .../resources/data/c/tags/item/silicon.json | 5 + .../misc/sooty_iron_ingot_by_coke_dust.json | 32 ---- .../misc/sooty_iron_ingot_by_dust.json | 43 ----- .../ragium/recipe/alloying/circuit_board.json | 22 +++ .../alloying/crude_silicon_from_amethyst.json | 22 +++ .../crude_silicon_from_amethyst_block.json | 16 ++ .../alloying/crude_silicon_from_quartz.json | 22 +++ .../crude_silicon_from_quartz_block.json | 16 ++ .../ragium/recipe/alloying/silicon_wafer.json | 16 ++ .../alloying/sooty_iron_ingot_by_coals.json | 22 +++ .../alloying/sooty_iron_ingot_by_cokes.json | 22 +++ .../recipe/assembling/electric_circuit.json | 16 ++ .../assembling/electronics_machine_parts.json | 16 ++ ...ctronics_machine_parts_by_black_metal.json | 16 ++ .../ragium/recipe/bathing/silicon_dust.json | 16 ++ .../compressing/charcoal_from_dust.json | 9 + .../compressing/coal_coke_from_dust.json | 9 + .../recipe/compressing/coal_from_dust.json | 9 + .../{coal_coke_dust.json => carbon_dust.json} | 4 +- .../ragium/recipe/cutting/circuit_chip.json | 12 ++ .../ragium/recipe/freezing/plastic_plate.json | 12 ++ .../{coal_coke_dust.json => carbon_dust.json} | 2 +- .../ragium/recipe/reacting/plastic_plate.json | 16 ++ .../recipe/sooty_iron_ingot_by_coke_dust.json | 14 -- .../recipe/sooty_iron_ingot_by_dust.json | 18 -- .../data/ragium/tags/item/coals.json | 7 + .../data/ragium/tags/item/cokes.json | 6 + .../hiiragi283/lib/data/ConditionBuilder.kt | 10 ++ .../kotlin/hiiragi283/lib/tag/HTCommonTags.kt | 12 ++ .../ragium/api/material/RagiumMaterial.kt | 1 + .../hiiragi283/ragium/api/tag/RagiumTags.kt | 12 ++ .../ragium/common/item/RagiumItems.kt | 19 ++- 61 files changed, 717 insertions(+), 229 deletions(-) rename src/generated/resources/assets/ragium/items/{coal_coke_dust.json => carbon_dust.json} (54%) create mode 100644 src/generated/resources/assets/ragium/items/circuit_board.json create mode 100644 src/generated/resources/assets/ragium/items/circuit_chip.json create mode 100644 src/generated/resources/assets/ragium/items/crude_silicon.json create mode 100644 src/generated/resources/assets/ragium/items/electric_circuit.json create mode 100644 src/generated/resources/assets/ragium/items/silicon_dust.json create mode 100644 src/generated/resources/assets/ragium/items/silicon_wafer.json rename src/generated/resources/assets/ragium/models/item/{coal_coke_dust.json => carbon_dust.json} (59%) create mode 100644 src/generated/resources/assets/ragium/models/item/circuit_board.json create mode 100644 src/generated/resources/assets/ragium/models/item/circuit_chip.json create mode 100644 src/generated/resources/assets/ragium/models/item/crude_silicon.json create mode 100644 src/generated/resources/assets/ragium/models/item/electric_circuit.json create mode 100644 src/generated/resources/assets/ragium/models/item/silicon_dust.json create mode 100644 src/generated/resources/assets/ragium/models/item/silicon_wafer.json create mode 100644 src/generated/resources/data/c/tags/item/coal_coke.json create mode 100644 src/generated/resources/data/c/tags/item/dusts/carbon.json delete mode 100644 src/generated/resources/data/c/tags/item/dusts/coal_coke.json create mode 100644 src/generated/resources/data/c/tags/item/dusts/silicon.json create mode 100644 src/generated/resources/data/c/tags/item/pitch_coke.json create mode 100644 src/generated/resources/data/c/tags/item/silicon.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/sooty_iron_ingot_by_coke_dust.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/sooty_iron_ingot_by_dust.json create mode 100644 src/generated/resources/data/ragium/recipe/alloying/circuit_board.json create mode 100644 src/generated/resources/data/ragium/recipe/alloying/crude_silicon_from_amethyst.json create mode 100644 src/generated/resources/data/ragium/recipe/alloying/crude_silicon_from_amethyst_block.json create mode 100644 src/generated/resources/data/ragium/recipe/alloying/crude_silicon_from_quartz.json create mode 100644 src/generated/resources/data/ragium/recipe/alloying/crude_silicon_from_quartz_block.json create mode 100644 src/generated/resources/data/ragium/recipe/alloying/silicon_wafer.json create mode 100644 src/generated/resources/data/ragium/recipe/alloying/sooty_iron_ingot_by_coals.json create mode 100644 src/generated/resources/data/ragium/recipe/alloying/sooty_iron_ingot_by_cokes.json create mode 100644 src/generated/resources/data/ragium/recipe/assembling/electric_circuit.json create mode 100644 src/generated/resources/data/ragium/recipe/assembling/electronics_machine_parts.json create mode 100644 src/generated/resources/data/ragium/recipe/assembling/electronics_machine_parts_by_black_metal.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/silicon_dust.json rename src/generated/resources/data/ragium/recipe/crushing/{coal_coke_dust.json => carbon_dust.json} (64%) create mode 100644 src/generated/resources/data/ragium/recipe/cutting/circuit_chip.json create mode 100644 src/generated/resources/data/ragium/recipe/freezing/plastic_plate.json rename src/generated/resources/data/ragium/recipe/pyrolyzing/{coal_coke_dust.json => carbon_dust.json} (87%) create mode 100644 src/generated/resources/data/ragium/recipe/reacting/plastic_plate.json delete mode 100644 src/generated/resources/data/ragium/recipe/sooty_iron_ingot_by_coke_dust.json delete mode 100644 src/generated/resources/data/ragium/recipe/sooty_iron_ingot_by_dust.json create mode 100644 src/generated/resources/data/ragium/tags/item/coals.json create mode 100644 src/generated/resources/data/ragium/tags/item/cokes.json diff --git a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt index b0b649060a..71e9c2276a 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt @@ -108,6 +108,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") diff --git a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt index b8f40fc081..8ebb7ec016 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt @@ -104,6 +104,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, "ウィザースター") diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt index d5a1b94e7b..ba60c0f74d 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt @@ -2,10 +2,13 @@ package hiiragi283.ragium.data.recipe import hiiragi283.lib.data.recipe.HTRecipeProvider 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 @@ -25,6 +28,7 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu override fun exportValues() { heat() chemical() + electronics() } override fun getName(): String = "Common Recipes" @@ -78,7 +82,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 @@ -149,7 +153,25 @@ 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 } + }.save(exporter) // Naphtha + Redstone -> Anti-rust Oil RagiumRecipeBuilders.mixing { itemIngredient { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Mineral.REDSTONE) } @@ -306,4 +328,110 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu }.save(exporter) // Clay + Liquid Explosive -> Plastic Explosive TODO } + + // Electronics // + + private fun electronics() { + silicon() + } + + private fun silicon() { + // Quartz + Coal Coke -> Crude Si + RagiumRecipeBuilders.alloying { + primary { +dustOrGem(RagiumMaterial.Gem.QUARTZ) } + secondary { +holderSet(RagiumTags.Items.COKES) } + result { +RagiumItems.CRUDE_SILICON } + recipeId suffix "_from_quartz" + }.save(exporter) + RagiumRecipeBuilders.alloying { + primary { +holderSet(RagiumTags.BlockItem.QUARTZ_BLOCKS.item) } + secondary { + +holderSet(RagiumTags.Items.COKES) + count = 4 + } + result { + +RagiumItems.CRUDE_SILICON + count = 4 + } + time *= 4 + recipeId suffix "_from_quartz_block" + }.save(exporter) + // Amethyst + Coal Coke -> Crude Si + RagiumRecipeBuilders.alloying { + primary { + +dustOrGem(RagiumMaterial.Gem.AMETHYST) + count = 4 + } + secondary { +holderSet(RagiumTags.Items.COKES) } + result { +RagiumItems.CRUDE_SILICON } + recipeId suffix "_from_amethyst" + }.save(exporter) + RagiumRecipeBuilders.alloying { + primary { items { +Items.AMETHYST_BLOCK } } + secondary { +holderSet(RagiumTags.Items.COKES) } + 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 { + primary { + +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Other.SILICON) + count = 8 + } + secondary { +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 { + primary { +holderSet(HTCommonTags.Items.PLASTICS) } + secondary { +dustOrIngot(RagiumMaterial.Metal.GOLD) } + result { +RagiumItems.CIRCUIT_BOARD } + }.save(exporter) + // Circuit Chip + Circuit Board -> Electric Circuit + RagiumRecipeBuilders.assembling { + primary { + items { +RagiumItems.CIRCUIT_CHIP } + count = 2 + } + secondary { items { +RagiumItems.CIRCUIT_BOARD } } + result { +RagiumItems.ELECTRIC_CIRCUIT } + }.save(exporter) + // Machine Parts + RagiumRecipeBuilders.assembling { + primary { + +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.BLACK_STEEL) + count = 4 + } + secondary { items { +RagiumItems.ELECTRIC_CIRCUIT } } + result { +RagiumItems.getParts(HTMachineType.ELECTRONICS) } + recipeId suffix "_by_black_metal" + }.save(exporter) + RagiumRecipeBuilders.assembling { + primary { + +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.VOID_METAL) + count = 2 + } + secondary { items { +RagiumItems.ELECTRIC_CIRCUIT } } + result { +RagiumItems.getParts(HTMachineType.ELECTRONICS) } + }.save(exporter) + } } diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumHeatRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumHeatRecipeProvider.kt index 49d6f66779..20e482a2e0 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumHeatRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumHeatRecipeProvider.kt @@ -7,6 +7,7 @@ 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 @@ -49,6 +50,26 @@ class RagiumHeatRecipeProvider(packOutput: PackOutput, future: CompletableFuture secondary { +dustOrIngot(RagiumMaterial.Metal.GOLD) } result { +RagiumItems.getParts(HTMachineType.CHEMICAL) } }.save(exporter) + // Iron + Coals -> Sooty Iron + RagiumRecipeBuilders.alloying { + primary { +dustOrIngot(RagiumMaterial.Metal.IRON) } + secondary { +holderSet(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 { + primary { + +dustOrIngot(RagiumMaterial.Metal.IRON) + count = 2 + } + secondary { +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) } diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumMechanicalRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumMechanicalRecipeProvider.kt index d9d37f3749..1391b637e6 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumMechanicalRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumMechanicalRecipeProvider.kt @@ -293,6 +293,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( @@ -397,13 +398,18 @@ 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) { RagiumRecipeBuilders.crushing { diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt index 7e6595096a..f9eee58daa 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt @@ -39,6 +39,7 @@ 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 @@ -91,7 +92,7 @@ class RagiumVanillaRecipeProvider(registries: HolderLookup.Provider, output: Rec 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)) + .unlockedBy(Items.PRISMARINE_BRICKS) .saveSuffixed(output, "_from_bricks") // Gunpowder shapeless(RecipeCategory.MISC, Items.GUNPOWDER, 3) @@ -99,13 +100,8 @@ class RagiumVanillaRecipeProvider(registries: HolderLookup.Provider, output: Rec .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) - ) + .unlockedBy(CommonTagPrefixes.DUST, RagiumMaterial.Mineral.SULFUR) + .unlockedBy(CommonTagPrefixes.DUST, RagiumMaterial.Mineral.NITER) .save(output) // Blaze Rod shaped(RecipeCategory.MISC, Items.BLAZE_ROD) @@ -116,17 +112,9 @@ class RagiumVanillaRecipeProvider(registries: HolderLookup.Provider, output: Rec .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) - ) + .unlockedBy(CommonTagPrefixes.DUST, RagiumMaterial.Gem.AMETHYST) + .unlockedBy(Items.MAGMA_BLOCK) + .unlockedBy(CommonTagPrefixes.DUST, RagiumMaterial.Mineral.SULFUR) .save(output) // Breeze Rod shaped(RecipeCategory.MISC, Items.BREEZE_ROD) @@ -137,17 +125,9 @@ class RagiumVanillaRecipeProvider(registries: HolderLookup.Provider, output: Rec .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) - ) + .unlockedBy(CommonTagPrefixes.DUST, RagiumMaterial.Gem.AMETHYST) + .unlockedBy(Items.ICE) + .unlockedBy(CommonTagPrefixes.DUST, RagiumMaterial.Mineral.NITER) .save(output) // Candle shaped(RecipeCategory.DECORATIONS, Items.CANDLE) @@ -155,8 +135,8 @@ class RagiumVanillaRecipeProvider(registries: HolderLookup.Provider, output: Rec .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)) + .unlockedBy(Tags.Items.STRINGS) + .unlockedBy(RagiumItems.BEESWAX) .save(output) // Bamboo Charcoal @@ -176,7 +156,7 @@ class RagiumVanillaRecipeProvider(registries: HolderLookup.Provider, output: Rec .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)) + .unlockedBy(HTCommonTags.Items.STICKY_BALLS) .save(output) // Synthetic for (item: HTSimpleDeferredItem in listOf( @@ -199,7 +179,7 @@ class RagiumVanillaRecipeProvider(registries: HolderLookup.Provider, output: Rec .requires(Items.GLASS_BOTTLE) .requires(Items.GLASS_BOTTLE) .requires(Items.GLASS_BOTTLE) - .unlockedBy(getHasName(Tags.Items.GUNPOWDERS), has(Tags.Items.GUNPOWDERS)) + .unlockedBy(Tags.Items.GUNPOWDERS) .save(output) // Lingering Bottle shapeless(RecipeCategory.BREWING, RagiumItems.LINGERING_BOTTLE, 4) @@ -208,7 +188,7 @@ class RagiumVanillaRecipeProvider(registries: HolderLookup.Provider, output: Rec .requires(Items.GLASS_BOTTLE) .requires(Items.GLASS_BOTTLE) .requires(Items.GLASS_BOTTLE) - .unlockedBy(getHasName(Items.DRAGON_BREATH), has(Items.DRAGON_BREATH)) + .unlockedBy(Items.DRAGON_BREATH) .save(output) // XX Tools @@ -222,7 +202,7 @@ class RagiumVanillaRecipeProvider(registries: HolderLookup.Provider, output: Rec .requires(color.tag) .requires(color.tag) .requires(color.tag) - .unlockedBy(getHasName(color.tag), has(color.tag)) + .unlockedBy(color.tag) .save(output) } } @@ -233,7 +213,7 @@ class RagiumVanillaRecipeProvider(registries: HolderLookup.Provider, output: Rec .apply { patterns.forEach(::pattern) } .define('A', material.repairItems) .define('B', Tags.Items.RODS_WOODEN) - .unlockedBy(getHasName(material.repairItems), has(material.repairItems)) + .unlockedBy(material.repairItems) .save(output) } @@ -254,55 +234,52 @@ class RagiumVanillaRecipeProvider(registries: HolderLookup.Provider, output: Rec .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) - ) + .unlockedBy(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.SOOTY_IRON) .save(output) mechanical(RagiumBlocks.ASSEMBLER) { define('D', Items.CRAFTER) - unlockedBy(getHasName(Items.CRAFTER), has(Items.CRAFTER)) + unlockedBy(Items.CRAFTER) } mechanical(RagiumBlocks.CRUSHER) { define('D', Items.GRINDSTONE) - unlockedBy(getHasName(Items.GRINDSTONE), has(Items.GRINDSTONE)) + unlockedBy(Items.GRINDSTONE) } mechanical(RagiumBlocks.COMPRESSOR) { define('D', ItemTags.ANVIL) - unlockedBy(getHasName(ItemTags.ANVIL), has(ItemTags.ANVIL)) + unlockedBy(ItemTags.ANVIL) } mechanical(RagiumBlocks.CUTTING_MACHINE) { define('D', Items.STONECUTTER) - unlockedBy(getHasName(Items.STONECUTTER), has(Items.STONECUTTER)) + unlockedBy(Items.STONECUTTER) } // Heat heat(RagiumBlocks.ALLOY_SMELTER) { define('D', Items.BLAST_FURNACE) - unlockedBy(getHasName(Items.BLAST_FURNACE), has(Items.BLAST_FURNACE)) + unlockedBy(Items.BLAST_FURNACE) } heat(RagiumBlocks.FREEZER) { define('D', Tags.Items.BUCKETS_WATER) - unlockedBy(getHasName(Tags.Items.BUCKETS_WATER), has(Tags.Items.BUCKETS_WATER)) + unlockedBy(Tags.Items.BUCKETS_WATER) } heat(RagiumBlocks.MELTER) { define('D', Tags.Items.BUCKETS_LAVA) - unlockedBy(getHasName(Tags.Items.BUCKETS_LAVA), has(Tags.Items.BUCKETS_LAVA)) + unlockedBy(Tags.Items.BUCKETS_LAVA) } heat(RagiumBlocks.SMELTER) { define('D', Items.FURNACE) - unlockedBy(getHasName(Items.FURNACE), has(Items.FURNACE)) + unlockedBy(Items.FURNACE) } // Chemical chemical(RagiumBlocks.CHEMICAL_BATH) { define('D', Items.CAULDRON) - unlockedBy(getHasName(Items.CAULDRON), has(Items.CAULDRON)) + unlockedBy(Items.CAULDRON) } // Bio bio(RagiumBlocks.BREWERY) { define('D', Items.BREWING_STAND) - unlockedBy(getHasName(Items.BREWING_STAND), has(Items.BREWING_STAND)) + unlockedBy(Items.BREWING_STAND) } // Electronics // Arcane @@ -314,10 +291,7 @@ class RagiumVanillaRecipeProvider(registries: HolderLookup.Provider, output: Rec .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) - ) + .unlockedBy(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.SOOTY_IRON) .save(output) for (block: HTSimpleDeferredBlockAndItem in RagiumBlocks.MACHINE_CASINGS.values) { @@ -434,7 +408,7 @@ class RagiumVanillaRecipeProvider(registries: HolderLookup.Provider, output: Rec .define('A', ItemTags.PLANKS) .define('B', ItemTags.WOODEN_BUTTONS) .group(gear.idOrThrow.path) - .unlockedBy(getHasName(ItemTags.PLANKS), has(ItemTags.PLANKS)) + .unlockedBy(ItemTags.PLANKS) .save(output) } gear(CommonTagPrefixes.GEM, RagiumMaterial.Gem.DIAMOND) @@ -505,7 +479,7 @@ class RagiumVanillaRecipeProvider(registries: HolderLookup.Provider, output: Rec .pattern("AAA") .define('A', CommonTagPrefixes.TINY, fuel) .group(getItemName(base)) - .unlockedBy(getHasName(CommonTagPrefixes.TINY, fuel), has(CommonTagPrefixes.TINY, fuel)) + .unlockedBy(CommonTagPrefixes.TINY, fuel) .saveSuffixed(output, "_from_tiny") } // Sooty Iron @@ -521,14 +495,8 @@ class RagiumVanillaRecipeProvider(registries: HolderLookup.Provider, output: Rec .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) - ) + .unlockedBy(CommonTagPrefixes.TINY, RagiumMaterial.Fuel.COAL) + .unlockedBy(CommonTagPrefixes.TINY, RagiumMaterial.Fuel.CHARCOAL) .save(output) shaped(RecipeCategory.MISC, sootyIronIngot) .pattern(" A ") @@ -537,34 +505,8 @@ class RagiumVanillaRecipeProvider(registries: HolderLookup.Provider, output: Rec .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) - ) + .unlockedBy(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( @@ -606,10 +548,8 @@ class RagiumVanillaRecipeProvider(registries: HolderLookup.Provider, output: Rec 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") + .unlockedBy(CommonTagPrefixes.STORAGE_BLOCK, material) + .saveSuffixed(output, "_from_block") shaped(RecipeCategory.BUILDING_BLOCKS, block) .apply { size.pattern.forEach(::pattern) } .define('A', baseInput) @@ -633,7 +573,7 @@ class RagiumVanillaRecipeProvider(registries: HolderLookup.Provider, output: Rec shapeless(RecipeCategory.MISC, nugget, 9) .requires(CommonTagPrefixes.INGOT, material) .group(getItemName(nugget)) - .unlockedBy(getHasName(CommonTagPrefixes.INGOT, material), has(CommonTagPrefixes.INGOT, material)) + .unlockedBy(CommonTagPrefixes.INGOT, material) .saveSuffixed(output, "_from_ingot") shaped(RecipeCategory.MISC, ingot) .pattern("AAA") @@ -642,7 +582,7 @@ class RagiumVanillaRecipeProvider(registries: HolderLookup.Provider, output: Rec .define('A', CommonTagPrefixes.NUGGET, material) .define('B', nugget) .group(getItemName(ingot)) - .unlockedBy(getHasName(CommonTagPrefixes.NUGGET, material), has(CommonTagPrefixes.NUGGET, material)) + .unlockedBy(CommonTagPrefixes.NUGGET, material) .saveSuffixed(output, "_from_nugget") } @@ -655,7 +595,7 @@ class RagiumVanillaRecipeProvider(registries: HolderLookup.Provider, output: Rec .define('A', basePrefix, material) .define('B', CommonTagPrefixes.GEAR, RagiumMaterial.Other.WOOD) .group(getItemName(gear)) - .unlockedBy(getHasName(basePrefix, material), has(basePrefix, material)) + .unlockedBy(basePrefix, material) .save(output) } @@ -674,6 +614,7 @@ class RagiumVanillaRecipeProvider(registries: HolderLookup.Provider, output: Rec this.save(output, RecipeKey(this.defaultId().identifier().withSuffix(suffix))) } + // ShapedRecipeBuilder fun ShapedRecipeBuilder.define(symbol: Char, prefix: HTTagPrefix, material: HTMaterialLike): ShapedRecipeBuilder = this.define(symbol, prefix.itemTagKey(material)) @@ -688,6 +629,16 @@ class RagiumVanillaRecipeProvider(registries: HolderLookup.Provider, output: Rec .toVanilla() .let { this.define(symbol, it) } + fun ShapedRecipeBuilder.unlockedBy(item: ItemLike): ShapedRecipeBuilder = + this.unlockedBy(getHasName(item), has(item)) + + fun ShapedRecipeBuilder.unlockedBy(tagKey: TagKey): ShapedRecipeBuilder = + this.unlockedBy(getHasName(tagKey), has(tagKey)) + + fun ShapedRecipeBuilder.unlockedBy(prefix: HTTagPrefix, material: HTMaterialLike): ShapedRecipeBuilder = + this.unlockedBy(getHasName(prefix, material), has(prefix, material)) + + // ShapelessRecipeBuilder fun ShapelessRecipeBuilder.requires(prefix: HTTagPrefix, material: HTMaterialLike): ShapelessRecipeBuilder = this.requires(prefix.itemTagKey(material)) @@ -698,4 +649,13 @@ class RagiumVanillaRecipeProvider(registries: HolderLookup.Provider, output: Rec .let(::CompoundIngredient) .toVanilla() .let(this::requires) + + fun ShapelessRecipeBuilder.unlockedBy(item: ItemLike): ShapelessRecipeBuilder = + this.unlockedBy(getHasName(item), has(item)) + + fun ShapelessRecipeBuilder.unlockedBy(tagKey: TagKey): ShapelessRecipeBuilder = + this.unlockedBy(getHasName(tagKey), has(tagKey)) + + fun ShapelessRecipeBuilder.unlockedBy(prefix: HTTagPrefix, material: HTMaterialLike): ShapelessRecipeBuilder = + this.unlockedBy(getHasName(prefix, material), has(prefix, material)) } diff --git a/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumItemTagsProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumItemTagsProvider.kt index 4b7fc5efa7..5fa69c01fb 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumItemTagsProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumItemTagsProvider.kt @@ -56,8 +56,19 @@ class RagiumItemTagsProvider(output: PackOutput, lookupProvider: CompletableFutu builder(Tags.Items.LEATHERS).add(RagiumItems.SYNTHETIC_LEATHER) builder(Tags.Items.STRINGS).add(RagiumItems.SYNTHETIC_FIBER) + builder(HTCommonTags.Items.COAL_COKE).add(RagiumItems.COAL_COKE) builder(HTCommonTags.Items.PAPER).addItem(Items.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) + .addItem(Items.CHARCOAL) + .addItem(Items.COAL) + builder(RagiumTags.Items.COKES) + .addTag(HTCommonTags.Items.COAL_COKE) + .addTag(HTCommonTags.Items.PITCH_COKE) } } diff --git a/src/generated/resources/assets/ragium/items/coal_coke_dust.json b/src/generated/resources/assets/ragium/items/carbon_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/carbon_dust.json index 760ebefae5..62ae472dbf 100644 --- a/src/generated/resources/assets/ragium/items/coal_coke_dust.json +++ b/src/generated/resources/assets/ragium/items/carbon_dust.json @@ -1,6 +1,6 @@ { "model": { "type": "minecraft:model", - "model": "ragium:item/coal_coke_dust" + "model": "ragium:item/carbon_dust" } } \ No newline at end of file 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/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/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/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/lang/en_us.json b/src/generated/resources/assets/ragium/lang/en_us.json index 3115df6f99..658f41d7a4 100644 --- a/src/generated/resources/assets/ragium/lang/en_us.json +++ b/src/generated/resources/assets/ragium/lang/en_us.json @@ -161,21 +161,25 @@ "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.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.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", @@ -228,6 +232,8 @@ "item.ragium.raginite_dust": "Raginite Dust", "item.ragium.red_dye_bucket": "Red Dye 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", diff --git a/src/generated/resources/assets/ragium/lang/ja_jp.json b/src/generated/resources/assets/ragium/lang/ja_jp.json index 5a3d699f30..d9f4e3274e 100644 --- a/src/generated/resources/assets/ragium/lang/ja_jp.json +++ b/src/generated/resources/assets/ragium/lang/ja_jp.json @@ -161,21 +161,25 @@ "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.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.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": "エメラルドの歯車", @@ -228,6 +232,8 @@ "item.ragium.raginite_dust": "ラギナイトの粉", "item.ragium.red_dye_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": "煤鉄のクワ", diff --git a/src/generated/resources/assets/ragium/models/item/coal_coke_dust.json b/src/generated/resources/assets/ragium/models/item/carbon_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/carbon_dust.json index b69784e443..4f8b0ab027 100644 --- a/src/generated/resources/assets/ragium/models/item/coal_coke_dust.json +++ b/src/generated/resources/assets/ragium/models/item/carbon_dust.json @@ -1,6 +1,6 @@ { "parent": "minecraft:item/generated", "textures": { - "layer0": "ragium:item/coal_coke_dust" + "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/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/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/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..0e728bb4b4 100644 --- a/src/generated/resources/data/c/tags/item/dusts.json +++ b/src/generated/resources/data/c/tags/item/dusts.json @@ -2,9 +2,9 @@ "values": [ "#c:dusts/amethyst", "#c:dusts/borax", + "#c:dusts/carbon", "#c:dusts/charcoal", "#c:dusts/coal", - "#c:dusts/coal_coke", "#c:dusts/copper", "#c:dusts/diamond", "#c:dusts/echo", @@ -21,6 +21,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/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/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/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/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/recipe/alloying/circuit_board.json b/src/generated/resources/data/ragium/recipe/alloying/circuit_board.json new file mode 100644 index 0000000000..d43471fe39 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/alloying/circuit_board.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:alloying", + "primary_ingredient": { + "count": 1, + "items": "#c:plastics" + }, + "result": { + "count": 1, + "id": "ragium:circuit_board" + }, + "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/crude_silicon_from_amethyst.json b/src/generated/resources/data/ragium/recipe/alloying/crude_silicon_from_amethyst.json new file mode 100644 index 0000000000..11bc68f887 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/alloying/crude_silicon_from_amethyst.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:alloying", + "primary_ingredient": { + "count": 4, + "items": { + "type": "neoforge:or", + "values": [ + "#c:dusts/amethyst", + "#c:gems/amethyst" + ] + } + }, + "result": { + "count": 1, + "id": "ragium:crude_silicon" + }, + "secondary_ingredient": { + "count": 1, + "items": "#ragium:cokes" + }, + "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..a127a0ed40 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/alloying/crude_silicon_from_amethyst_block.json @@ -0,0 +1,16 @@ +{ + "type": "ragium:alloying", + "primary_ingredient": { + "count": 1, + "items": "minecraft:amethyst_block" + }, + "result": { + "count": 1, + "id": "ragium:crude_silicon" + }, + "secondary_ingredient": { + "count": 1, + "items": "#ragium:cokes" + }, + "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..df307a238b --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/alloying/crude_silicon_from_quartz.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:alloying", + "primary_ingredient": { + "count": 1, + "items": { + "type": "neoforge:or", + "values": [ + "#c:dusts/quartz", + "#c:gems/quartz" + ] + } + }, + "result": { + "count": 1, + "id": "ragium:crude_silicon" + }, + "secondary_ingredient": { + "count": 1, + "items": "#ragium:cokes" + }, + "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..667b661467 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/alloying/crude_silicon_from_quartz_block.json @@ -0,0 +1,16 @@ +{ + "type": "ragium:alloying", + "primary_ingredient": { + "count": 1, + "items": "#ragium:quartz_blocks" + }, + "result": { + "count": 4, + "id": "ragium:crude_silicon" + }, + "secondary_ingredient": { + "count": 4, + "items": "#ragium:cokes" + }, + "time": 800 +} \ 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..ab9f028eef --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/alloying/silicon_wafer.json @@ -0,0 +1,16 @@ +{ + "type": "ragium:alloying", + "primary_ingredient": { + "count": 8, + "items": "#c:dusts/silicon" + }, + "result": { + "count": 1, + "id": "ragium:silicon_wafer" + }, + "secondary_ingredient": { + "count": 1, + "items": "#c:dusts/raginite" + }, + "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..8b728bc6ca --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/alloying/sooty_iron_ingot_by_coals.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:alloying", + "primary_ingredient": { + "count": 1, + "items": { + "type": "neoforge:or", + "values": [ + "#c:dusts/iron", + "#c:ingots/iron" + ] + } + }, + "result": { + "count": 1, + "id": "ragium:sooty_iron_ingot" + }, + "secondary_ingredient": { + "count": 1, + "items": "#ragium:coals" + }, + "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..2a9a77e91f --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/alloying/sooty_iron_ingot_by_cokes.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:alloying", + "primary_ingredient": { + "count": 2, + "items": { + "type": "neoforge:or", + "values": [ + "#c:dusts/iron", + "#c:ingots/iron" + ] + } + }, + "result": { + "count": 2, + "id": "ragium:sooty_iron_ingot" + }, + "secondary_ingredient": { + "count": 1, + "items": "#ragium:cokes" + }, + "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..177e5a8d5a --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/assembling/electric_circuit.json @@ -0,0 +1,16 @@ +{ + "type": "ragium:assembling", + "primary_ingredient": { + "count": 2, + "items": "ragium:circuit_chip" + }, + "result": { + "count": 1, + "id": "ragium:electric_circuit" + }, + "secondary_ingredient": { + "count": 1, + "items": "ragium:circuit_board" + }, + "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..d2d5622e41 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/assembling/electronics_machine_parts.json @@ -0,0 +1,16 @@ +{ + "type": "ragium:assembling", + "primary_ingredient": { + "count": 2, + "items": "#c:ingots/void_metal" + }, + "result": { + "count": 1, + "id": "ragium:electronics_machine_parts" + }, + "secondary_ingredient": { + "count": 1, + "items": "ragium:electric_circuit" + }, + "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..dde74d8df4 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/assembling/electronics_machine_parts_by_black_metal.json @@ -0,0 +1,16 @@ +{ + "type": "ragium:assembling", + "primary_ingredient": { + "count": 4, + "items": "#c:ingots/black_steel" + }, + "result": { + "count": 1, + "id": "ragium:electronics_machine_parts" + }, + "secondary_ingredient": { + "count": 1, + "items": "ragium:electric_circuit" + }, + "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/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/crushing/coal_coke_dust.json b/src/generated/resources/data/ragium/recipe/crushing/carbon_dust.json similarity index 64% 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..113c643d0b 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": { "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/cutting/circuit_chip.json b/src/generated/resources/data/ragium/recipe/cutting/circuit_chip.json new file mode 100644 index 0000000000..41ce7c8548 --- /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" + }, + "results": { + "count": 8, + "id": "ragium:circuit_chip" + }, + "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/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/plastic_plate.json b/src/generated/resources/data/ragium/recipe/reacting/plastic_plate.json new file mode 100644 index 0000000000..901e54265e --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/reacting/plastic_plate.json @@ -0,0 +1,16 @@ +{ + "type": "ragium:reacting", + "item_result": { + "count": 1, + "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/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/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/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/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/ragium/api/material/RagiumMaterial.kt b/src/lib/kotlin/hiiragi283/ragium/api/material/RagiumMaterial.kt index 0c55b00511..d5e077b574 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/material/RagiumMaterial.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/material/RagiumMaterial.kt @@ -134,6 +134,7 @@ sealed interface RagiumMaterial : PAPER(true, "Paper", "紙"), // Common + CARBON(false, "Carbon", "炭素"), SILICON(false, "Silicon", "シリコン") ; diff --git a/src/lib/kotlin/hiiragi283/ragium/api/tag/RagiumTags.kt b/src/lib/kotlin/hiiragi283/ragium/api/tag/RagiumTags.kt index 7ee33ac438..b45b1ee92d 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/tag/RagiumTags.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/tag/RagiumTags.kt @@ -40,6 +40,18 @@ 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") + @JvmField val SOOTY_IRON_TOOL_MATERIALS: TagKey = create("sooty_iron_tool_materials") diff --git a/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt b/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt index 418d13a24d..94937f8957 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt @@ -27,6 +27,7 @@ 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") REGISTER.register(eventBus) } @@ -39,7 +40,7 @@ data object RagiumItems { // 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) + putAll(RagiumMaterial.Fuel.COAL_COKE, HTItemPart.TINY) // Mineral for (mineral: RagiumMaterial.Mineral in RagiumMaterial.Mineral.entries) { if (!mineral.isVanilla) { @@ -67,6 +68,8 @@ data object RagiumItems { 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.SILICON, HTItemPart.DUST) }.flatMapTable { (material: RagiumMaterial, parts: Collection) -> parts.map { part: HTItemPart -> Triple( @@ -133,6 +136,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 From 6d0b275b442c0717625961b1460a23082c1a043e Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Sat, 19 Sep 2026 12:10:54 +0900 Subject: [PATCH 02/44] =?UTF-8?q?refactor:=20=E3=83=AC=E3=82=B7=E3=83=94?= =?UTF-8?q?=E3=82=92=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data/recipe/RagiumBioRecipeProvider.kt | 3 +- .../recipe/RagiumChemicalRecipeProvider.kt | 2 +- .../data/recipe/RagiumHeatRecipeProvider.kt | 10 ++- .../recipe/alloying/black_steel_ingot.json | 8 +- .../alloying/chemical_machine_parts.json | 8 +- .../ragium/recipe/alloying/circuit_board.json | 8 +- .../alloying/crude_silicon_from_amethyst.json | 8 +- .../alloying/crude_silicon_from_quartz.json | 8 +- .../recipe/alloying/netherite_ingot.json | 8 +- .../alloying/sooty_iron_ingot_by_coals.json | 17 ++-- .../alloying/sooty_iron_ingot_by_cokes.json | 8 +- .../ragium/recipe/bathing/tinted_glass.json | 8 +- .../recipe/brewing/potion/darkness.json | 8 +- .../crushing/amethyst_dust_from_gem.json | 2 +- .../recipe/crushing/amethyst_shard.json | 2 +- .../ragium/recipe/crushing/black_dye.json | 2 +- .../ragium/recipe/crushing/blaze_powder.json | 2 +- .../data/ragium/recipe/crushing/blue_dye.json | 2 +- .../data/ragium/recipe/crushing/brick.json | 2 +- .../ragium/recipe/crushing/brown_dye.json | 2 +- .../ragium/recipe/crushing/carbon_dust.json | 2 +- .../ragium/recipe/crushing/charcoal_dust.json | 2 +- .../ragium/recipe/crushing/clay_ball.json | 2 +- .../ragium/recipe/crushing/coal_dust.json | 2 +- .../crushing/copper_dust_from_gear.json | 2 +- .../crushing/copper_dust_from_ingot.json | 2 +- .../recipe/crushing/copper_dust_from_raw.json | 2 +- .../crushing/diamond_dust_from_gear.json | 2 +- .../crushing/diamond_dust_from_gem.json | 2 +- .../crushing/diamond_dust_from_ore.json | 2 +- .../recipe/crushing/double_cyan_dye.json | 2 +- .../recipe/crushing/double_pink_dye.json | 2 +- .../recipe/crushing/double_red_dye.json | 2 +- .../recipe/crushing/double_yellow_dye.json | 2 +- .../recipe/crushing/echo_dust_from_gem.json | 2 +- .../crushing/emerald_dust_from_gear.json | 2 +- .../crushing/emerald_dust_from_gem.json | 2 +- .../crushing/emerald_dust_from_ore.json | 2 +- .../crushing/glass_dust_from_block.json | 2 +- .../recipe/crushing/glass_dust_from_pane.json | 2 +- .../recipe/crushing/glowstone_dust.json | 2 +- .../recipe/crushing/gold_dust_from_gear.json | 2 +- .../recipe/crushing/gold_dust_from_ingot.json | 2 +- .../recipe/crushing/gold_dust_from_ore.json | 2 +- .../recipe/crushing/gold_dust_from_raw.json | 2 +- .../data/ragium/recipe/crushing/gray_dye.json | 2 +- .../ragium/recipe/crushing/green_dye.json | 2 +- .../ragium/recipe/crushing/honeycomb.json | 2 +- .../recipe/crushing/iron_dust_from_gear.json | 2 +- .../recipe/crushing/iron_dust_from_ingot.json | 2 +- .../recipe/crushing/iron_dust_from_raw.json | 2 +- .../recipe/crushing/lapis_dust_from_gem.json | 2 +- .../recipe/crushing/lapis_dust_from_ore.json | 2 +- .../recipe/crushing/light_blue_dye.json | 2 +- .../recipe/crushing/light_gray_dye.json | 2 +- .../data/ragium/recipe/crushing/lime_dye.json | 2 +- .../ragium/recipe/crushing/magenta_dye.json | 2 +- .../ragium/recipe/crushing/magma_cream.json | 2 +- .../ragium/recipe/crushing/nether_brick.json | 2 +- .../crushing/netherite_dust_from_gear.json | 2 +- .../crushing/netherite_dust_from_ingot.json | 2 +- .../recipe/crushing/niter_dust_from_ore.json | 2 +- .../ragium/recipe/crushing/obsidian_dust.json | 2 +- .../ragium/recipe/crushing/orange_dye.json | 2 +- .../recipe/crushing/paper_dust_from_book.json | 2 +- .../data/ragium/recipe/crushing/pink_dye.json | 2 +- .../recipe/crushing/pointed_dripstone.json | 2 +- .../recipe/crushing/popped_chorus_fruit.json | 2 +- .../crushing/prismarine_dust_from_gem.json | 2 +- .../recipe/crushing/prismarine_shard.json | 2 +- .../data/ragium/recipe/crushing/quartz.json | 2 +- .../recipe/crushing/quartz_dust_from_gem.json | 2 +- .../data/ragium/recipe/crushing/red_dye.json | 2 +- .../data/ragium/recipe/crushing/red_sand.json | 2 +- .../data/ragium/recipe/crushing/sand.json | 2 +- .../data/ragium/recipe/crushing/snowball.json | 2 +- .../recipe/crushing/sulfur_dust_from_ore.json | 2 +- .../ragium/recipe/crushing/white_dye.json | 2 +- .../ragium/recipe/crushing/wind_charge.json | 2 +- .../wood_dust_from_barrels_wooden.json | 2 +- .../recipe/crushing/wood_dust_from_boats.json | 2 +- .../crushing/wood_dust_from_chest_boats.json | 2 +- .../wood_dust_from_chests_wooden.json | 2 +- .../wood_dust_from_fence_gates_wooden.json | 2 +- .../wood_dust_from_fences_wooden.json | 2 +- .../recipe/crushing/wood_dust_from_gear.json | 2 +- .../crushing/wood_dust_from_gears_wood.json | 2 +- .../wood_dust_from_hanging_signs.json | 2 +- .../recipe/crushing/wood_dust_from_logs.json | 2 +- .../crushing/wood_dust_from_planks.json | 2 +- .../crushing/wood_dust_from_rods_wooden.json | 2 +- .../recipe/crushing/wood_dust_from_signs.json | 2 +- .../wood_dust_from_wooden_buttons.json | 2 +- .../crushing/wood_dust_from_wooden_doors.json | 2 +- ...wood_dust_from_wooden_pressure_plates.json | 2 +- .../wood_dust_from_wooden_shelves.json | 2 +- .../crushing/wood_dust_from_wooden_slabs.json | 2 +- .../wood_dust_from_wooden_stairs.json | 2 +- .../wood_dust_from_wooden_trapdoors.json | 2 +- .../ragium/recipe/crushing/yellow_dye.json | 2 +- .../ragium/recipe/cutting/circuit_chip.json | 2 +- .../ragium/recipe/cutting/melon_slice.json | 2 +- .../recipe/cutting/stick_from_saplings.json | 2 +- .../data/ragium/recipe/planting/apple.json | 2 +- .../recipe/planting/brown_mushroom.json | 2 +- .../data/ragium/recipe/planting/cactus.json | 2 +- .../data/ragium/recipe/planting/carrot.json | 2 +- .../ragium/recipe/planting/cocoa_beans.json | 2 +- .../ragium/recipe/planting/glow_berries.json | 2 +- .../ragium/recipe/planting/nether_wart.json | 2 +- .../data/ragium/recipe/planting/potato.json | 2 +- .../ragium/recipe/planting/red_mushroom.json | 2 +- .../ragium/recipe/planting/sugar_cane.json | 2 +- .../ragium/recipe/planting/sweet_berries.json | 2 +- .../lib/collection/NonEmptyLists.kt | 7 ++ .../lib/data/ExporterDataProvider.kt | 3 - .../lib/data/recipe/HTRecipeProvider.kt | 38 +++++++-- .../recipe/base/HTItemToDoubleItemRecipe.kt | 6 +- .../ingredient/HTMaterialTagsIngredient.kt | 61 ++++++++++++++ .../lib/serialization/codec/Codecs.kt | 81 ++++++++++++------- .../api/recipe/RTElectrolyzingRecipe.kt | 6 +- .../kotlin/hiiragi283/ragium/common/Ragium.kt | 4 + 122 files changed, 332 insertions(+), 180 deletions(-) create mode 100644 src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTMaterialTagsIngredient.kt diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumBioRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumBioRecipeProvider.kt index e052a4a3f8..b5b0eaf0f8 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 @@ -74,7 +73,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/RagiumHeatRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumHeatRecipeProvider.kt index 20e482a2e0..39c24d0696 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumHeatRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumHeatRecipeProvider.kt @@ -53,7 +53,13 @@ class RagiumHeatRecipeProvider(packOutput: PackOutput, future: CompletableFuture // Iron + Coals -> Sooty Iron RagiumRecipeBuilders.alloying { primary { +dustOrIngot(RagiumMaterial.Metal.IRON) } - secondary { +holderSet(RagiumTags.Items.COALS) } + secondary { + +holderSet( + 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) @@ -72,7 +78,7 @@ class RagiumHeatRecipeProvider(packOutput: PackOutput, future: CompletableFuture }.save(exporter) // Sooty Iron + Obsidian Dust -> Black Steel RagiumRecipeBuilders.alloying { - primary { +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.SOOTY_IRON) } + primary { +dustOrIngot(RagiumMaterial.Metal.SOOTY_IRON) } secondary { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Other.OBSIDIAN) count = 2 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..a506d02746 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 @@ -2,7 +2,13 @@ "type": "ragium:alloying", "primary_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, 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..7c0714b970 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 @@ -11,10 +11,10 @@ "secondary_ingredient": { "count": 1, "items": { - "type": "neoforge:or", - "values": [ - "#c:dusts/gold", - "#c:ingots/gold" + "neoforge:ingredient_type": "ragium:material_tags", + "tags": [ + "c:dusts/gold", + "c:ingots/gold" ] } }, diff --git a/src/generated/resources/data/ragium/recipe/alloying/circuit_board.json b/src/generated/resources/data/ragium/recipe/alloying/circuit_board.json index d43471fe39..836b81380d 100644 --- a/src/generated/resources/data/ragium/recipe/alloying/circuit_board.json +++ b/src/generated/resources/data/ragium/recipe/alloying/circuit_board.json @@ -11,10 +11,10 @@ "secondary_ingredient": { "count": 1, "items": { - "type": "neoforge:or", - "values": [ - "#c:dusts/gold", - "#c:ingots/gold" + "neoforge:ingredient_type": "ragium:material_tags", + "tags": [ + "c:dusts/gold", + "c:ingots/gold" ] } }, 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 index 11bc68f887..de1426a192 100644 --- 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 @@ -3,10 +3,10 @@ "primary_ingredient": { "count": 4, "items": { - "type": "neoforge:or", - "values": [ - "#c:dusts/amethyst", - "#c:gems/amethyst" + "neoforge:ingredient_type": "ragium:material_tags", + "tags": [ + "c:dusts/amethyst", + "c:gems/amethyst" ] } }, 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 index df307a238b..a54b323e54 100644 --- 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 @@ -3,10 +3,10 @@ "primary_ingredient": { "count": 1, "items": { - "type": "neoforge:or", - "values": [ - "#c:dusts/quartz", - "#c:gems/quartz" + "neoforge:ingredient_type": "ragium:material_tags", + "tags": [ + "c:dusts/quartz", + "c:gems/quartz" ] } }, 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..4be678ed49 100644 --- a/src/generated/resources/data/ragium/recipe/alloying/netherite_ingot.json +++ b/src/generated/resources/data/ragium/recipe/alloying/netherite_ingot.json @@ -3,10 +3,10 @@ "primary_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" ] } }, 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 index 8b728bc6ca..2af32f3c13 100644 --- 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 @@ -3,10 +3,10 @@ "primary_ingredient": { "count": 1, "items": { - "type": "neoforge:or", - "values": [ - "#c:dusts/iron", - "#c:ingots/iron" + "neoforge:ingredient_type": "ragium:material_tags", + "tags": [ + "c:dusts/iron", + "c:ingots/iron" ] } }, @@ -16,7 +16,14 @@ }, "secondary_ingredient": { "count": 1, - "items": "#ragium:coals" + "items": { + "type": "neoforge:or", + "values": [ + "#c:dusts/charcoal", + "#c:dusts/coal", + "#ragium:coals" + ] + } }, "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 index 2a9a77e91f..40544c6093 100644 --- 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 @@ -3,10 +3,10 @@ "primary_ingredient": { "count": 2, "items": { - "type": "neoforge:or", - "values": [ - "#c:dusts/iron", - "#c:ingots/iron" + "neoforge:ingredient_type": "ragium:material_tags", + "tags": [ + "c:dusts/iron", + "c:ingots/iron" ] } }, 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/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/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/carbon_dust.json b/src/generated/resources/data/ragium/recipe/crushing/carbon_dust.json index 113c643d0b..7224375066 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/carbon_dust.json +++ b/src/generated/resources/data/ragium/recipe/crushing/carbon_dust.json @@ -4,7 +4,7 @@ "count": 1, "items": "#ragium:cokes" }, - "results": { + "result": { "count": 1, "id": "ragium:carbon_dust" }, 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..111b4a6a99 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 @@ -4,7 +4,7 @@ "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/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/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/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..7ece4ca6ec 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 @@ -4,7 +4,7 @@ "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..624a64a81c 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 @@ -4,7 +4,7 @@ "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/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..fa5904c680 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/red_sand.json +++ b/src/generated/resources/data/ragium/recipe/crushing/red_sand.json @@ -4,7 +4,7 @@ "count": 1, "items": "#c:sandstone/red_blocks" }, - "results": { + "result": { "count": 4, "id": "minecraft:red_sand" }, diff --git a/src/generated/resources/data/ragium/recipe/crushing/sand.json b/src/generated/resources/data/ragium/recipe/crushing/sand.json index dbeef0a383..74b20e6eaa 100644 --- a/src/generated/resources/data/ragium/recipe/crushing/sand.json +++ b/src/generated/resources/data/ragium/recipe/crushing/sand.json @@ -4,7 +4,7 @@ "count": 1, "items": "#c:sandstone/uncolored_blocks" }, - "results": { + "result": { "count": 4, "id": "minecraft:sand" }, 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 index 41ce7c8548..e7cbe309c4 100644 --- a/src/generated/resources/data/ragium/recipe/cutting/circuit_chip.json +++ b/src/generated/resources/data/ragium/recipe/cutting/circuit_chip.json @@ -4,7 +4,7 @@ "count": 1, "items": "ragium:silicon_wafer" }, - "results": { + "result": { "count": 8, "id": "ragium:circuit_chip" }, 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/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/lib/kotlin/hiiragi283/lib/collection/NonEmptyLists.kt b/src/lib/kotlin/hiiragi283/lib/collection/NonEmptyLists.kt index de3a9d1107..b88facb25c 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.6 + */ +fun nelOf(head: E): Nel = Nel(head) + /** * @param E リストの要素のクラス * @author Hiiragi Tsubasa diff --git a/src/lib/kotlin/hiiragi283/lib/data/ExporterDataProvider.kt b/src/lib/kotlin/hiiragi283/lib/data/ExporterDataProvider.kt index 0de1f6c0c3..7ee464822c 100644 --- a/src/lib/kotlin/hiiragi283/lib/data/ExporterDataProvider.kt +++ b/src/lib/kotlin/hiiragi283/lib/data/ExporterDataProvider.kt @@ -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/recipe/HTRecipeProvider.kt b/src/lib/kotlin/hiiragi283/lib/data/recipe/HTRecipeProvider.kt index 3b5d09a0fa..fc55094e97 100644 --- a/src/lib/kotlin/hiiragi283/lib/data/recipe/HTRecipeProvider.kt +++ b/src/lib/kotlin/hiiragi283/lib/data/recipe/HTRecipeProvider.kt @@ -1,15 +1,17 @@ package hiiragi283.lib.data.recipe import hiiragi283.lib.HTConstants +import hiiragi283.lib.collection.Nel +import hiiragi283.lib.collection.nelOf import hiiragi283.lib.data.ExporterDataProvider +import hiiragi283.lib.recipe.ingredient.HTMaterialTagsIngredient 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.world.item.Item import net.minecraft.world.item.crafting.Recipe import net.neoforged.neoforge.common.conditions.ModLoadedCondition import java.util.concurrent.CompletableFuture @@ -27,11 +29,35 @@ 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(prefixes: Nel, materials: Nel): HTMaterialTagsIngredient = + HTMaterialTagsIngredient(prefixes, materials) - fun dustOrIngot(material: HTMaterialLike): HolderSet = - setOf(CommonTagPrefixes.DUST, CommonTagPrefixes.INGOT).map { it.itemTagKey(material) }.let(::holderSet) + /** + * @since 26.1.7 + */ + fun materialTags(prefixes: Nel, material: HTMaterialLike): HTMaterialTagsIngredient = + materialTags(prefixes, nelOf(material)) + + /** + * @since 26.1.7 + */ + fun materialTags(prefix: HTTagPrefix, materials: Nel): HTMaterialTagsIngredient = + materialTags(nelOf(prefix), materials) + + /** + * @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) // Integration // diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTItemToDoubleItemRecipe.kt b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTItemToDoubleItemRecipe.kt index 766786c7fa..095ee36b93 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 @@ -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) } 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..5c60961d64 --- /dev/null +++ b/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTMaterialTagsIngredient.kt @@ -0,0 +1,61 @@ +package hiiragi283.lib.recipe.ingredient + +import com.mojang.serialization.MapCodec +import hiiragi283.lib.HTComparators +import hiiragi283.lib.collection.Nel +import hiiragi283.lib.collection.toNel +import hiiragi283.lib.serialization.codec.HTCodecs +import hiiragi283.lib.serialization.codec.compactNelFieldOf +import hiiragi283.lib.serialization.network.HTStreamCodecs +import hiiragi283.lib.serialization.network.nelOf +import hiiragi283.lib.tag.HTMaterialLike +import hiiragi283.lib.tag.HTTagPrefix +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 + */ +@ConsistentCopyVisibility +data class HTMaterialTagsIngredient private constructor(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) + } + + constructor(prefixes: Nel, materials: Nel) : this( + prefixes + .flatMap { prefix: HTTagPrefix -> materials.map(prefix::itemTagKey) } + .let(HTComparators::sortTagKeys) + .toNel() + ) + + override fun test(stack: ItemStack): Boolean = tags.any(stack::`is`) + + override fun items(): Stream> = tags.stream() + .flatMap { tagKey: TagKey -> BuiltInRegistries.ITEM.get(tagKey).stream().flatMap { it.stream() } } + + override fun isSimple(): Boolean = true + + override fun getType(): IngredientType<*> = TYPE +} 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/ragium/api/recipe/RTElectrolyzingRecipe.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTElectrolyzingRecipe.kt index 90574283b3..a6d84f3329 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTElectrolyzingRecipe.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTElectrolyzingRecipe.kt @@ -16,7 +16,7 @@ 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 @@ -48,7 +48,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) } diff --git a/src/main/kotlin/hiiragi283/ragium/common/Ragium.kt b/src/main/kotlin/hiiragi283/ragium/common/Ragium.kt index c8a03544a2..ad59311aec 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/Ragium.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/Ragium.kt @@ -11,6 +11,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 @@ -126,6 +127,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) } From 2874d24f2d16e9f8597d5df8cbf3c34797c7e088 Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Sat, 19 Sep 2026 12:31:27 +0900 Subject: [PATCH 03/44] =?UTF-8?q?fix:=20HTSingleRecipeCategory=20=E3=81=AB?= =?UTF-8?q?=E3=81=8A=E3=81=84=E3=81=A6=E5=87=BA=E5=8A=9B=E3=82=B9=E3=83=AD?= =?UTF-8?q?=E3=83=83=E3=83=88=E3=81=AE=E5=89=B2=E3=82=8A=E5=BD=93=E3=81=A6?= =?UTF-8?q?=E3=81=8C=E5=85=A5=E5=8A=9B=E3=81=AB=E3=81=AA=E3=81=A3=E3=81=A6?= =?UTF-8?q?=E3=81=84=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data/recipe/RagiumHeatRecipeProvider.kt | 4 +-- .../recipe/RagiumVanillaRecipeProvider.kt | 4 +-- .../recipe/melting/lava_from_stone.json | 18 ------------- .../melting/molten_glass_from_block.json | 2 +- .../kotlin/hiiragi283/lib/HTComparators.kt | 9 ++++--- .../lib/data/ExporterDataProvider.kt | 25 ++++++++++++++++++- .../jei/category/HTSingleRecipeCategory.kt | 2 +- .../ingredient/HTMaterialTagsIngredient.kt | 2 +- 8 files changed, 37 insertions(+), 29 deletions(-) delete mode 100644 src/generated/resources/data/ragium/recipe/melting/lava_from_stone.json diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumHeatRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumHeatRecipeProvider.kt index 39c24d0696..6b34b70758 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumHeatRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumHeatRecipeProvider.kt @@ -157,7 +157,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 } } @@ -196,7 +196,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/RagiumVanillaRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt index f9eee58daa..bdb0c4adcd 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt @@ -623,7 +623,7 @@ class RagiumVanillaRecipeProvider(registries: HolderLookup.Provider, output: Rec prefix: HTTagPrefix, vararg materials: HTMaterialLike ): ShapedRecipeBuilder = materials.map(prefix::itemTagKey) - .let(HTComparators::sortTagKeys) + .toSortedSet(HTComparators.TAG_KEY) .map(::tag) .let(::CompoundIngredient) .toVanilla() @@ -644,7 +644,7 @@ class RagiumVanillaRecipeProvider(registries: HolderLookup.Provider, output: Rec fun ShapelessRecipeBuilder.requires(prefix: HTTagPrefix, vararg materials: HTMaterialLike): ShapelessRecipeBuilder = materials.map(prefix::itemTagKey) - .let(HTComparators::sortTagKeys) + .toSortedSet(HTComparators.TAG_KEY) .map(::tag) .let(::CompoundIngredient) .toVanilla() 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/lib/kotlin/hiiragi283/lib/HTComparators.kt b/src/lib/kotlin/hiiragi283/lib/HTComparators.kt index ecefa09e48..35b92bc706 100644 --- a/src/lib/kotlin/hiiragi283/lib/HTComparators.kt +++ b/src/lib/kotlin/hiiragi283/lib/HTComparators.kt @@ -1,5 +1,7 @@ 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 @@ -31,8 +33,9 @@ data object HTComparators { compareBy(KEY, TagKey<*>::registry).thenComparing(compareBy(ID, TagKey<*>::location)) /** - * @since 26.1.4 + * [HolderSet]の[Comparator] + * @since 26.1.7 */ - @JvmStatic - fun sortTagKeys(tagKeys: Iterable>): Set> = tagKeys.toSortedSet(TAG_KEY) + @JvmField + val HOLDER_SET: Comparator> = compareBy(Comparators.emptiesLast(TAG_KEY), HolderSet<*>::unwrapKey) } diff --git a/src/lib/kotlin/hiiragi283/lib/data/ExporterDataProvider.kt b/src/lib/kotlin/hiiragi283/lib/data/ExporterDataProvider.kt index 7ee464822c..22c48f6ef1 100644 --- a/src/lib/kotlin/hiiragi283/lib/data/ExporterDataProvider.kt +++ b/src/lib/kotlin/hiiragi283/lib/data/ExporterDataProvider.kt @@ -26,6 +26,7 @@ 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.CompositeHolderSet import net.neoforged.neoforge.registries.holdersets.OrHolderSet import java.util.Optional import java.util.concurrent.CompletableFuture @@ -126,7 +127,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.toSortedSet(HTComparators.TAG_KEY).map(::holderSet).let(::OrHolderSet) } protected fun holderSet(vararg tagKeys: TagKey): HolderSet = holderSet(tagKeys.toSet()) @@ -150,4 +151,26 @@ abstract class ExporterDataProvider( protected fun lavaSet(): HolderSet = holderSet(Tags.Fluids.LAVA) protected fun milkSet(): HolderSet = holderSet(Tags.Fluids.MILK) + + /** + * @since 26.1.7 + */ + protected fun compressHolderSet(holderSets: Iterable>): OrHolderSet = + holderSets.flatMap { holderSet: HolderSet -> + when (holderSet) { + is CompositeHolderSet -> holderSet.components.singleOrNull()?.let(::listOf) ?: listOf(holderSet) + else -> listOf(holderSet) + } + }.sortedWith(HTComparators.HOLDER_SET).let(::OrHolderSet) + + /** + * @since 26.1.7 + */ + protected fun compressHolderSet(holderSets: Sequence>): OrHolderSet = + holderSets.flatMap { holderSet: HolderSet -> + when (holderSet) { + is CompositeHolderSet -> holderSet.components.singleOrNull()?.let(::listOf) ?: listOf(holderSet) + else -> listOf(holderSet) + } + }.sortedWith(HTComparators.HOLDER_SET).toList().let(::OrHolderSet) } diff --git a/src/lib/kotlin/hiiragi283/lib/integration/jei/category/HTSingleRecipeCategory.kt b/src/lib/kotlin/hiiragi283/lib/integration/jei/category/HTSingleRecipeCategory.kt index 12c938190b..937e004c9a 100644 --- a/src/lib/kotlin/hiiragi283/lib/integration/jei/category/HTSingleRecipeCategory.kt +++ b/src/lib/kotlin/hiiragi283/lib/integration/jei/category/HTSingleRecipeCategory.kt @@ -35,7 +35,7 @@ abstract class HTSingleRecipeCategory>( // output setOutput( builder - .addInputSlot(getPosition(3), getPosition(0)) + .addOutputSlot(getPosition(3), getPosition(0)) .setSlotBackground(HTBackgroundType.OUTPUT), recipe ) diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTMaterialTagsIngredient.kt b/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTMaterialTagsIngredient.kt index 5c60961d64..d85bb06601 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTMaterialTagsIngredient.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTMaterialTagsIngredient.kt @@ -46,7 +46,7 @@ data class HTMaterialTagsIngredient private constructor(val tags: Nel, materials: Nel) : this( prefixes .flatMap { prefix: HTTagPrefix -> materials.map(prefix::itemTagKey) } - .let(HTComparators::sortTagKeys) + .toSortedSet(HTComparators.TAG_KEY) .toNel() ) From cde3715f18b9d32a8c165697a946e4dc65383e3d Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Sat, 19 Sep 2026 13:11:20 +0900 Subject: [PATCH 04/44] =?UTF-8?q?feat:=20HTOreSlurryData=20=E3=81=AB?= =?UTF-8?q?=E8=89=B2=E3=81=AE=E3=83=91=E3=83=A9=E3=83=A1=E3=83=BC=E3=82=BF?= =?UTF-8?q?=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hiiragi283/ragium/client/RagiumClient.kt | 16 +++++---- .../client/integration/jei/RagiumJeiPlugin.kt | 4 +++ .../ragium/ragium/ore_slurry_data/copper.json | 1 + .../ragium/ragium/ore_slurry_data/gold.json | 1 + .../ragium/ragium/ore_slurry_data/iron.json | 1 + .../kotlin/hiiragi283/lib/HTComparators.kt | 26 ++++++++++++++ .../lib/data/ExporterDataProvider.kt | 26 +------------- .../api/data/oreSlurry/HTOreSlurryData.kt | 14 +++++++- .../api/data/oreSlurry/RagiumOreSlurryData.kt | 36 +++++++++++++++---- 9 files changed, 86 insertions(+), 39 deletions(-) diff --git a/src/client/kotlin/hiiragi283/ragium/client/RagiumClient.kt b/src/client/kotlin/hiiragi283/ragium/client/RagiumClient.kt index 6f091271fa..a47da89460 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/RagiumClient.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/RagiumClient.kt @@ -9,6 +9,7 @@ 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.widget.HTEnergySlotWidgetRenderer import hiiragi283.ragium.client.gui.widget.HTFluidWidgetRenderer @@ -23,6 +24,7 @@ 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 @@ -74,11 +76,9 @@ data object RagiumClient : HTClientMod() { } 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() @@ -181,8 +181,10 @@ 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) + } } } 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..4192cb434e 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiPlugin.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiPlugin.kt @@ -78,6 +78,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( 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..afa9dc8251 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,4 +1,5 @@ { + "color": "#c15a36", "count": 3, "fallback": "ragium:copper_dust", "result": "#c:dusts/copper", 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..930772669a 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,4 +1,5 @@ { + "color": "#ffcc00", "count": 2, "fallback": "ragium:gold_dust", "result": "#c:dusts/gold", 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..c8829d7242 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,4 +1,5 @@ { + "color": "#777777", "count": 2, "fallback": "ragium:iron_dust", "result": "#c:dusts/iron", diff --git a/src/lib/kotlin/hiiragi283/lib/HTComparators.kt b/src/lib/kotlin/hiiragi283/lib/HTComparators.kt index 35b92bc706..e7ccd97947 100644 --- a/src/lib/kotlin/hiiragi283/lib/HTComparators.kt +++ b/src/lib/kotlin/hiiragi283/lib/HTComparators.kt @@ -5,6 +5,8 @@ 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]をまとめたクラスです。 @@ -38,4 +40,28 @@ data object HTComparators { */ @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 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/data/ExporterDataProvider.kt b/src/lib/kotlin/hiiragi283/lib/data/ExporterDataProvider.kt index 22c48f6ef1..5de0de0a87 100644 --- a/src/lib/kotlin/hiiragi283/lib/data/ExporterDataProvider.kt +++ b/src/lib/kotlin/hiiragi283/lib/data/ExporterDataProvider.kt @@ -26,8 +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.CompositeHolderSet -import net.neoforged.neoforge.registries.holdersets.OrHolderSet import java.util.Optional import java.util.concurrent.CompletableFuture @@ -127,7 +125,7 @@ abstract class ExporterDataProvider( protected fun holderSet(tagKeys: Iterable>): HolderSet = when (tagKeys.count()) { 0 -> HolderSet.empty() 1 -> holderSet(tagKeys.first()) - else -> tagKeys.toSortedSet(HTComparators.TAG_KEY).map(::holderSet).let(::OrHolderSet) + else -> tagKeys.map(::holderSet).let(HTComparators::compressHolderSet) } protected fun holderSet(vararg tagKeys: TagKey): HolderSet = holderSet(tagKeys.toSet()) @@ -151,26 +149,4 @@ abstract class ExporterDataProvider( protected fun lavaSet(): HolderSet = holderSet(Tags.Fluids.LAVA) protected fun milkSet(): HolderSet = holderSet(Tags.Fluids.MILK) - - /** - * @since 26.1.7 - */ - protected fun compressHolderSet(holderSets: Iterable>): OrHolderSet = - holderSets.flatMap { holderSet: HolderSet -> - when (holderSet) { - is CompositeHolderSet -> holderSet.components.singleOrNull()?.let(::listOf) ?: listOf(holderSet) - else -> listOf(holderSet) - } - }.sortedWith(HTComparators.HOLDER_SET).let(::OrHolderSet) - - /** - * @since 26.1.7 - */ - protected fun compressHolderSet(holderSets: Sequence>): OrHolderSet = - holderSets.flatMap { holderSet: HolderSet -> - when (holderSet) { - is CompositeHolderSet -> holderSet.components.singleOrNull()?.let(::listOf) ?: listOf(holderSet) - else -> listOf(holderSet) - } - }.sortedWith(HTComparators.HOLDER_SET).toList().let(::OrHolderSet) } 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..43282b3993 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/data/oreSlurry/HTOreSlurryData.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/data/oreSlurry/HTOreSlurryData.kt @@ -14,6 +14,7 @@ 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.util.ExtraCodecs import net.minecraft.world.item.Item import net.minecraft.world.item.ItemStackTemplate import java.util.Optional @@ -26,6 +27,7 @@ import kotlin.jvm.optionals.getOrNull @JvmRecord data class HTOreSlurryData @JvmOverloads constructor( val title: Text, + val color: Int, val result: HolderSet, val fallback: Optional>, val count: Int = 1 @@ -35,6 +37,7 @@ data class HTOreSlurryData @JvmOverloads constructor( val DIRECT_CODEC: Codec = HTCodecs.record { instance -> instance.group( HTCodecs.TEXT.fieldOf("title").forGetter(HTOreSlurryData::title), + ExtraCodecs.STRING_RGB_COLOR.fieldOf("color").forGetter(HTOreSlurryData::color), 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) @@ -48,6 +51,8 @@ data class HTOreSlurryData @JvmOverloads constructor( val DIRECT_STREAM_CODEC: StreamCodec = StreamCodec.composite( HTStreamCodecs.TEXT, HTOreSlurryData::title, + ByteBufCodecs.VAR_INT, + HTOreSlurryData::color, HTStreamCodecs.holderSet(Registries.ITEM), HTOreSlurryData::result, HTStreamCodecs.optional(Item.STREAM_CODEC), @@ -62,8 +67,15 @@ data class HTOreSlurryData @JvmOverloads constructor( HTStreamCodecs.holder(RagiumRegistries.Keys.ORE_SLURRY_DATA, DIRECT_STREAM_CODEC) } - @JvmOverloads constructor(title: Text, result: HolderSet, fallback: Holder?, count: Int = 1) : this( + @JvmOverloads constructor( + title: Text, + color: Int, + result: HolderSet, + fallback: Holder?, + count: Int = 1 + ) : this( title, + color, result, fallback.toOptional(), 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..a14be537c9 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/data/oreSlurry/RagiumOreSlurryData.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/data/oreSlurry/RagiumOreSlurryData.kt @@ -10,6 +10,7 @@ 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.HolderSet import net.minecraft.core.registries.Registries import net.minecraft.data.worldgen.BootstrapContext import net.minecraft.resources.ResourceKey @@ -34,24 +35,47 @@ 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: HolderSet, + fallback: Holder?, + count: Int = 1 + ) { context.register( key, - HTOreSlurryData(translatableText(key.toLanguageKey()), getter.getOrThrow(result), fallback, count) + HTOreSlurryData(translatableText(key.toLanguageKey()), color, result, fallback, count) ) } - fun register(key: ResourceKey, part: HTItemPart, material: RagiumMaterial, count: Int = 1) { + fun register( + key: ResourceKey, + color: Int, + result: TagKey, + fallback: Holder?, + count: Int = 1 + ) { + register(key, color, getter.getOrThrow(result), fallback, count) + } + + fun register( + key: ResourceKey, + color: Int, + part: HTItemPart, + material: RagiumMaterial, + count: Int = 1 + ) { register( key, + color, part.tagPrefix.itemTagKey(material), HTMaterialAccess.INSTANCE.getMaterialItem(part, material)?.item, 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) } } From 38397d634a185fc32f29f7cb548454f5e9311996 Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Sat, 19 Sep 2026 13:52:49 +0900 Subject: [PATCH 05/44] =?UTF-8?q?refactor:=20RegistryAliasAcceptor=20?= =?UTF-8?q?=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../HTDeferredBlockAndItemRegister.kt | 12 +++------- .../lib/registry/HTDeferredRegister.kt | 10 +++----- .../lib/registry/HTFluidContentRegister.kt | 9 +++---- .../lib/registry/HTPotionContentRegister.kt | 11 +++++++-- .../lib/registry/RegistryAliasAcceptor.kt | 24 +++++++++++++++++++ 5 files changed, 42 insertions(+), 24 deletions(-) create mode 100644 src/lib/kotlin/hiiragi283/lib/registry/RegistryAliasAcceptor.kt 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/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/HTFluidContentRegister.kt b/src/lib/kotlin/hiiragi283/lib/registry/HTFluidContentRegister.kt index 939af49cea..6ace45f615 100644 --- a/src/lib/kotlin/hiiragi283/lib/registry/HTFluidContentRegister.kt +++ b/src/lib/kotlin/hiiragi283/lib/registry/HTFluidContentRegister.kt @@ -34,7 +34,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 +79,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 +90,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) 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/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) +} From 3d98b44f552c00ba768eaf0ec25da5091e65e78f Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Sat, 19 Sep 2026 15:23:51 +0900 Subject: [PATCH 06/44] =?UTF-8?q?feat:=20Ancient=20Debris=20Slurry=20?= =?UTF-8?q?=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/integration/jei/RagiumJeiPlugin.kt | 4 +- .../data/lang/RagiumEnglishLangProvider.kt | 1 + .../data/lang/RagiumJapaneseLangProvider.kt | 1 + .../resources/assets/ragium/lang/en_us.json | 1 + .../resources/assets/ragium/lang/ja_jp.json | 1 + .../ragium/ragium/ore_slurry_data/copper.json | 14 ++++-- .../ragium/ragium/ore_slurry_data/gold.json | 14 ++++-- .../ragium/ragium/ore_slurry_data/iron.json | 14 ++++-- .../ore_slurry_data/netherite_scrap.json | 10 ++++ .../hiiragi283/lib/data/HolderAcceptor.kt | 29 +++++++++++ .../criterion/HTItemPredicateBuilder.kt | 2 +- .../ingredient/HTFluidIngredientBuilder.kt | 2 +- .../ingredient/HTItemIngredientBuilder.kt | 2 +- .../lib/recipe/result/HTItemResult.kt | 34 +++++++++++++ .../api/data/oreSlurry/HTOreSlurryData.kt | 49 +++---------------- .../api/data/oreSlurry/RagiumOreSlurryData.kt | 40 ++++++--------- .../kotlin/hiiragi283/ragium/common/Ragium.kt | 4 ++ 17 files changed, 141 insertions(+), 81 deletions(-) create mode 100644 src/generated/resources/data/ragium/ragium/ore_slurry_data/netherite_scrap.json 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 4192cb434e..c11f2524b5 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiPlugin.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiPlugin.kt @@ -42,7 +42,6 @@ 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 @@ -242,7 +241,8 @@ class RagiumJeiPlugin : HTJeiPlugin(RagiumAPI.MOD_ID) { .listElements() .asSequence() .mapNotNull { holder: Holder -> - val template: ItemStackTemplate = holder.value().createTemplate() ?: return@mapNotNull null + val template: ItemStack = holder.value().createResult() + if (template.isEmpty) return@mapNotNull null RagiumRecipeBuilders.reacting { primaryIngredient = HTJeiRecipeHelper.fakeFluid(HTOreSlurryDataHelper.createFluid(holder)) secondaryIngredient = HTJeiRecipeHelper.fakeFluid(FluidTagSlotDisplay(Tags.Fluids.WATER)) diff --git a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt index 71e9c2276a..5caef7ba7a 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt @@ -126,6 +126,7 @@ class RagiumEnglishLangProvider(output: PackOutput) : 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") diff --git a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt index 8ebb7ec016..137be06d23 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt @@ -122,6 +122,7 @@ class RagiumJapaneseLangProvider(output: PackOutput) : addOreSlurry(RagiumOreSlurryData.COPPER, "銅の鉱石泥") addOreSlurry(RagiumOreSlurryData.IRON, "鉄の鉱石泥") addOreSlurry(RagiumOreSlurryData.GOLD, "金の鉱石泥") + addOreSlurry(RagiumOreSlurryData.NETHERITE_SCRAP, "古代の鉱石泥") // Potion addPotion(RagiumPotions.FROSTBITE, "凍傷") diff --git a/src/generated/resources/assets/ragium/lang/en_us.json b/src/generated/resources/assets/ragium/lang/en_us.json index 658f41d7a4..0d111d8032 100644 --- a/src/generated/resources/assets/ragium/lang/en_us.json +++ b/src/generated/resources/assets/ragium/lang/en_us.json @@ -266,6 +266,7 @@ "ore_slurry_data.ragium.copper": "Copper Ore Slurry", "ore_slurry_data.ragium.gold": "Gold Ore Slurry", "ore_slurry_data.ragium.iron": "Iron Ore Slurry", + "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", diff --git a/src/generated/resources/assets/ragium/lang/ja_jp.json b/src/generated/resources/assets/ragium/lang/ja_jp.json index d9f4e3274e..783a1acda6 100644 --- a/src/generated/resources/assets/ragium/lang/ja_jp.json +++ b/src/generated/resources/assets/ragium/lang/ja_jp.json @@ -266,6 +266,7 @@ "ore_slurry_data.ragium.copper": "銅の鉱石泥", "ore_slurry_data.ragium.gold": "金の鉱石泥", "ore_slurry_data.ragium.iron": "鉄の鉱石泥", + "ore_slurry_data.ragium.netherite_scrap": "古代の鉱石泥", "recipe_type.ragium.alloying": "合金", "recipe_type.ragium.assembling": "組立", "recipe_type.ragium.bathing": "化学洗浄", 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 afa9dc8251..e2df3b5abc 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,16 @@ { "color": "#c15a36", - "count": 3, - "fallback": "ragium:copper_dust", - "result": "#c:dusts/copper", + "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" } 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 930772669a..54afb05178 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,16 @@ { "color": "#ffcc00", - "count": 2, - "fallback": "ragium:gold_dust", - "result": "#c:dusts/gold", + "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" } 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 c8829d7242..49d74bcfff 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,16 @@ { "color": "#777777", - "count": 2, - "fallback": "ragium:iron_dust", - "result": "#c:dusts/iron", + "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" } 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..b9c45b152b --- /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": "ore_slurry_data.ragium.netherite_scrap" + } +} \ No newline at end of file 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/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/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..47a8d3c829 100644 --- a/src/lib/kotlin/hiiragi283/lib/data/recipe/ingredient/HTItemIngredientBuilder.kt +++ b/src/lib/kotlin/hiiragi283/lib/data/recipe/ingredient/HTItemIngredientBuilder.kt @@ -53,7 +53,7 @@ class HTItemIngredientBuilder @PublishedApi internal constructor() { contract { callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) } - +HolderAcceptor.ItemSetBuilder().apply(builderAction).build() + +HolderAcceptor.buildItemSet(builderAction) } fun build(): HTItemIngredient = HTItemIngredient(ingredient, count) diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/result/HTItemResult.kt b/src/lib/kotlin/hiiragi283/lib/recipe/result/HTItemResult.kt index 69a215797e..9edf85abfa 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/result/HTItemResult.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/result/HTItemResult.kt @@ -240,6 +240,40 @@ data class HTItemResult(val entry: Entry, val count: Int) : HTRecipeResult = 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/ragium/api/data/oreSlurry/HTOreSlurryData.kt b/src/lib/kotlin/hiiragi283/ragium/api/data/oreSlurry/HTOreSlurryData.kt index 43282b3993..761da5200d 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/data/oreSlurry/HTOreSlurryData.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/data/oreSlurry/HTOreSlurryData.kt @@ -3,44 +3,31 @@ package hiiragi283.ragium.api.data.oreSlurry import com.mojang.serialization.Codec import hiiragi283.lib.HTConstants import hiiragi283.lib.recipe.result.HTItemResult +import hiiragi283.lib.recipe.result.createOrEmpty 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.util.ExtraCodecs -import net.minecraft.world.item.Item -import net.minecraft.world.item.ItemStackTemplate -import java.util.Optional -import kotlin.jvm.optionals.getOrNull +import net.minecraft.world.item.ItemStack /** * @author Hiiragi Tsubasa * @since 26.1.5 */ @JvmRecord -data class HTOreSlurryData @JvmOverloads constructor( - val title: Text, - val color: Int, - 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), ExtraCodecs.STRING_RGB_COLOR.fieldOf("color").forGetter(HTOreSlurryData::color), - 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) + HTItemResult.CODEC.fieldOf(HTConstants.RESULT).forGetter(HTOreSlurryData::result) ).apply(instance, ::HTOreSlurryData) } @@ -53,12 +40,8 @@ data class HTOreSlurryData @JvmOverloads constructor( HTOreSlurryData::title, ByteBufCodecs.VAR_INT, HTOreSlurryData::color, - HTStreamCodecs.holderSet(Registries.ITEM), + HTItemResult.STREAM_CODEC, HTOreSlurryData::result, - HTStreamCodecs.optional(Item.STREAM_CODEC), - HTOreSlurryData::fallback, - ByteBufCodecs.VAR_INT, - HTOreSlurryData::count, ::HTOreSlurryData ) @@ -67,25 +50,5 @@ data class HTOreSlurryData @JvmOverloads constructor( HTStreamCodecs.holder(RagiumRegistries.Keys.ORE_SLURRY_DATA, DIRECT_STREAM_CODEC) } - @JvmOverloads constructor( - title: Text, - color: Int, - result: HolderSet, - fallback: Holder?, - count: Int = 1 - ) : this( - title, - color, - 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) } + fun createResult(): ItemStack = result.createOrEmpty() } 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 a14be537c9..eb639851b4 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/data/oreSlurry/RagiumOreSlurryData.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/data/oreSlurry/RagiumOreSlurryData.kt @@ -1,5 +1,6 @@ package hiiragi283.ragium.api.data.oreSlurry +import hiiragi283.lib.recipe.result.HTItemResult import hiiragi283.lib.registry.createKey import hiiragi283.lib.resource.toLanguageKey import hiiragi283.lib.text.translatableText @@ -8,14 +9,13 @@ 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.HolderSet 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 @@ -27,6 +27,9 @@ data object RagiumOreSlurryData { @JvmField val GOLD: ResourceKey = create("gold") + @JvmField + val NETHERITE_SCRAP: ResourceKey = create("netherite_scrap") + @JvmStatic private fun create(name: String): ResourceKey = RagiumRegistries.Keys.ORE_SLURRY_DATA.createKey(RagiumAPI.id(name)) @@ -35,29 +38,13 @@ data object RagiumOreSlurryData { fun bootstrap(context: BootstrapContext) { val getter: HolderGetter = context.lookup(Registries.ITEM) - fun register( - key: ResourceKey, - color: Int, - result: HolderSet, - fallback: Holder?, - count: Int = 1 - ) { + fun register(key: ResourceKey, color: Int, result: HTItemResult) { context.register( key, - HTOreSlurryData(translatableText(key.toLanguageKey()), color, result, fallback, count) + HTOreSlurryData(translatableText(key.toLanguageKey()), color, result) ) } - fun register( - key: ResourceKey, - color: Int, - result: TagKey, - fallback: Holder?, - count: Int = 1 - ) { - register(key, color, getter.getOrThrow(result), fallback, count) - } - fun register( key: ResourceKey, color: Int, @@ -65,17 +52,22 @@ data object RagiumOreSlurryData { material: RagiumMaterial, count: Int = 1 ) { + val tagEntry = HTItemResult.TagEntry(getter.getOrThrow(part.tagPrefix.itemTagKey(material))) + val entry: HTItemResult.Entry = HTMaterialAccess.INSTANCE.getMaterialItem(part, material) + ?.item + ?.let { HTItemResult.WithFallbackEntry(tagEntry, HTItemResult.SimpleEntry(it)) } + ?: tagEntry register( key, color, - part.tagPrefix.itemTagKey(material), - HTMaterialAccess.INSTANCE.getMaterialItem(part, material)?.item, - count + entry.toResult(count) ) } register(COPPER, 0xc15a36, HTItemPart.DUST, RagiumMaterial.Metal.COPPER, 3) register(IRON, 0x777777, HTItemPart.DUST, RagiumMaterial.Metal.IRON, 2) register(GOLD, 0xffcc00, HTItemPart.DUST, RagiumMaterial.Metal.GOLD, 2) + + register(NETHERITE_SCRAP, 0x473e3f, HTItemResult(ItemStackTemplate(Items.NETHERITE_SCRAP, 2))) } } diff --git a/src/main/kotlin/hiiragi283/ragium/common/Ragium.kt b/src/main/kotlin/hiiragi283/ragium/common/Ragium.kt index ad59311aec..42678a4fec 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/Ragium.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/Ragium.kt @@ -142,6 +142,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) @@ -181,6 +182,9 @@ data object Ragium : HTCommonMod() { 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)) + } } override fun registerDynamicRegistries(event: DataPackRegistryEvent.NewRegistry) { From 88c8b57c6fa75c5ea3af2e0c0c961eab400cbe13 Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Sat, 19 Sep 2026 15:48:51 +0900 Subject: [PATCH 07/44] =?UTF-8?q?feat:=20=E6=96=B0=E3=81=97=E3=81=84?= =?UTF-8?q?=E3=83=96=E3=83=AD=E3=83=83=E3=82=AF=E3=82=92=E8=BF=BD=E5=8A=A0?= =?UTF-8?q?=20-=20Block=20of=20Pitch=20Coke=20/=20=E3=83=94=E3=83=83?= =?UTF-8?q?=E3=83=81=E3=82=B3=E3=83=BC=E3=82=AF=E3=82=B9=E3=83=96=E3=83=AD?= =?UTF-8?q?=E3=83=83=E3=82=AF=20feat:=20=E6=96=B0=E3=81=97=E3=81=84?= =?UTF-8?q?=E3=82=A2=E3=82=A4=E3=83=86=E3=83=A0=E3=82=92=E8=BF=BD=E5=8A=A0?= =?UTF-8?q?=20-=20Tiny=20Pitch=20Coke=20/=20=E5=B0=8F=E3=81=95=E3=81=AA?= =?UTF-8?q?=E3=83=94=E3=83=83=E3=83=81=E3=82=B3=E3=83=BC=E3=82=AF=E3=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ragium/data/RagiumDataMapProvider.kt | 11 +++--- .../data/lang/RagiumEnglishLangProvider.kt | 1 - .../data/lang/RagiumJapaneseLangProvider.kt | 1 - .../ragium/data/lang/RagiumLangProvider.kt | 1 + .../recipe/RagiumVanillaRecipeProvider.kt | 3 +- .../ragium/blockstates/pitch_coke_block.json | 7 ++++ .../assets/ragium/items/pitch_coke_block.json | 6 ++++ .../assets/ragium/items/tiny_pitch_coke.json | 6 ++++ .../resources/assets/ragium/lang/en_us.json | 2 ++ .../resources/assets/ragium/lang/ja_jp.json | 2 ++ .../ragium/models/block/pitch_coke_block.json | 6 ++++ .../ragium/models/item/tiny_pitch_coke.json | 6 ++++ .../data/c/tags/block/storage_blocks.json | 1 + .../tags/block/storage_blocks/pitch_coke.json | 5 +++ .../data/c/tags/item/storage_blocks.json | 1 + .../tags/item/storage_blocks/pitch_coke.json | 5 +++ .../resources/data/c/tags/item/tiny.json | 3 +- .../data/c/tags/item/tiny/pitch_coke.json | 5 +++ .../tags/block/mineable/pickaxe.json | 1 + .../data_maps/item/furnace_fuels.json | 8 ++++- .../building_blocks/pitch_coke_block.json | 32 ++++++++++++++++++ .../recipes/misc/pitch_coke_from_block.json | 32 ++++++++++++++++++ .../recipes/misc/pitch_coke_from_tiny.json | 32 ++++++++++++++++++ .../misc/sooty_iron_ingot_from_coke.json | 13 ++++++- .../recipes/misc/tiny_pitch_coke.json | 32 ++++++++++++++++++ .../loot_table/blocks/pitch_coke_block.json | 21 ++++++++++++ .../compressing/pitch_coke_from_dust.json | 21 ++++++++++++ .../data/ragium/recipe/pitch_coke_block.json | 17 ++++++++++ .../ragium/recipe/pitch_coke_from_block.json | 12 +++++++ .../ragium/recipe/pitch_coke_from_tiny.json | 16 +++++++++ .../recipe/sooty_iron_ingot_from_coke.json | 8 ++++- .../data/ragium/recipe/tiny_pitch_coke.json | 12 +++++++ .../ragium/api/material/RagiumMaterial.kt | 3 +- .../ragium/common/block/RagiumBlocks.kt | 1 + .../ragium/common/item/RagiumItems.kt | 3 +- .../common/material/RagiumMaterialHelper.kt | 1 + .../textures/block/pitch_coke_block.png | Bin 0 -> 436 bytes .../ragium/textures/item/tiny_pitch_coke.png | Bin 0 -> 329 bytes 38 files changed, 323 insertions(+), 14 deletions(-) create mode 100644 src/generated/resources/assets/ragium/blockstates/pitch_coke_block.json create mode 100644 src/generated/resources/assets/ragium/items/pitch_coke_block.json create mode 100644 src/generated/resources/assets/ragium/items/tiny_pitch_coke.json create mode 100644 src/generated/resources/assets/ragium/models/block/pitch_coke_block.json create mode 100644 src/generated/resources/assets/ragium/models/item/tiny_pitch_coke.json create mode 100644 src/generated/resources/data/c/tags/block/storage_blocks/pitch_coke.json create mode 100644 src/generated/resources/data/c/tags/item/storage_blocks/pitch_coke.json create mode 100644 src/generated/resources/data/c/tags/item/tiny/pitch_coke.json create mode 100644 src/generated/resources/data/ragium/advancement/recipes/building_blocks/pitch_coke_block.json create mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/pitch_coke_from_block.json create mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/pitch_coke_from_tiny.json create mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/tiny_pitch_coke.json create mode 100644 src/generated/resources/data/ragium/loot_table/blocks/pitch_coke_block.json create mode 100644 src/generated/resources/data/ragium/recipe/compressing/pitch_coke_from_dust.json create mode 100644 src/generated/resources/data/ragium/recipe/pitch_coke_block.json create mode 100644 src/generated/resources/data/ragium/recipe/pitch_coke_from_block.json create mode 100644 src/generated/resources/data/ragium/recipe/pitch_coke_from_tiny.json create mode 100644 src/generated/resources/data/ragium/recipe/tiny_pitch_coke.json create mode 100644 src/main/resources/assets/ragium/textures/block/pitch_coke_block.png create mode 100644 src/main/resources/assets/ragium/textures/item/tiny_pitch_coke.png 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/lang/RagiumEnglishLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt index 5caef7ba7a..267bc744f4 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt @@ -99,7 +99,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") diff --git a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt index 137be06d23..78ded321d4 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt @@ -95,7 +95,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, "合成羽") 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/recipe/RagiumVanillaRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt index bdb0c4adcd..e5b7e68bbb 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt @@ -502,10 +502,11 @@ class RagiumVanillaRecipeProvider(registries: HolderLookup.Provider, output: Rec .pattern(" A ") .pattern("ABA") .pattern(" A ") - .define('A', CommonTagPrefixes.TINY, RagiumMaterial.Fuel.COAL_COKE) + .define('A', CommonTagPrefixes.TINY, RagiumMaterial.Fuel.COAL_COKE, RagiumMaterial.Fuel.PITCH_COKE) .define('B', ironIngot) .group(sootyIronIngot.idOrThrow.path) .unlockedBy(CommonTagPrefixes.TINY, RagiumMaterial.Fuel.COAL_COKE) + .unlockedBy(CommonTagPrefixes.TINY, RagiumMaterial.Fuel.PITCH_COKE) .saveSuffixed(output, "_from_coke") } 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/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/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/lang/en_us.json b/src/generated/resources/assets/ragium/lang/en_us.json index 0d111d8032..6c92a338e8 100644 --- a/src/generated/resources/assets/ragium/lang/en_us.json +++ b/src/generated/resources/assets/ragium/lang/en_us.json @@ -79,6 +79,7 @@ "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.purple_dye": "Purple Dye", "block.ragium.pyrolyzer": "Pyrolyzer", @@ -254,6 +255,7 @@ "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", diff --git a/src/generated/resources/assets/ragium/lang/ja_jp.json b/src/generated/resources/assets/ragium/lang/ja_jp.json index 783a1acda6..3e55dc06b8 100644 --- a/src/generated/resources/assets/ragium/lang/ja_jp.json +++ b/src/generated/resources/assets/ragium/lang/ja_jp.json @@ -79,6 +79,7 @@ "block.ragium.ore_slurry": "無効な鉱石泥", "block.ragium.oxygen": "酸素", "block.ragium.pink_dye": "桃色の染料", + "block.ragium.pitch_coke_block": "ピッチコークスブロック", "block.ragium.planter": "栽培機", "block.ragium.purple_dye": "紫色の染料", "block.ragium.pyrolyzer": "熱分解炉", @@ -254,6 +255,7 @@ "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": "白色の染料入りバケツ", 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/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..ab4e5fcead 100644 --- a/src/generated/resources/data/c/tags/block/storage_blocks.json +++ b/src/generated/resources/data/c/tags/block/storage_blocks.json @@ -4,6 +4,7 @@ "#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/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/item/storage_blocks.json b/src/generated/resources/data/c/tags/item/storage_blocks.json index 24f6feff54..ab4e5fcead 100644 --- a/src/generated/resources/data/c/tags/item/storage_blocks.json +++ b/src/generated/resources/data/c/tags/item/storage_blocks.json @@ -4,6 +4,7 @@ "#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/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..6f89e227d5 100644 --- a/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json +++ b/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json @@ -28,6 +28,7 @@ "ragium:nether_niter_ore", "ragium:nether_sulfur_ore", "ragium:niter_ore", + "ragium:pitch_coke_block", "ragium:planter", "ragium:pyrolyzer", "ragium:refinery", 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/ragium/advancement/recipes/building_blocks/pitch_coke_block.json b/src/generated/resources/data/ragium/advancement/recipes/building_blocks/pitch_coke_block.json new file mode 100644 index 0000000000..d2fc831271 --- /dev/null +++ b/src/generated/resources/data/ragium/advancement/recipes/building_blocks/pitch_coke_block.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_pitch_coke": { + "conditions": { + "items": [ + { + "items": "ragium:pitch_coke" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "ragium:pitch_coke_block" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_pitch_coke" + ] + ], + "rewards": { + "recipes": [ + "ragium:pitch_coke_block" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/pitch_coke_from_block.json b/src/generated/resources/data/ragium/advancement/recipes/misc/pitch_coke_from_block.json new file mode 100644 index 0000000000..db2ec6cf3b --- /dev/null +++ b/src/generated/resources/data/ragium/advancement/recipes/misc/pitch_coke_from_block.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_storage_blocks_pitch_coke": { + "conditions": { + "items": [ + { + "items": "#c:storage_blocks/pitch_coke" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "ragium:pitch_coke_from_block" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_storage_blocks_pitch_coke" + ] + ], + "rewards": { + "recipes": [ + "ragium:pitch_coke_from_block" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/pitch_coke_from_tiny.json b/src/generated/resources/data/ragium/advancement/recipes/misc/pitch_coke_from_tiny.json new file mode 100644 index 0000000000..e9fff9b7ab --- /dev/null +++ b/src/generated/resources/data/ragium/advancement/recipes/misc/pitch_coke_from_tiny.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_the_recipe": { + "conditions": { + "recipe": "ragium:pitch_coke_from_tiny" + }, + "trigger": "minecraft:recipe_unlocked" + }, + "has_tiny_pitch_coke": { + "conditions": { + "items": [ + { + "items": "#c:tiny/pitch_coke" + } + ] + }, + "trigger": "minecraft:inventory_changed" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_tiny_pitch_coke" + ] + ], + "rewards": { + "recipes": [ + "ragium:pitch_coke_from_tiny" + ] + } +} \ 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 index 95d828304a..500e97903b 100644 --- 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 @@ -16,12 +16,23 @@ ] }, "trigger": "minecraft:inventory_changed" + }, + "has_tiny_pitch_coke": { + "conditions": { + "items": [ + { + "items": "#c:tiny/pitch_coke" + } + ] + }, + "trigger": "minecraft:inventory_changed" } }, "requirements": [ [ "has_the_recipe", - "has_tiny_coal_coke" + "has_tiny_coal_coke", + "has_tiny_pitch_coke" ] ], "rewards": { diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/tiny_pitch_coke.json b/src/generated/resources/data/ragium/advancement/recipes/misc/tiny_pitch_coke.json new file mode 100644 index 0000000000..16b46ed61c --- /dev/null +++ b/src/generated/resources/data/ragium/advancement/recipes/misc/tiny_pitch_coke.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_pitch_coke": { + "conditions": { + "items": [ + { + "items": "ragium:pitch_coke" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "ragium:tiny_pitch_coke" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_pitch_coke" + ] + ], + "rewards": { + "recipes": [ + "ragium:tiny_pitch_coke" + ] + } +} \ No newline at end of file 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/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/pitch_coke_block.json b/src/generated/resources/data/ragium/recipe/pitch_coke_block.json new file mode 100644 index 0000000000..69a8d6c66d --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/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/pitch_coke_from_block.json b/src/generated/resources/data/ragium/recipe/pitch_coke_from_block.json new file mode 100644 index 0000000000..34b90f3354 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/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/pitch_coke_from_tiny.json b/src/generated/resources/data/ragium/recipe/pitch_coke_from_tiny.json new file mode 100644 index 0000000000..6ee111e6bf --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/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/sooty_iron_ingot_from_coke.json b/src/generated/resources/data/ragium/recipe/sooty_iron_ingot_from_coke.json index c61f13852d..4c6b08ebb3 100644 --- a/src/generated/resources/data/ragium/recipe/sooty_iron_ingot_from_coke.json +++ b/src/generated/resources/data/ragium/recipe/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": "neoforge:compound", + "children": [ + "#c:tiny/coal_coke", + "#c:tiny/pitch_coke" + ] + }, "B": "#c:ingots/iron" }, "pattern": [ diff --git a/src/generated/resources/data/ragium/recipe/tiny_pitch_coke.json b/src/generated/resources/data/ragium/recipe/tiny_pitch_coke.json new file mode 100644 index 0000000000..42ce2b3fee --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/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/lib/kotlin/hiiragi283/ragium/api/material/RagiumMaterial.kt b/src/lib/kotlin/hiiragi283/ragium/api/material/RagiumMaterial.kt index d5e077b574..8ffc0c05ee 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/material/RagiumMaterial.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/material/RagiumMaterial.kt @@ -28,7 +28,8 @@ sealed interface RagiumMaterial : CHARCOAL("Charcoal", "木炭"), // Common - COAL_COKE("Coal Coke", "石炭コークス") + COAL_COKE("Coal Coke", "石炭コークス"), + PITCH_COKE("Pitch Coke", "ピッチコークス") ; constructor(enName: String, jaName: String) : this(HTLangName(enName, jaName)) diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt b/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt index c4743f000d..a11c077324 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt @@ -108,6 +108,7 @@ 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.Fuel.PITCH_COKE to copyOf(Blocks.COAL_BLOCK).mapColor(MapColor.COLOR_BLUE), RagiumMaterial.Gem.ECHO to copyOf(Blocks.AMETHYST_BLOCK).mapColor(MapColor.COLOR_CYAN), 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), diff --git a/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt b/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt index 94937f8957..13fc595eea 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt @@ -41,6 +41,7 @@ data object RagiumItems { 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) { @@ -107,7 +108,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 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/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 0000000000000000000000000000000000000000..70eb3606fb83bc68c144d2722f108e5198f3923b GIT binary patch literal 436 zcmV;l0ZaagP)WG(@+}xX_Y3t+m zX@tA`?Fj45L%ib4tD6zTpe6?~t`1*)fztkd`h7W`FN*i`y=%<>KW-TMGMmlI@_bd6 z*Q+u+otH|Y$Uxx5g{TR|I5n{WUPGZWXED34Z#U7MFdKR02|kVM)U3O;_TRsUkHwH; zG04+bvoo`zwLna0N{VrEFCSEd)lF6aMo44S^LXtpIgB=rh?q`IqX~g_@#$R{4KO?! zB!Of$QBzxi=5O6c+=YgbjxQP@Bw=c+#@oJQMqmOu-@mQsA&!_6iI^4A$YdHYCeI_U zR%Bu(Vip6Qh#0R~@@l-bd)^fVW?}+jt6r?m;s+Jt_R-Ywj5M~18%Them}qfwR2(h` z;2D{K*5E?}YfeS4yO-EZV>K_Mm)XYRs%SN41QCH8uP#;twKU8B00030|E$)+bN~PV e21!IgR09Aa0xzio%lni70000dpH{{R0Wig=KUqWDG8dec6^fYWKch=n(qd6PVozR8o{ z>j3pe`(k>uWZ?!3MxCzo27MuOFN1ghnt%TzseZoeOu9>iJH8sZ-~p)DqCYtt&$5iy z5`2ePrE&ng!fVsvL^iWn0I>-WeCm0U1E5HAv)hu7u&P_I3BN&Yzg>_Vc>tPib^-vIDo}`TwzThX_{ysIeS&eYUF|guo@7~ zHk5${4`p73n#lvufM_;xH`$ Date: Sat, 19 Sep 2026 17:30:25 +0900 Subject: [PATCH 08/44] =?UTF-8?q?refactor:=20=E3=82=84=E3=81=A3=E3=81=B1?= =?UTF-8?q?=E3=82=84=E3=82=8A=E3=81=A5=E3=82=89=E3=81=84=E3=81=8B=E3=82=89?= =?UTF-8?q?=E8=87=AA=E5=89=8D=E3=81=AE=E3=83=AC=E3=82=B7=E3=83=94=E3=83=93?= =?UTF-8?q?=E3=83=AB=E3=83=80=E3=83=BC=E4=BD=BF=E3=81=86=E3=82=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hiiragi283/ragium/data/RagiumDataGen.kt | 2 +- .../recipe/RagiumVanillaRecipeProvider.kt | 721 +++++++----------- .../recipes/brewing/lingering_bottle.json | 32 - .../recipes/brewing/splash_bottle.json | 32 - .../building_blocks/black_steel_block.json | 32 - .../building_blocks/charcoal_block.json | 32 - .../building_blocks/coal_coke_block.json | 32 - .../recipes/building_blocks/echo_block.json | 32 - .../building_blocks/pitch_coke_block.json | 32 - .../prismarine_shard_from_bricks.json | 32 - .../building_blocks/sooty_iron_block.json | 32 - .../building_blocks/void_metal_block.json | 32 - .../decorations/arcane_machine_casing.json | 32 - .../decorations/bio_machine_casing.json | 32 - .../recipes/decorations/candle.json | 43 -- .../decorations/chemical_machine_casing.json | 32 - .../electronics_machine_casing.json | 32 - .../decorations/heat_machine_casing.json | 32 - .../recipes/decorations/machine_casing.json | 32 - .../mechanical_machine_casing.json | 32 - .../recipes/misc/alloy_smelter.json | 32 - .../advancement/recipes/misc/assembler.json | 32 - .../recipes/misc/bamboo_charcoal.json | 32 - .../recipes/misc/black_dye_bucket.json | 32 - .../misc/black_steel_ingot_from_block.json | 32 - .../misc/black_steel_ingot_from_nugget.json | 32 - .../misc/black_steel_nugget_from_ingot.json | 32 - .../advancement/recipes/misc/blaze_rod.json | 54 -- .../recipes/misc/blue_dye_bucket.json | 32 - .../advancement/recipes/misc/breeze_rod.json | 54 -- .../advancement/recipes/misc/brewery.json | 32 - .../recipes/misc/brown_dye_bucket.json | 32 - .../recipes/misc/charcoal_from_block.json | 32 - .../recipes/misc/charcoal_from_tiny.json | 32 - .../recipes/misc/chemical_bath.json | 32 - .../recipes/misc/coal_coke_from_block.json | 32 - .../recipes/misc/coal_coke_from_tiny.json | 32 - .../recipes/misc/coal_from_tiny.json | 32 - .../advancement/recipes/misc/compressor.json | 32 - .../advancement/recipes/misc/copper_gear.json | 32 - .../misc/copper_ingot_from_blasting_dust.json | 32 - .../misc/copper_ingot_from_smelting_dust.json | 32 - .../advancement/recipes/misc/crusher.json | 32 - .../recipes/misc/cutting_machine.json | 32 - .../recipes/misc/cyan_dye_bucket.json | 32 - .../recipes/misc/diamond_gear.json | 32 - .../recipes/misc/echo_shard_from_block.json | 32 - .../recipes/misc/emerald_gear.json | 32 - .../advancement/recipes/misc/freezer.json | 32 - .../advancement/recipes/misc/gold_gear.json | 32 - .../misc/gold_ingot_from_blasting_dust.json | 32 - .../misc/gold_ingot_from_smelting_dust.json | 32 - .../recipes/misc/gray_dye_bucket.json | 32 - .../recipes/misc/green_dye_bucket.json | 32 - .../advancement/recipes/misc/gunpowder.json | 43 -- .../advancement/recipes/misc/iron_gear.json | 32 - .../misc/iron_ingot_from_blasting_dust.json | 32 - .../misc/iron_ingot_from_smelting_dust.json | 32 - .../recipes/misc/light_blue_dye_bucket.json | 32 - .../recipes/misc/light_gray_dye_bucket.json | 32 - .../recipes/misc/lime_dye_bucket.json | 32 - .../recipes/misc/magenta_dye_bucket.json | 32 - .../misc/mechanical_machine_parts.json | 32 - .../advancement/recipes/misc/melter.json | 32 - .../recipes/misc/netherite_gear_smithing.json | 32 - .../netherite_ingot_from_blasting_dust.json | 32 - .../misc/netherite_ingot_from_nugget.json | 32 - .../netherite_ingot_from_smelting_dust.json | 32 - .../misc/netherite_nugget_from_ingot.json | 32 - .../recipes/misc/orange_dye_bucket.json | 32 - .../recipes/misc/particle_board.json | 32 - .../recipes/misc/pink_dye_bucket.json | 32 - .../recipes/misc/pitch_coke_from_block.json | 32 - .../recipes/misc/pitch_coke_from_tiny.json | 32 - .../recipes/misc/purple_dye_bucket.json | 32 - .../recipes/misc/red_dye_bucket.json | 32 - .../advancement/recipes/misc/smelter.json | 32 - .../recipes/misc/sooty_iron_ingot.json | 43 -- .../misc/sooty_iron_ingot_from_block.json | 32 - .../misc/sooty_iron_ingot_from_coke.json | 43 -- .../misc/sooty_iron_ingot_from_nugget.json | 32 - .../misc/sooty_iron_nugget_from_ingot.json | 32 - .../recipes/misc/synthetic_feather.json | 32 - .../recipes/misc/synthetic_fiber.json | 32 - .../recipes/misc/synthetic_leather.json | 32 - .../recipes/misc/tiny_charcoal.json | 32 - .../advancement/recipes/misc/tiny_coal.json | 32 - .../recipes/misc/tiny_coal_coke.json | 32 - .../recipes/misc/tiny_pitch_coke.json | 32 - .../misc/void_metal_ingot_from_block.json | 32 - .../misc/void_metal_ingot_from_nugget.json | 32 - .../misc/void_metal_nugget_from_ingot.json | 32 - .../recipes/misc/white_dye_bucket.json | 32 - .../advancement/recipes/misc/wood_gear.json | 32 - .../recipes/misc/yellow_dye_bucket.json | 32 - .../recipes/tools/sooty_iron_axe.json | 32 - .../recipes/tools/sooty_iron_hoe.json | 32 - .../recipes/tools/sooty_iron_pickaxe.json | 32 - .../recipes/tools/sooty_iron_shovel.json | 32 - .../recipes/tools/sooty_iron_sword.json | 32 - .../copper_ingot_from_dust.json} | 0 .../gold_ingot_from_dust.json} | 0 .../iron_ingot_from_dust.json} | 0 .../netherite_ingot_from_dust.json} | 0 .../recipe/{ => shaped}/alloy_smelter.json | 0 .../ragium/recipe/{ => shaped}/assembler.json | 0 .../{ => shaped}/black_steel_block.json | 0 .../black_steel_ingot_from_nugget.json | 0 .../ragium/recipe/{ => shaped}/blaze_rod.json | 1 - .../recipe/{ => shaped}/breeze_rod.json | 1 - .../ragium/recipe/{ => shaped}/brewery.json | 0 .../ragium/recipe/{ => shaped}/candle.json | 0 .../recipe/{ => shaped}/charcoal_block.json | 0 .../{ => shaped}/charcoal_from_tiny.json | 0 .../recipe/{ => shaped}/chemical_bath.json | 0 .../recipe/{ => shaped}/coal_coke_block.json | 0 .../{ => shaped}/coal_coke_from_tiny.json | 0 .../recipe/{ => shaped}/coal_from_tiny.json | 0 .../recipe/{ => shaped}/compressor.json | 0 .../recipe/{ => shaped}/copper_gear.json | 1 - .../ragium/recipe/{ => shaped}/crusher.json | 0 .../recipe/{ => shaped}/cutting_machine.json | 0 .../recipe/{ => shaped}/diamond_gear.json | 1 - .../recipe/{ => shaped}/echo_block.json | 0 .../recipe/{ => shaped}/emerald_gear.json | 1 - .../ragium/recipe/{ => shaped}/freezer.json | 0 .../ragium/recipe/{ => shaped}/gold_gear.json | 1 - .../ragium/recipe/{ => shaped}/iron_gear.json | 1 - .../recipe/{ => shaped}/machine_casing.json | 0 .../mechanical_machine_parts.json | 0 .../ragium/recipe/{ => shaped}/melter.json | 0 .../netherite_ingot_from_nugget.json | 0 .../recipe/{ => shaped}/particle_board.json | 0 .../recipe/{ => shaped}/pitch_coke_block.json | 0 .../{ => shaped}/pitch_coke_from_tiny.json | 0 .../ragium/recipe/{ => shaped}/smelter.json | 0 .../recipe/{ => shaped}/sooty_iron_axe.json | 0 .../recipe/{ => shaped}/sooty_iron_block.json | 0 .../recipe/{ => shaped}/sooty_iron_hoe.json | 0 .../recipe/{ => shaped}/sooty_iron_ingot.json | 8 +- .../sooty_iron_ingot_from_coke.json | 8 +- .../sooty_iron_ingot_from_nugget.json | 0 .../{ => shaped}/sooty_iron_pickaxe.json | 0 .../{ => shaped}/sooty_iron_shovel.json | 0 .../recipe/{ => shaped}/sooty_iron_sword.json | 0 .../recipe/{ => shaped}/void_metal_block.json | 0 .../void_metal_ingot_from_nugget.json | 0 .../ragium/recipe/{ => shaped}/wood_gear.json | 1 - .../{ => shapeless}/black_dye_bucket.json | 0 .../black_steel_ingot_from_block.json | 0 .../black_steel_nugget_from_ingot.json | 0 .../{ => shapeless}/blue_dye_bucket.json | 0 .../{ => shapeless}/brown_dye_bucket.json | 0 .../{ => shapeless}/charcoal_from_block.json | 0 .../{ => shapeless}/coal_coke_from_block.json | 0 .../{ => shapeless}/cyan_dye_bucket.json | 0 .../echo_shard_from_block.json | 0 .../{ => shapeless}/gray_dye_bucket.json | 0 .../{ => shapeless}/green_dye_bucket.json | 0 .../recipe/{ => shapeless}/gunpowder.json | 9 +- .../light_blue_dye_bucket.json | 0 .../light_gray_dye_bucket.json | 0 .../{ => shapeless}/lime_dye_bucket.json | 0 .../{ => shapeless}/lingering_bottle.json | 0 .../{ => shapeless}/magenta_dye_bucket.json | 0 .../netherite_nugget_from_ingot.json | 0 .../{ => shapeless}/orange_dye_bucket.json | 0 .../{ => shapeless}/pink_dye_bucket.json | 0 .../pitch_coke_from_block.json | 0 .../prismarine_shard_from_bricks.json | 0 .../{ => shapeless}/purple_dye_bucket.json | 0 .../{ => shapeless}/red_dye_bucket.json | 0 .../sooty_iron_ingot_from_block.json | 0 .../sooty_iron_nugget_from_ingot.json | 0 .../recipe/{ => shapeless}/splash_bottle.json | 0 .../recipe/{ => shapeless}/tiny_charcoal.json | 0 .../recipe/{ => shapeless}/tiny_coal.json | 0 .../{ => shapeless}/tiny_coal_coke.json | 0 .../{ => shapeless}/tiny_pitch_coke.json | 0 .../void_metal_ingot_from_block.json | 0 .../void_metal_nugget_from_ingot.json | 0 .../{ => shapeless}/white_dye_bucket.json | 0 .../{ => shapeless}/yellow_dye_bucket.json | 0 .../{ => smelting}/bamboo_charcoal.json | 0 .../copper_ingot_from_dust.json} | 0 .../gold_ingot_from_dust.json} | 0 .../iron_ingot_from_dust.json} | 0 .../netherite_ingot_from_dust.json} | 0 .../netherite_gear.json} | 0 .../arcane_machine_casing.json | 0 .../bio_machine_casing.json | 0 .../chemical_machine_casing.json | 0 .../electronics_machine_casing.json | 0 .../heat_machine_casing.json | 0 .../mechanical_machine_casing.json | 0 .../{ => stonecutting}/synthetic_feather.json | 0 .../{ => stonecutting}/synthetic_fiber.json | 0 .../{ => stonecutting}/synthetic_leather.json | 0 src/lib/kotlin/hiiragi283/lib/HTConstants.kt | 9 + .../lib/data/ConditionalExporter.kt | 6 +- .../lib/data/ExporterDataProvider.kt | 1 + .../data/advancement/HTAdvancementBuilder.kt | 4 +- .../data/recipe/builder/HTRecipeBuilder.kt | 3 +- .../builder/vanilla/HTCookingRecipeBuilder.kt | 120 +++ .../vanilla/HTCraftingRecipeBuilder.kt | 20 + .../builder/vanilla/HTShapedRecipeBuilder.kt | 171 +++++ .../vanilla/HTShapelessRecipeBuilder.kt | 52 ++ .../vanilla/HTSingleItemRecipeBuilder.kt | 58 ++ .../vanilla/HTSmithingRecipeBuilder.kt | 67 ++ .../builder/vanilla/HTVanillaRecipeBuilder.kt | 54 ++ .../ingredient/HTItemIngredientBuilder.kt | 30 +- .../recipe/ingredient/IngredientBuilder.kt | 61 ++ 212 files changed, 916 insertions(+), 3720 deletions(-) delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/brewing/lingering_bottle.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/brewing/splash_bottle.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/building_blocks/black_steel_block.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/building_blocks/charcoal_block.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/building_blocks/coal_coke_block.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/building_blocks/echo_block.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/building_blocks/pitch_coke_block.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/building_blocks/prismarine_shard_from_bricks.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/building_blocks/sooty_iron_block.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/building_blocks/void_metal_block.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/decorations/arcane_machine_casing.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/decorations/bio_machine_casing.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/decorations/candle.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/decorations/chemical_machine_casing.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/decorations/electronics_machine_casing.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/decorations/heat_machine_casing.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/decorations/machine_casing.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/decorations/mechanical_machine_casing.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/alloy_smelter.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/assembler.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/bamboo_charcoal.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/black_dye_bucket.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/black_steel_ingot_from_block.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/black_steel_ingot_from_nugget.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/black_steel_nugget_from_ingot.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/blaze_rod.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/blue_dye_bucket.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/breeze_rod.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/brewery.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/brown_dye_bucket.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/charcoal_from_block.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/charcoal_from_tiny.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/chemical_bath.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/coal_coke_from_block.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/coal_coke_from_tiny.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/coal_from_tiny.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/compressor.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/copper_gear.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/copper_ingot_from_blasting_dust.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/copper_ingot_from_smelting_dust.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/crusher.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/cutting_machine.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/cyan_dye_bucket.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/diamond_gear.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/echo_shard_from_block.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/emerald_gear.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/freezer.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/gold_gear.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/gold_ingot_from_blasting_dust.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/gold_ingot_from_smelting_dust.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/gray_dye_bucket.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/green_dye_bucket.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/gunpowder.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/iron_gear.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/iron_ingot_from_blasting_dust.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/iron_ingot_from_smelting_dust.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/light_blue_dye_bucket.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/light_gray_dye_bucket.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/lime_dye_bucket.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/magenta_dye_bucket.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/mechanical_machine_parts.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/melter.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/netherite_gear_smithing.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/netherite_ingot_from_blasting_dust.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/netherite_ingot_from_nugget.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/netherite_ingot_from_smelting_dust.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/netherite_nugget_from_ingot.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/orange_dye_bucket.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/particle_board.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/pink_dye_bucket.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/pitch_coke_from_block.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/pitch_coke_from_tiny.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/purple_dye_bucket.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/red_dye_bucket.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/smelter.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/sooty_iron_ingot.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/sooty_iron_ingot_from_block.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/sooty_iron_ingot_from_coke.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/sooty_iron_ingot_from_nugget.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/sooty_iron_nugget_from_ingot.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/synthetic_feather.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/synthetic_fiber.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/synthetic_leather.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/tiny_charcoal.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/tiny_coal.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/tiny_coal_coke.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/tiny_pitch_coke.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/void_metal_ingot_from_block.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/void_metal_ingot_from_nugget.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/void_metal_nugget_from_ingot.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/white_dye_bucket.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/wood_gear.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/misc/yellow_dye_bucket.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/tools/sooty_iron_axe.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/tools/sooty_iron_hoe.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/tools/sooty_iron_pickaxe.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/tools/sooty_iron_shovel.json delete mode 100644 src/generated/resources/data/ragium/advancement/recipes/tools/sooty_iron_sword.json rename src/generated/resources/data/ragium/recipe/{copper_ingot_from_blasting_dust.json => blasting/copper_ingot_from_dust.json} (100%) rename src/generated/resources/data/ragium/recipe/{gold_ingot_from_blasting_dust.json => blasting/gold_ingot_from_dust.json} (100%) rename src/generated/resources/data/ragium/recipe/{iron_ingot_from_blasting_dust.json => blasting/iron_ingot_from_dust.json} (100%) rename src/generated/resources/data/ragium/recipe/{netherite_ingot_from_blasting_dust.json => blasting/netherite_ingot_from_dust.json} (100%) rename src/generated/resources/data/ragium/recipe/{ => shaped}/alloy_smelter.json (100%) rename src/generated/resources/data/ragium/recipe/{ => shaped}/assembler.json (100%) rename src/generated/resources/data/ragium/recipe/{ => shaped}/black_steel_block.json (100%) rename src/generated/resources/data/ragium/recipe/{ => shaped}/black_steel_ingot_from_nugget.json (100%) rename src/generated/resources/data/ragium/recipe/{ => shaped}/blaze_rod.json (91%) rename src/generated/resources/data/ragium/recipe/{ => shaped}/breeze_rod.json (91%) rename src/generated/resources/data/ragium/recipe/{ => shaped}/brewery.json (100%) rename src/generated/resources/data/ragium/recipe/{ => shaped}/candle.json (100%) rename src/generated/resources/data/ragium/recipe/{ => shaped}/charcoal_block.json (100%) rename src/generated/resources/data/ragium/recipe/{ => shaped}/charcoal_from_tiny.json (100%) rename src/generated/resources/data/ragium/recipe/{ => shaped}/chemical_bath.json (100%) rename src/generated/resources/data/ragium/recipe/{ => shaped}/coal_coke_block.json (100%) rename src/generated/resources/data/ragium/recipe/{ => shaped}/coal_coke_from_tiny.json (100%) rename src/generated/resources/data/ragium/recipe/{ => shaped}/coal_from_tiny.json (100%) rename src/generated/resources/data/ragium/recipe/{ => shaped}/compressor.json (100%) rename src/generated/resources/data/ragium/recipe/{ => shaped}/copper_gear.json (90%) rename src/generated/resources/data/ragium/recipe/{ => shaped}/crusher.json (100%) rename src/generated/resources/data/ragium/recipe/{ => shaped}/cutting_machine.json (100%) rename src/generated/resources/data/ragium/recipe/{ => shaped}/diamond_gear.json (89%) rename src/generated/resources/data/ragium/recipe/{ => shaped}/echo_block.json (100%) rename src/generated/resources/data/ragium/recipe/{ => shaped}/emerald_gear.json (89%) rename src/generated/resources/data/ragium/recipe/{ => shaped}/freezer.json (100%) rename src/generated/resources/data/ragium/recipe/{ => shaped}/gold_gear.json (90%) rename src/generated/resources/data/ragium/recipe/{ => shaped}/iron_gear.json (90%) rename src/generated/resources/data/ragium/recipe/{ => shaped}/machine_casing.json (100%) rename src/generated/resources/data/ragium/recipe/{ => shaped}/mechanical_machine_parts.json (100%) rename src/generated/resources/data/ragium/recipe/{ => shaped}/melter.json (100%) rename src/generated/resources/data/ragium/recipe/{ => shaped}/netherite_ingot_from_nugget.json (100%) rename src/generated/resources/data/ragium/recipe/{ => shaped}/particle_board.json (100%) rename src/generated/resources/data/ragium/recipe/{ => shaped}/pitch_coke_block.json (100%) rename src/generated/resources/data/ragium/recipe/{ => shaped}/pitch_coke_from_tiny.json (100%) rename src/generated/resources/data/ragium/recipe/{ => shaped}/smelter.json (100%) rename src/generated/resources/data/ragium/recipe/{ => shaped}/sooty_iron_axe.json (100%) rename src/generated/resources/data/ragium/recipe/{ => shaped}/sooty_iron_block.json (100%) rename src/generated/resources/data/ragium/recipe/{ => shaped}/sooty_iron_hoe.json (100%) rename src/generated/resources/data/ragium/recipe/{ => shaped}/sooty_iron_ingot.json (68%) rename src/generated/resources/data/ragium/recipe/{ => shaped}/sooty_iron_ingot_from_coke.json (66%) rename src/generated/resources/data/ragium/recipe/{ => shaped}/sooty_iron_ingot_from_nugget.json (100%) rename src/generated/resources/data/ragium/recipe/{ => shaped}/sooty_iron_pickaxe.json (100%) rename src/generated/resources/data/ragium/recipe/{ => shaped}/sooty_iron_shovel.json (100%) rename src/generated/resources/data/ragium/recipe/{ => shaped}/sooty_iron_sword.json (100%) rename src/generated/resources/data/ragium/recipe/{ => shaped}/void_metal_block.json (100%) rename src/generated/resources/data/ragium/recipe/{ => shaped}/void_metal_ingot_from_nugget.json (100%) rename src/generated/resources/data/ragium/recipe/{ => shaped}/wood_gear.json (91%) rename src/generated/resources/data/ragium/recipe/{ => shapeless}/black_dye_bucket.json (100%) rename src/generated/resources/data/ragium/recipe/{ => shapeless}/black_steel_ingot_from_block.json (100%) rename src/generated/resources/data/ragium/recipe/{ => shapeless}/black_steel_nugget_from_ingot.json (100%) rename src/generated/resources/data/ragium/recipe/{ => shapeless}/blue_dye_bucket.json (100%) rename src/generated/resources/data/ragium/recipe/{ => shapeless}/brown_dye_bucket.json (100%) rename src/generated/resources/data/ragium/recipe/{ => shapeless}/charcoal_from_block.json (100%) rename src/generated/resources/data/ragium/recipe/{ => shapeless}/coal_coke_from_block.json (100%) rename src/generated/resources/data/ragium/recipe/{ => shapeless}/cyan_dye_bucket.json (100%) rename src/generated/resources/data/ragium/recipe/{ => shapeless}/echo_shard_from_block.json (100%) rename src/generated/resources/data/ragium/recipe/{ => shapeless}/gray_dye_bucket.json (100%) rename src/generated/resources/data/ragium/recipe/{ => shapeless}/green_dye_bucket.json (100%) rename src/generated/resources/data/ragium/recipe/{ => shapeless}/gunpowder.json (59%) rename src/generated/resources/data/ragium/recipe/{ => shapeless}/light_blue_dye_bucket.json (100%) rename src/generated/resources/data/ragium/recipe/{ => shapeless}/light_gray_dye_bucket.json (100%) rename src/generated/resources/data/ragium/recipe/{ => shapeless}/lime_dye_bucket.json (100%) rename src/generated/resources/data/ragium/recipe/{ => shapeless}/lingering_bottle.json (100%) rename src/generated/resources/data/ragium/recipe/{ => shapeless}/magenta_dye_bucket.json (100%) rename src/generated/resources/data/ragium/recipe/{ => shapeless}/netherite_nugget_from_ingot.json (100%) rename src/generated/resources/data/ragium/recipe/{ => shapeless}/orange_dye_bucket.json (100%) rename src/generated/resources/data/ragium/recipe/{ => shapeless}/pink_dye_bucket.json (100%) rename src/generated/resources/data/ragium/recipe/{ => shapeless}/pitch_coke_from_block.json (100%) rename src/generated/resources/data/ragium/recipe/{ => shapeless}/prismarine_shard_from_bricks.json (100%) rename src/generated/resources/data/ragium/recipe/{ => shapeless}/purple_dye_bucket.json (100%) rename src/generated/resources/data/ragium/recipe/{ => shapeless}/red_dye_bucket.json (100%) rename src/generated/resources/data/ragium/recipe/{ => shapeless}/sooty_iron_ingot_from_block.json (100%) rename src/generated/resources/data/ragium/recipe/{ => shapeless}/sooty_iron_nugget_from_ingot.json (100%) rename src/generated/resources/data/ragium/recipe/{ => shapeless}/splash_bottle.json (100%) rename src/generated/resources/data/ragium/recipe/{ => shapeless}/tiny_charcoal.json (100%) rename src/generated/resources/data/ragium/recipe/{ => shapeless}/tiny_coal.json (100%) rename src/generated/resources/data/ragium/recipe/{ => shapeless}/tiny_coal_coke.json (100%) rename src/generated/resources/data/ragium/recipe/{ => shapeless}/tiny_pitch_coke.json (100%) rename src/generated/resources/data/ragium/recipe/{ => shapeless}/void_metal_ingot_from_block.json (100%) rename src/generated/resources/data/ragium/recipe/{ => shapeless}/void_metal_nugget_from_ingot.json (100%) rename src/generated/resources/data/ragium/recipe/{ => shapeless}/white_dye_bucket.json (100%) rename src/generated/resources/data/ragium/recipe/{ => shapeless}/yellow_dye_bucket.json (100%) rename src/generated/resources/data/ragium/recipe/{ => smelting}/bamboo_charcoal.json (100%) rename src/generated/resources/data/ragium/recipe/{copper_ingot_from_smelting_dust.json => smelting/copper_ingot_from_dust.json} (100%) rename src/generated/resources/data/ragium/recipe/{gold_ingot_from_smelting_dust.json => smelting/gold_ingot_from_dust.json} (100%) rename src/generated/resources/data/ragium/recipe/{iron_ingot_from_smelting_dust.json => smelting/iron_ingot_from_dust.json} (100%) rename src/generated/resources/data/ragium/recipe/{netherite_ingot_from_smelting_dust.json => smelting/netherite_ingot_from_dust.json} (100%) rename src/generated/resources/data/ragium/recipe/{netherite_gear_smithing.json => smithing/netherite_gear.json} (100%) rename src/generated/resources/data/ragium/recipe/{ => stonecutting}/arcane_machine_casing.json (100%) rename src/generated/resources/data/ragium/recipe/{ => stonecutting}/bio_machine_casing.json (100%) rename src/generated/resources/data/ragium/recipe/{ => stonecutting}/chemical_machine_casing.json (100%) rename src/generated/resources/data/ragium/recipe/{ => stonecutting}/electronics_machine_casing.json (100%) rename src/generated/resources/data/ragium/recipe/{ => stonecutting}/heat_machine_casing.json (100%) rename src/generated/resources/data/ragium/recipe/{ => stonecutting}/mechanical_machine_casing.json (100%) rename src/generated/resources/data/ragium/recipe/{ => stonecutting}/synthetic_feather.json (100%) rename src/generated/resources/data/ragium/recipe/{ => stonecutting}/synthetic_fiber.json (100%) rename src/generated/resources/data/ragium/recipe/{ => stonecutting}/synthetic_leather.json (100%) create mode 100644 src/lib/kotlin/hiiragi283/lib/data/recipe/builder/vanilla/HTCookingRecipeBuilder.kt create mode 100644 src/lib/kotlin/hiiragi283/lib/data/recipe/builder/vanilla/HTCraftingRecipeBuilder.kt create mode 100644 src/lib/kotlin/hiiragi283/lib/data/recipe/builder/vanilla/HTShapedRecipeBuilder.kt create mode 100644 src/lib/kotlin/hiiragi283/lib/data/recipe/builder/vanilla/HTShapelessRecipeBuilder.kt create mode 100644 src/lib/kotlin/hiiragi283/lib/data/recipe/builder/vanilla/HTSingleItemRecipeBuilder.kt create mode 100644 src/lib/kotlin/hiiragi283/lib/data/recipe/builder/vanilla/HTSmithingRecipeBuilder.kt create mode 100644 src/lib/kotlin/hiiragi283/lib/data/recipe/builder/vanilla/HTVanillaRecipeBuilder.kt create mode 100644 src/lib/kotlin/hiiragi283/lib/data/recipe/ingredient/IngredientBuilder.kt diff --git a/src/data/kotlin/hiiragi283/ragium/data/RagiumDataGen.kt b/src/data/kotlin/hiiragi283/ragium/data/RagiumDataGen.kt index 179727f72c..5f10634f39 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/RagiumDataGen.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/RagiumDataGen.kt @@ -50,7 +50,7 @@ data object RagiumDataGen { ) event.createProvider(::RagiumGlobalLootModifierProvider) - event.createProvider(RagiumVanillaRecipeProvider::Runner) + event.createProvider(::RagiumVanillaRecipeProvider) event.createProvider(::RagiumCommonRecipeProvider) event.createProvider(::RagiumMechanicalRecipeProvider) diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt index e5b7e68bbb..a3777b9581 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt @@ -1,12 +1,17 @@ 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.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.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 +19,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,200 +27,144 @@ 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() { machine() material() // Prismarine Bricks -> 9x Prismarine Shard - shapeless(RecipeCategory.BUILDING_BLOCKS, Items.PRISMARINE_SHARD, 9) - .requires(Items.PRISMARINE_BRICKS) - .group(getItemName(Items.PRISMARINE_SHARD)) - .unlockedBy(Items.PRISMARINE_BRICKS) - .saveSuffixed(output, "_from_bricks") + HTShapelessRecipeBuilder.create { + 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 - 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(CommonTagPrefixes.DUST, RagiumMaterial.Mineral.SULFUR) - .unlockedBy(CommonTagPrefixes.DUST, RagiumMaterial.Mineral.NITER) - .save(output) + HTShapelessRecipeBuilder.create { + 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 - 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(CommonTagPrefixes.DUST, RagiumMaterial.Gem.AMETHYST) - .unlockedBy(Items.MAGMA_BLOCK) - .unlockedBy(CommonTagPrefixes.DUST, RagiumMaterial.Mineral.SULFUR) - .save(output) + HTShapedRecipeBuilder.create { + 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 - 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(CommonTagPrefixes.DUST, RagiumMaterial.Gem.AMETHYST) - .unlockedBy(Items.ICE) - .unlockedBy(CommonTagPrefixes.DUST, RagiumMaterial.Mineral.NITER) - .save(output) + HTShapedRecipeBuilder.create { + 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 - shaped(RecipeCategory.DECORATIONS, Items.CANDLE) - .pattern("A") - .pattern("B") - .define('A', Tags.Items.STRINGS) - .define('B', RagiumItems.BEESWAX) - .unlockedBy(Tags.Items.STRINGS) - .unlockedBy(RagiumItems.BEESWAX) - .save(output) + HTShapedRecipeBuilder.create { + +"A" + +"B" + define('A') { +holderSet(Tags.Items.STRINGS) } + define('B') { items { +RagiumItems.BEESWAX } } + result { +Items.CANDLE } + category = RecipeCategory.DECORATIONS + }.save(exporter) // 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) + HTCookingRecipeBuilder.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(HTCommonTags.Items.STICKY_BALLS) - .save(output) + HTShapedRecipeBuilder.create { + 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 { + HTSingleItemRecipeBuilder.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(Tags.Items.GUNPOWDERS) - .save(output) + HTShapelessRecipeBuilder.create { + 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(Items.DRAGON_BREATH) - .save(output) + HTShapelessRecipeBuilder.create { + 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(color.tag) - .save(output) + HTShapelessRecipeBuilder.create { + 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(material.repairItems) - .save(output) + HTShapedRecipeBuilder.create { + 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")) @@ -228,80 +178,51 @@ class RagiumVanillaRecipeProvider(registries: HolderLookup.Provider, output: Rec 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(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.SOOTY_IRON) - .save(output) - - mechanical(RagiumBlocks.ASSEMBLER) { - define('D', Items.CRAFTER) - unlockedBy(Items.CRAFTER) - } - mechanical(RagiumBlocks.CRUSHER) { - define('D', Items.GRINDSTONE) - unlockedBy(Items.GRINDSTONE) - } - mechanical(RagiumBlocks.COMPRESSOR) { - define('D', ItemTags.ANVIL) - unlockedBy(ItemTags.ANVIL) - } - mechanical(RagiumBlocks.CUTTING_MACHINE) { - define('D', Items.STONECUTTER) - unlockedBy(Items.STONECUTTER) - } + HTShapedRecipeBuilder.create { + 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(Items.BLAST_FURNACE) - } - heat(RagiumBlocks.FREEZER) { - define('D', Tags.Items.BUCKETS_WATER) - unlockedBy(Tags.Items.BUCKETS_WATER) - } - heat(RagiumBlocks.MELTER) { - define('D', Tags.Items.BUCKETS_LAVA) - unlockedBy(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(Items.FURNACE) - } + heat(RagiumBlocks.SMELTER) { items { +Items.FURNACE } } // Chemical - chemical(RagiumBlocks.CHEMICAL_BATH) { - define('D', Items.CAULDRON) - unlockedBy(Items.CAULDRON) - } + chemical(RagiumBlocks.CHEMICAL_BATH) { items { +Items.CAULDRON } } // Bio - bio(RagiumBlocks.BREWERY) { - define('D', Items.BREWING_STAND) - unlockedBy(Items.BREWING_STAND) - } + bio(RagiumBlocks.BREWERY) { items { +Items.BREWING_STAND } } // Electronics // Arcane // 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(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.SOOTY_IRON) - .save(output) + HTShapedRecipeBuilder.create { + +"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) + HTSingleItemRecipeBuilder.stonecutting { + ingredient { items { +RagiumBlocks.MACHINE_CASING } } + result { +block } + }.save(exporter) } } @@ -310,20 +231,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) + HTShapedRecipeBuilder.create { + +"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, @@ -333,7 +255,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, @@ -343,7 +265,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, @@ -353,7 +275,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, @@ -363,10 +285,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, @@ -376,7 +295,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, @@ -390,26 +309,28 @@ class RagiumVanillaRecipeProvider(registries: HolderLookup.Provider, output: Rec private fun material() { // XX <-> Storage Block - baseToBlock(RagiumMaterial.Gem.ECHO, CommonTagPrefixes.GEM, Items.ECHO_SHARD, size = StorageBlockSize.FOUR) + baseToBlock( + RagiumMaterial.Gem.ECHO, + CommonTagPrefixes.GEM, + HTSimpleDeferredItem(vanillaId("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) // Ingot <-> Nugget - ingotToNugget(RagiumMaterial.Metal.NETHERITE, ingot = Items.NETHERITE_INGOT) + ingotToNugget(RagiumMaterial.Metal.NETHERITE, ingot = HTSimpleDeferredItem(vanillaId("netherite_ingot"))) 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(ItemTags.PLANKS) - .save(output) + HTShapedRecipeBuilder.create { + 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) @@ -417,18 +338,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"))) + HTSmithingRecipeBuilder.create { + 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 @@ -439,224 +355,153 @@ 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") + HTCookingRecipeBuilder.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)) + baseToBlock(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(CommonTagPrefixes.TINY, fuel) - .saveSuffixed(output, "_from_tiny") + HTShapelessRecipeBuilder.create { + ingredient { items { +base } } + result { + +tiny + count = 8 + } + group = tiny.id.path + }.save(exporter) + HTShapedRecipeBuilder.create { + 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(CommonTagPrefixes.TINY, RagiumMaterial.Fuel.COAL) - .unlockedBy(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, RagiumMaterial.Fuel.PITCH_COKE) - .define('B', ironIngot) - .group(sootyIronIngot.idOrThrow.path) - .unlockedBy(CommonTagPrefixes.TINY, RagiumMaterial.Fuel.COAL_COKE) - .unlockedBy(CommonTagPrefixes.TINY, RagiumMaterial.Fuel.PITCH_COKE) - .saveSuffixed(output, "_from_coke") + val ironIngot: HolderSet = holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.IRON) + val sootyIronIngot: HTSimpleDeferredItem = + RagiumItems.getOrThrow(HTItemPart.INGOT, RagiumMaterial.Metal.SOOTY_IRON) + HTShapedRecipeBuilder.create { + hollow8() + define('A') { + +materialTags(CommonTagPrefixes.TINY, nelOf(RagiumMaterial.Fuel.COAL, RagiumMaterial.Fuel.CHARCOAL)) + } + define('B') { +ironIngot } + result { +sootyIronIngot } + group = sootyIronIngot.id.path + }.save(exporter) + HTShapedRecipeBuilder.create { + 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, basePrefix: HTTagPrefix, - base: ItemLike, - block: ItemLike? = RagiumBlocks.STORAGE_BLOCKS[material], + base: HTSimpleDeferredItem, + block: HTSimpleDeferredBlockAndItem? = RagiumBlocks.MATERIAL_BLOCKS[HTStorageBlockPart.DEFAULT, material], size: StorageBlockSize = StorageBlockSize.NINE ) { - baseToBlock( - material, - tag(basePrefix, material), - base, - getHasName(basePrefix, material) to has(basePrefix, material), - block, - size - ) + baseToBlock(material, Ingredient.of(holderSet(basePrefix, material)), base, block, size) } private fun baseToBlock( material: RagiumMaterial, basePart: HTItemPart, - block: ItemLike? = RagiumBlocks.STORAGE_BLOCKS[material], + block: HTSimpleDeferredBlockAndItem? = RagiumBlocks.MATERIAL_BLOCKS[HTStorageBlockPart.DEFAULT, material], size: StorageBlockSize = StorageBlockSize.NINE ) { - val base: ItemLike = RagiumItems.MATERIAL_ITEMS[basePart, material] ?: return + val base: HTSimpleDeferredItem = RagiumItems.MATERIAL_ITEMS[basePart, material] ?: return baseToBlock(material, basePart.tagPrefix, base, block, size) } private fun baseToBlock( material: RagiumMaterial, baseInput: Ingredient, - base: ItemLike, - criterion: Pair>, - block: ItemLike? = RagiumBlocks.STORAGE_BLOCKS[material], + base: HTSimpleDeferredItem, + block: HTSimpleDeferredBlockAndItem? = RagiumBlocks.MATERIAL_BLOCKS[HTStorageBlockPart.DEFAULT, material], size: StorageBlockSize = StorageBlockSize.NINE ) { if (block == null) return - shapeless(RecipeCategory.MISC, base, size.count) - .requires(CommonTagPrefixes.STORAGE_BLOCK, material) - .group(getItemName(base)) - .unlockedBy(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) + HTShapelessRecipeBuilder.create { + ingredient { +holderSet(CommonTagPrefixes.STORAGE_BLOCK, material) } + result { + +base + count = size.count + } + group = base.id.path + recipeId suffix "_from_block" + }.save(exporter) + HTShapedRecipeBuilder.create { + size.pattern.invoke(this) + define('A') { +baseInput } + 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 enum class StorageBlockSize(val count: Int, val pattern: HTShapedRecipeBuilder.() -> Unit) { + FOUR(4, { + +"AA" + +"AB" + }), + NINE(9, HTShapedRecipeBuilder::hollow8) } 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(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(CommonTagPrefixes.NUGGET, material) - .saveSuffixed(output, "_from_nugget") + HTShapelessRecipeBuilder.create { + ingredient { +holderSet(CommonTagPrefixes.INGOT, material) } + result { + +nugget + count = 9 + } + group = nugget.id.path + recipeId suffix "_from_ingot" + }.save(exporter) + HTShapedRecipeBuilder.create { + 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(basePrefix, material) - .save(output) + HTShapedRecipeBuilder.create { + hollow4() + define('A') { +holderSet(basePrefix, material) } + define('B') { +holderSet(CommonTagPrefixes.GEAR, RagiumMaterial.Other.WOOD) } + result { +RagiumItems.getOrThrow(HTItemPart.GEAR, material) } + }.save(exporter) } - // 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))) - } - - // ShapedRecipeBuilder - 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) - .toSortedSet(HTComparators.TAG_KEY) - .map(::tag) - .let(::CompoundIngredient) - .toVanilla() - .let { this.define(symbol, it) } - - fun ShapedRecipeBuilder.unlockedBy(item: ItemLike): ShapedRecipeBuilder = - this.unlockedBy(getHasName(item), has(item)) - - fun ShapedRecipeBuilder.unlockedBy(tagKey: TagKey): ShapedRecipeBuilder = - this.unlockedBy(getHasName(tagKey), has(tagKey)) - - fun ShapedRecipeBuilder.unlockedBy(prefix: HTTagPrefix, material: HTMaterialLike): ShapedRecipeBuilder = - this.unlockedBy(getHasName(prefix, material), has(prefix, material)) - - // ShapelessRecipeBuilder - 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) - .toSortedSet(HTComparators.TAG_KEY) - .map(::tag) - .let(::CompoundIngredient) - .toVanilla() - .let(this::requires) - - fun ShapelessRecipeBuilder.unlockedBy(item: ItemLike): ShapelessRecipeBuilder = - this.unlockedBy(getHasName(item), has(item)) - - fun ShapelessRecipeBuilder.unlockedBy(tagKey: TagKey): ShapelessRecipeBuilder = - this.unlockedBy(getHasName(tagKey), has(tagKey)) - - fun ShapelessRecipeBuilder.unlockedBy(prefix: HTTagPrefix, material: HTMaterialLike): ShapelessRecipeBuilder = - this.unlockedBy(getHasName(prefix, material), has(prefix, material)) + override fun getName(): String = "Vanilla Recipes" } 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/pitch_coke_block.json b/src/generated/resources/data/ragium/advancement/recipes/building_blocks/pitch_coke_block.json deleted file mode 100644 index d2fc831271..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/building_blocks/pitch_coke_block.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_pitch_coke": { - "conditions": { - "items": [ - { - "items": "ragium:pitch_coke" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:pitch_coke_block" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_pitch_coke" - ] - ], - "rewards": { - "recipes": [ - "ragium:pitch_coke_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/pitch_coke_from_block.json b/src/generated/resources/data/ragium/advancement/recipes/misc/pitch_coke_from_block.json deleted file mode 100644 index db2ec6cf3b..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/pitch_coke_from_block.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_storage_blocks_pitch_coke": { - "conditions": { - "items": [ - { - "items": "#c:storage_blocks/pitch_coke" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:pitch_coke_from_block" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_storage_blocks_pitch_coke" - ] - ], - "rewards": { - "recipes": [ - "ragium:pitch_coke_from_block" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/advancement/recipes/misc/pitch_coke_from_tiny.json b/src/generated/resources/data/ragium/advancement/recipes/misc/pitch_coke_from_tiny.json deleted file mode 100644 index e9fff9b7ab..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/pitch_coke_from_tiny.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "ragium:pitch_coke_from_tiny" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "has_tiny_pitch_coke": { - "conditions": { - "items": [ - { - "items": "#c:tiny/pitch_coke" - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_tiny_pitch_coke" - ] - ], - "rewards": { - "recipes": [ - "ragium:pitch_coke_from_tiny" - ] - } -} \ 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_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 500e97903b..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/sooty_iron_ingot_from_coke.json +++ /dev/null @@ -1,43 +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" - }, - "has_tiny_pitch_coke": { - "conditions": { - "items": [ - { - "items": "#c:tiny/pitch_coke" - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_tiny_coal_coke", - "has_tiny_pitch_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/tiny_pitch_coke.json b/src/generated/resources/data/ragium/advancement/recipes/misc/tiny_pitch_coke.json deleted file mode 100644 index 16b46ed61c..0000000000 --- a/src/generated/resources/data/ragium/advancement/recipes/misc/tiny_pitch_coke.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_pitch_coke": { - "conditions": { - "items": [ - { - "items": "ragium:pitch_coke" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "ragium:tiny_pitch_coke" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_pitch_coke" - ] - ], - "rewards": { - "recipes": [ - "ragium:tiny_pitch_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/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/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/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/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 100% rename from src/generated/resources/data/ragium/recipe/echo_block.json rename to src/generated/resources/data/ragium/recipe/shaped/echo_block.json 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/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/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/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/pitch_coke_block.json b/src/generated/resources/data/ragium/recipe/shaped/pitch_coke_block.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/pitch_coke_block.json rename to src/generated/resources/data/ragium/recipe/shaped/pitch_coke_block.json diff --git a/src/generated/resources/data/ragium/recipe/pitch_coke_from_tiny.json b/src/generated/resources/data/ragium/recipe/shaped/pitch_coke_from_tiny.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/pitch_coke_from_tiny.json rename to src/generated/resources/data/ragium/recipe/shaped/pitch_coke_from_tiny.json 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..8bcc967d6a 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/charcoal", + "c:tiny/coal" ] }, "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 66% 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 4c6b08ebb3..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 @@ -4,10 +4,10 @@ "group": "sooty_iron_ingot", "key": { "A": { - "neoforge:ingredient_type": "neoforge:compound", - "children": [ - "#c:tiny/coal_coke", - "#c:tiny/pitch_coke" + "neoforge:ingredient_type": "ragium:material_tags", + "tags": [ + "c:tiny/coal_coke", + "c:tiny/pitch_coke" ] }, "B": "#c:ingots/iron" 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/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/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/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/echo_shard_from_block.json b/src/generated/resources/data/ragium/recipe/shapeless/echo_shard_from_block.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/echo_shard_from_block.json rename to src/generated/resources/data/ragium/recipe/shapeless/echo_shard_from_block.json 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..4dbb8da1ce 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/charcoal", + "c:dusts/coal" ] }, "#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/pitch_coke_from_block.json b/src/generated/resources/data/ragium/recipe/shapeless/pitch_coke_from_block.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/pitch_coke_from_block.json rename to src/generated/resources/data/ragium/recipe/shapeless/pitch_coke_from_block.json 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/tiny_pitch_coke.json b/src/generated/resources/data/ragium/recipe/shapeless/tiny_pitch_coke.json similarity index 100% rename from src/generated/resources/data/ragium/recipe/tiny_pitch_coke.json rename to src/generated/resources/data/ragium/recipe/shapeless/tiny_pitch_coke.json 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/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/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/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/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/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 5de0de0a87..7b043e90bb 100644 --- a/src/lib/kotlin/hiiragi283/lib/data/ExporterDataProvider.kt +++ b/src/lib/kotlin/hiiragi283/lib/data/ExporterDataProvider.kt @@ -66,6 +66,7 @@ abstract class ExporterDataProvider( if (oldValue != null) { error("Duplicate registration for $fixedKey, new=$value, old=$oldValue") } + fixedKey } exportValues() 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/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/vanilla/HTCookingRecipeBuilder.kt b/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/vanilla/HTCookingRecipeBuilder.kt new file mode 100644 index 0000000000..5bfcb55c09 --- /dev/null +++ b/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/vanilla/HTCookingRecipeBuilder.kt @@ -0,0 +1,120 @@ +@file:OptIn(ExperimentalContracts::class) + +package hiiragi283.lib.data.recipe.builder.vanilla + +import hiiragi283.lib.HTConstants +import hiiragi283.lib.data.ConditionalExporter +import hiiragi283.lib.util.HTDelegates +import hiiragi283.lib.util.Identity +import hiiragi283.lib.util.identity +import net.minecraft.world.item.crafting.AbstractCookingRecipe +import net.minecraft.world.item.crafting.BlastingRecipe +import net.minecraft.world.item.crafting.CookingBookCategory +import net.minecraft.world.item.crafting.Recipe +import net.minecraft.world.item.crafting.SmeltingRecipe +import net.minecraft.world.item.crafting.SmokingRecipe +import kotlin.contracts.ExperimentalContracts +import kotlin.contracts.InvocationKind +import kotlin.contracts.contract + +/** + * 精錬レシピ向けの[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) { + companion object { + /** + * かまどレシピのみを生成します。 + */ + @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) } + } + } + + /** + * レシピ本のカテゴリ + */ + 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..7d161048f6 --- /dev/null +++ b/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/vanilla/HTShapedRecipeBuilder.kt @@ -0,0 +1,171 @@ +@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) { + companion object { + @JvmStatic + inline fun create(builderAction: HTShapedRecipeBuilder.() -> Unit): HTShapedRecipeBuilder { + contract { + callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) + } + return HTShapedRecipeBuilder().apply(builderAction) + } + } + + @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..25c875cb80 --- /dev/null +++ b/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/vanilla/HTShapelessRecipeBuilder.kt @@ -0,0 +1,52 @@ +@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) { + companion object { + @JvmStatic + inline fun create(builderAction: HTShapelessRecipeBuilder.() -> Unit): HTShapelessRecipeBuilder { + contract { + callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) + } + return HTShapelessRecipeBuilder().apply(builderAction) + } + } + + @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..e5d2d564c9 --- /dev/null +++ b/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/vanilla/HTSingleItemRecipeBuilder.kt @@ -0,0 +1,58 @@ +@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 net.minecraft.world.item.crafting.StonecutterRecipe +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) { + companion object { + @JvmStatic + inline fun stonecutting(builderAction: Stonecutting.() -> Unit): Stonecutting { + contract { + callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) + } + return Stonecutting().apply(builderAction) + } + } + + // Ingredient + @PublishedApi internal 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) + } + + // Stonecutting // + + /** + * 石切台レシピ向けの[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/HTSmithingRecipeBuilder.kt b/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/vanilla/HTSmithingRecipeBuilder.kt new file mode 100644 index 0000000000..6451b65dac --- /dev/null +++ b/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/vanilla/HTSmithingRecipeBuilder.kt @@ -0,0 +1,67 @@ +@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) { + companion object { + @JvmStatic + inline fun create(builderAction: HTSmithingRecipeBuilder.() -> Unit): HTSmithingRecipeBuilder { + contract { + callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) + } + return HTSmithingRecipeBuilder().apply(builderAction) + } + } + + @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..8c48a9f56a --- /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 + @PublishedApi internal 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/HTItemIngredientBuilder.kt b/src/lib/kotlin/hiiragi283/lib/data/recipe/ingredient/HTItemIngredientBuilder.kt index 47a8d3c829..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.buildItemSet(builderAction) - } - 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..0b28b66de1 --- /dev/null +++ b/src/lib/kotlin/hiiragi283/lib/data/recipe/ingredient/IngredientBuilder.kt @@ -0,0 +1,61 @@ +@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 { + /** + * @since 26.1.4 + */ + @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 + } +} From 93de8cc1b4ca4461db8622d92d66c3c39f44449c Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Sat, 19 Sep 2026 17:38:46 +0900 Subject: [PATCH 09/44] =?UTF-8?q?refactor:=20VanillaRecipeBuilders=20?= =?UTF-8?q?=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../recipe/RagiumVanillaRecipeProvider.kt | 61 ++++---- .../recipe/builder/VanillaRecipeBuilders.kt | 146 ++++++++++++++++++ .../builder/vanilla/HTCookingRecipeBuilder.kt | 75 --------- .../builder/vanilla/HTShapedRecipeBuilder.kt | 10 -- .../vanilla/HTShapelessRecipeBuilder.kt | 10 -- .../vanilla/HTSingleItemRecipeBuilder.kt | 24 +-- .../vanilla/HTSmithingRecipeBuilder.kt | 10 -- .../builder/vanilla/HTVanillaRecipeBuilder.kt | 2 +- 8 files changed, 177 insertions(+), 161 deletions(-) create mode 100644 src/lib/kotlin/hiiragi283/lib/data/recipe/builder/VanillaRecipeBuilders.kt diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt index a3777b9581..81aa837716 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt @@ -2,11 +2,8 @@ package hiiragi283.ragium.data.recipe import hiiragi283.lib.collection.nelOf import hiiragi283.lib.data.recipe.HTRecipeProvider -import hiiragi283.lib.data.recipe.builder.vanilla.HTCookingRecipeBuilder +import hiiragi283.lib.data.recipe.builder.VanillaRecipeBuilders 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.data.recipe.ingredient.IngredientBuilder import hiiragi283.lib.item.component.HTToolCollection import hiiragi283.lib.item.component.HTToolType @@ -48,7 +45,7 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut material() // Prismarine Bricks -> 9x Prismarine Shard - HTShapelessRecipeBuilder.create { + VanillaRecipeBuilders.shapeless { ingredient { items { +Items.PRISMARINE_BRICKS } } result { @@ -60,7 +57,7 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut recipeId suffix "_from_bricks" }.save(exporter) // Gunpowder - HTShapelessRecipeBuilder.create { + VanillaRecipeBuilders.shapeless { ingredient { +materialTags(CommonTagPrefixes.DUST, nelOf(RagiumMaterial.Fuel.COAL, RagiumMaterial.Fuel.CHARCOAL)) } @@ -72,7 +69,7 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut } }.save(exporter) // Blaze Rod - HTShapedRecipeBuilder.create { + VanillaRecipeBuilders.shaped { layered() define('A') { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Gem.AMETHYST) } define('B') { items { +Items.MAGMA_BLOCK } } @@ -80,7 +77,7 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut result { +Items.BLAZE_ROD } }.save(exporter) // Breeze Rod - HTShapedRecipeBuilder.create { + VanillaRecipeBuilders.shaped { layered() define('A') { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Gem.AMETHYST) } define('B') { items { +Items.ICE } } @@ -88,7 +85,7 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut result { +Items.BREEZE_ROD } }.save(exporter) // Candle - HTShapedRecipeBuilder.create { + VanillaRecipeBuilders.shaped { +"A" +"B" define('A') { +holderSet(Tags.Items.STRINGS) } @@ -98,13 +95,13 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut }.save(exporter) // Bamboo Charcoal - HTCookingRecipeBuilder.smelting { + VanillaRecipeBuilders.smelting { ingredient { items { +Items.BAMBOO } } result { +RagiumItems.BAMBOO_CHARCOAL } exp = 0.5f }.save(exporter) // Particle Board - HTShapedRecipeBuilder.create { + VanillaRecipeBuilders.shaped { hollow8() define('A') { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Other.WOOD) } define('B') { +holderSet(HTCommonTags.Items.STICKY_BALLS) } @@ -119,13 +116,13 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut RagiumItems.SYNTHETIC_FIBER, RagiumItems.SYNTHETIC_LEATHER ).forEach { - HTSingleItemRecipeBuilder.stonecutting { + VanillaRecipeBuilders.stonecutting { ingredient { +holderSet(HTCommonTags.Items.PLASTICS) } result { +it } }.save(exporter) } // Splash Bottle - HTShapelessRecipeBuilder.create { + VanillaRecipeBuilders.shapeless { ingredient { +holderSet(Tags.Items.GUNPOWDERS) } repeat(4) { ingredient { items { +Items.GLASS_BOTTLE } } } result { @@ -134,7 +131,7 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut } }.save(exporter) // Lingering Bottle - HTShapelessRecipeBuilder.create { + VanillaRecipeBuilders.shapeless { ingredient { items { +Items.DRAGON_BREATH } } repeat(4) { ingredient { items { +Items.GLASS_BOTTLE } } } result { @@ -148,7 +145,7 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut // XX Dye Bucket for (color: DyeColor in DyeColor.entries) { - HTShapelessRecipeBuilder.create { + VanillaRecipeBuilders.shapeless { ingredient { +holderSet(Tags.Items.BUCKETS_WATER) } repeat(4) { ingredient { +holderSet(color.tag) } } result { +RagiumFluids.DYES[color].bucketHolder } @@ -158,7 +155,7 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut private fun registerTools(tools: HTToolCollection, material: ToolMaterial) { fun registerTool(toolType: HTToolType, patterns: Iterable) { - HTShapedRecipeBuilder.create { + VanillaRecipeBuilders.shaped { this.pattern(patterns) define('A') { +holderSet(material.repairItems) } define('B') { +holderSet(Tags.Items.RODS_WOODEN) } @@ -178,7 +175,7 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut private fun machine() { // Mechanical - HTShapedRecipeBuilder.create { + VanillaRecipeBuilders.shaped { layered2() define('A') { +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.SOOTY_IRON) } define('B') { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Mineral.REDSTONE) } @@ -206,7 +203,7 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut // Arcane // Decoration - HTShapedRecipeBuilder.create { + VanillaRecipeBuilders.shaped { +"ABA" +"B B" +"ABA" @@ -219,7 +216,7 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut }.save(exporter) for (block: HTSimpleDeferredBlockAndItem in RagiumBlocks.MACHINE_CASINGS.values) { - HTSingleItemRecipeBuilder.stonecutting { + VanillaRecipeBuilders.stonecutting { ingredient { items { +RagiumBlocks.MACHINE_CASING } } result { +block } }.save(exporter) @@ -233,7 +230,7 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut result: HTSimpleDeferredBlockAndItem, builderAction: IngredientBuilder.() -> Unit ) { - HTShapedRecipeBuilder.create { + VanillaRecipeBuilders.shaped { +"ABA" +"BCB" +"ADA" @@ -325,7 +322,7 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut ingotToNugget(RagiumMaterial.Metal.VOID_METAL) // Gear RagiumItems.getOrThrow(HTItemPart.GEAR, RagiumMaterial.Other.WOOD).let { gear: HTSimpleDeferredItem -> - HTShapedRecipeBuilder.create { + VanillaRecipeBuilders.shaped { hollow4() define('A') { +holderSet(ItemTags.PLANKS) } define('B') { +holderSet(ItemTags.WOODEN_BUTTONS) } @@ -338,7 +335,7 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut gear(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.IRON) gear(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.GOLD) RagiumItems.MATERIAL_ITEMS[HTItemPart.GEAR, RagiumMaterial.Metal.NETHERITE]?.let { - HTSmithingRecipeBuilder.create { + VanillaRecipeBuilders.smithing { template { items { +Items.NETHERITE_UPGRADE_SMITHING_TEMPLATE } } base { +holderSet(CommonTagPrefixes.GEAR, RagiumMaterial.Gem.DIAMOND) } addition { +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.NETHERITE) } @@ -355,7 +352,7 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut RagiumMaterial.Metal.NETHERITE -> HTSimpleDeferredItem(vanillaId("netherite_ingot")) else -> RagiumItems.MATERIAL_ITEMS[HTItemPart.INGOT, metal] } ?: continue - HTCookingRecipeBuilder.smeltingAndBlasting(exporter) { + VanillaRecipeBuilders.smeltingAndBlasting(exporter) { ingredient { items { +dust } } result { +item } exp = 0.35f @@ -370,7 +367,7 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut baseToBlock(fuel, Ingredient.of(base), base) // Tiny val tiny: HTSimpleDeferredItem = RagiumItems.getOrThrow(HTItemPart.TINY, fuel) - HTShapelessRecipeBuilder.create { + VanillaRecipeBuilders.shapeless { ingredient { items { +base } } result { +tiny @@ -378,7 +375,7 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut } group = tiny.id.path }.save(exporter) - HTShapedRecipeBuilder.create { + VanillaRecipeBuilders.shaped { hollow() define('A') { +holderSet(CommonTagPrefixes.TINY, fuel) } result { +base } @@ -390,7 +387,7 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut val ironIngot: HolderSet = holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.IRON) val sootyIronIngot: HTSimpleDeferredItem = RagiumItems.getOrThrow(HTItemPart.INGOT, RagiumMaterial.Metal.SOOTY_IRON) - HTShapedRecipeBuilder.create { + VanillaRecipeBuilders.shaped { hollow8() define('A') { +materialTags(CommonTagPrefixes.TINY, nelOf(RagiumMaterial.Fuel.COAL, RagiumMaterial.Fuel.CHARCOAL)) @@ -399,7 +396,7 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut result { +sootyIronIngot } group = sootyIronIngot.id.path }.save(exporter) - HTShapedRecipeBuilder.create { + VanillaRecipeBuilders.shaped { hollow4() define('A') { +materialTags( @@ -442,7 +439,7 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut size: StorageBlockSize = StorageBlockSize.NINE ) { if (block == null) return - HTShapelessRecipeBuilder.create { + VanillaRecipeBuilders.shapeless { ingredient { +holderSet(CommonTagPrefixes.STORAGE_BLOCK, material) } result { +base @@ -451,7 +448,7 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut group = base.id.path recipeId suffix "_from_block" }.save(exporter) - HTShapedRecipeBuilder.create { + VanillaRecipeBuilders.shaped { size.pattern.invoke(this) define('A') { +baseInput } define('B') { items { +base } } @@ -475,7 +472,7 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut nugget: HTSimpleDeferredItem? = RagiumItems.MATERIAL_ITEMS[HTItemPart.NUGGET, material] ) { if (ingot == null || nugget == null) return - HTShapelessRecipeBuilder.create { + VanillaRecipeBuilders.shapeless { ingredient { +holderSet(CommonTagPrefixes.INGOT, material) } result { +nugget @@ -484,7 +481,7 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut group = nugget.id.path recipeId suffix "_from_ingot" }.save(exporter) - HTShapedRecipeBuilder.create { + VanillaRecipeBuilders.shaped { hollow8() define('A') { +holderSet(CommonTagPrefixes.NUGGET, material) } define('B') { items { +nugget } } @@ -495,7 +492,7 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut } private fun gear(basePrefix: HTTagPrefix, material: RagiumMaterial) { - HTShapedRecipeBuilder.create { + VanillaRecipeBuilders.shaped { hollow4() define('A') { +holderSet(basePrefix, material) } define('B') { +holderSet(CommonTagPrefixes.GEAR, RagiumMaterial.Other.WOOD) } 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 index 5bfcb55c09..8b843e7fb0 100644 --- a/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/vanilla/HTCookingRecipeBuilder.kt +++ b/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/vanilla/HTCookingRecipeBuilder.kt @@ -1,21 +1,9 @@ -@file:OptIn(ExperimentalContracts::class) - package hiiragi283.lib.data.recipe.builder.vanilla -import hiiragi283.lib.HTConstants -import hiiragi283.lib.data.ConditionalExporter import hiiragi283.lib.util.HTDelegates import hiiragi283.lib.util.Identity -import hiiragi283.lib.util.identity import net.minecraft.world.item.crafting.AbstractCookingRecipe -import net.minecraft.world.item.crafting.BlastingRecipe import net.minecraft.world.item.crafting.CookingBookCategory -import net.minecraft.world.item.crafting.Recipe -import net.minecraft.world.item.crafting.SmeltingRecipe -import net.minecraft.world.item.crafting.SmokingRecipe -import kotlin.contracts.ExperimentalContracts -import kotlin.contracts.InvocationKind -import kotlin.contracts.contract /** * 精錬レシピ向けの[HTVanillaRecipeBuilder]の実装クラスです。 @@ -29,69 +17,6 @@ class HTCookingRecipeBuilder( private val timeOperator: Identity, prefix: String ) : HTSingleItemRecipeBuilder(prefix) { - companion object { - /** - * かまどレシピのみを生成します。 - */ - @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) } - } - } - /** * レシピ本のカテゴリ */ 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 index 7d161048f6..c7a5f479b0 100644 --- a/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/vanilla/HTShapedRecipeBuilder.kt +++ b/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/vanilla/HTShapedRecipeBuilder.kt @@ -21,16 +21,6 @@ import kotlin.contracts.contract * @since 26.1.0 */ class HTShapedRecipeBuilder : HTCraftingRecipeBuilder(HTConstants.SHAPED) { - companion object { - @JvmStatic - inline fun create(builderAction: HTShapedRecipeBuilder.() -> Unit): HTShapedRecipeBuilder { - contract { - callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) - } - return HTShapedRecipeBuilder().apply(builderAction) - } - } - @PublishedApi internal val patterns: MutableList = ObjectArrayList() @PublishedApi internal val keys: MutableMap = Char2ObjectLinkedOpenHashMap() 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 index 25c875cb80..9a700bb215 100644 --- a/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/vanilla/HTShapelessRecipeBuilder.kt +++ b/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/vanilla/HTShapelessRecipeBuilder.kt @@ -20,16 +20,6 @@ import kotlin.contracts.contract * @since 26.1.0 */ class HTShapelessRecipeBuilder : HTCraftingRecipeBuilder(HTConstants.SHAPELESS) { - companion object { - @JvmStatic - inline fun create(builderAction: HTShapelessRecipeBuilder.() -> Unit): HTShapelessRecipeBuilder { - contract { - callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) - } - return HTShapelessRecipeBuilder().apply(builderAction) - } - } - @PublishedApi internal val ingredients: MutableList = ObjectArrayList() operator fun Ingredient.unaryPlus() { 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 index e5d2d564c9..797e01d49c 100644 --- a/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/vanilla/HTSingleItemRecipeBuilder.kt +++ b/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/vanilla/HTSingleItemRecipeBuilder.kt @@ -6,7 +6,6 @@ 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 net.minecraft.world.item.crafting.StonecutterRecipe import kotlin.contracts.ExperimentalContracts import kotlin.contracts.InvocationKind import kotlin.contracts.contract @@ -21,18 +20,8 @@ import kotlin.contracts.contract */ abstract class HTSingleItemRecipeBuilder>(prefix: String) : HTVanillaRecipeBuilder(prefix) { - companion object { - @JvmStatic - inline fun stonecutting(builderAction: Stonecutting.() -> Unit): Stonecutting { - contract { - callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) - } - return Stonecutting().apply(builderAction) - } - } - // Ingredient - @PublishedApi internal var ingredient: Ingredient by HTDelegates.onceInitialize() + var ingredient: Ingredient by HTDelegates.onceInitialize() operator fun Ingredient.unaryPlus() { ingredient = this @@ -44,15 +33,4 @@ abstract class HTSingleItemRecipeBuilder>(prefix: String) } ingredient = IngredientBuilder.build(builderAction) } - - // Stonecutting // - - /** - * 石切台レシピ向けの[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/HTSmithingRecipeBuilder.kt b/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/vanilla/HTSmithingRecipeBuilder.kt index 6451b65dac..6a7ec7cf9b 100644 --- a/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/vanilla/HTSmithingRecipeBuilder.kt +++ b/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/vanilla/HTSmithingRecipeBuilder.kt @@ -20,16 +20,6 @@ import kotlin.contracts.contract * @since 26.1.0 */ class HTSmithingRecipeBuilder : HTVanillaRecipeBuilder(HTConstants.SMITHING) { - companion object { - @JvmStatic - inline fun create(builderAction: HTSmithingRecipeBuilder.() -> Unit): HTSmithingRecipeBuilder { - contract { - callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) - } - return HTSmithingRecipeBuilder().apply(builderAction) - } - } - @PublishedApi internal var template: Optional by HTDelegates.optionalInitialize() @PublishedApi internal var base: Ingredient by HTDelegates.onceInitialize() 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 index 8c48a9f56a..25a17f353a 100644 --- a/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/vanilla/HTVanillaRecipeBuilder.kt +++ b/src/lib/kotlin/hiiragi283/lib/data/recipe/builder/vanilla/HTVanillaRecipeBuilder.kt @@ -35,7 +35,7 @@ abstract class HTVanillaRecipeBuilder>(prefix: String) : var group: String by HTDelegates.onceInitialize { "" } // Result - @PublishedApi internal var result: ItemStackTemplate by HTDelegates.onceInitialize() + var result: ItemStackTemplate by HTDelegates.onceInitialize() operator fun ItemStackTemplate.unaryPlus() { result = this From 01d4deca1dfc461c91a3d21734b8f0ebc4936991 Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Sat, 19 Sep 2026 17:51:34 +0900 Subject: [PATCH 10/44] =?UTF-8?q?feat:=20SiO2=20+=20C=20->=20Si=20+=20CO2?= =?UTF-8?q?=20=E3=81=AE=E3=83=AC=E3=82=B7=E3=83=94=E3=81=AB=E3=81=8A?= =?UTF-8?q?=E3=81=84=E3=81=A6=EF=BC=8C=E6=9D=90=E6=96=99=E3=81=AB=E7=B2=89?= =?UTF-8?q?=E3=82=82=E5=8F=97=E3=81=91=E4=BB=98=E3=81=91=E3=82=8B=E3=82=88?= =?UTF-8?q?=E3=81=86=E3=81=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data/recipe/RagiumCommonRecipeProvider.kt | 17 ++++++++++++---- .../data/recipe/RagiumHeatRecipeProvider.kt | 11 ++++++---- .../alloying/crude_silicon_from_amethyst.json | 9 ++++++++- .../crude_silicon_from_amethyst_block.json | 9 ++++++++- .../alloying/crude_silicon_from_quartz.json | 9 ++++++++- .../crude_silicon_from_quartz_block.json | 9 ++++++++- .../alloying/sooty_iron_ingot_by_coals.json | 10 +++++----- .../lib/data/recipe/HTRecipeProvider.kt | 20 ++++++++++++++++--- .../ingredient/HTMaterialTagsIngredient.kt | 15 ++------------ 9 files changed, 76 insertions(+), 33 deletions(-) diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt index ba60c0f74d..e66d0129eb 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt @@ -1,6 +1,8 @@ package hiiragi283.ragium.data.recipe +import hiiragi283.lib.collection.nelOf import hiiragi283.lib.data.recipe.HTRecipeProvider +import hiiragi283.lib.recipe.ingredient.HTMaterialTagsIngredient import hiiragi283.lib.tag.CommonTagPrefixes import hiiragi283.lib.tag.HTCommonTags import hiiragi283.ragium.api.RagiumAPI @@ -336,17 +338,24 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu } 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 { primary { +dustOrGem(RagiumMaterial.Gem.QUARTZ) } - secondary { +holderSet(RagiumTags.Items.COKES) } + secondary { +dustOrCoke } result { +RagiumItems.CRUDE_SILICON } recipeId suffix "_from_quartz" }.save(exporter) RagiumRecipeBuilders.alloying { primary { +holderSet(RagiumTags.BlockItem.QUARTZ_BLOCKS.item) } secondary { - +holderSet(RagiumTags.Items.COKES) + +dustOrCoke count = 4 } result { @@ -362,13 +371,13 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu +dustOrGem(RagiumMaterial.Gem.AMETHYST) count = 4 } - secondary { +holderSet(RagiumTags.Items.COKES) } + secondary { +dustOrCoke } result { +RagiumItems.CRUDE_SILICON } recipeId suffix "_from_amethyst" }.save(exporter) RagiumRecipeBuilders.alloying { primary { items { +Items.AMETHYST_BLOCK } } - secondary { +holderSet(RagiumTags.Items.COKES) } + secondary { +dustOrCoke } result { +RagiumItems.CRUDE_SILICON } recipeId suffix "_from_amethyst_block" }.save(exporter) diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumHeatRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumHeatRecipeProvider.kt index 6b34b70758..378f072ce6 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 @@ -54,10 +55,12 @@ class RagiumHeatRecipeProvider(packOutput: PackOutput, future: CompletableFuture RagiumRecipeBuilders.alloying { primary { +dustOrIngot(RagiumMaterial.Metal.IRON) } secondary { - +holderSet( - CommonTagPrefixes.DUST.itemTagKey(RagiumMaterial.Fuel.COAL), - CommonTagPrefixes.DUST.itemTagKey(RagiumMaterial.Fuel.CHARCOAL), - RagiumTags.Items.COALS + +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) } 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 index de1426a192..dee9e30e55 100644 --- 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 @@ -16,7 +16,14 @@ }, "secondary_ingredient": { "count": 1, - "items": "#ragium:cokes" + "items": { + "neoforge:ingredient_type": "ragium:material_tags", + "tags": [ + "c:dusts/coal_coke", + "c:dusts/pitch_coke", + "ragium:cokes" + ] + } }, "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 index a127a0ed40..a193616913 100644 --- 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 @@ -10,7 +10,14 @@ }, "secondary_ingredient": { "count": 1, - "items": "#ragium:cokes" + "items": { + "neoforge:ingredient_type": "ragium:material_tags", + "tags": [ + "c:dusts/coal_coke", + "c:dusts/pitch_coke", + "ragium:cokes" + ] + } }, "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 index a54b323e54..d0776e1360 100644 --- 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 @@ -16,7 +16,14 @@ }, "secondary_ingredient": { "count": 1, - "items": "#ragium:cokes" + "items": { + "neoforge:ingredient_type": "ragium:material_tags", + "tags": [ + "c:dusts/coal_coke", + "c:dusts/pitch_coke", + "ragium:cokes" + ] + } }, "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 index 667b661467..e89b5f06d6 100644 --- 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 @@ -10,7 +10,14 @@ }, "secondary_ingredient": { "count": 4, - "items": "#ragium:cokes" + "items": { + "neoforge:ingredient_type": "ragium:material_tags", + "tags": [ + "c:dusts/coal_coke", + "c:dusts/pitch_coke", + "ragium:cokes" + ] + } }, "time": 800 } \ 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 index 2af32f3c13..78a9c1cc70 100644 --- 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 @@ -17,11 +17,11 @@ "secondary_ingredient": { "count": 1, "items": { - "type": "neoforge:or", - "values": [ - "#c:dusts/charcoal", - "#c:dusts/coal", - "#ragium:coals" + "neoforge:ingredient_type": "ragium:material_tags", + "tags": [ + "c:dusts/coal", + "c:dusts/charcoal", + "ragium:coals" ] } }, diff --git a/src/lib/kotlin/hiiragi283/lib/data/recipe/HTRecipeProvider.kt b/src/lib/kotlin/hiiragi283/lib/data/recipe/HTRecipeProvider.kt index fc55094e97..768d544a53 100644 --- a/src/lib/kotlin/hiiragi283/lib/data/recipe/HTRecipeProvider.kt +++ b/src/lib/kotlin/hiiragi283/lib/data/recipe/HTRecipeProvider.kt @@ -1,8 +1,10 @@ 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.recipe.ingredient.HTMaterialTagsIngredient import hiiragi283.lib.tag.CommonTagPrefixes @@ -12,6 +14,8 @@ import net.minecraft.core.HolderLookup import net.minecraft.core.registries.Registries import net.minecraft.data.PackOutput import net.minecraft.resources.Identifier +import net.minecraft.tags.TagKey +import net.minecraft.world.item.Item import net.minecraft.world.item.crafting.Recipe import net.neoforged.neoforge.common.conditions.ModLoadedCondition import java.util.concurrent.CompletableFuture @@ -29,23 +33,33 @@ abstract class HTRecipeProvider( ) : ExporterDataProvider>(packOutput, future, Registries.RECIPE, modId, Recipe.CONDITIONAL_CODEC) { // Extension // + /** + * @since 26.1.7 + */ + fun materialTags(tags: Nel>): HTMaterialTagsIngredient = HTMaterialTagsIngredient(tags) + /** * @since 26.1.7 */ fun materialTags(prefixes: Nel, materials: Nel): HTMaterialTagsIngredient = - HTMaterialTagsIngredient(prefixes, materials) + 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, nelOf(material)) + materialTags(prefixes.map { it.itemTagKey(material) }) /** * @since 26.1.7 */ fun materialTags(prefix: HTTagPrefix, materials: Nel): HTMaterialTagsIngredient = - materialTags(nelOf(prefix), materials) + materialTags(materials.map(prefix::itemTagKey)) /** * @since 26.1.7 diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTMaterialTagsIngredient.kt b/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTMaterialTagsIngredient.kt index d85bb06601..4139f51b26 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTMaterialTagsIngredient.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTMaterialTagsIngredient.kt @@ -1,15 +1,11 @@ package hiiragi283.lib.recipe.ingredient import com.mojang.serialization.MapCodec -import hiiragi283.lib.HTComparators import hiiragi283.lib.collection.Nel -import hiiragi283.lib.collection.toNel import hiiragi283.lib.serialization.codec.HTCodecs import hiiragi283.lib.serialization.codec.compactNelFieldOf import hiiragi283.lib.serialization.network.HTStreamCodecs import hiiragi283.lib.serialization.network.nelOf -import hiiragi283.lib.tag.HTMaterialLike -import hiiragi283.lib.tag.HTTagPrefix import io.netty.buffer.ByteBuf import net.minecraft.core.Holder import net.minecraft.core.registries.BuiltInRegistries @@ -26,8 +22,8 @@ import java.util.stream.Stream * @since 26.1.7 * @author Hiiragi Tsubasa */ -@ConsistentCopyVisibility -data class HTMaterialTagsIngredient private constructor(val tags: Nel>) : ICustomIngredient { +@JvmRecord +data class HTMaterialTagsIngredient(val tags: Nel>) : ICustomIngredient { companion object { @JvmField val CODEC: MapCodec = HTCodecs.tagKey(Registries.ITEM, false) @@ -43,13 +39,6 @@ data class HTMaterialTagsIngredient private constructor(val tags: Nel = IngredientType(CODEC, STREAM_CODEC) } - constructor(prefixes: Nel, materials: Nel) : this( - prefixes - .flatMap { prefix: HTTagPrefix -> materials.map(prefix::itemTagKey) } - .toSortedSet(HTComparators.TAG_KEY) - .toNel() - ) - override fun test(stack: ItemStack): Boolean = tags.any(stack::`is`) override fun items(): Stream> = tags.stream() From 7f72731ec7bf6c8e5443ee8bcfcda0c043793151 Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Sat, 19 Sep 2026 17:56:13 +0900 Subject: [PATCH 11/44] =?UTF-8?q?refactor!:=20IntrusiveWrapper=20=E3=82=92?= =?UTF-8?q?=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ragium/data/tag/RagiumItemTagsProvider.kt | 10 ++-- .../lib/data/tag/HTItemTagsProvider.kt | 9 ---- .../hiiragi283/lib/data/tag/HTTagsProvider.kt | 8 +++ .../lib/registry/IntrusiveWrapper.kt | 54 ------------------- 4 files changed, 13 insertions(+), 68 deletions(-) delete mode 100644 src/lib/kotlin/hiiragi283/lib/registry/IntrusiveWrapper.kt diff --git a/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumItemTagsProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumItemTagsProvider.kt index 5fa69c01fb..47e749ad08 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumItemTagsProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumItemTagsProvider.kt @@ -6,6 +6,7 @@ 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 @@ -19,7 +20,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,7 +30,7 @@ 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) @@ -57,7 +57,7 @@ class RagiumItemTagsProvider(output: PackOutput, lookupProvider: CompletableFutu builder(Tags.Items.STRINGS).add(RagiumItems.SYNTHETIC_FIBER) builder(HTCommonTags.Items.COAL_COKE).add(RagiumItems.COAL_COKE) - builder(HTCommonTags.Items.PAPER).addItem(Items.PAPER) + 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) @@ -65,8 +65,8 @@ class RagiumItemTagsProvider(output: PackOutput, lookupProvider: CompletableFutu builder(RagiumTags.Items.COALS) .add(RagiumItems.BAMBOO_CHARCOAL) - .addItem(Items.CHARCOAL) - .addItem(Items.COAL) + .add(createKey(vanillaId("charcoal"))) + .add(createKey(vanillaId("coal"))) builder(RagiumTags.Items.COKES) .addTag(HTCommonTags.Items.COAL_COKE) .addTag(HTCommonTags.Items.PITCH_COKE) diff --git a/src/lib/kotlin/hiiragi283/lib/data/tag/HTItemTagsProvider.kt b/src/lib/kotlin/hiiragi283/lib/data/tag/HTItemTagsProvider.kt index ac91a805ef..64e9f10889 100644 --- a/src/lib/kotlin/hiiragi283/lib/data/tag/HTItemTagsProvider.kt +++ b/src/lib/kotlin/hiiragi283/lib/data/tag/HTItemTagsProvider.kt @@ -1,6 +1,5 @@ package hiiragi283.lib.data.tag -import hiiragi283.lib.registry.asKeyOrValue import hiiragi283.lib.tag.HTMaterialLike import hiiragi283.lib.tag.HTTagPrefix import net.minecraft.core.HolderLookup @@ -8,7 +7,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 +30,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) /** diff --git a/src/lib/kotlin/hiiragi283/lib/data/tag/HTTagsProvider.kt b/src/lib/kotlin/hiiragi283/lib/data/tag/HTTagsProvider.kt index e772b1c6c2..2d2f6efccb 100644 --- a/src/lib/kotlin/hiiragi283/lib/data/tag/HTTagsProvider.kt +++ b/src/lib/kotlin/hiiragi283/lib/data/tag/HTTagsProvider.kt @@ -2,9 +2,12 @@ package hiiragi283.lib.data.tag import hiiragi283.lib.collection.SetMultiMap import hiiragi283.lib.registry.RegistryKey +import hiiragi283.lib.registry.createKey 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 @@ -77,4 +80,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/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) From c848ad5821f07e501c0babc49e5fc8fe6d7e8925 Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Sat, 19 Sep 2026 19:28:40 +0900 Subject: [PATCH 12/44] =?UTF-8?q?feat:=20=E6=96=B0=E3=81=97=E3=81=84?= =?UTF-8?q?=E3=83=96=E3=83=AD=E3=83=83=E3=82=AF=E3=82=92=E8=BF=BD=E5=8A=A0?= =?UTF-8?q?=20-=20Variable=20Tank=20/=20=E5=8F=AF=E5=A4=89=E3=82=BF?= =?UTF-8?q?=E3=83=B3=E3=82=AF=20-=20Void=20Tank=20/=20=E5=BB=83=E6=A3=84?= =?UTF-8?q?=E3=82=BF=E3=83=B3=E3=82=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data/lang/RagiumEnglishLangProvider.kt | 2 + .../data/lang/RagiumJapaneseLangProvider.kt | 2 + .../ragium/data/model/RagiumModelProvider.kt | 4 + .../recipe/RagiumVanillaRecipeProvider.kt | 20 +++ .../data/tag/RagiumBlockItemTagsProvider.kt | 3 + .../data/tag/RagiumBlockTagsProvider.kt | 6 +- .../ragium/data/tag/RagiumItemTagsProvider.kt | 4 + .../assets/ragium/blockstates/tank.json | 7 + .../assets/ragium/blockstates/void_tank.json | 7 + .../resources/assets/ragium/items/tank.json | 6 + .../assets/ragium/items/void_tank.json | 6 + .../resources/assets/ragium/lang/en_us.json | 2 + .../resources/assets/ragium/lang/ja_jp.json | 2 + .../assets/ragium/models/block/tank.json | 7 + .../assets/ragium/models/block/void_tank.json | 7 + .../tags/block/mineable/pickaxe.json | 5 +- .../data/ragium/loot_table/blocks/tank.json | 21 +++ .../ragium/loot_table/blocks/void_tank.json | 21 +++ .../recipe/shaped/sooty_iron_ingot.json | 4 +- .../data/ragium/recipe/shaped/tank.json | 16 +++ .../data/ragium/recipe/shaped/void_tank.json | 16 +++ .../ragium/recipe/shapeless/gunpowder.json | 4 +- .../ragium/tags/block/storages/creative.json | 5 + .../ragium/tags/item/show_fluid_tooltips.json | 6 + .../ragium/tags/item/storages/creative.json | 5 + .../lib/data/model/HTModelTemplates.kt | 27 ++++ .../lib/data/tag/HTItemTagsProvider.kt | 9 ++ .../kotlin/hiiragi283/lib/mod/HTCommonMod.kt | 103 -------------- .../hiiragi283/ragium/api/RagiumConfig.kt | 23 ++++ .../hiiragi283/ragium/api/RagiumRegistries.kt | 10 ++ .../hiiragi283/ragium/api/tag/RagiumTags.kt | 12 ++ .../kotlin/hiiragi283/ragium/common/Ragium.kt | 103 -------------- .../ragium/common/block/RagiumBlocks.kt | 48 +++++++ .../block/entity/RagiumBlockEntityTypes.kt | 69 +++++++++- .../entity/machine/HTBreweryBlockEntity.kt | 10 +- .../entity/machine/HTMelterBlockEntity.kt | 6 +- .../base/HTItemAndFluidToItemBlockEntity.kt | 6 +- .../block/entity/storage/HTTankBlockEntity.kt | 83 +++++++++++ .../common/block/storage/HTTankBlock.kt | 46 +++++++ .../common/block/storage/HTVoidTankBlock.kt | 47 +++++++ .../ragium/common/item/RagiumItems.kt | 130 ++++++++++++++++++ .../transfer/fluid/HTVariableFluidTank.kt | 44 ++++++ .../ragium/models/block/tank_template.json | 54 ++++++++ .../ragium/textures/block/tank_side.png | Bin 0 -> 239 bytes .../assets/ragium/textures/block/tank_top.png | Bin 0 -> 237 bytes .../ragium/textures/block/void_tank_side.png | Bin 0 -> 182 bytes .../ragium/textures/block/void_tank_top.png | Bin 0 -> 198 bytes 47 files changed, 793 insertions(+), 225 deletions(-) create mode 100644 src/generated/resources/assets/ragium/blockstates/tank.json create mode 100644 src/generated/resources/assets/ragium/blockstates/void_tank.json create mode 100644 src/generated/resources/assets/ragium/items/tank.json create mode 100644 src/generated/resources/assets/ragium/items/void_tank.json create mode 100644 src/generated/resources/assets/ragium/models/block/tank.json create mode 100644 src/generated/resources/assets/ragium/models/block/void_tank.json create mode 100644 src/generated/resources/data/ragium/loot_table/blocks/tank.json create mode 100644 src/generated/resources/data/ragium/loot_table/blocks/void_tank.json create mode 100644 src/generated/resources/data/ragium/recipe/shaped/tank.json create mode 100644 src/generated/resources/data/ragium/recipe/shaped/void_tank.json create mode 100644 src/generated/resources/data/ragium/tags/block/storages/creative.json create mode 100644 src/generated/resources/data/ragium/tags/item/show_fluid_tooltips.json create mode 100644 src/generated/resources/data/ragium/tags/item/storages/creative.json create mode 100644 src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTTankBlockEntity.kt create mode 100644 src/main/kotlin/hiiragi283/ragium/common/block/storage/HTTankBlock.kt create mode 100644 src/main/kotlin/hiiragi283/ragium/common/block/storage/HTVoidTankBlock.kt create mode 100644 src/main/kotlin/hiiragi283/ragium/common/transfer/fluid/HTVariableFluidTank.kt create mode 100644 src/main/resources/assets/ragium/models/block/tank_template.json create mode 100644 src/main/resources/assets/ragium/textures/block/tank_side.png create mode 100644 src/main/resources/assets/ragium/textures/block/tank_top.png create mode 100644 src/main/resources/assets/ragium/textures/block/void_tank_side.png create mode 100644 src/main/resources/assets/ragium/textures/block/void_tank_top.png diff --git a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt index 267bc744f4..943573bd55 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt @@ -60,6 +60,8 @@ class RagiumEnglishLangProvider(output: PackOutput) : add(RagiumBlocks.SCANNER, "Laser Scanner") + add(RagiumBlocks.TANK, "Variable Tank") + add(RagiumBlocks.VOID_TANK, "Void Tank") add(RagiumBlocks.CREATIVE_BATTERY, "Creative Battery") add(RagiumBlocks.MACHINE_CASING, "Machine Casing") diff --git a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt index 78ded321d4..ed5ad0f17f 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt @@ -56,6 +56,8 @@ class RagiumJapaneseLangProvider(output: PackOutput) : add(RagiumBlocks.SCANNER, "レーザースキャナ") + add(RagiumBlocks.TANK, "可変タンク") + add(RagiumBlocks.VOID_TANK, "廃棄タンク") add(RagiumBlocks.CREATIVE_BATTERY, "クリエイティブ用バッテリー") add(RagiumBlocks.MACHINE_CASING, "機械ケーシング") diff --git a/src/data/kotlin/hiiragi283/ragium/data/model/RagiumModelProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/model/RagiumModelProvider.kt index d05b26c30f..59b6c93ef4 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/model/RagiumModelProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/model/RagiumModelProvider.kt @@ -2,6 +2,7 @@ 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.HTSimpleDeferredItem @@ -105,6 +106,9 @@ class RagiumModelProvider(output: PackOutput) : HTModelProvider(output, RagiumAP ) ) } + // Storage + generators.createTrivialBlock(RagiumBlocks.TANK.block.get(), HTModelTemplates.Providers.TANK_TEMPLATE) + generators.createTrivialBlock(RagiumBlocks.VOID_TANK.block.get(), HTModelTemplates.Providers.TANK_TEMPLATE) } private fun machineModel( diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt index 81aa837716..dc955a5927 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt @@ -42,6 +42,7 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut HTRecipeProvider(packOutput, future, RagiumAPI.MOD_ID) { override fun exportValues() { machine() + storage() material() // Prismarine Bricks -> 9x Prismarine Shard @@ -302,6 +303,25 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut ) } + // Machine // + + private fun storage() { + // Tank + VanillaRecipeBuilders.shaped { + hollow8() + define('A') { +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.COPPER) } + define('B') { +holderSet(Tags.Items.BUCKETS_EMPTY) } + result { +RagiumBlocks.TANK } + }.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() { diff --git a/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumBlockItemTagsProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumBlockItemTagsProvider.kt index 730a545e06..90ed226a99 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumBlockItemTagsProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumBlockItemTagsProvider.kt @@ -26,6 +26,9 @@ 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) // Machine for (machineType: HTMachineType in HTMachineType.entries) { for (block: HTSimpleDeferredBlockAndItem in RagiumBlocks.MACHINES[machineType]) { diff --git a/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumBlockTagsProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumBlockTagsProvider.kt index 06a6e23dd2..07aa5a70f8 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumBlockTagsProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumBlockTagsProvider.kt @@ -25,10 +25,14 @@ class RagiumBlockTagsProvider(output: PackOutput, lookupProvider: CompletableFut sequence { yieldAll(RagiumBlocks.MATERIAL_ORES.values) yieldAll(RagiumBlocks.STORAGE_BLOCKS.values) + yieldAll(RagiumBlocks.MACHINES.values) + yield(RagiumBlocks.MACHINE_CASING) yieldAll(RagiumBlocks.MACHINE_CASINGS.values) - yield(RagiumBlocks.MACHINE_CASING) + yield(RagiumBlocks.TANK) + yield(RagiumBlocks.VOID_TANK) + yield(RagiumBlocks.CREATIVE_BATTERY) }.forEach { pickaxe.add(it.block) } } } diff --git a/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumItemTagsProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumItemTagsProvider.kt index 47e749ad08..abd0cd32a8 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumItemTagsProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumItemTagsProvider.kt @@ -13,6 +13,7 @@ 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 @@ -70,5 +71,8 @@ class RagiumItemTagsProvider(output: PackOutput, lookupProvider: CompletableFutu 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) } } 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/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/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 6c92a338e8..fc2bf9340e 100644 --- a/src/generated/resources/assets/ragium/lang/en_us.json +++ b/src/generated/resources/assets/ragium/lang/en_us.json @@ -93,7 +93,9 @@ "block.ragium.sulfur_ore": "Sulfur Ore", "block.ragium.sulfur_trioxide": "Sulfur Trioxide", "block.ragium.sulfuric_acid": "Sulfuric Acid", + "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", diff --git a/src/generated/resources/assets/ragium/lang/ja_jp.json b/src/generated/resources/assets/ragium/lang/ja_jp.json index 3e55dc06b8..4fa549322b 100644 --- a/src/generated/resources/assets/ragium/lang/ja_jp.json +++ b/src/generated/resources/assets/ragium/lang/ja_jp.json @@ -93,7 +93,9 @@ "block.ragium.sulfur_ore": "硫黄鉱石", "block.ragium.sulfur_trioxide": "三酸化硫黄", "block.ragium.sulfuric_acid": "硫酸", + "block.ragium.tank": "可変タンク", "block.ragium.void_metal_block": "虚金ブロック", + "block.ragium.void_tank": "滅却タンク", "block.ragium.white_dye": "白色の染料", "block.ragium.wood_tar": "木タール", "block.ragium.yellow_dye": "黄色の染料", 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/data/minecraft/tags/block/mineable/pickaxe.json b/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json index 6f89e227d5..d5e7b56649 100644 --- a/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json +++ b/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json @@ -12,6 +12,7 @@ "ragium:chemical_reactor", "ragium:coal_coke_block", "ragium:compressor", + "ragium:creative_battery", "ragium:crusher", "ragium:cutting_machine", "ragium:deepslate_niter_ore", @@ -36,6 +37,8 @@ "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/ragium/loot_table/blocks/tank.json b/src/generated/resources/data/ragium/loot_table/blocks/tank.json new file mode 100644 index 0000000000..8966e5d4ef --- /dev/null +++ b/src/generated/resources/data/ragium/loot_table/blocks/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: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/recipe/shaped/sooty_iron_ingot.json b/src/generated/resources/data/ragium/recipe/shaped/sooty_iron_ingot.json index 8bcc967d6a..ed33fd84d0 100644 --- a/src/generated/resources/data/ragium/recipe/shaped/sooty_iron_ingot.json +++ b/src/generated/resources/data/ragium/recipe/shaped/sooty_iron_ingot.json @@ -6,8 +6,8 @@ "A": { "neoforge:ingredient_type": "ragium:material_tags", "tags": [ - "c:tiny/charcoal", - "c:tiny/coal" + "c:tiny/coal", + "c:tiny/charcoal" ] }, "B": "#c:ingots/iron" diff --git a/src/generated/resources/data/ragium/recipe/shaped/tank.json b/src/generated/resources/data/ragium/recipe/shaped/tank.json new file mode 100644 index 0000000000..18637615a1 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/shaped/tank.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "A": "#c:ingots/copper", + "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/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/shapeless/gunpowder.json b/src/generated/resources/data/ragium/recipe/shapeless/gunpowder.json index 4dbb8da1ce..daa1643b17 100644 --- a/src/generated/resources/data/ragium/recipe/shapeless/gunpowder.json +++ b/src/generated/resources/data/ragium/recipe/shapeless/gunpowder.json @@ -5,8 +5,8 @@ { "neoforge:ingredient_type": "ragium:material_tags", "tags": [ - "c:dusts/charcoal", - "c:dusts/coal" + "c:dusts/coal", + "c:dusts/charcoal" ] }, "#c:dusts/sulfur", 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..3749c3088e --- /dev/null +++ b/src/generated/resources/data/ragium/tags/block/storages/creative.json @@ -0,0 +1,5 @@ +{ + "values": [ + "ragium:creative_battery" + ] +} \ 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..46406ac13c --- /dev/null +++ b/src/generated/resources/data/ragium/tags/item/show_fluid_tooltips.json @@ -0,0 +1,6 @@ +{ + "values": [ + "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..3749c3088e --- /dev/null +++ b/src/generated/resources/data/ragium/tags/item/storages/creative.json @@ -0,0 +1,5 @@ +{ + "values": [ + "ragium:creative_battery" + ] +} \ No newline at end of file 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/tag/HTItemTagsProvider.kt b/src/lib/kotlin/hiiragi283/lib/data/tag/HTItemTagsProvider.kt index 64e9f10889..e7eb412d69 100644 --- a/src/lib/kotlin/hiiragi283/lib/data/tag/HTItemTagsProvider.kt +++ b/src/lib/kotlin/hiiragi283/lib/data/tag/HTItemTagsProvider.kt @@ -1,5 +1,6 @@ package hiiragi283.lib.data.tag +import hiiragi283.lib.resource.HTSimpleBlockItemWithKey import hiiragi283.lib.tag.HTMaterialLike import hiiragi283.lib.tag.HTTagPrefix import net.minecraft.core.HolderLookup @@ -39,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: HTSimpleBlockItemWithKey, + type: HTTagDependType = HTTagDependType.REQUIRED + ): HTTagBuilder = this.add(blockItem.item, type) } 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/ragium/api/RagiumConfig.kt b/src/lib/kotlin/hiiragi283/ragium/api/RagiumConfig.kt index ffbf47ebd8..62fbdde2d7 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) 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/tag/RagiumTags.kt b/src/lib/kotlin/hiiragi283/ragium/api/tag/RagiumTags.kt index b45b1ee92d..ae1818a999 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)) } @@ -52,6 +58,12 @@ data object RagiumTags { @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/main/kotlin/hiiragi283/ragium/common/Ragium.kt b/src/main/kotlin/hiiragi283/ragium/common/Ragium.kt index 42678a4fec..463e18a284 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 @@ -19,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) @@ -156,93 +136,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)) - } - event.modify(Items.ANCIENT_DEBRIS) { builder: DataComponentMap.Builder, provider: HolderLookup.Provider, _ -> - builder.set(RagiumDataComponents.ORE_SLURRY_DATA, provider.getOrThrow(RagiumOreSlurryData.NETHERITE_SCRAP)) - } - } - - 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/block/RagiumBlocks.kt b/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt index a11c077324..8160e22377 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt @@ -1,5 +1,6 @@ package hiiragi283.ragium.common.block +import hiiragi283.lib.HTConstants import hiiragi283.lib.collection.ListMultiMap import hiiragi283.lib.collection.Table import hiiragi283.lib.collection.buildListMultiMap @@ -20,7 +21,13 @@ import hiiragi283.ragium.api.material.HTStorageBlockPart import hiiragi283.ragium.api.material.RagiumMaterial import hiiragi283.ragium.api.tag.HTMachineType import hiiragi283.ragium.common.block.entity.RagiumBlockEntityTypes +import hiiragi283.ragium.common.block.storage.HTTankBlock +import hiiragi283.ragium.common.block.storage.HTVoidTankBlock +import net.minecraft.core.component.DataComponentMap +import net.minecraft.core.component.DataComponents import net.minecraft.util.valueproviders.UniformInt +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 @@ -28,6 +35,7 @@ import net.minecraft.world.level.block.SoundType 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.event.ModifyDefaultComponentsEvent data object RagiumBlocks { @JvmStatic @@ -40,6 +48,8 @@ data object RagiumBlocks { fun register(eventBus: IEventBus) { REGISTER.addAlias("steel_block", "sooty_iron_block") + eventBus.addListener(::modifyDefaultComponents) + REGISTER.register(eventBus) } @@ -244,6 +254,23 @@ data object RagiumBlocks { // Storage // + @JvmField + val TANK: HTBasicDeferredBlockAndItem = REGISTER.registerSimple( + HTConstants.TANK, + machine().noOcclusion(), + ::HTTankBlock + // itemProp = { prop: Item.Properties -> prop.component(RagiumDataComponents.CAPACITY_SCALE, 1) } + ) + + // Void + @JvmField + val VOID_TANK: HTBasicDeferredBlockAndItem = REGISTER.registerSimple( + "void_tank", + machine().noOcclusion(), + ::HTVoidTankBlock + ) + + // Creative @JvmField val CREATIVE_BATTERY: HTBasicDeferredBlockAndItem = registerMachine(RagiumBlockEntityTypes.CREATIVE_BATTERY, ::HTBasicEntityBlock) @@ -261,4 +288,25 @@ data object RagiumBlocks { @JvmStatic fun getCasing(machineType: HTMachineType): HTSimpleDeferredBlockAndItem = MACHINE_CASINGS[machineType]!! + + // Events // + + @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/RagiumBlockEntityTypes.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/RagiumBlockEntityTypes.kt index c0e707aabf..3bb255103b 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 @@ -16,12 +21,19 @@ import hiiragi283.ragium.common.block.entity.machine.HTCrusherBlockEntity import hiiragi283.ragium.common.block.entity.machine.HTCuttingMachineBlockEntity import hiiragi283.ragium.common.block.entity.machine.HTFreezerBlockEntity import hiiragi283.ragium.common.block.entity.machine.HTMelterBlockEntity +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.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 +42,7 @@ data object RagiumBlockEntityTypes { @JvmStatic fun register(event: IEventBus) { event.addListener(::addSupportedBlocks) + event.addListener(::registerCapabilities) REGISTER.register(event) } @@ -90,13 +103,16 @@ data object RagiumBlockEntityTypes { // Storage // + @JvmField + val TANK: HTDeferredBlockEntityType = + registerTick(HTConstants.TANK, ::HTTankBlockEntity) + @JvmField val CREATIVE_BATTERY: HTDeferredBlockEntityType = registerTick("creative_battery", ::HTCreativeBatteryBlockEntity) - // Event // + // Events // - // Supported Blocks @JvmStatic private fun addSupportedBlocks(event: BlockEntityTypeAddBlocksEvent) { for (holder: HTDeferredBlock<*> in RagiumBlocks.REGISTER.asBlockSequence()) { @@ -106,4 +122,53 @@ 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(BREWERY.get()) + // Storage + registerBlockEntity(TANK.get()) + + event.registerBlock( + HTFluidCapabilities.block, + { _, _, _, _, _ -> + HTVoidTankBlock.VOIDING_HANDLER + }, + RagiumBlocks.VOID_TANK.block.get() + ) + + event.registerBlockEntity( + HTEnergyCapabilities.block, + CREATIVE_BATTERY.get() + ) { _, _ -> InfiniteEnergyHandler.INSTANCE } + } } 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..e3c1f6837e 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 @@ -6,13 +6,13 @@ 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.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.fluid.HTVariableFluidTank import hiiragi283.ragium.common.transfer.holder.HTBasicFluidTankHolder import hiiragi283.ragium.common.transfer.holder.HTBasicItemSlotHolder import hiiragi283.ragium.common.transfer.holder.HTSlotInfo @@ -98,12 +98,12 @@ class HTBreweryBlockEntity(pos: BlockPos, state: BlockState) : } } - private lateinit var inputTank: HTBasicFluidTank - private lateinit var outputTank: HTBasicFluidTank + private lateinit var inputTank: HTVariableFluidTank + private lateinit var outputTank: HTVariableFluidTank 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)) + inputTank = builder.addSlot(HTSlotInfo.INPUT, HTVariableFluidTank.input(getTankCapacity(), 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/HTMelterBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTMelterBlockEntity.kt index 3a7f28cc69..af10d1c482 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTMelterBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTMelterBlockEntity.kt @@ -8,7 +8,6 @@ import hiiragi283.lib.recipe.base.HTItemToFluidRecipe import hiiragi283.lib.recipe.handler.HTInputSlot import hiiragi283.lib.recipe.handler.HTOutputSlot 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,6 +16,7 @@ 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 @@ -84,10 +84,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/base/HTItemAndFluidToItemBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemAndFluidToItemBlockEntity.kt index 4c8673d47a..37e9f25c95 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 @@ -11,12 +11,12 @@ 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 @@ -111,10 +111,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/storage/HTTankBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTTankBlockEntity.kt new file mode 100644 index 0000000000..f4287e439c --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTTankBlockEntity.kt @@ -0,0 +1,83 @@ +package hiiragi283.ragium.common.block.entity.storage + +import hiiragi283.lib.transfer.fluid.HTBasicFluidTank +import hiiragi283.lib.transfer.fluid.HTFluidTank +import hiiragi283.lib.transfer.holder.HTResourceSlotHolder +import hiiragi283.ragium.api.RagiumConfig +import hiiragi283.ragium.api.data.RagiumDataComponents +import hiiragi283.ragium.api.util.HTStorageHelper +import hiiragi283.ragium.common.block.entity.HTConfigurableBlockEntity +import hiiragi283.ragium.common.block.entity.RagiumBlockEntityTypes +import hiiragi283.ragium.common.transfer.fluid.HTVariableFluidTank +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.server.level.ServerLevel +import net.minecraft.world.level.Level +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.SimpleFluidContent + +class HTTankBlockEntity(pos: BlockPos, state: BlockState) : + HTConfigurableBlockEntity(RagiumBlockEntityTypes.TANK.get(), pos, state) { + lateinit var tank: HTBasicFluidTank + private set + + override fun createFluidHandler(listener: Runnable): HTResourceSlotHolder { + tank = HTVariableFluidTank.create(RagiumConfig.SERVER.tankCapacity, 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 + } + } + + override fun markDirtyComparator() { + level?.updateNeighbourForOutputSignal(blockPos, blockState.block) + } + + override fun getComparatorOutput(state: BlockState, level: Level, pos: BlockPos): Int = + HTStorageHelper.calculateRedstoneLevel(tank) + + // 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) + } + } + + 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..b3a5315f95 --- /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.ragium.common.block.HTBasicEntityBlock +import hiiragi283.ragium.common.block.entity.RagiumBlockEntityTypes +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(properties: Properties) : HTBasicEntityBlock(RagiumBlockEntityTypes.TANK, 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/item/RagiumItems.kt b/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt index 13fc595eea..308df19324 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt @@ -1,5 +1,7 @@ package hiiragi283.ragium.common.item +import hiiragi283.lib.capability.HTEnergyCapabilities +import hiiragi283.lib.capability.HTFluidCapabilities import hiiragi283.lib.collection.Table import hiiragi283.lib.collection.buildSortedSetMultiMap import hiiragi283.lib.collection.flatMapTable @@ -8,15 +10,39 @@ 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.RagiumConfig +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.block.RagiumBlocks +import hiiragi283.ragium.common.block.storage.HTVoidTankBlock +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.energy.InfiniteEnergyHandler +import net.neoforged.neoforge.transfer.fluid.FluidResource +import net.neoforged.neoforge.transfer.fluid.ItemAccessFluidHandler +import java.util.function.Consumer data object RagiumItems { @JvmField @@ -29,6 +55,10 @@ data object RagiumItems { 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) } @@ -196,4 +226,104 @@ 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) { + // Block + event.registerItem( + HTFluidCapabilities.item, + { _, access -> + ItemAccessFluidHandler( + access, + RagiumDataComponents.FLUID, + RagiumConfig.SERVER.tankCapacity.asInt + ) + }, + RagiumBlocks.TANK + ) + event.registerItem( + HTFluidCapabilities.item, + { _, _ -> HTVoidTankBlock.VOIDING_HANDLER }, + RagiumBlocks.VOID_TANK + ) + event.registerItem( + HTEnergyCapabilities.item, + { _, _ -> InfiniteEnergyHandler.INSTANCE }, + RagiumBlocks.CREATIVE_BATTERY + ) + // 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 + ) + } + + @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/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/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/tank_side.png b/src/main/resources/assets/ragium/textures/block/tank_side.png new file mode 100644 index 0000000000000000000000000000000000000000..973c62893376951494467b54e6064a28e79f5fa0 GIT binary patch literal 239 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`OFUg1Ln;{8Oy0=b>>$7*zMLKxcZz=Im=>1o+dw;$7hYR1fR_V{R)BKQkJ%qWg>gD>4 zCmX&C1W1LSw>o&W`=~rqTCKRoqkk^U@7o)ex3S%MU@BFi&$45}+V{K(_7>H$yfOU3 z8{~H!%r^ND$5EgdeP8-OUBNdisU31^3HAle*E1gM6?ovZZ5`uYwbc6bJx?1&85sWm kPrAfu0(37M$i2)A=HW5U-rFV`0!0`+UHx3vIVCg!0P%xanE(I) literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..a0e35e3ce19073c80e1f81da4a087631b1e502ef GIT binary patch literal 237 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`i#%N%Ln;{GOxn$R$U(s6_!5>W z4(uffNm+{+vXqX=USL!eu-Nuh=lzS6xw`+I=9}!=dw2WdtC{|{D!v(4yt=ig^mWMU zoT4tP9G-Wa?{<~!Y~Ob@GBoT;LzC(@#(sv5<0dIN0pEmsOqczfvel7Gr<0%gWPQL( z``_<_uCbMD&b$*WWn}i_i!j5JYcpg_&orxUJLtW?N!K}ewU6wyv=nB!>?=$R4FCTJ jKHAv>bS)dmwag5uie8FGUww}RiZFP(`njxgN@xNAr<7iI literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..f54be202875cea8f636e4d42b9b4e7c77bda4029 GIT binary patch literal 182 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`*`6+rAr*7pOg_kYz<|S*_sI-S zBL}g9|AH|G7-JmXYfj@@x5iSOs#g?R3ap;rx?6p|&0F*BnypUfZu;<6 z6?&aKz;5XFi^KAm`^p)oFRGzp$TNLft Date: Sat, 19 Sep 2026 19:48:11 +0900 Subject: [PATCH 13/44] =?UTF-8?q?feat:=20=E3=82=BF=E3=83=B3=E3=82=AF?= =?UTF-8?q?=E3=81=AB=E4=B8=AD=E8=BA=AB=E3=81=AE=E6=8F=8F=E7=94=BB=E3=82=92?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lib/renderer/HTBlockEntityRenderer.kt | 17 +++++ .../hiiragi283/lib/renderer/HTRenderHelper.kt | 65 +++++++++++++++++++ .../renderer/state/HTFluidBERenderState.kt | 62 ++++++++++++++++++ .../lib/renderer/state/HTItemBERenderState.kt | 13 ++++ .../hiiragi283/ragium/client/RagiumClient.kt | 9 ++- .../HTMemoryDiscClientTooltipComponent.kt | 2 +- .../renderer/HTTankBlockEntityRenderer.kt | 57 ++++++++++++++++ 7 files changed, 223 insertions(+), 2 deletions(-) create mode 100644 src/client/kotlin/hiiragi283/lib/renderer/HTBlockEntityRenderer.kt create mode 100644 src/client/kotlin/hiiragi283/lib/renderer/HTRenderHelper.kt create mode 100644 src/client/kotlin/hiiragi283/lib/renderer/state/HTFluidBERenderState.kt create mode 100644 src/client/kotlin/hiiragi283/lib/renderer/state/HTItemBERenderState.kt rename src/client/kotlin/hiiragi283/ragium/client/{render => gui/screen/tooltip}/HTMemoryDiscClientTooltipComponent.kt (96%) create mode 100644 src/client/kotlin/hiiragi283/ragium/client/renderer/HTTankBlockEntityRenderer.kt diff --git a/src/client/kotlin/hiiragi283/lib/renderer/HTBlockEntityRenderer.kt b/src/client/kotlin/hiiragi283/lib/renderer/HTBlockEntityRenderer.kt new file mode 100644 index 0000000000..5e6e630599 --- /dev/null +++ b/src/client/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/client/kotlin/hiiragi283/lib/renderer/HTRenderHelper.kt b/src/client/kotlin/hiiragi283/lib/renderer/HTRenderHelper.kt new file mode 100644 index 0000000000..88901c4a77 --- /dev/null +++ b/src/client/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/client/kotlin/hiiragi283/lib/renderer/state/HTFluidBERenderState.kt b/src/client/kotlin/hiiragi283/lib/renderer/state/HTFluidBERenderState.kt new file mode 100644 index 0000000000..48c5f2a9a6 --- /dev/null +++ b/src/client/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/client/kotlin/hiiragi283/lib/renderer/state/HTItemBERenderState.kt b/src/client/kotlin/hiiragi283/lib/renderer/state/HTItemBERenderState.kt new file mode 100644 index 0000000000..e8ef969258 --- /dev/null +++ b/src/client/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/client/kotlin/hiiragi283/ragium/client/RagiumClient.kt b/src/client/kotlin/hiiragi283/ragium/client/RagiumClient.kt index a47da89460..e9aefdcf74 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/RagiumClient.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/RagiumClient.kt @@ -11,12 +11,14 @@ 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 @@ -31,6 +33,7 @@ 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 @@ -191,4 +194,8 @@ data object RagiumClient : HTClientMod() { override fun registerScreens(event: RegisterMenuScreensEvent) { event.register(HTBlockWidgetHolderContext.MENU_TYPE.get(), ::HTWidgetContainerScreen) } + + override fun registerEntityRenderer(event: EntityRenderersEvent.RegisterRenderers) { + event.registerBlockEntityRenderer(RagiumBlockEntityTypes.TANK.get(), ::HTTankBlockEntityRenderer) + } } 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/renderer/HTTankBlockEntityRenderer.kt b/src/client/kotlin/hiiragi283/ragium/client/renderer/HTTankBlockEntityRenderer.kt new file mode 100644 index 0000000000..e3507049c1 --- /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.HTTankBlockEntity +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: HTTankBlockEntity, + 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 + ) + } +} From 766f94e2cddb70b860a1ac717526d41ef0a2de25 Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Sat, 19 Sep 2026 19:50:48 +0900 Subject: [PATCH 14/44] =?UTF-8?q?refactor:=20kdoc=E3=82=92=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/lib/kotlin/hiiragi283/lib/collection/NonEmptyLists.kt | 2 +- .../lib/data/recipe/ingredient/IngredientBuilder.kt | 3 --- .../ragium/api/data/oreSlurry/RagiumOreSlurryData.kt | 3 +++ .../hiiragi283/ragium/api/material/RagiumMaterial.kt | 8 ++++++++ 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/lib/kotlin/hiiragi283/lib/collection/NonEmptyLists.kt b/src/lib/kotlin/hiiragi283/lib/collection/NonEmptyLists.kt index b88facb25c..83d27257c2 100644 --- a/src/lib/kotlin/hiiragi283/lib/collection/NonEmptyLists.kt +++ b/src/lib/kotlin/hiiragi283/lib/collection/NonEmptyLists.kt @@ -3,7 +3,7 @@ package hiiragi283.lib.collection /** * @param E リストの要素のクラス * @author Hiiragi Tsubasa - * @since 26.1.6 + * @since 26.1.7 */ fun nelOf(head: E): Nel = Nel(head) diff --git a/src/lib/kotlin/hiiragi283/lib/data/recipe/ingredient/IngredientBuilder.kt b/src/lib/kotlin/hiiragi283/lib/data/recipe/ingredient/IngredientBuilder.kt index 0b28b66de1..2cd9c5f33a 100644 --- a/src/lib/kotlin/hiiragi283/lib/data/recipe/ingredient/IngredientBuilder.kt +++ b/src/lib/kotlin/hiiragi283/lib/data/recipe/ingredient/IngredientBuilder.kt @@ -21,9 +21,6 @@ import kotlin.contracts.contract @HTBuilderMarker abstract class IngredientBuilder { companion object { - /** - * @since 26.1.4 - */ @JvmStatic inline fun build(builderAction: IngredientBuilder.() -> Unit): Ingredient { contract { 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 eb639851b4..f09dad3384 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/data/oreSlurry/RagiumOreSlurryData.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/data/oreSlurry/RagiumOreSlurryData.kt @@ -27,6 +27,9 @@ data object RagiumOreSlurryData { @JvmField val GOLD: ResourceKey = create("gold") + /** + * @since 26.1.7 + */ @JvmField val NETHERITE_SCRAP: ResourceKey = create("netherite_scrap") diff --git a/src/lib/kotlin/hiiragi283/ragium/api/material/RagiumMaterial.kt b/src/lib/kotlin/hiiragi283/ragium/api/material/RagiumMaterial.kt index 8ffc0c05ee..2951240da5 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/material/RagiumMaterial.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/material/RagiumMaterial.kt @@ -29,6 +29,10 @@ sealed interface RagiumMaterial : // Common COAL_COKE("Coal Coke", "石炭コークス"), + + /** + * @since 26.1.7 + */ PITCH_COKE("Pitch Coke", "ピッチコークス") ; @@ -136,6 +140,10 @@ sealed interface RagiumMaterial : // Common CARBON(false, "Carbon", "炭素"), + + /** + * @since 26.1.7 + */ SILICON(false, "Silicon", "シリコン") ; From 30926993a9488a8693cf5befa7ff1c5c8da1d4d5 Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Sat, 19 Sep 2026 20:42:30 +0900 Subject: [PATCH 15/44] =?UTF-8?q?feat:=20=E6=96=B0=E3=81=97=E3=81=84?= =?UTF-8?q?=E3=83=96=E3=83=AD=E3=83=83=E3=82=AF=E3=82=92=E8=BF=BD=E5=8A=A0?= =?UTF-8?q?=20-=20Creative=20Tank=20/=20=E3=82=AF=E3=83=AA=E3=82=A8?= =?UTF-8?q?=E3=82=A4=E3=83=86=E3=82=A3=E3=83=96=E7=94=A8=E3=82=BF=E3=83=B3?= =?UTF-8?q?=E3=82=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hiiragi283/ragium/client/RagiumClient.kt | 1 + .../renderer/HTTankBlockEntityRenderer.kt | 6 +- .../advancement/RagiumAdvancementProvider.kt | 2 +- .../data/lang/RagiumEnglishLangProvider.kt | 1 + .../data/lang/RagiumJapaneseLangProvider.kt | 1 + .../data/loot/RagiumBlockLootTableProvider.kt | 6 +- .../ragium/data/model/RagiumModelProvider.kt | 45 ++++++------ .../data/tag/RagiumBlockItemTagsProvider.kt | 1 + .../data/tag/RagiumBlockTagsProvider.kt | 3 +- .../ragium/data/tag/RagiumItemTagsProvider.kt | 1 + .../ragium/blockstates/creative_tank.json | 7 ++ .../assets/ragium/items/creative_tank.json | 6 ++ .../resources/assets/ragium/lang/en_us.json | 1 + .../resources/assets/ragium/lang/ja_jp.json | 3 +- .../ragium/models/block/creative_tank.json | 7 ++ .../tags/block/mineable/pickaxe.json | 1 + .../loot_table/blocks/creative_tank.json | 21 ++++++ .../ragium/tags/block/storages/creative.json | 3 +- .../ragium/tags/item/show_fluid_tooltips.json | 1 + .../ragium/tags/item/storages/creative.json | 3 +- .../lib/data/tag/HTBlockItemTagBuilder.kt | 2 +- .../hiiragi283/lib/item/HTPotionBasedItem.kt | 5 +- .../lib/item/HTSubCreativeTabContents.kt | 14 ++++ .../lib/registry/HTDeferredBlockAndItem.kt | 2 + .../lib/resource/HTBlockItemWithKey.kt | 4 +- .../ragium/common/block/RagiumBlocks.kt | 31 ++++++-- .../block/entity/RagiumBlockEntityTypes.kt | 8 ++- .../storage/HTCreativeTankBlockEntity.kt | 37 ++++++++++ .../block/entity/storage/HTTankBlockEntity.kt | 53 ++------------ .../storage/base/HTBaseTankBlockEntity.kt | 64 +++++++++++++++++ .../common/block/storage/HTTankBlock.kt | 4 +- .../ragium/common/item/RagiumItems.kt | 12 ++++ .../item/block/HTCreativeTankBlockItem.kt | 39 +++++++++++ .../transfer/fluid/HTCreativeFluidTank.kt | 66 ++++++++++++++++++ .../textures/block/creative_tank_side.png | Bin 0 -> 239 bytes .../textures/block/creative_tank_top.png | Bin 0 -> 237 bytes .../ragium/textures/block/tank_side.png | Bin 239 -> 182 bytes .../assets/ragium/textures/block/tank_top.png | Bin 237 -> 198 bytes .../ragium/textures/block/void_tank_side.png | Bin 182 -> 0 bytes .../ragium/textures/block/void_tank_top.png | Bin 198 -> 0 bytes 40 files changed, 363 insertions(+), 98 deletions(-) create mode 100644 src/generated/resources/assets/ragium/blockstates/creative_tank.json create mode 100644 src/generated/resources/assets/ragium/items/creative_tank.json create mode 100644 src/generated/resources/assets/ragium/models/block/creative_tank.json create mode 100644 src/generated/resources/data/ragium/loot_table/blocks/creative_tank.json create mode 100644 src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTCreativeTankBlockEntity.kt create mode 100644 src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/base/HTBaseTankBlockEntity.kt create mode 100644 src/main/kotlin/hiiragi283/ragium/common/item/block/HTCreativeTankBlockItem.kt create mode 100644 src/main/kotlin/hiiragi283/ragium/common/transfer/fluid/HTCreativeFluidTank.kt create mode 100644 src/main/resources/assets/ragium/textures/block/creative_tank_side.png create mode 100644 src/main/resources/assets/ragium/textures/block/creative_tank_top.png delete mode 100644 src/main/resources/assets/ragium/textures/block/void_tank_side.png delete mode 100644 src/main/resources/assets/ragium/textures/block/void_tank_top.png diff --git a/src/client/kotlin/hiiragi283/ragium/client/RagiumClient.kt b/src/client/kotlin/hiiragi283/ragium/client/RagiumClient.kt index e9aefdcf74..c71d20e49c 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/RagiumClient.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/RagiumClient.kt @@ -197,5 +197,6 @@ data object RagiumClient : HTClientMod() { 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/renderer/HTTankBlockEntityRenderer.kt b/src/client/kotlin/hiiragi283/ragium/client/renderer/HTTankBlockEntityRenderer.kt index e3507049c1..5b518e3655 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/renderer/HTTankBlockEntityRenderer.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/renderer/HTTankBlockEntityRenderer.kt @@ -4,7 +4,7 @@ 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.HTTankBlockEntity +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 @@ -15,7 +15,7 @@ import net.minecraft.world.phys.Vec3 import org.joml.Vector3f class HTTankBlockEntityRenderer(context: BlockEntityRendererProvider.Context) : - HTBlockEntityRenderer(context) { + HTBlockEntityRenderer(context) { companion object { @JvmStatic private val FROM: Vector3f = Vector3f(2 / 16f, 0f, 2 / 16f).add(0.01f, 0.01f, 0.01f) @@ -24,7 +24,7 @@ class HTTankBlockEntityRenderer(context: BlockEntityRendererProvider.Context) : override fun createRenderState(): HTFluidBERenderState = HTFluidBERenderState() override fun extractRenderState( - blockEntity: HTTankBlockEntity, + blockEntity: HTBaseTankBlockEntity, state: HTFluidBERenderState, partialTicks: Float, cameraPosition: Vec3, diff --git a/src/data/kotlin/hiiragi283/ragium/data/advancement/RagiumAdvancementProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/advancement/RagiumAdvancementProvider.kt index 1f7760debb..66074ec629 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/advancement/RagiumAdvancementProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/advancement/RagiumAdvancementProvider.kt @@ -45,7 +45,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) } diff --git a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt index 943573bd55..63efb5b273 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt @@ -63,6 +63,7 @@ class RagiumEnglishLangProvider(output: PackOutput) : 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") // Fluid diff --git a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt index ed5ad0f17f..170507464e 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt @@ -59,6 +59,7 @@ class RagiumJapaneseLangProvider(output: PackOutput) : add(RagiumBlocks.TANK, "可変タンク") add(RagiumBlocks.VOID_TANK, "廃棄タンク") add(RagiumBlocks.CREATIVE_BATTERY, "クリエイティブ用バッテリー") + add(RagiumBlocks.CREATIVE_TANK, "クリエイティブ用タンク") add(RagiumBlocks.MACHINE_CASING, "機械ケーシング") // Fluid diff --git a/src/data/kotlin/hiiragi283/ragium/data/loot/RagiumBlockLootTableProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/loot/RagiumBlockLootTableProvider.kt index 963d1fc555..bd84c93619 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/loot/RagiumBlockLootTableProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/loot/RagiumBlockLootTableProvider.kt @@ -1,7 +1,7 @@ package hiiragi283.ragium.data.loot import hiiragi283.lib.data.loot.HTBlockLootTableProvider -import hiiragi283.lib.registry.HTSimpleDeferredBlock +import hiiragi283.lib.registry.HTSimpleDeferredBlockAndItem import hiiragi283.ragium.api.RagiumAPI import hiiragi283.ragium.api.material.HTItemPart import hiiragi283.ragium.api.material.HTMaterialAccess @@ -27,12 +27,12 @@ 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) } 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 block: HTSimpleDeferredBlockAndItem = RagiumBlocks.MATERIAL_ORES[part, material] ?: continue val drop: ItemLike = HTMaterialAccess.INSTANCE.getMaterialItem(rawPart, material) ?: continue add(block) { block: Block -> val builder: LootPoolSingletonContainer.Builder<*> = LootItem.lootTableItem(drop) diff --git a/src/data/kotlin/hiiragi283/ragium/data/model/RagiumModelProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/model/RagiumModelProvider.kt index 59b6c93ef4..9da18f743e 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/model/RagiumModelProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/model/RagiumModelProvider.kt @@ -5,8 +5,8 @@ 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 @@ -69,7 +69,7 @@ class RagiumModelProvider(output: PackOutput) : HTModelProvider(output, RagiumAP yield(RagiumBlocks.CREATIVE_BATTERY) // TODO yield(RagiumBlocks.MACHINE_CASING) - }.forEach { generators.createTrivialCube(it.block.getOrThrow()) } + }.forEach { generators.createTrivialCube(it.getOrThrow()) } // Machine val inactiveModels: Map = HTMachineType.entries @@ -81,34 +81,35 @@ 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.flatEntries + .forEach { (machineType: HTMachineType, blockItem: HTSimpleDeferredBlockAndItem) -> + generators.blockStateOutput.accept( + MultiVariantGenerator.dispatch(blockItem.getOrThrow()) + .with( + PropertyDispatch.initial(HTMachineBlock.IS_ACTIVE) + .select(false, BlockModelGenerators.plainVariant(inactiveModels[machineType]!!)) + .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.block.get(), HTModelTemplates.Providers.TANK_TEMPLATE) - generators.createTrivialBlock(RagiumBlocks.VOID_TANK.block.get(), HTModelTemplates.Providers.TANK_TEMPLATE) + 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( @@ -125,7 +126,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/tag/RagiumBlockItemTagsProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumBlockItemTagsProvider.kt index 90ed226a99..26e5782e69 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumBlockItemTagsProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumBlockItemTagsProvider.kt @@ -29,6 +29,7 @@ class RagiumBlockItemTagsProvider(factory: (BlockItemTag) -> HTBlockItemTagBuild 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]) { diff --git a/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumBlockTagsProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumBlockTagsProvider.kt index 07aa5a70f8..f18c884c14 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumBlockTagsProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumBlockTagsProvider.kt @@ -33,6 +33,7 @@ class RagiumBlockTagsProvider(output: PackOutput, lookupProvider: CompletableFut yield(RagiumBlocks.TANK) yield(RagiumBlocks.VOID_TANK) yield(RagiumBlocks.CREATIVE_BATTERY) - }.forEach { pickaxe.add(it.block) } + yield(RagiumBlocks.CREATIVE_TANK) + }.forEach(pickaxe::add) } } diff --git a/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumItemTagsProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumItemTagsProvider.kt index abd0cd32a8..bed589230c 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumItemTagsProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumItemTagsProvider.kt @@ -74,5 +74,6 @@ class RagiumItemTagsProvider(output: PackOutput, lookupProvider: CompletableFutu builder(RagiumTags.Items.SHOW_FLUID_TOOLTIPS) .add(RagiumBlocks.TANK) .add(RagiumBlocks.VOID_TANK) + .add(RagiumBlocks.CREATIVE_TANK) } } 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/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/lang/en_us.json b/src/generated/resources/assets/ragium/lang/en_us.json index fc2bf9340e..cbb87405b0 100644 --- a/src/generated/resources/assets/ragium/lang/en_us.json +++ b/src/generated/resources/assets/ragium/lang/en_us.json @@ -38,6 +38,7 @@ "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.cutting_machine": "Cutting Machine", diff --git a/src/generated/resources/assets/ragium/lang/ja_jp.json b/src/generated/resources/assets/ragium/lang/ja_jp.json index 4fa549322b..923bde3b14 100644 --- a/src/generated/resources/assets/ragium/lang/ja_jp.json +++ b/src/generated/resources/assets/ragium/lang/ja_jp.json @@ -38,6 +38,7 @@ "block.ragium.coal_tar": "石炭タール", "block.ragium.compressor": "圧縮機", "block.ragium.creative_battery": "クリエイティブ用バッテリー", + "block.ragium.creative_tank": "クリエイティブ用タンク", "block.ragium.crude_oil": "原油", "block.ragium.crusher": "破砕機", "block.ragium.cutting_machine": "裁断機", @@ -95,7 +96,7 @@ "block.ragium.sulfuric_acid": "硫酸", "block.ragium.tank": "可変タンク", "block.ragium.void_metal_block": "虚金ブロック", - "block.ragium.void_tank": "滅却タンク", + "block.ragium.void_tank": "廃棄タンク", "block.ragium.white_dye": "白色の染料", "block.ragium.wood_tar": "木タール", "block.ragium.yellow_dye": "黄色の染料", 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/data/minecraft/tags/block/mineable/pickaxe.json b/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json index d5e7b56649..cc9173a01a 100644 --- a/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json +++ b/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json @@ -13,6 +13,7 @@ "ragium:coal_coke_block", "ragium:compressor", "ragium:creative_battery", + "ragium:creative_tank", "ragium:crusher", "ragium:cutting_machine", "ragium:deepslate_niter_ore", 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..a896e6dc38 --- /dev/null +++ b/src/generated/resources/data/ragium/loot_table/blocks/creative_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: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/tags/block/storages/creative.json b/src/generated/resources/data/ragium/tags/block/storages/creative.json index 3749c3088e..71b452c629 100644 --- a/src/generated/resources/data/ragium/tags/block/storages/creative.json +++ b/src/generated/resources/data/ragium/tags/block/storages/creative.json @@ -1,5 +1,6 @@ { "values": [ - "ragium:creative_battery" + "ragium:creative_battery", + "ragium:creative_tank" ] } \ 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 index 46406ac13c..29217b0ffd 100644 --- a/src/generated/resources/data/ragium/tags/item/show_fluid_tooltips.json +++ b/src/generated/resources/data/ragium/tags/item/show_fluid_tooltips.json @@ -1,5 +1,6 @@ { "values": [ + "ragium:creative_tank", "ragium:tank", "ragium:void_tank" ] diff --git a/src/generated/resources/data/ragium/tags/item/storages/creative.json b/src/generated/resources/data/ragium/tags/item/storages/creative.json index 3749c3088e..71b452c629 100644 --- a/src/generated/resources/data/ragium/tags/item/storages/creative.json +++ b/src/generated/resources/data/ragium/tags/item/storages/creative.json @@ -1,5 +1,6 @@ { "values": [ - "ragium:creative_battery" + "ragium:creative_battery", + "ragium:creative_tank" ] } \ No newline at end of file diff --git a/src/lib/kotlin/hiiragi283/lib/data/tag/HTBlockItemTagBuilder.kt b/src/lib/kotlin/hiiragi283/lib/data/tag/HTBlockItemTagBuilder.kt index 8d86db43dc..7803d2ec66 100644 --- a/src/lib/kotlin/hiiragi283/lib/data/tag/HTBlockItemTagBuilder.kt +++ b/src/lib/kotlin/hiiragi283/lib/data/tag/HTBlockItemTagBuilder.kt @@ -25,7 +25,7 @@ interface HTBlockItemTagBuilder { * @param type このエントリの依存関係 */ fun add(value: HTSimpleBlockItemWithKey, type: HTTagDependType = HTTagDependType.REQUIRED): HTBlockItemTagBuilder = - this.add(value.keyOrThrow, type) + this.add(value.blockItemKeyOrThrow, type) /** * 指定した子タグをタグに追加します。 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/registry/HTDeferredBlockAndItem.kt b/src/lib/kotlin/hiiragi283/lib/registry/HTDeferredBlockAndItem.kt index acb8658421..ba53a4f18e 100644 --- a/src/lib/kotlin/hiiragi283/lib/registry/HTDeferredBlockAndItem.kt +++ b/src/lib/kotlin/hiiragi283/lib/registry/HTDeferredBlockAndItem.kt @@ -3,6 +3,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 @@ -37,6 +38,7 @@ data class HTDeferredBlockAndItem( override val block: HTDeferredBlock, override val item: HTDeferredItem ) : HTBlockItemWithKey, + HTValueWithKey by block, HTHasTranslationKey by item, HTHasText by item, ItemLike by item, diff --git a/src/lib/kotlin/hiiragi283/lib/resource/HTBlockItemWithKey.kt b/src/lib/kotlin/hiiragi283/lib/resource/HTBlockItemWithKey.kt index 5bdff5f2c3..b4527a59d5 100644 --- a/src/lib/kotlin/hiiragi283/lib/resource/HTBlockItemWithKey.kt +++ b/src/lib/kotlin/hiiragi283/lib/resource/HTBlockItemWithKey.kt @@ -20,8 +20,8 @@ interface HTBlockItemWithKey { val item: HTValueWithKey - val keyOrNull: BlockItemKey? get() = block.keyOrNull?.let { blockKey: ResourceKey -> + val blockItemKeyOrNull: BlockItemKey? get() = block.keyOrNull?.let { blockKey: ResourceKey -> item.keyOrNull?.let { itemKey: ResourceKey -> BlockItemKey(blockKey, itemKey) } } - val keyOrThrow: BlockItemKey get() = BlockItemKey(block.keyOrThrow, item.keyOrThrow) + val blockItemKeyOrThrow: BlockItemKey get() = BlockItemKey(block.keyOrThrow, item.keyOrThrow) } diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt b/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt index 8160e22377..538cb703cd 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt @@ -1,6 +1,5 @@ package hiiragi283.ragium.common.block -import hiiragi283.lib.HTConstants import hiiragi283.lib.collection.ListMultiMap import hiiragi283.lib.collection.Table import hiiragi283.lib.collection.buildListMultiMap @@ -9,10 +8,12 @@ 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.RagiumConstants import hiiragi283.ragium.api.material.HTBlockPart @@ -23,9 +24,11 @@ import hiiragi283.ragium.api.tag.HTMachineType 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.util.valueproviders.UniformInt +import net.minecraft.world.item.Item import net.minecraft.world.item.Rarity import net.minecraft.world.level.ItemLike import net.minecraft.world.level.block.Block @@ -74,6 +77,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<*>, @@ -255,11 +267,10 @@ data object RagiumBlocks { // Storage // @JvmField - val TANK: HTBasicDeferredBlockAndItem = REGISTER.registerSimple( - HTConstants.TANK, - machine().noOcclusion(), - ::HTTankBlock - // itemProp = { prop: Item.Properties -> prop.component(RagiumDataComponents.CAPACITY_SCALE, 1) } + val TANK: HTBasicDeferredBlockAndItem = registerMachine( + RagiumBlockEntityTypes.TANK, + ::HTTankBlock, + machine().noOcclusion() ) // Void @@ -275,6 +286,14 @@ data object RagiumBlocks { val CREATIVE_BATTERY: HTBasicDeferredBlockAndItem = registerMachine(RagiumBlockEntityTypes.CREATIVE_BATTERY, ::HTBasicEntityBlock) + @JvmField + val CREATIVE_TANK: HTDeferredBlockAndItem = registerMachine( + RagiumBlockEntityTypes.CREATIVE_TANK, + ::HTTankBlock, + ::HTCreativeTankBlockItem, + machine().noOcclusion() + ) + // Decoration // @JvmField 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 3bb255103b..018a68f5f9 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/RagiumBlockEntityTypes.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/RagiumBlockEntityTypes.kt @@ -24,6 +24,7 @@ import hiiragi283.ragium.common.block.entity.machine.HTMelterBlockEntity 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 @@ -111,6 +112,10 @@ data object RagiumBlockEntityTypes { val CREATIVE_BATTERY: HTDeferredBlockEntityType = registerTick("creative_battery", ::HTCreativeBatteryBlockEntity) + @JvmField + val CREATIVE_TANK: HTDeferredBlockEntityType = + registerTick("creative_tank", ::HTCreativeTankBlockEntity) + // Events // @JvmStatic @@ -163,12 +168,13 @@ data object RagiumBlockEntityTypes { { _, _, _, _, _ -> HTVoidTankBlock.VOIDING_HANDLER }, - RagiumBlocks.VOID_TANK.block.get() + 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/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 index f4287e439c..72f8e12820 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTTankBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/storage/HTTankBlockEntity.kt @@ -1,48 +1,26 @@ package hiiragi283.ragium.common.block.entity.storage import hiiragi283.lib.transfer.fluid.HTBasicFluidTank -import hiiragi283.lib.transfer.fluid.HTFluidTank -import hiiragi283.lib.transfer.holder.HTResourceSlotHolder import hiiragi283.ragium.api.RagiumConfig import hiiragi283.ragium.api.data.RagiumDataComponents -import hiiragi283.ragium.api.util.HTStorageHelper -import hiiragi283.ragium.common.block.entity.HTConfigurableBlockEntity 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.Direction import net.minecraft.core.component.DataComponentGetter import net.minecraft.core.component.DataComponentMap -import net.minecraft.server.level.ServerLevel -import net.minecraft.world.level.Level 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.SimpleFluidContent class HTTankBlockEntity(pos: BlockPos, state: BlockState) : - HTConfigurableBlockEntity(RagiumBlockEntityTypes.TANK.get(), pos, state) { - lateinit var tank: HTBasicFluidTank + HTBaseTankBlockEntity(RagiumBlockEntityTypes.TANK.get(), pos, state) { + override lateinit var tank: HTBasicFluidTank private set - override fun createFluidHandler(listener: Runnable): HTResourceSlotHolder { + override fun initTank(listener: Runnable) { tank = HTVariableFluidTank.create(RagiumConfig.SERVER.tankCapacity, 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 - } - } - - override fun markDirtyComparator() { - level?.updateNeighbourForOutputSignal(blockPos, blockState.block) } - override fun getComparatorOutput(state: BlockState, level: Level, pos: BlockPos): Int = - HTStorageHelper.calculateRedstoneLevel(tank) - // Sync // override fun applyImplicitComponents(components: DataComponentGetter) { @@ -57,27 +35,4 @@ class HTTankBlockEntity(pos: BlockPos, state: BlockState) : components.set(RagiumDataComponents.FLUID, content) } } - - 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/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 index b3a5315f95..7138717eb7 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/storage/HTTankBlock.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/storage/HTTankBlock.kt @@ -1,7 +1,7 @@ package hiiragi283.ragium.common.block.storage +import hiiragi283.lib.registry.HTDeferredBlockEntityType import hiiragi283.ragium.common.block.HTBasicEntityBlock -import hiiragi283.ragium.common.block.entity.RagiumBlockEntityTypes import net.minecraft.core.BlockPos import net.minecraft.world.InteractionHand import net.minecraft.world.InteractionResult @@ -15,7 +15,7 @@ import net.minecraft.world.phys.shapes.CollisionContext import net.minecraft.world.phys.shapes.VoxelShape import net.neoforged.neoforge.transfer.fluid.FluidUtil -class HTTankBlock(properties: Properties) : HTBasicEntityBlock(RagiumBlockEntityTypes.TANK, properties) { +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) diff --git a/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt b/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt index 308df19324..a34a51165f 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt @@ -21,6 +21,7 @@ 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.api.util.HTStorageHelper import hiiragi283.ragium.common.block.RagiumBlocks import hiiragi283.ragium.common.block.storage.HTVoidTankBlock import hiiragi283.ragium.common.fluid.RagiumFluids @@ -38,6 +39,7 @@ 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.InfiniteResourceHandler import net.neoforged.neoforge.transfer.access.ItemAccess import net.neoforged.neoforge.transfer.energy.InfiniteEnergyHandler import net.neoforged.neoforge.transfer.fluid.FluidResource @@ -297,6 +299,16 @@ data object RagiumItems { { _, _ -> InfiniteEnergyHandler.INSTANCE }, RagiumBlocks.CREATIVE_BATTERY ) + event.registerItem( + HTFluidCapabilities.item, + { stack: ItemStack, _ -> + HTStorageHelper.getFluid(stack) + .let(FluidResource::of) + .takeUnless(FluidResource::isEmpty) + ?.let(::InfiniteResourceHandler) + }, + RagiumBlocks.CREATIVE_TANK + ) // Fluid event.registerItem( HTFluidCapabilities.item, 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..89231fe6d8 --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/item/block/HTCreativeTankBlockItem.kt @@ -0,0 +1,39 @@ +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.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 +import java.util.function.Consumer + +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) + .listElements() + .mapMulti { fluid, consumer: Consumer -> + if (!HTFlowingFluidHelper.isSource(fluid)) return@mapMulti + val content: SimpleFluidContent = FluidStack(fluid).let(SimpleFluidContent::copyOf) + if (content.isEmpty) return@mapMulti + val stack = ItemStack(baseItem, 1, buildDataPatch { set(RagiumDataComponents.FLUID, content) }) + consumer.accept(stack) + }.forEach(output::accept) + } + + override fun shouldAddDefault(): Boolean = false +} 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/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 0000000000000000000000000000000000000000..973c62893376951494467b54e6064a28e79f5fa0 GIT binary patch literal 239 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`OFUg1Ln;{8Oy0=b>>$7*zMLKxcZz=Im=>1o+dw;$7hYR1fR_V{R)BKQkJ%qWg>gD>4 zCmX&C1W1LSw>o&W`=~rqTCKRoqkk^U@7o)ex3S%MU@BFi&$45}+V{K(_7>H$yfOU3 z8{~H!%r^ND$5EgdeP8-OUBNdisU31^3HAle*E1gM6?ovZZ5`uYwbc6bJx?1&85sWm kPrAfu0(37M$i2)A=HW5U-rFV`0!0`+UHx3vIVCg!0P%xanE(I) literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..a0e35e3ce19073c80e1f81da4a087631b1e502ef GIT binary patch literal 237 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`i#%N%Ln;{GOxn$R$U(s6_!5>W z4(uffNm+{+vXqX=USL!eu-Nuh=lzS6xw`+I=9}!=dw2WdtC{|{D!v(4yt=ig^mWMU zoT4tP9G-Wa?{<~!Y~Ob@GBoT;LzC(@#(sv5<0dIN0pEmsOqczfvel7Gr<0%gWPQL( z``_<_uCbMD&b$*WWn}i_i!j5JYcpg_&orxUJLtW?N!K}ewU6wyv=nB!>?=$R4FCTJ jKHAv>bS)dmwag5uie8FGUww}RiZFP(`njxgN@xNAr<7iI literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ragium/textures/block/tank_side.png b/src/main/resources/assets/ragium/textures/block/tank_side.png index 973c62893376951494467b54e6064a28e79f5fa0..f54be202875cea8f636e4d42b9b4e7c77bda4029 100644 GIT binary patch delta 154 zcmV;L0A>I00k#294WLfcFqk8duLc!PSe!9|C557bxQX zL<8@KfTxBA+~74DcrOIFkge|xU_Ur}9SvL$6R;n+!D}?|UQ7sZAzR-Yz) diff --git a/src/main/resources/assets/ragium/textures/block/tank_top.png b/src/main/resources/assets/ragium/textures/block/tank_top.png index a0e35e3ce19073c80e1f81da4a087631b1e502ef..74c124cb274fea685a607650b83dbf9ef4b477f3 100644 GIT binary patch delta 170 zcmV;b09F6(0mcE4B!7EJL_t(|oa~ap3BVu>MPu=(3pjxL&*K0tp!b#trb^RBNRPgY zfObvQ*O3A;M1&07*qoM6N<$g2N3*+5i9m delta 209 zcmV;?051Q=0qp^hB!8kwL_t(|0ql~y4Z=VWM8~8Alt2e`U}9>b0BRz}9nb+K5IDB= zEbr)Koh|=DpESC?-M6FFX;0dC_A_|u+Prn^RI6-qiaKlz?g{R?bh(GV#aUHW)PRB| zwgHa-h{rT!Y*6+Sj5VhDl(j($EQt>T$$wDkKl|@e)&_L5X-eEv8ZtKc^b-K&)|ebM z%!4Ji!Ark_EkjeQOdXbHWCI>+)B*qi|Nl|qxr_h+00v1!K~w_(Wg$u-#p?H200000 LNkvXXu0mjfpCnu? 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 deleted file mode 100644 index f54be202875cea8f636e4d42b9b4e7c77bda4029..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 182 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`*`6+rAr*7pOg_kYz<|S*_sI-S zBL}g9|AH|G7-JmXYfj@@x5iSOs#g?R3ap;rx?6p|&0F*BnypUfZu;<6 z6?&aKz;5XFi^KAm`^p)oFRGzp$TNLft Date: Sat, 19 Sep 2026 23:35:21 +0900 Subject: [PATCH 16/44] =?UTF-8?q?feat:=20Mixer,=20Planter=20=E3=81=AB?= =?UTF-8?q?=E6=A9=9F=E8=83=BD=E3=82=92=E5=AE=9F=E8=A3=85=20fix:=20?= =?UTF-8?q?=E6=A9=9F=E6=A2=B0=E3=81=8C=E3=83=89=E3=83=AD=E3=83=83=E3=83=97?= =?UTF-8?q?=E3=81=97=E3=81=A6=E3=82=82=E3=82=AB=E3=82=B9=E3=82=BF=E3=83=A0?= =?UTF-8?q?=E3=83=8D=E3=83=BC=E3=83=A0=E3=81=A8=E6=89=80=E6=9C=89=E8=80=85?= =?UTF-8?q?=E3=82=92=E4=BF=9D=E6=8C=81=E3=81=99=E3=82=8B=E3=81=A8=E3=82=88?= =?UTF-8?q?=E3=81=86=E3=81=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data/loot/RagiumBlockLootTableProvider.kt | 40 +++++ .../recipe/RagiumVanillaRecipeProvider.kt | 2 + .../loot_table/blocks/alloy_smelter.json | 10 ++ .../ragium/loot_table/blocks/assembler.json | 10 ++ .../ragium/loot_table/blocks/brewery.json | 10 ++ .../loot_table/blocks/chemical_bath.json | 10 ++ .../loot_table/blocks/chemical_reactor.json | 10 ++ .../ragium/loot_table/blocks/compressor.json | 10 ++ .../loot_table/blocks/creative_tank.json | 11 ++ .../ragium/loot_table/blocks/crusher.json | 10 ++ .../loot_table/blocks/cutting_machine.json | 10 ++ .../loot_table/blocks/electrolyzer.json | 10 ++ .../ragium/loot_table/blocks/freezer.json | 10 ++ .../data/ragium/loot_table/blocks/melter.json | 10 ++ .../data/ragium/loot_table/blocks/mixer.json | 10 ++ .../ragium/loot_table/blocks/planter.json | 10 ++ .../ragium/loot_table/blocks/pyrolyzer.json | 10 ++ .../ragium/loot_table/blocks/refinery.json | 10 ++ .../ragium/loot_table/blocks/scanner.json | 10 ++ .../ragium/loot_table/blocks/smelter.json | 10 ++ .../data/ragium/loot_table/blocks/tank.json | 11 ++ .../data/ragium/recipe/shaped/mixer.json | 18 ++ .../data/ragium/recipe/shaped/planter.json | 18 ++ .../ragium/api/data/RagiumDataComponents.kt | 8 + .../kotlin/hiiragi283/ragium/common/Ragium.kt | 1 + .../ragium/common/block/RagiumBlocks.kt | 52 +++++- .../common/block/entity/HTBlockEntity.kt | 16 ++ .../block/entity/RagiumBlockEntityTypes.kt | 12 ++ .../entity/machine/HTBreweryBlockEntity.kt | 106 +----------- .../entity/machine/HTMixerBlockEntity.kt | 18 ++ .../entity/machine/HTPlanterBlockEntity.kt | 18 ++ .../base/HTItemAndFluidToFluidBlockEntity.kt | 163 ++++++++++++++++++ .../ragium/common/item/RagiumItems.kt | 41 +---- 33 files changed, 561 insertions(+), 144 deletions(-) create mode 100644 src/generated/resources/data/ragium/recipe/shaped/mixer.json create mode 100644 src/generated/resources/data/ragium/recipe/shaped/planter.json create mode 100644 src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTMixerBlockEntity.kt create mode 100644 src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTPlanterBlockEntity.kt create mode 100644 src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemAndFluidToFluidBlockEntity.kt diff --git a/src/data/kotlin/hiiragi283/ragium/data/loot/RagiumBlockLootTableProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/loot/RagiumBlockLootTableProvider.kt index bd84c93619..77c30b71e9 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/loot/RagiumBlockLootTableProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/loot/RagiumBlockLootTableProvider.kt @@ -3,18 +3,25 @@ package hiiragi283.ragium.data.loot import hiiragi283.lib.data.loot.HTBlockLootTableProvider import hiiragi283.lib.registry.HTSimpleDeferredBlockAndItem 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 net.minecraft.core.HolderLookup +import net.minecraft.core.component.DataComponents import net.minecraft.world.level.ItemLike 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 @@ -28,6 +35,14 @@ class RagiumBlockLootTableProvider(registries: HolderLookup.Provider) : registerOres(RagiumMaterial.Mineral.NITER, HTItemPart.DUST, UniformGenerator.between(2f, 5f)) RagiumBlocks.STORAGE_BLOCKS.values.forEach(::dropSelf) + // Machine + for (machine: HTSimpleDeferredBlockAndItem in RagiumBlocks.MACHINES.values) { + 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) { @@ -42,4 +57,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/recipe/RagiumVanillaRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt index dc955a5927..6ad9a7084f 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt @@ -198,8 +198,10 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut heat(RagiumBlocks.SMELTER) { items { +Items.FURNACE } } // Chemical chemical(RagiumBlocks.CHEMICAL_BATH) { items { +Items.CAULDRON } } + chemical(RagiumBlocks.MIXER) { +holderSet(Tags.Items.BUCKETS_EMPTY) } // Bio bio(RagiumBlocks.BREWERY) { items { +Items.BREWING_STAND } } + bio(RagiumBlocks.PLANTER) { items { +Items.FLOWER_POT } } // Electronics // Arcane 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/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 index a896e6dc38..ba4d76112c 100644 --- a/src/generated/resources/data/ragium/loot_table/blocks/creative_tank.json +++ b/src/generated/resources/data/ragium/loot_table/blocks/creative_tank.json @@ -11,6 +11,17 @@ "entries": [ { "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_components", + "include": [ + "minecraft:custom_name", + "ragium:fluid", + "ragium:owner_id" + ], + "source": "block_entity" + } + ], "name": "ragium:creative_tank" } ], 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/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/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/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/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 index 8966e5d4ef..39627c6a2e 100644 --- a/src/generated/resources/data/ragium/loot_table/blocks/tank.json +++ b/src/generated/resources/data/ragium/loot_table/blocks/tank.json @@ -11,6 +11,17 @@ "entries": [ { "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_components", + "include": [ + "minecraft:custom_name", + "ragium:fluid", + "ragium:owner_id" + ], + "source": "block_entity" + } + ], "name": "ragium:tank" } ], 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/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/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/main/kotlin/hiiragi283/ragium/common/Ragium.kt b/src/main/kotlin/hiiragi283/ragium/common/Ragium.kt index 463e18a284..19b1882712 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/Ragium.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/Ragium.kt @@ -90,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( diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt b/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt index 538cb703cd..608fb0235b 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt @@ -1,5 +1,7 @@ package hiiragi283.ragium.common.block +import hiiragi283.lib.capability.HTEnergyCapabilities +import hiiragi283.lib.capability.HTFluidCapabilities import hiiragi283.lib.collection.ListMultiMap import hiiragi283.lib.collection.Table import hiiragi283.lib.collection.buildListMultiMap @@ -15,12 +17,15 @@ 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 @@ -29,6 +34,7 @@ import net.minecraft.core.component.DataComponentMap import net.minecraft.core.component.DataComponents 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 @@ -38,7 +44,12 @@ import net.minecraft.world.level.block.SoundType 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 @@ -51,6 +62,7 @@ data object RagiumBlocks { fun register(eventBus: IEventBus) { REGISTER.addAlias("steel_block", "sooty_iron_block") + eventBus.addListener(::registerCapabilities) eventBus.addListener(::modifyDefaultComponents) REGISTER.register(eventBus) @@ -220,7 +232,7 @@ data object RagiumBlocks { @JvmField val MIXER: HTBasicDeferredBlockAndItem = - registerFakeMachine(RagiumConstants.MIXER) + registerMachine(RagiumBlockEntityTypes.MIXER) // Bio @JvmField @@ -229,7 +241,7 @@ data object RagiumBlocks { @JvmField val PLANTER: HTBasicDeferredBlockAndItem = - registerFakeMachine(RagiumConstants.PLANTER) + registerMachine(RagiumBlockEntityTypes.PLANTER) // Electronics @JvmField @@ -310,6 +322,42 @@ data object RagiumBlocks { // 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 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 018a68f5f9..0dabb0aa45 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/RagiumBlockEntityTypes.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/RagiumBlockEntityTypes.kt @@ -21,6 +21,8 @@ import hiiragi283.ragium.common.block.entity.machine.HTCrusherBlockEntity import hiiragi283.ragium.common.block.entity.machine.HTCuttingMachineBlockEntity 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.HTProcessorBlockEntity import hiiragi283.ragium.common.block.entity.machine.HTSmelterBlockEntity import hiiragi283.ragium.common.block.entity.storage.HTCreativeBatteryBlockEntity @@ -94,11 +96,19 @@ 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 // Arcane @@ -158,8 +168,10 @@ data object RagiumBlockEntityTypes { registerProcessor(SMELTER.get()) registerProcessor(CHEMICAL_BATH.get()) + registerProcessor(MIXER.get()) registerProcessor(BREWERY.get()) + registerProcessor(PLANTER.get()) // Storage registerBlockEntity(TANK.get()) diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTBreweryBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTBreweryBlockEntity.kt index e3c1f6837e..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.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.fluid.HTVariableFluidTank -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: 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)) - } + 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/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/base/HTItemAndFluidToFluidBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemAndFluidToFluidBlockEntity.kt new file mode 100644 index 0000000000..7d11de35b6 --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemAndFluidToFluidBlockEntity.kt @@ -0,0 +1,163 @@ +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.HTInputSlot +import hiiragi283.lib.recipe.handler.HTOutputSlot +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.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.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: HTInputSlot.SingleFluid by lazy { + HTInputSlot.SingleFluid(this@HTItemAndFluidToFluidBlockEntity.inputTank) + } + private val inputSlot: HTInputSlot.SingleItem by lazy { + HTInputSlot.SingleItem(this@HTItemAndFluidToFluidBlockEntity.inputSlot) + } + private val outputTank: HTOutputSlot by lazy { + HTOutputSlot.SingleFluid(this@HTItemAndFluidToFluidBlockEntity.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 (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 outputTank.canInsert(output, transaction) + } + } + + override fun onComplete( + recipe: HTItemAndFluidToFluidRecipe, + input: HTItemAndFluidRecipeInput, + output: FluidStack + ) { + 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) + } + outputTank.insert(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/item/RagiumItems.kt b/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt index a34a51165f..fbc2aa63ec 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt @@ -1,6 +1,5 @@ package hiiragi283.ragium.common.item -import hiiragi283.lib.capability.HTEnergyCapabilities import hiiragi283.lib.capability.HTFluidCapabilities import hiiragi283.lib.collection.Table import hiiragi283.lib.collection.buildSortedSetMultiMap @@ -14,16 +13,12 @@ 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.RagiumConfig 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.api.util.HTStorageHelper -import hiiragi283.ragium.common.block.RagiumBlocks -import hiiragi283.ragium.common.block.storage.HTVoidTankBlock import hiiragi283.ragium.common.fluid.RagiumFluids import hiiragi283.ragium.common.item.component.RagiumToolMaterials import net.minecraft.ChatFormatting @@ -39,11 +34,8 @@ 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.InfiniteResourceHandler import net.neoforged.neoforge.transfer.access.ItemAccess -import net.neoforged.neoforge.transfer.energy.InfiniteEnergyHandler import net.neoforged.neoforge.transfer.fluid.FluidResource -import net.neoforged.neoforge.transfer.fluid.ItemAccessFluidHandler import java.util.function.Consumer data object RagiumItems { @@ -277,38 +269,6 @@ data object RagiumItems { @JvmStatic private fun registerCapabilities(event: RegisterCapabilitiesEvent) { - // Block - event.registerItem( - HTFluidCapabilities.item, - { _, access -> - ItemAccessFluidHandler( - access, - RagiumDataComponents.FLUID, - RagiumConfig.SERVER.tankCapacity.asInt - ) - }, - RagiumBlocks.TANK - ) - event.registerItem( - HTFluidCapabilities.item, - { _, _ -> HTVoidTankBlock.VOIDING_HANDLER }, - RagiumBlocks.VOID_TANK - ) - event.registerItem( - HTEnergyCapabilities.item, - { _, _ -> InfiniteEnergyHandler.INSTANCE }, - RagiumBlocks.CREATIVE_BATTERY - ) - event.registerItem( - HTFluidCapabilities.item, - { stack: ItemStack, _ -> - HTStorageHelper.getFluid(stack) - .let(FluidResource::of) - .takeUnless(FluidResource::isEmpty) - ?.let(::InfiniteResourceHandler) - }, - RagiumBlocks.CREATIVE_TANK - ) // Fluid event.registerItem( HTFluidCapabilities.item, @@ -320,6 +280,7 @@ data object RagiumItems { { _, access: ItemAccess -> HTOreSlurryBucketItem.BucketHandler(access) }, RagiumFluids.ORE_SLURRY.bucketHolder ) + // Item } @JvmStatic From 41a3b9c4ed6be4b92ba2b8c437a0a55d83d3f802 Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Sat, 19 Sep 2026 23:49:41 +0900 Subject: [PATCH 17/44] =?UTF-8?q?feat:=20=E3=83=AC=E3=82=B7=E3=83=94?= =?UTF-8?q?=E3=81=AE=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../recipe/RagiumVanillaRecipeProvider.kt | 170 ++++++++++++------ .../loot_table/blocks/creative_tank.json | 4 +- .../data/ragium/loot_table/blocks/tank.json | 4 +- .../recipe/shaped/tank_by_black_steel.json | 16 ++ .../{tank.json => tank_by_sooty_iron.json} | 2 +- .../recipe/shaped/torch_from_coal_coke.json | 16 ++ .../recipe/shaped/torch_from_pitch_coke.json | 16 ++ .../ragium/recipe/shaped/torch_from_tar.json | 16 ++ .../shapeless/fire_charge_from_coal_coke.json | 13 ++ .../fire_charge_from_pitch_coke.json | 13 ++ 10 files changed, 214 insertions(+), 56 deletions(-) create mode 100644 src/generated/resources/data/ragium/recipe/shaped/tank_by_black_steel.json rename src/generated/resources/data/ragium/recipe/shaped/{tank.json => tank_by_sooty_iron.json} (85%) create mode 100644 src/generated/resources/data/ragium/recipe/shaped/torch_from_coal_coke.json create mode 100644 src/generated/resources/data/ragium/recipe/shaped/torch_from_pitch_coke.json create mode 100644 src/generated/resources/data/ragium/recipe/shaped/torch_from_tar.json create mode 100644 src/generated/resources/data/ragium/recipe/shapeless/fire_charge_from_coal_coke.json create mode 100644 src/generated/resources/data/ragium/recipe/shapeless/fire_charge_from_pitch_coke.json diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt index 6ad9a7084f..f996c3b167 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt @@ -41,60 +41,11 @@ import kotlin.collections.forEach class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFuture) : HTRecipeProvider(packOutput, future, RagiumAPI.MOD_ID) { override fun exportValues() { + vanilla() machine() storage() material() - // 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) - // Bamboo Charcoal VanillaRecipeBuilders.smelting { ingredient { items { +Items.BAMBOO } } @@ -172,6 +123,115 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut 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) + } + // Machine // private fun machine() { @@ -311,9 +371,17 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut // Tank VanillaRecipeBuilders.shaped { hollow8() - define('A') { +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.COPPER) } + 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 { diff --git a/src/generated/resources/data/ragium/loot_table/blocks/creative_tank.json b/src/generated/resources/data/ragium/loot_table/blocks/creative_tank.json index ba4d76112c..23360595cf 100644 --- a/src/generated/resources/data/ragium/loot_table/blocks/creative_tank.json +++ b/src/generated/resources/data/ragium/loot_table/blocks/creative_tank.json @@ -16,8 +16,8 @@ "function": "minecraft:copy_components", "include": [ "minecraft:custom_name", - "ragium:fluid", - "ragium:owner_id" + "ragium:owner_id", + "ragium:fluid" ], "source": "block_entity" } diff --git a/src/generated/resources/data/ragium/loot_table/blocks/tank.json b/src/generated/resources/data/ragium/loot_table/blocks/tank.json index 39627c6a2e..21b5a4cd60 100644 --- a/src/generated/resources/data/ragium/loot_table/blocks/tank.json +++ b/src/generated/resources/data/ragium/loot_table/blocks/tank.json @@ -16,8 +16,8 @@ "function": "minecraft:copy_components", "include": [ "minecraft:custom_name", - "ragium:fluid", - "ragium:owner_id" + "ragium:owner_id", + "ragium:fluid" ], "source": "block_entity" } 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.json b/src/generated/resources/data/ragium/recipe/shaped/tank_by_sooty_iron.json similarity index 85% rename from src/generated/resources/data/ragium/recipe/shaped/tank.json rename to src/generated/resources/data/ragium/recipe/shaped/tank_by_sooty_iron.json index 18637615a1..84b6a149bd 100644 --- a/src/generated/resources/data/ragium/recipe/shaped/tank.json +++ b/src/generated/resources/data/ragium/recipe/shaped/tank_by_sooty_iron.json @@ -2,7 +2,7 @@ "type": "minecraft:crafting_shaped", "category": "misc", "key": { - "A": "#c:ingots/copper", + "A": "#c:ingots/sooty_iron", "B": "#c:buckets/empty" }, "pattern": [ 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/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/shapeless/fire_charge_from_pitch_coke.json b/src/generated/resources/data/ragium/recipe/shapeless/fire_charge_from_pitch_coke.json new file mode 100644 index 0000000000..9283495a75 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/shapeless/fire_charge_from_pitch_coke.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + "#c:gunpowders", + "minecraft:blaze_powder", + "#c:pitch_coke" + ], + "result": { + "count": 4, + "id": "minecraft:fire_charge" + } +} \ No newline at end of file From 96a08f08fc3cf86f41efc34b9c3c50d8f8cf9d53 Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Sun, 20 Sep 2026 00:00:20 +0900 Subject: [PATCH 18/44] =?UTF-8?q?feat:=20=E6=96=B0=E3=81=97=E3=81=84?= =?UTF-8?q?=E3=83=96=E3=83=AD=E3=83=83=E3=82=AF=E3=82=92=E8=BF=BD=E5=8A=A0?= =?UTF-8?q?=20-=20Enchanter=20/=20=E3=82=A8=E3=83=B3=E3=83=81=E3=83=A3?= =?UTF-8?q?=E3=83=B3=E3=82=BF=E3=83=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/integration/jei/RagiumJeiPlugin.kt | 1 + .../integration/jei/RagiumJeiRecipeTypes.kt | 2 +- .../data/lang/RagiumEnglishLangProvider.kt | 2 ++ .../data/lang/RagiumJapaneseLangProvider.kt | 2 ++ .../recipe/RagiumVanillaRecipeProvider.kt | 1 + .../assets/ragium/blockstates/enchanter.json | 34 +++++++++++++++++++ .../assets/ragium/items/enchanter.json | 6 ++++ .../resources/assets/ragium/lang/en_us.json | 1 + .../resources/assets/ragium/lang/ja_jp.json | 1 + .../assets/ragium/models/block/enchanter.json | 8 +++++ .../tags/block/mineable/pickaxe.json | 1 + .../ragium/loot_table/blocks/enchanter.json | 31 +++++++++++++++++ .../data/ragium/recipe/shaped/enchanter.json | 18 ++++++++++ .../data/ragium/tags/block/machines.json | 1 + .../ragium/tags/block/machines/arcane.json | 5 +++ .../data/ragium/tags/item/machines.json | 1 + .../ragium/tags/item/machines/arcane.json | 5 +++ .../hiiragi283/ragium/api/RagiumConfig.kt | 6 +++- .../hiiragi283/ragium/api/RagiumConstants.kt | 1 + .../ragium/common/block/RagiumBlocks.kt | 5 +++ .../block/entity/RagiumBlockEntityTypes.kt | 6 ++++ .../entity/machine/HTEnchanterBlockEntity.kt | 23 +++++++++++++ 22 files changed, 159 insertions(+), 2 deletions(-) create mode 100644 src/generated/resources/assets/ragium/blockstates/enchanter.json create mode 100644 src/generated/resources/assets/ragium/items/enchanter.json create mode 100644 src/generated/resources/assets/ragium/models/block/enchanter.json create mode 100644 src/generated/resources/data/ragium/loot_table/blocks/enchanter.json create mode 100644 src/generated/resources/data/ragium/recipe/shaped/enchanter.json create mode 100644 src/generated/resources/data/ragium/tags/block/machines/arcane.json create mode 100644 src/generated/resources/data/ragium/tags/item/machines/arcane.json create mode 100644 src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTEnchanterBlockEntity.kt diff --git a/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiPlugin.kt b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiPlugin.kt index c11f2524b5..2d09a6cff4 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiPlugin.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiPlugin.kt @@ -278,6 +278,7 @@ class RagiumJeiPlugin : HTJeiPlugin(RagiumAPI.MOD_ID) { registration.addCraftingStation(RagiumJeiRecipeTypes.PLANTING, RagiumBlocks.PLANTER) // Electronics // 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..bdafe9adc1 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiRecipeTypes.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiRecipeTypes.kt @@ -93,5 +93,5 @@ data object RagiumJeiRecipeTypes { // Arcane @JvmField val ENCHANTING: HTHolderJeiRecipeType = - HTJeiRecipeType(RagiumRecipeTypes.ENCHANTING, RagiumBlocks.MACHINE_CASING) + HTJeiRecipeType(RagiumRecipeTypes.ENCHANTING, RagiumBlocks.ENCHANTER) } diff --git a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt index 63efb5b273..6b60fc238f 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt @@ -60,6 +60,8 @@ class RagiumEnglishLangProvider(output: PackOutput) : 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") diff --git a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt index 170507464e..ad8d3557be 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt @@ -56,6 +56,8 @@ class RagiumJapaneseLangProvider(output: PackOutput) : add(RagiumBlocks.SCANNER, "レーザースキャナ") + add(RagiumBlocks.ENCHANTER, "エンチャンター") + add(RagiumBlocks.TANK, "可変タンク") add(RagiumBlocks.VOID_TANK, "廃棄タンク") add(RagiumBlocks.CREATIVE_BATTERY, "クリエイティブ用バッテリー") diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt index f996c3b167..4ad1e30b9f 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt @@ -264,6 +264,7 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut bio(RagiumBlocks.PLANTER) { items { +Items.FLOWER_POT } } // Electronics // Arcane + arcane(RagiumBlocks.ENCHANTER) { items { +Items.ENCHANTING_TABLE } } // Decoration VanillaRecipeBuilders.shaped { 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/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/lang/en_us.json b/src/generated/resources/assets/ragium/lang/en_us.json index cbb87405b0..a70a03c5cc 100644 --- a/src/generated/resources/assets/ragium/lang/en_us.json +++ b/src/generated/resources/assets/ragium/lang/en_us.json @@ -48,6 +48,7 @@ "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.freezer": "Freezer", "block.ragium.fuel": "Fuel", "block.ragium.gray_dye": "Gray Dye", diff --git a/src/generated/resources/assets/ragium/lang/ja_jp.json b/src/generated/resources/assets/ragium/lang/ja_jp.json index 923bde3b14..5513f1c571 100644 --- a/src/generated/resources/assets/ragium/lang/ja_jp.json +++ b/src/generated/resources/assets/ragium/lang/ja_jp.json @@ -48,6 +48,7 @@ "block.ragium.echo_block": "残響ブロック", "block.ragium.electrolyzer": "電解機", "block.ragium.electronics_machine_casing": "機械筐体 (電子)", + "block.ragium.enchanter": "エンチャンター", "block.ragium.freezer": "冷凍機", "block.ragium.fuel": "燃料油", "block.ragium.gray_dye": "灰色の染料", 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/data/minecraft/tags/block/mineable/pickaxe.json b/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json index cc9173a01a..eeb2283932 100644 --- a/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json +++ b/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json @@ -21,6 +21,7 @@ "ragium:echo_block", "ragium:electrolyzer", "ragium:electronics_machine_casing", + "ragium:enchanter", "ragium:freezer", "ragium:heat_machine_casing", "ragium:machine_casing", 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/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/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/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/lib/kotlin/hiiragi283/ragium/api/RagiumConfig.kt b/src/lib/kotlin/hiiragi283/ragium/api/RagiumConfig.kt index 62fbdde2d7..e130da3f95 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/RagiumConfig.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/RagiumConfig.kt @@ -157,9 +157,13 @@ data object RagiumConfig { // Electronics @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..a5fc84682a 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/RagiumConstants.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/RagiumConstants.kt @@ -36,6 +36,7 @@ data object RagiumConstants { const val SCANNER = "scanner" // Arcane + const val ENCHANTER = "enchanter" const val FLUID_DUPLICATOR = "fluid_duplicator" const val MASS_FABRICATOR = "mass_fabricator" diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt b/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt index 608fb0235b..f2063ed841 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt @@ -249,6 +249,9 @@ data object RagiumBlocks { registerFakeMachine(RagiumConstants.SCANNER) // Arcane + @JvmField + val ENCHANTER: HTBasicDeferredBlockAndItem = + registerMachine(RagiumBlockEntityTypes.ENCHANTER) @JvmField val MACHINES: ListMultiMap> = @@ -274,6 +277,8 @@ data object RagiumBlocks { put(HTMachineType.BIO, PLANTER) put(HTMachineType.ELECTRONICS, SCANNER) + + put(HTMachineType.ARCANE, ENCHANTER) } // Storage // 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 0dabb0aa45..e825b1c4af 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/RagiumBlockEntityTypes.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/RagiumBlockEntityTypes.kt @@ -19,6 +19,7 @@ import hiiragi283.ragium.common.block.entity.machine.HTChemicalBathBlockEntity import hiiragi283.ragium.common.block.entity.machine.HTCompressorBlockEntity import hiiragi283.ragium.common.block.entity.machine.HTCrusherBlockEntity import hiiragi283.ragium.common.block.entity.machine.HTCuttingMachineBlockEntity +import hiiragi283.ragium.common.block.entity.machine.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 @@ -111,6 +112,9 @@ data object RagiumBlockEntityTypes { // Electronics // Arcane + @JvmField + val ENCHANTER: HTDeferredBlockEntityType = + registerTick(RagiumConstants.ENCHANTER, ::HTEnchanterBlockEntity) // Storage // @@ -172,6 +176,8 @@ data object RagiumBlockEntityTypes { registerProcessor(BREWERY.get()) registerProcessor(PLANTER.get()) + + registerProcessor(ENCHANTER.get()) // Storage registerBlockEntity(TANK.get()) 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 +} From 0fe5f4c8e8935f100ca294c1f11ecb4e1fdcc084 Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Sun, 20 Sep 2026 18:42:03 +0900 Subject: [PATCH 19/44] =?UTF-8?q?feat:=20=E3=82=A2=E3=83=AB=E3=83=9F?= =?UTF-8?q?=E3=83=8B=E3=82=A6=E3=83=A0=E3=81=A8=E3=81=9D=E3=82=8C=E3=81=AB?= =?UTF-8?q?=E9=96=A2=E3=81=99=E3=82=8B=E7=B4=A0=E6=9D=90=E3=82=92=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0=20-=20Block=20=20=20-=20Block=20of=20Aluminum=20-=20F?= =?UTF-8?q?luid=20=20=20-=20Alumina=20Solution=20=20=20-=20Fluorine=20=20?= =?UTF-8?q?=20-=20Hydrogen=20Fluoride=20=20=20-=20Hydrofluoric=20Acid=20-?= =?UTF-8?q?=20Item=20=20=20-=20Alumina=20Dust=20=20=20-=20Aluminum=20Ingot?= =?UTF-8?q?=20=20=20-=20Aluminum=20Nugget=20=20=20-=20Bauxite=20Dust=20=20?= =?UTF-8?q?=20-=20Cryolite=20(Dust)=20=20=20-=20Fluorite=20(Dust)=20fix!:?= =?UTF-8?q?=20=E5=A1=A9=E7=B4=A0=E3=81=AEID=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hiiragi283/ragium/client/RagiumClient.kt | 17 ++++ .../data/lang/RagiumEnglishLangProvider.kt | 4 + .../data/lang/RagiumJapaneseLangProvider.kt | 4 + .../data/recipe/RagiumCommonRecipeProvider.kt | 89 +++++++++++++++++- .../recipe/RagiumMechanicalRecipeProvider.kt | 46 +++++++-- .../recipe/RagiumVanillaRecipeProvider.kt | 2 + .../ragium/blockstates/aluminum_block.json | 7 ++ .../ragium/blockstates/hydrofluoric_acid.json | 7 ++ .../assets/ragium/items/alumina_dust.json | 6 ++ .../ragium/items/alumina_solution_bucket.json | 12 +++ .../assets/ragium/items/aluminum_block.json | 6 ++ .../assets/ragium/items/aluminum_ingot.json | 6 ++ .../assets/ragium/items/aluminum_nugget.json | 6 ++ .../assets/ragium/items/bauxite_dust.json | 6 ++ ...oride_bucket.json => chlorine_bucket.json} | 2 +- .../assets/ragium/items/cryolite.json | 6 ++ .../assets/ragium/items/cryolite_dust.json | 6 ++ .../assets/ragium/items/fluorine_bucket.json | 13 +++ .../assets/ragium/items/fluorite.json | 6 ++ .../assets/ragium/items/fluorite_dust.json | 6 ++ .../items/hydrofluoric_acid_bucket.json | 12 +++ .../items/hydrogen_fluoride_bucket.json | 13 +++ .../resources/assets/ragium/lang/en_us.json | 33 ++++++- .../resources/assets/ragium/lang/ja_jp.json | 33 ++++++- .../ragium/models/block/aluminum_block.json | 6 ++ .../models/block/hydrofluoric_acid.json | 5 + .../ragium/models/item/alumina_dust.json | 6 ++ .../ragium/models/item/aluminum_ingot.json | 6 ++ .../ragium/models/item/aluminum_nugget.json | 6 ++ .../ragium/models/item/bauxite_dust.json | 6 ++ .../assets/ragium/models/item/cryolite.json | 6 ++ .../ragium/models/item/cryolite_dust.json | 6 ++ .../assets/ragium/models/item/fluorite.json | 6 ++ .../ragium/models/item/fluorite_dust.json | 6 ++ .../data/c/tags/block/storage_blocks.json | 1 + .../c/tags/block/storage_blocks/aluminum.json | 5 + .../data/c/tags/fluid/alumina_solution.json | 5 + .../resources/data/c/tags/fluid/chloride.json | 5 - .../resources/data/c/tags/fluid/chlorine.json | 5 + .../resources/data/c/tags/fluid/fluorine.json | 5 + .../resources/data/c/tags/fluid/gaseous.json | 4 +- .../data/c/tags/fluid/hydrofluoric_acid.json | 6 ++ .../data/c/tags/fluid/hydrogen_fluoride.json | 5 + .../resources/data/c/tags/item/buckets.json | 6 +- .../c/tags/item/buckets/alumina_solution.json | 5 + .../data/c/tags/item/buckets/chloride.json | 5 - .../data/c/tags/item/buckets/chlorine.json | 5 + .../data/c/tags/item/buckets/fluorine.json | 5 + .../tags/item/buckets/hydrofluoric_acid.json | 5 + .../tags/item/buckets/hydrogen_fluoride.json | 5 + .../resources/data/c/tags/item/dusts.json | 4 + .../data/c/tags/item/dusts/alumina.json | 5 + .../data/c/tags/item/dusts/bauxite.json | 5 + .../data/c/tags/item/dusts/cryolite.json | 5 + .../data/c/tags/item/dusts/fluorite.json | 5 + .../resources/data/c/tags/item/gems.json | 4 +- .../data/c/tags/item/gems/cryolite.json | 5 + .../data/c/tags/item/gems/fluorite.json | 5 + .../resources/data/c/tags/item/ingots.json | 1 + .../data/c/tags/item/ingots/aluminum.json | 5 + .../resources/data/c/tags/item/nuggets.json | 1 + .../data/c/tags/item/nuggets/aluminum.json | 5 + .../data/c/tags/item/storage_blocks.json | 1 + .../c/tags/item/storage_blocks/aluminum.json | 5 + .../tags/block/mineable/pickaxe.json | 1 + .../minecraft/tags/item/metal_nuggets.json | 1 + .../loot_table/blocks/aluminum_block.json | 21 +++++ .../recipe/alloying/aluminum_ingot.json | 32 +++++++ .../ragium/recipe/bathing/alumina_dust.json | 16 ++++ .../recipe/crushing/copper_dust_from_raw.json | 9 ++ .../crushing/cryolite_dust_from_gem.json | 12 +++ .../crushing/fluorite_dust_from_gem.json | 12 +++ .../recipe/crushing/gold_dust_from_raw.json | 9 ++ .../recipe/crushing/iron_dust_from_raw.json | 9 ++ .../ragium/recipe/crushing/packed_ice.json | 18 ++++ .../data/ragium/recipe/crushing/red_sand.json | 14 ++- .../data/ragium/recipe/crushing/sand.json | 14 ++- .../hydrogen_from_salt_water.json | 2 +- .../recipe/mixing/alumina_solution.json | 16 ++++ .../data/ragium/recipe/mixing/fluorine.json | 22 +++++ .../data/ragium/recipe/reacting/cryolite.json | 16 ++++ .../recipe/reacting/hydrofluoric_acid.json | 16 ++++ .../recipe/reacting/hydrogen_chloride.json | 4 +- .../recipe/reacting/hydrogen_fluoride.json | 16 ++++ .../ragium/recipe/shaped/aluminum_block.json | 17 ++++ .../shaped/aluminum_ingot_from_nugget.json | 17 ++++ .../shapeless/aluminum_ingot_from_block.json | 12 +++ .../shapeless/aluminum_nugget_from_ingot.json | 12 +++ .../hiiragi283/lib/tag/HTMaterialKey.kt | 16 ++++ .../ragium/api/material/RagiumMaterial.kt | 41 ++++++-- .../ragium/common/block/RagiumBlocks.kt | 1 + .../ragium/common/fluid/RagiumFluids.kt | 21 ++++- .../ragium/common/item/RagiumItems.kt | 4 + .../ragium/textures/block/aluminum_block.png | Bin 0 -> 180 bytes .../ragium/textures/block/void_tank_side.png | Bin 0 -> 250 bytes .../ragium/textures/block/void_tank_top.png | Bin 0 -> 250 bytes .../ragium/textures/item/alumina_dust.png | Bin 0 -> 342 bytes .../ragium/textures/item/aluminum_ingot.png | Bin 0 -> 284 bytes .../ragium/textures/item/aluminum_nugget.png | Bin 0 -> 184 bytes .../ragium/textures/item/bauxite_dust.png | Bin 0 -> 288 bytes .../ragium/textures/item/carbon_dust.png | Bin 0 -> 300 bytes .../assets/ragium/textures/item/cryolite.png | Bin 0 -> 394 bytes .../ragium/textures/item/cryolite_dust.png | Bin 0 -> 334 bytes .../assets/ragium/textures/item/fluorite.png | Bin 0 -> 403 bytes .../ragium/textures/item/fluorite_dust.png | Bin 0 -> 335 bytes .../ragium/textures/item/silicon_dust.png | Bin 0 -> 325 bytes 106 files changed, 893 insertions(+), 48 deletions(-) create mode 100644 src/generated/resources/assets/ragium/blockstates/aluminum_block.json create mode 100644 src/generated/resources/assets/ragium/blockstates/hydrofluoric_acid.json create mode 100644 src/generated/resources/assets/ragium/items/alumina_dust.json create mode 100644 src/generated/resources/assets/ragium/items/alumina_solution_bucket.json create mode 100644 src/generated/resources/assets/ragium/items/aluminum_block.json create mode 100644 src/generated/resources/assets/ragium/items/aluminum_ingot.json create mode 100644 src/generated/resources/assets/ragium/items/aluminum_nugget.json create mode 100644 src/generated/resources/assets/ragium/items/bauxite_dust.json rename src/generated/resources/assets/ragium/items/{chloride_bucket.json => chlorine_bucket.json} (89%) create mode 100644 src/generated/resources/assets/ragium/items/cryolite.json create mode 100644 src/generated/resources/assets/ragium/items/cryolite_dust.json create mode 100644 src/generated/resources/assets/ragium/items/fluorine_bucket.json create mode 100644 src/generated/resources/assets/ragium/items/fluorite.json create mode 100644 src/generated/resources/assets/ragium/items/fluorite_dust.json create mode 100644 src/generated/resources/assets/ragium/items/hydrofluoric_acid_bucket.json create mode 100644 src/generated/resources/assets/ragium/items/hydrogen_fluoride_bucket.json create mode 100644 src/generated/resources/assets/ragium/models/block/aluminum_block.json create mode 100644 src/generated/resources/assets/ragium/models/block/hydrofluoric_acid.json create mode 100644 src/generated/resources/assets/ragium/models/item/alumina_dust.json create mode 100644 src/generated/resources/assets/ragium/models/item/aluminum_ingot.json create mode 100644 src/generated/resources/assets/ragium/models/item/aluminum_nugget.json create mode 100644 src/generated/resources/assets/ragium/models/item/bauxite_dust.json create mode 100644 src/generated/resources/assets/ragium/models/item/cryolite.json create mode 100644 src/generated/resources/assets/ragium/models/item/cryolite_dust.json create mode 100644 src/generated/resources/assets/ragium/models/item/fluorite.json create mode 100644 src/generated/resources/assets/ragium/models/item/fluorite_dust.json create mode 100644 src/generated/resources/data/c/tags/block/storage_blocks/aluminum.json create mode 100644 src/generated/resources/data/c/tags/fluid/alumina_solution.json delete mode 100644 src/generated/resources/data/c/tags/fluid/chloride.json create mode 100644 src/generated/resources/data/c/tags/fluid/chlorine.json create mode 100644 src/generated/resources/data/c/tags/fluid/fluorine.json create mode 100644 src/generated/resources/data/c/tags/fluid/hydrofluoric_acid.json create mode 100644 src/generated/resources/data/c/tags/fluid/hydrogen_fluoride.json create mode 100644 src/generated/resources/data/c/tags/item/buckets/alumina_solution.json delete mode 100644 src/generated/resources/data/c/tags/item/buckets/chloride.json create mode 100644 src/generated/resources/data/c/tags/item/buckets/chlorine.json create mode 100644 src/generated/resources/data/c/tags/item/buckets/fluorine.json create mode 100644 src/generated/resources/data/c/tags/item/buckets/hydrofluoric_acid.json create mode 100644 src/generated/resources/data/c/tags/item/buckets/hydrogen_fluoride.json create mode 100644 src/generated/resources/data/c/tags/item/dusts/alumina.json create mode 100644 src/generated/resources/data/c/tags/item/dusts/bauxite.json create mode 100644 src/generated/resources/data/c/tags/item/dusts/cryolite.json create mode 100644 src/generated/resources/data/c/tags/item/dusts/fluorite.json create mode 100644 src/generated/resources/data/c/tags/item/gems/cryolite.json create mode 100644 src/generated/resources/data/c/tags/item/gems/fluorite.json create mode 100644 src/generated/resources/data/c/tags/item/ingots/aluminum.json create mode 100644 src/generated/resources/data/c/tags/item/nuggets/aluminum.json create mode 100644 src/generated/resources/data/c/tags/item/storage_blocks/aluminum.json create mode 100644 src/generated/resources/data/ragium/loot_table/blocks/aluminum_block.json create mode 100644 src/generated/resources/data/ragium/recipe/alloying/aluminum_ingot.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/alumina_dust.json create mode 100644 src/generated/resources/data/ragium/recipe/crushing/cryolite_dust_from_gem.json create mode 100644 src/generated/resources/data/ragium/recipe/crushing/fluorite_dust_from_gem.json create mode 100644 src/generated/resources/data/ragium/recipe/crushing/packed_ice.json create mode 100644 src/generated/resources/data/ragium/recipe/mixing/alumina_solution.json create mode 100644 src/generated/resources/data/ragium/recipe/mixing/fluorine.json create mode 100644 src/generated/resources/data/ragium/recipe/reacting/cryolite.json create mode 100644 src/generated/resources/data/ragium/recipe/reacting/hydrofluoric_acid.json create mode 100644 src/generated/resources/data/ragium/recipe/reacting/hydrogen_fluoride.json create mode 100644 src/generated/resources/data/ragium/recipe/shaped/aluminum_block.json create mode 100644 src/generated/resources/data/ragium/recipe/shaped/aluminum_ingot_from_nugget.json create mode 100644 src/generated/resources/data/ragium/recipe/shapeless/aluminum_ingot_from_block.json create mode 100644 src/generated/resources/data/ragium/recipe/shapeless/aluminum_nugget_from_ingot.json create mode 100644 src/lib/kotlin/hiiragi283/lib/tag/HTMaterialKey.kt create mode 100644 src/main/resources/assets/ragium/textures/block/aluminum_block.png create mode 100644 src/main/resources/assets/ragium/textures/block/void_tank_side.png create mode 100644 src/main/resources/assets/ragium/textures/block/void_tank_top.png create mode 100644 src/main/resources/assets/ragium/textures/item/alumina_dust.png create mode 100644 src/main/resources/assets/ragium/textures/item/aluminum_ingot.png create mode 100644 src/main/resources/assets/ragium/textures/item/aluminum_nugget.png create mode 100644 src/main/resources/assets/ragium/textures/item/bauxite_dust.png create mode 100644 src/main/resources/assets/ragium/textures/item/carbon_dust.png create mode 100644 src/main/resources/assets/ragium/textures/item/cryolite.png create mode 100644 src/main/resources/assets/ragium/textures/item/cryolite_dust.png create mode 100644 src/main/resources/assets/ragium/textures/item/fluorite.png create mode 100644 src/main/resources/assets/ragium/textures/item/fluorite_dust.png create mode 100644 src/main/resources/assets/ragium/textures/item/silicon_dust.png diff --git a/src/client/kotlin/hiiragi283/ragium/client/RagiumClient.kt b/src/client/kotlin/hiiragi283/ragium/client/RagiumClient.kt index c71d20e49c..6614278df8 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/RagiumClient.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/RagiumClient.kt @@ -113,6 +113,10 @@ data object RagiumClient : HTClientMod() { transparent() colorTint(Color(0x3399cc)) } + register.register(RagiumFluids.FLUORINE) { + transparent() + colorTint(Color(0x33cc99)) + } register.register(RagiumFluids.CHLORINE) { transparent() colorTint(Color(0x99cc33)) @@ -154,10 +158,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) { + dull() + colorTint(Color(0xcc9999)) + } register.register(RagiumFluids.SULFUR_DIOXIDE) { transparent() colorTint(Color(0x996600)) diff --git a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt index 6b60fc238f..ee429bd233 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt @@ -80,6 +80,7 @@ class RagiumEnglishLangProvider(output: PackOutput) : addFluid(RagiumFluids.HYDROGEN, "Hydrogen") addFluid(RagiumFluids.OXYGEN, "Oxygen") + addFluid(RagiumFluids.FLUORINE, "Fluorine") addFluid(RagiumFluids.CHLORINE, "Chlorine") addFluid(RagiumFluids.WOOD_TAR, "Wood Tar") @@ -91,7 +92,10 @@ class RagiumEnglishLangProvider(output: PackOutput) : addFluid(RagiumFluids.ANTI_RUST_OIL, "Anti-rust Oil") 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") diff --git a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt index ad8d3557be..fbbaacb859 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt @@ -76,6 +76,7 @@ class RagiumJapaneseLangProvider(output: PackOutput) : addFluid(RagiumFluids.HYDROGEN, "水素") addFluid(RagiumFluids.OXYGEN, "酸素") + addFluid(RagiumFluids.FLUORINE, "フッ素") addFluid(RagiumFluids.CHLORINE, "塩素") addFluid(RagiumFluids.WOOD_TAR, "木タール") @@ -87,7 +88,10 @@ class RagiumJapaneseLangProvider(output: PackOutput) : addFluid(RagiumFluids.ANTI_RUST_OIL, "防錆油") 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, "硫酸") diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt index e66d0129eb..749dff840c 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt @@ -5,6 +5,7 @@ import hiiragi283.lib.data.recipe.HTRecipeProvider import hiiragi283.lib.recipe.ingredient.HTMaterialTagsIngredient import hiiragi283.lib.tag.CommonTagPrefixes import hiiragi283.lib.tag.HTCommonTags +import hiiragi283.lib.tag.HTMaterialKey import hiiragi283.ragium.api.RagiumAPI import hiiragi283.ragium.api.data.recipe.builder.RagiumRecipeBuilders import hiiragi283.ragium.api.material.HTItemPart @@ -207,6 +208,9 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu sulfuricAcid() nitricAcid() explosive() + + fluorine() + aluminum() } private fun chlorine() { @@ -226,11 +230,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 { @@ -331,6 +338,84 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu // 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.FLUORINE + amount *= 2 + } + }.save(exporter) + // H2 + F2 -> 2 HF + RagiumRecipeBuilders.reacting { + primaryIngredient { +holderSet(RagiumFluids.HYDROGEN) } + secondaryIngredient { +holderSet(RagiumFluids.FLUORINE) } + fluidResult { + +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 -> Al2O3 + RagiumRecipeBuilders.bathing { + itemIngredient { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Mineral.BAUXITE) } + fluidIngredient { + +holderSet(RagiumFluids.NAOH_SOLUTION) + amount /= 2 + } + result { +RagiumItems.getOrThrow(HTItemPart.DUST, RagiumMaterial.Other.ALUMINA) } + }.save(exporter) + // Al2O3 + NaOH aq -> Alumina Solution + RagiumRecipeBuilders.mixing { + itemIngredient { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Other.ALUMINA) } + fluidIngredient { + +holderSet(RagiumFluids.NAOH_SOLUTION) + amount /= 2 + } + result { + +RagiumFluids.ALUMINA_SOLUTION + amount /= 2 + } + }.save(exporter) + // Alumina Solution + HF aq -> Na3AlF6 + RagiumRecipeBuilders.reacting { + primaryIngredient { +holderSet(RagiumFluids.ALUMINA_SOLUTION) } + secondaryIngredient { + +holderSet(RagiumFluids.HYDROGEN_FLUORIDE) + amount *= 6 + } + itemResult { +RagiumItems.getOrThrow(HTItemPart.GEM, RagiumMaterial.Gem.CRYOLITE) } + }.save(exporter) + // Al2O3 + Na3AlF6 -> Al + RagiumRecipeBuilders.alloying { + primary { + +materialTags( + nelOf(CommonTagPrefixes.DUST, CommonTagPrefixes.GEM), + nelOf( + RagiumMaterial.Other.ALUMINA, + HTMaterialKey("ruby"), + HTMaterialKey("sapphire") + ) + ) + } + secondary { +dustOrGem(RagiumMaterial.Gem.CRYOLITE) } + result { + +RagiumItems.getOrThrow(HTItemPart.INGOT, RagiumMaterial.Metal.ALUMINUM) + count = 3 + } + }.save(exporter) + } + // Electronics // private fun electronics() { diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumMechanicalRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumMechanicalRecipeProvider.kt index 1391b637e6..237cc58c8f 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumMechanicalRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumMechanicalRecipeProvider.kt @@ -356,8 +356,6 @@ class RagiumMechanicalRecipeProvider(packOutput: PackOutput, future: Completable }.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 { @@ -368,7 +366,40 @@ 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 { ingredient { items { +Items.BOOK } } @@ -412,9 +443,10 @@ class RagiumMechanicalRecipeProvider(packOutput: PackOutput, future: Completable }.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) } @@ -607,17 +639,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.get(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/RagiumVanillaRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt index 4ad1e30b9f..19b3c8f4a8 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt @@ -403,11 +403,13 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut HTSimpleDeferredItem(vanillaId("echo_shard")), size = StorageBlockSize.FOUR ) + baseToBlock(RagiumMaterial.Metal.ALUMINUM, HTItemPart.INGOT) baseToBlock(RagiumMaterial.Metal.SOOTY_IRON, HTItemPart.INGOT) baseToBlock(RagiumMaterial.Metal.BLACK_STEEL, HTItemPart.INGOT) baseToBlock(RagiumMaterial.Metal.VOID_METAL, HTItemPart.INGOT) // Ingot <-> Nugget ingotToNugget(RagiumMaterial.Metal.NETHERITE, ingot = HTSimpleDeferredItem(vanillaId("netherite_ingot"))) + ingotToNugget(RagiumMaterial.Metal.ALUMINUM) ingotToNugget(RagiumMaterial.Metal.SOOTY_IRON) ingotToNugget(RagiumMaterial.Metal.BLACK_STEEL) ingotToNugget(RagiumMaterial.Metal.VOID_METAL) 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/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/items/alumina_dust.json b/src/generated/resources/assets/ragium/items/alumina_dust.json new file mode 100644 index 0000000000..d205c7d88b --- /dev/null +++ b/src/generated/resources/assets/ragium/items/alumina_dust.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "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/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/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_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/fluorine_bucket.json b/src/generated/resources/assets/ragium/items/fluorine_bucket.json new file mode 100644 index 0000000000..5944435aef --- /dev/null +++ b/src/generated/resources/assets/ragium/items/fluorine_bucket.json @@ -0,0 +1,13 @@ +{ + "model": { + "type": "neoforge:fluid_container", + "apply_fluid_luminosity": false, + "flip_gas": true, + "fluid": "ragium:fluorine", + "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/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_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/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/lang/en_us.json b/src/generated/resources/assets/ragium/lang/en_us.json index a70a03c5cc..776e1d5b4c 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,7 +35,7 @@ "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", @@ -49,6 +51,7 @@ "block.ragium.electrolyzer": "Electrolyzer", "block.ragium.electronics_machine_casing": "Machine Casing (Electronics)", "block.ragium.enchanter": "Enchanter", + "block.ragium.fluorine": "Fluorine", "block.ragium.freezer": "Freezer", "block.ragium.fuel": "Fuel", "block.ragium.gray_dye": "Gray Dye", @@ -56,8 +59,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", @@ -152,11 +157,16 @@ "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.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", @@ -169,7 +179,7 @@ "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", @@ -179,6 +189,8 @@ "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", @@ -188,6 +200,9 @@ "item.ragium.electronics_machine_parts": "Machine Parts (Electronics)", "item.ragium.emerald_dust": "Emerald Dust", "item.ragium.emerald_gear": "Emerald Gear", + "item.ragium.fluorine_bucket": "Fluorine Bucket", + "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", @@ -197,8 +212,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", @@ -291,10 +308,11 @@ "recipe_type.ragium.pyrolyzing": "Pyrolyzing", "recipe_type.ragium.reacting": "Chemical Reacting", "recipe_type.ragium.refining": "Refining", + "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", @@ -313,11 +331,14 @@ "tag.fluid.c.dyes.red": "Red Dye", "tag.fluid.c.dyes.white": "White Dye", "tag.fluid.c.dyes.yellow": "Yellow Dye", + "tag.fluid.c.fluorine": "Fluorine", "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", @@ -332,10 +353,11 @@ "tag.fluid.c.sulfur_trioxide": "Sulfur Trioxide", "tag.fluid.c.sulfuric_acid": "Sulfuric Acid", "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", @@ -354,11 +376,14 @@ "tag.item.c.buckets.dye.red": "Red Dye Bucket", "tag.item.c.buckets.dye.white": "White Dye Bucket", "tag.item.c.buckets.dye.yellow": "Yellow Dye Bucket", + "tag.item.c.buckets.fluorine": "Fluorine Bucket", "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", diff --git a/src/generated/resources/assets/ragium/lang/ja_jp.json b/src/generated/resources/assets/ragium/lang/ja_jp.json index 5513f1c571..d13173ac11 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,7 +35,7 @@ "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": "圧縮機", @@ -49,6 +51,7 @@ "block.ragium.electrolyzer": "電解機", "block.ragium.electronics_machine_casing": "機械筐体 (電子)", "block.ragium.enchanter": "エンチャンター", + "block.ragium.fluorine": "フッ素", "block.ragium.freezer": "冷凍機", "block.ragium.fuel": "燃料油", "block.ragium.gray_dye": "灰色の染料", @@ -56,8 +59,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": "黄緑色の染料", @@ -152,11 +157,16 @@ "item.minecraft.tipped_arrow.effect.frostbite": "凍傷の矢", "item.minecraft.tipped_arrow.effect.golden_apple": "金リンゴの矢", "item.minecraft.tipped_arrow.effect.hunger": "空腹の矢", + "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": "黒色の染料入りバケツ", @@ -169,7 +179,7 @@ "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": "石炭コークス", @@ -179,6 +189,8 @@ "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": "ダイヤモンドの歯車", @@ -188,6 +200,9 @@ "item.ragium.electronics_machine_parts": "機械部品 (電子)", "item.ragium.emerald_dust": "エメラルドの粉", "item.ragium.emerald_gear": "エメラルドの歯車", + "item.ragium.fluorine_bucket": "フッ素入りバケツ", + "item.ragium.fluorite": "蛍石", + "item.ragium.fluorite_dust": "蛍石の粉", "item.ragium.fuel_bucket": "燃料油入りバケツ", "item.ragium.glass_dust": "ガラスの粉", "item.ragium.gold_dust": "金の粉", @@ -197,8 +212,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": "ラピスの粉", @@ -291,10 +308,11 @@ "recipe_type.ragium.pyrolyzing": "熱分解", "recipe_type.ragium.reacting": "化学反応", "recipe_type.ragium.refining": "蒸留", + "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": "黒色の染料", @@ -313,11 +331,14 @@ "tag.fluid.c.dyes.red": "赤色の染料", "tag.fluid.c.dyes.white": "白色の染料", "tag.fluid.c.dyes.yellow": "黄色の染料", + "tag.fluid.c.fluorine": "フッ素", "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": "溶融ガラス", @@ -332,10 +353,11 @@ "tag.fluid.c.sulfur_trioxide": "三酸化硫黄", "tag.fluid.c.sulfuric_acid": "硫酸", "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": "黒色の染料入りバケツ", @@ -354,11 +376,14 @@ "tag.item.c.buckets.dye.red": "赤色の染料入りバケツ", "tag.item.c.buckets.dye.white": "白色の染料入りバケツ", "tag.item.c.buckets.dye.yellow": "黄色の染料入りバケツ", + "tag.item.c.buckets.fluorine": "フッ素入りバケツ", "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": "溶融ガラス入りバケツ", 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/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/item/alumina_dust.json b/src/generated/resources/assets/ragium/models/item/alumina_dust.json new file mode 100644 index 0000000000..6a44d7b20f --- /dev/null +++ b/src/generated/resources/assets/ragium/models/item/alumina_dust.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "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/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/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/data/c/tags/block/storage_blocks.json b/src/generated/resources/data/c/tags/block/storage_blocks.json index ab4e5fcead..7512c62968 100644 --- a/src/generated/resources/data/c/tags/block/storage_blocks.json +++ b/src/generated/resources/data/c/tags/block/storage_blocks.json @@ -1,5 +1,6 @@ { "values": [ + "#c:storage_blocks/aluminum", "#c:storage_blocks/black_steel", "#c:storage_blocks/charcoal", "#c:storage_blocks/coal_coke", 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/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/fluorine.json b/src/generated/resources/data/c/tags/fluid/fluorine.json new file mode 100644 index 0000000000..e2bf96ecaa --- /dev/null +++ b/src/generated/resources/data/c/tags/fluid/fluorine.json @@ -0,0 +1,5 @@ +{ + "values": [ + "ragium:fluorine" + ] +} \ 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..e78e0040d6 100644 --- a/src/generated/resources/data/c/tags/fluid/gaseous.json +++ b/src/generated/resources/data/c/tags/fluid/gaseous.json @@ -1,8 +1,10 @@ { "values": [ - "#c:chloride", + "#c:chlorine", + "#c:fluorine", "#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/item/buckets.json b/src/generated/resources/data/c/tags/item/buckets.json index 187a939ef9..b3d8ab72dc 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", @@ -22,11 +23,14 @@ "#c:buckets/dye/red", "#c:buckets/dye/white", "#c:buckets/dye/yellow", + "#c:buckets/fluorine", "#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", 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/fluorine.json b/src/generated/resources/data/c/tags/item/buckets/fluorine.json new file mode 100644 index 0000000000..d8a313ba53 --- /dev/null +++ b/src/generated/resources/data/c/tags/item/buckets/fluorine.json @@ -0,0 +1,5 @@ +{ + "values": [ + "ragium:fluorine_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/dusts.json b/src/generated/resources/data/c/tags/item/dusts.json index 0e728bb4b4..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/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", 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/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/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/storage_blocks.json b/src/generated/resources/data/c/tags/item/storage_blocks.json index ab4e5fcead..7512c62968 100644 --- a/src/generated/resources/data/c/tags/item/storage_blocks.json +++ b/src/generated/resources/data/c/tags/item/storage_blocks.json @@ -1,5 +1,6 @@ { "values": [ + "#c:storage_blocks/aluminum", "#c:storage_blocks/black_steel", "#c:storage_blocks/charcoal", "#c:storage_blocks/coal_coke", 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/minecraft/tags/block/mineable/pickaxe.json b/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json index eeb2283932..a1eb255c04 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", 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/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/recipe/alloying/aluminum_ingot.json b/src/generated/resources/data/ragium/recipe/alloying/aluminum_ingot.json new file mode 100644 index 0000000000..1910343881 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/alloying/aluminum_ingot.json @@ -0,0 +1,32 @@ +{ + "type": "ragium:alloying", + "primary_ingredient": { + "count": 1, + "items": { + "neoforge:ingredient_type": "ragium:material_tags", + "tags": [ + "c:dusts/alumina", + "c:dusts/ruby", + "c:dusts/sapphire", + "c:gems/alumina", + "c:gems/ruby", + "c:gems/sapphire" + ] + } + }, + "result": { + "count": 3, + "id": "ragium:aluminum_ingot" + }, + "secondary_ingredient": { + "count": 1, + "items": { + "neoforge:ingredient_type": "ragium:material_tags", + "tags": [ + "c:dusts/cryolite", + "c:gems/cryolite" + ] + } + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/alumina_dust.json b/src/generated/resources/data/ragium/recipe/bathing/alumina_dust.json new file mode 100644 index 0000000000..5266da408a --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/bathing/alumina_dust.json @@ -0,0 +1,16 @@ +{ + "type": "ragium:bathing", + "fluid_ingredient": { + "amount": 500, + "fluids": "#c:sodium_hydroxide_solution" + }, + "item_ingredient": { + "count": 1, + "items": "#c:dusts/bauxite" + }, + "result": { + "count": 1, + "id": "ragium:alumina_dust" + }, + "time": 200 +} \ No newline at end of file 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 111b4a6a99..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,4 +1,13 @@ { + "neoforge:conditions": [ + { + "type": "neoforge:not", + "value": { + "type": "neoforge:tag_empty", + "tag": "c:raw_materials/copper" + } + } + ], "type": "ragium:crushing", "ingredient": { "count": 3, 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/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/gold_dust_from_raw.json b/src/generated/resources/data/ragium/recipe/crushing/gold_dust_from_raw.json index 7ece4ca6ec..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,4 +1,13 @@ { + "neoforge:conditions": [ + { + "type": "neoforge:not", + "value": { + "type": "neoforge:tag_empty", + "tag": "c:raw_materials/gold" + } + } + ], "type": "ragium:crushing", "ingredient": { "count": 3, 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 624a64a81c..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,4 +1,13 @@ { + "neoforge:conditions": [ + { + "type": "neoforge:not", + "value": { + "type": "neoforge:tag_empty", + "tag": "c:raw_materials/iron" + } + } + ], "type": "ragium:crushing", "ingredient": { "count": 3, 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/red_sand.json b/src/generated/resources/data/ragium/recipe/crushing/red_sand.json index fa5904c680..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" }, - "result": { - "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 74b20e6eaa..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" }, - "result": { - "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/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/mixing/alumina_solution.json b/src/generated/resources/data/ragium/recipe/mixing/alumina_solution.json new file mode 100644 index 0000000000..dce9812d4b --- /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/alumina" + }, + "result": { + "amount": 500, + "id": "ragium:alumina_solution" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/mixing/fluorine.json b/src/generated/resources/data/ragium/recipe/mixing/fluorine.json new file mode 100644 index 0000000000..a1a72eb6ca --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/mixing/fluorine.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:fluorine" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/reacting/cryolite.json b/src/generated/resources/data/ragium/recipe/reacting/cryolite.json new file mode 100644 index 0000000000..602323f23c --- /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:hydrogen_fluoride" + }, + "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/hydrogen_fluoride.json b/src/generated/resources/data/ragium/recipe/reacting/hydrogen_fluoride.json new file mode 100644 index 0000000000..b59801b6f4 --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/reacting/hydrogen_fluoride.json @@ -0,0 +1,16 @@ +{ + "type": "ragium:reacting", + "fluid_result": { + "amount": 2000, + "id": "ragium:hydrogen_fluoride" + }, + "primary_ingredient": { + "amount": 1000, + "fluids": "#c:hydrogen" + }, + "secondary_ingredient": { + "amount": 1000, + "fluids": "#c:fluorine" + }, + "time": 200 +} \ No newline at end of file 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/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/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/ragium/api/material/RagiumMaterial.kt b/src/lib/kotlin/hiiragi283/ragium/api/material/RagiumMaterial.kt index 2951240da5..e72b74ffd3 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/material/RagiumMaterial.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/material/RagiumMaterial.kt @@ -58,6 +58,11 @@ sealed interface RagiumMaterial : NITER("Niter", "硝石"), BORAX("Borax", "ホウ砂"), + /** + * @since 26.1.7 + */ + BAUXITE("Bauxite", "ボーキサイト"), + // Ragium RAGINITE("Raginite", "ラギナイト") ; @@ -79,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)) @@ -95,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() } @@ -141,6 +165,11 @@ sealed interface RagiumMaterial : // Common CARBON(false, "Carbon", "炭素"), + /** + * @since 26.1.7 + */ + ALUMINA(false, "Alumina", "アルミナ"), + /** * @since 26.1.7 */ diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt b/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt index f2063ed841..f69480baa7 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt @@ -144,6 +144,7 @@ data object RagiumBlocks { RagiumMaterial.Fuel.COAL_COKE to copyOf(Blocks.COAL_BLOCK).mapColor(MapColor.COLOR_GRAY), RagiumMaterial.Fuel.PITCH_COKE to copyOf(Blocks.COAL_BLOCK).mapColor(MapColor.COLOR_BLUE), RagiumMaterial.Gem.ECHO to copyOf(Blocks.AMETHYST_BLOCK).mapColor(MapColor.COLOR_CYAN), + 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) diff --git a/src/main/kotlin/hiiragi283/ragium/common/fluid/RagiumFluids.kt b/src/main/kotlin/hiiragi283/ragium/common/fluid/RagiumFluids.kt index 47bba7a2ea..b9f0ff34f3 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) } @@ -126,9 +127,12 @@ data object RagiumFluids { @JvmField val OXYGEN: HTFluidContent.Virtual = REGISTER.registerVirtual("oxygen") { properties = gaseous() } + @JvmField + val FLUORINE: HTFluidContent.Virtual = REGISTER.registerVirtual("fluorine") { properties = gaseous() } + // 4th @JvmField - val CHLORINE: HTFluidContent.Virtual = REGISTER.registerVirtual("chloride") { properties = gaseous() } + val CHLORINE: HTFluidContent.Virtual = REGISTER.registerVirtual("chlorine") { properties = gaseous() } // Chemical // @@ -184,12 +188,27 @@ data object RagiumFluids { typeFactory = { HTExplosiveFluidType(6f, it) } } + @JvmField + val HYDROGEN_FLUORIDE: HTFluidContent.Virtual = REGISTER.registerVirtual("hydrogen_fluoride") { + properties = gaseous() + } + + @JvmField + val HYDROFLUORIC_ACID: HTFluidContent.Flowing = REGISTER.registerFlowing("hydrofluoric_acid") { + properties = liquid() + } + // 4th @JvmField val NAOH_SOLUTION: HTFluidContent.Flowing = REGISTER.registerFlowing("sodium_hydroxide_solution") { properties = liquid() } + @JvmField + val ALUMINA_SOLUTION: HTFluidContent.Virtual = REGISTER.registerVirtual("alumina_solution") { + properties = liquid() + } + @JvmField val SULFUR_DIOXIDE: HTFluidContent.Virtual = REGISTER.registerVirtual("sulfur_dioxide") { properties = gaseous() } diff --git a/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt b/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt index fbc2aa63ec..e7fab4d32c 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt @@ -80,11 +80,14 @@ data object RagiumItems { 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) @@ -94,6 +97,7 @@ data object RagiumItems { 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) }.flatMapTable { (material: RagiumMaterial, parts: Collection) -> parts.map { part: HTItemPart -> 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 0000000000000000000000000000000000000000..d7871c199f62b8801185e4a279a0a9633b43055a GIT binary patch literal 180 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`)t)YnAr*1SccSn9ncv8Cfay|p z)C8YRg6GfAOROmRp~TGXqwdil5^QH*!xwh$h=U@-ZiW==GcG}AlOIkOX8zqO)86o9 zQ%%j6u0#`ol>!}7g7cOvKa!j-DJQ$LZ;DVO(~=oXUA7adw3fOocxxc+>DMVQzc-a3 dv1l_3!-Ys!rajpYb_1Qk;OXk;vd$@?2>`|rKg0k4 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..2dd99509b7c75f667d18d71a3618e40c6fa8c2fa GIT binary patch literal 250 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`>pfi@Ln;{8Og_lj>>%KJJ!C?# zf}-dXArDT=?xhhuOFPo5KP0ivv$@&$=|Jp1jYAw<{j$&g|FtguAa?Ej*FR_H=Rah6 zU!}XG;rC6`nHqpmN{c?aOwiKwHF<#)f`y! zYjYWXAH4WFW5KSO4SyYYqZT)Q^J(C^_v;qJx8}vyFFKSOGyZOr+TzCib|!=9o>HzE x#}q5-)AxLAWMyFZ|6fyge-zN^Y#^sIGc1fKOx1d}Jq;+r;OXk;vd$@?2>|-0X*d7? literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..11670558c2369dc07b09e24f93cfd6d65d5faaeb GIT binary patch literal 250 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`>pfi@Ln;{GOfuv;-=+`Ku{e17VT#;rDYC4JOi zm+ZX7n!D|{iQ4+Zzm9)xewZOvwEeZA<$S)tK<1)p5o|Ux3VOlwCLXNVr}0|z$>udY zTp?#&@)MRx*2sOIm27-^lhK0NzK_=h0hPS}%~Q*;(NxWy_e5lpSh7iX=A^{jMrVBaa%lMuQnw`5zoYx0H z&DwX}A0=O}NU`ciLP7x741_5Ti?v*Wb0ow9Ftalz#Lb)0oKP};_9@RylJiobNi2X) zZo{ZC|AG7xoG1xE{)b6kFAF%HZ^EcRUT30aCZL9yRfts<(47twyH#Ky9I6?EPC(2> z^wNVYfP@1ev;IVa<(87!9V2zuOhX7j0SKZQ6C$RD=y}%%Ko4ntm)6~HEWmAy%O3y$ o0RR8b2Qjq(000I_L_t&o07n&&A(v$EH2?qr07*qoM6N<$g0={XJ^%m! literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..27ce28cb1f856764246f890b8afe391cf9f57bed GIT binary patch literal 284 zcmV+%0ptFOP)g^M4RVcQGSAFCc4>vDF7FeRB9BgL7*wTpxx3=$d$>rBLkn^7I)4vLRpt2x&rh zC9)wbAkC%)$qb)gJR>SXcqOD5Kp5n*y$lThSwOm;pFP7MX>5Yi5Re9#=^(YAA3kT` zm6v4r_~}@Fk literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..3df50db438fc7bf2a8d73b68e7f3cbedba3272a8 GIT binary patch literal 184 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`^`0({Ar*1S609aXjeD=2{qHzq zf~d|7kp`1fH(nWk@bET#lbY~@Klt&TsM8(mg#s~Z81R@_y4NP_fTAd;sSKdAYC9YTz&PP;n}Be3?|Yd7%qVu0P{1l z&AabB1#?BYIl$fkxkQQ=)jKFI0NDm|GR$UBIDq)Czy1Il1Tqj59>`$^GE4P92GndHBxR7W?mDpV(Cm-y8fAg8DyxFe8=44B`gVcElU_Pl0p?k3`C8m&d}|9e8BWHqpYh! zNa&fj2Trb(f7~Zw%)rR1aC;kPe36foF&YPvb v-`C;hjjsDZKmPykct6<=$Y29`mYLz{;t7fyuP&AZiZFP(`njxgN@xNAv@LW) literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..a4434853e68583a8bee62541bc3cd944d77b9efe GIT binary patch literal 394 zcmV;50d@X~P)ie%^9iA<0QmWD2-3>( zgZcEhDp}h<%Y)5K#~cZOljKN;N1F`Lx=8Ca&Iv1UmmKQeJ_?{sjFx2Ooj|!UJ+Em8 z00Ad1!5s{-_)(Rj#fXNi+<9H4L o0RR8GNR`U~000I_L_t&o0Q)||A$(PrzyJUM07*qoM6N<$f^Ukd<^TWy literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..5a9b530630b5da97106ac858f491561d9540a7b1 GIT binary patch literal 334 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4(FKU}W}maSW+oJkzhscgR7YmA#K) zq37$>2SOKolxZ|BU_B&SP{G2k5Mi>YZ`GpPOIqRWMt66LXxE0O>b26Sd^W?`wF4NaXJhfh54Y~ysJrd0M z($?VeO3urV&%HdwWb`>@o>#}pohyw$cl`;yHkq^Vc}Xhc@3(0zEtx)-46+%o3CQh< zie})oOX!%q{Dq0_OJ$piP+kUK9*)i0RUG}R`5f$%%9j59X33Eu-TsOn7#RQmCzV#o e02yqc;9zFBv1^**H_JUB5e83JKbLh*2~7aQxrN36 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..f3f834af8244ff83b44bdc059046d5dbcc9c045b GIT binary patch literal 403 zcmV;E0c`$>P)yqzQRrAbrW%|6j6ktFcfQe~XXj-TXqbIuxCdnq*ev42Q z06Zm5^~{g9HLFVC?3ajt@|N)OkCB=j8*axtc1- z>UNOD<061!m8=9oTmUuG1T&C&A|s9c#91W>VgQ&K6%znD4^A^7W}W_ZC-Y)UybuGx zgfMY3HrMvn-!?!9-V9UAb|mH`~w!w3+%(Mip$#XnFJHPmWs z03`T8!F0BDrXiJwpNB!m#)Q009601T^eN h00006NklIE002ovPDHLkV1neuh^qhq literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..47d4b73e3e5d107b5ebe51409378a8f4038e3ed9 GIT binary patch literal 325 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`zdT(WLn;{0OxVqJ$U(r>U0c3` zgNtjWN$&)=Bk~`j#&6Ah?`SHh6A!3d3 zm)ujg1Ua^`+e%g|C&sg{WD!uX_-s3w+2rf=nU*4Psts-JlNTO&9x>^7G(%}s?aHPn z3{uND6BYjEd6&)JE4h>_iLqs;mLfxmUCYFRv^m}-Qxi<5D;;6tC=7MlwcI-W(3KmT zcWr7&pEYB(&?0T+g6`|KrgJ$rrkAEN9xu4f;AC!nISW2 Vn&O4rkJ&&G22WQ%mvv4FO#oJKetrM| literal 0 HcmV?d00001 From d915c0f1719dbd7568009f7e6978ba009961d10d Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Sun, 20 Sep 2026 19:51:04 +0900 Subject: [PATCH 20/44] =?UTF-8?q?refactor:=20=E7=B4=B0=E3=81=8B=E3=81=84?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/integration/jei/RagiumJeiPlugin.kt | 13 +++++-------- .../recipe/RagiumMechanicalRecipeProvider.kt | 4 ++-- .../ragium/data/worldgen/RagiumWorldData.kt | 2 +- .../lib/registry/HTDeferredBlockAndItem.kt | 6 ++++++ .../hiiragi283/lib/registry/HolderGetters.kt | 14 ++++++++++++++ .../hiiragi283/ragium/common/RagiumCommon.kt | 18 +++++++++++------- .../item/block/HTCreativeTankBlockItem.kt | 13 ++++++------- 7 files changed, 45 insertions(+), 25 deletions(-) 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 2d09a6cff4..196a2cd6db 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiPlugin.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiPlugin.kt @@ -13,6 +13,7 @@ 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 @@ -48,7 +49,6 @@ 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) { @@ -56,14 +56,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) { @@ -108,7 +106,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() ) @@ -238,8 +236,7 @@ class RagiumJeiPlugin : HTJeiPlugin(RagiumAPI.MOD_ID) { registration.addRecipes( RagiumJeiRecipeTypes.REACTING, HTPhysicalSideHelper.registryOrThrow(RagiumRegistries.Keys.ORE_SLURRY_DATA) - .listElements() - .asSequence() + .asHolderSequence() .mapNotNull { holder: Holder -> val template: ItemStack = holder.value().createResult() if (template.isEmpty) return@mapNotNull null diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumMechanicalRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumMechanicalRecipeProvider.kt index 237cc58c8f..c2e50d079a 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumMechanicalRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumMechanicalRecipeProvider.kt @@ -373,7 +373,7 @@ class RagiumMechanicalRecipeProvider(packOutput: PackOutput, future: Completable +Items.SAND count = 4 } - result { + result { +RagiumItems.getOrThrow(HTItemPart.DUST, RagiumMaterial.Mineral.NITER) } }.save(exporter) @@ -399,7 +399,7 @@ class RagiumMechanicalRecipeProvider(packOutput: PackOutput, future: Completable +RagiumItems.getOrThrow(HTItemPart.DUST, RagiumMaterial.Gem.CRYOLITE) } }.save(exporter) - + // Book -> 3x Paper Pulp RagiumRecipeBuilders.crushing { ingredient { items { +Items.BOOK } } 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/lib/kotlin/hiiragi283/lib/registry/HTDeferredBlockAndItem.kt b/src/lib/kotlin/hiiragi283/lib/registry/HTDeferredBlockAndItem.kt index ba53a4f18e..85df80b0f7 100644 --- a/src/lib/kotlin/hiiragi283/lib/registry/HTDeferredBlockAndItem.kt +++ b/src/lib/kotlin/hiiragi283/lib/registry/HTDeferredBlockAndItem.kt @@ -11,6 +11,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]のエイリアスです。 @@ -49,4 +50,9 @@ 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 defaultState: BlockState get() = block.defaultState } 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/main/kotlin/hiiragi283/ragium/common/RagiumCommon.kt b/src/main/kotlin/hiiragi283/ragium/common/RagiumCommon.kt index d098454130..fc1c24d45f 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 @@ -23,6 +24,7 @@ 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 +62,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 +108,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 +125,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 +143,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() @@ -187,4 +188,7 @@ internal data object RagiumCommon { } } } + + private fun HolderGetter.Provider.getOrNull(content: HTFluidContent): HolderSet? = + this.getOrNull(content.fluidTag) } diff --git a/src/main/kotlin/hiiragi283/ragium/common/item/block/HTCreativeTankBlockItem.kt b/src/main/kotlin/hiiragi283/ragium/common/item/block/HTCreativeTankBlockItem.kt index 89231fe6d8..8d5ca061fe 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/item/block/HTCreativeTankBlockItem.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/item/block/HTCreativeTankBlockItem.kt @@ -4,6 +4,7 @@ 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 @@ -13,7 +14,6 @@ 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 -import java.util.function.Consumer class HTCreativeTankBlockItem(block: Block, properties: Properties) : BlockItem(block, properties), @@ -25,13 +25,12 @@ class HTCreativeTankBlockItem(block: Block, properties: Properties) : ) { parameters.holders .lookupOrThrow(Registries.FLUID) - .listElements() - .mapMulti { fluid, consumer: Consumer -> - if (!HTFlowingFluidHelper.isSource(fluid)) return@mapMulti + .asHolderSequence() + .mapNotNull { fluid -> + if (!HTFlowingFluidHelper.isSource(fluid)) return@mapNotNull null val content: SimpleFluidContent = FluidStack(fluid).let(SimpleFluidContent::copyOf) - if (content.isEmpty) return@mapMulti - val stack = ItemStack(baseItem, 1, buildDataPatch { set(RagiumDataComponents.FLUID, content) }) - consumer.accept(stack) + if (content.isEmpty) return@mapNotNull null + ItemStack(baseItem, 1, buildDataPatch { set(RagiumDataComponents.FLUID, content) }) }.forEach(output::accept) } From 8dc069f68ca0c58286776e20bf7a4d55af30e2a6 Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Sun, 20 Sep 2026 20:10:59 +0900 Subject: [PATCH 21/44] =?UTF-8?q?build:=20libClient=20=E3=83=A2=E3=82=B8?= =?UTF-8?q?=E3=83=A5=E3=83=BC=E3=83=AB=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle.kts | 21 ++++++++++++++++--- gradle/libs.versions.toml | 5 +---- .../event/HTRegisterWidgetRendererEvent.kt | 0 .../lib/fluid/FluidStackTintSource.kt | 0 .../lib/fluid/HTFluidModelBuilder.kt | 0 .../lib/fluid/HTFluidModelRegister.kt | 0 .../gui/widget/HTAbstractWidgetRenderer.kt | 0 .../lib/gui/widget/HTWidgetRendererFactory.kt | 0 .../lib/integration/jei/HTJeiDrawables.kt | 0 .../lib/integration/jei/HTJeiPlugin.kt | 0 .../lib/integration/jei/HTJeiRecipeHelper.kt | 0 .../lib/integration/jei/HTJeiRecipeType.kt | 0 .../lib/integration/jei/JeiExtensions.kt | 0 .../jei/category/HTBasicRecipeCategory.kt | 0 .../category/HTDoubleItemToRecipeCategory.kt | 0 .../jei/category/HTHolderRecipeCategory.kt | 0 .../HTItemAndFluidToFluidRecipeCategory.kt | 0 .../HTItemAndFluidToItemRecipeCategory.kt | 0 .../HTItemToDoubleItemRecipeCategory.kt | 0 .../HTItemToItemAndFluidRecipeCategory.kt | 0 .../jei/category/HTSingleRecipeCategory.kt | 0 .../kotlin/hiiragi283/lib/mod/HTClientMod.kt | 0 .../lib/renderer/HTBlockEntityRenderer.kt | 0 .../hiiragi283/lib/renderer/HTRenderHelper.kt | 0 .../renderer/state/HTFluidBERenderState.kt | 0 .../lib/renderer/state/HTItemBERenderState.kt | 0 26 files changed, 19 insertions(+), 7 deletions(-) rename src/{client => libClient}/kotlin/hiiragi283/lib/event/HTRegisterWidgetRendererEvent.kt (100%) rename src/{client => libClient}/kotlin/hiiragi283/lib/fluid/FluidStackTintSource.kt (100%) rename src/{client => libClient}/kotlin/hiiragi283/lib/fluid/HTFluidModelBuilder.kt (100%) rename src/{client => libClient}/kotlin/hiiragi283/lib/fluid/HTFluidModelRegister.kt (100%) rename src/{client => libClient}/kotlin/hiiragi283/lib/gui/widget/HTAbstractWidgetRenderer.kt (100%) rename src/{client => libClient}/kotlin/hiiragi283/lib/gui/widget/HTWidgetRendererFactory.kt (100%) rename src/{lib => libClient}/kotlin/hiiragi283/lib/integration/jei/HTJeiDrawables.kt (100%) rename src/{lib => libClient}/kotlin/hiiragi283/lib/integration/jei/HTJeiPlugin.kt (100%) rename src/{lib => libClient}/kotlin/hiiragi283/lib/integration/jei/HTJeiRecipeHelper.kt (100%) rename src/{lib => libClient}/kotlin/hiiragi283/lib/integration/jei/HTJeiRecipeType.kt (100%) rename src/{lib => libClient}/kotlin/hiiragi283/lib/integration/jei/JeiExtensions.kt (100%) rename src/{lib => libClient}/kotlin/hiiragi283/lib/integration/jei/category/HTBasicRecipeCategory.kt (100%) rename src/{lib => libClient}/kotlin/hiiragi283/lib/integration/jei/category/HTDoubleItemToRecipeCategory.kt (100%) rename src/{lib => libClient}/kotlin/hiiragi283/lib/integration/jei/category/HTHolderRecipeCategory.kt (100%) rename src/{lib => libClient}/kotlin/hiiragi283/lib/integration/jei/category/HTItemAndFluidToFluidRecipeCategory.kt (100%) rename src/{lib => libClient}/kotlin/hiiragi283/lib/integration/jei/category/HTItemAndFluidToItemRecipeCategory.kt (100%) rename src/{lib => libClient}/kotlin/hiiragi283/lib/integration/jei/category/HTItemToDoubleItemRecipeCategory.kt (100%) rename src/{lib => libClient}/kotlin/hiiragi283/lib/integration/jei/category/HTItemToItemAndFluidRecipeCategory.kt (100%) rename src/{lib => libClient}/kotlin/hiiragi283/lib/integration/jei/category/HTSingleRecipeCategory.kt (100%) rename src/{client => libClient}/kotlin/hiiragi283/lib/mod/HTClientMod.kt (100%) rename src/{client => libClient}/kotlin/hiiragi283/lib/renderer/HTBlockEntityRenderer.kt (100%) rename src/{client => libClient}/kotlin/hiiragi283/lib/renderer/HTRenderHelper.kt (100%) rename src/{client => libClient}/kotlin/hiiragi283/lib/renderer/state/HTFluidBERenderState.kt (100%) rename src/{client => libClient}/kotlin/hiiragi283/lib/renderer/state/HTItemBERenderState.kt (100%) diff --git a/build.gradle.kts b/build.gradle.kts index 389babba5d..59f3d6554c 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -74,6 +74,12 @@ base { } 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..acbb697bb0 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -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/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 100% rename from src/client/kotlin/hiiragi283/lib/fluid/HTFluidModelBuilder.kt rename to src/libClient/kotlin/hiiragi283/lib/fluid/HTFluidModelBuilder.kt 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/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 100% rename from src/lib/kotlin/hiiragi283/lib/integration/jei/category/HTBasicRecipeCategory.kt rename to src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTBasicRecipeCategory.kt 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 100% rename from src/lib/kotlin/hiiragi283/lib/integration/jei/category/HTItemAndFluidToFluidRecipeCategory.kt rename to src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTItemAndFluidToFluidRecipeCategory.kt 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 100% rename from src/lib/kotlin/hiiragi283/lib/integration/jei/category/HTItemAndFluidToItemRecipeCategory.kt rename to src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTItemAndFluidToItemRecipeCategory.kt 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 100% rename from src/lib/kotlin/hiiragi283/lib/integration/jei/category/HTItemToItemAndFluidRecipeCategory.kt rename to src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTItemToItemAndFluidRecipeCategory.kt 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 100% rename from src/lib/kotlin/hiiragi283/lib/integration/jei/category/HTSingleRecipeCategory.kt rename to src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTSingleRecipeCategory.kt 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/client/kotlin/hiiragi283/lib/renderer/HTBlockEntityRenderer.kt b/src/libClient/kotlin/hiiragi283/lib/renderer/HTBlockEntityRenderer.kt similarity index 100% rename from src/client/kotlin/hiiragi283/lib/renderer/HTBlockEntityRenderer.kt rename to src/libClient/kotlin/hiiragi283/lib/renderer/HTBlockEntityRenderer.kt diff --git a/src/client/kotlin/hiiragi283/lib/renderer/HTRenderHelper.kt b/src/libClient/kotlin/hiiragi283/lib/renderer/HTRenderHelper.kt similarity index 100% rename from src/client/kotlin/hiiragi283/lib/renderer/HTRenderHelper.kt rename to src/libClient/kotlin/hiiragi283/lib/renderer/HTRenderHelper.kt diff --git a/src/client/kotlin/hiiragi283/lib/renderer/state/HTFluidBERenderState.kt b/src/libClient/kotlin/hiiragi283/lib/renderer/state/HTFluidBERenderState.kt similarity index 100% rename from src/client/kotlin/hiiragi283/lib/renderer/state/HTFluidBERenderState.kt rename to src/libClient/kotlin/hiiragi283/lib/renderer/state/HTFluidBERenderState.kt diff --git a/src/client/kotlin/hiiragi283/lib/renderer/state/HTItemBERenderState.kt b/src/libClient/kotlin/hiiragi283/lib/renderer/state/HTItemBERenderState.kt similarity index 100% rename from src/client/kotlin/hiiragi283/lib/renderer/state/HTItemBERenderState.kt rename to src/libClient/kotlin/hiiragi283/lib/renderer/state/HTItemBERenderState.kt From 211b36a109caf3473b74131777e968a8fcb557e4 Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Sun, 20 Sep 2026 20:47:07 +0900 Subject: [PATCH 22/44] =?UTF-8?q?feat:=20HTTripleItemToItemRecipe=20?= =?UTF-8?q?=E3=82=92=E8=BF=BD=E5=8A=A0=20feat!:=20Assembling=20=E3=83=AC?= =?UTF-8?q?=E3=82=B7=E3=83=94=E3=82=92=20HTTripleItemToItemRecipe=20?= =?UTF-8?q?=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle.kts | 2 +- .../client/integration/jei/RagiumJeiPlugin.kt | 3 +- .../integration/jei/RagiumJeiRecipeTypes.kt | 3 +- .../data/recipe/RagiumCommonRecipeProvider.kt | 12 +- .../recipe/RagiumMechanicalRecipeProvider.kt | 70 +++++----- .../data/ragium/recipe/assembling/cobweb.json | 10 +- .../recipe/assembling/copper_chain.json | 10 +- .../recipe/assembling/copper_lantern.json | 10 +- .../recipe/assembling/creeper_head.json | 10 +- .../recipe/assembling/crimson_nylium.json | 10 +- .../ragium/recipe/assembling/dispenser.json | 10 +- .../recipe/assembling/electric_circuit.json | 10 +- .../assembling/electronics_machine_parts.json | 10 +- ...ctronics_machine_parts_by_black_metal.json | 10 +- .../assembling/enchanted_golden_apple.json | 10 +- .../recipe/assembling/gilded_blackstone.json | 10 +- .../recipe/assembling/heat_machine_parts.json | 10 +- .../data/ragium/recipe/assembling/hopper.json | 10 +- .../ragium/recipe/assembling/iron_chain.json | 10 +- .../ragium/recipe/assembling/lantern.json | 10 +- .../ragium/recipe/assembling/mycelium.json | 10 +- .../ragium/recipe/assembling/piglin_head.json | 10 +- .../data/ragium/recipe/assembling/podzol.json | 10 +- .../recipe/assembling/soul_lantern.json | 10 +- .../data/ragium/recipe/assembling/tnt.json | 10 +- .../recipe/assembling/warped_nylium.json | 10 +- .../ragium/recipe/assembling/zombie_head.json | 10 +- .../HTTripleItemToItemRecipeBuilder.kt | 90 +++++++++++++ .../recipe/base/HTTripleItemToItemRecipe.kt | 122 ++++++++++++++++++ .../recipe/builder/RagiumRecipeBuilders.kt | 7 +- .../ragium/api/recipe/RTAssemblingRecipe.kt | 9 +- .../ragium/api/recipe/RagiumRecipeLookups.kt | 3 +- .../category/HTTripleItemToRecipeCategory.kt | 90 +++++++++++++ .../entity/machine/HTAssemblerBlockEntity.kt | 15 ++- .../base/HTDoubleItemToItemBlockEntity.kt | 2 +- 35 files changed, 484 insertions(+), 164 deletions(-) create mode 100644 src/lib/kotlin/hiiragi283/lib/data/recipe/builder/HTTripleItemToItemRecipeBuilder.kt create mode 100644 src/lib/kotlin/hiiragi283/lib/recipe/base/HTTripleItemToItemRecipe.kt create mode 100644 src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTTripleItemToRecipeCategory.kt diff --git a/build.gradle.kts b/build.gradle.kts index 59f3d6554c..007ec677d8 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -279,7 +279,7 @@ dependencies { implementation(libs.bundles.common.impl) compileOnly(libs.bundles.common.compile) "localRuntime"(libs.bundles.common.runtime) - + "libClientCompileOnly"(libs.jei.api) "clientRuntimeOnly"(libs.jei) } 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 196a2cd6db..6abb107602 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiPlugin.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiPlugin.kt @@ -9,6 +9,7 @@ import hiiragi283.lib.integration.jei.category.HTItemAndFluidToItemRecipeCategor 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.item.HTPotionBasedItem import hiiragi283.lib.item.alchemy.HTBottleType import hiiragi283.lib.item.alchemy.HTPotionHelper @@ -117,7 +118,7 @@ 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), 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 bdafe9adc1..0ec77f2fda 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiRecipeTypes.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiRecipeTypes.kt @@ -8,6 +8,7 @@ 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 @@ -18,7 +19,7 @@ import hiiragi283.ragium.common.block.RagiumBlocks data object RagiumJeiRecipeTypes { // Mechanical @JvmField - val ASSEMBLING: HTHolderJeiRecipeType = + val ASSEMBLING: HTHolderJeiRecipeType = HTJeiRecipeType(RagiumRecipeTypes.ASSEMBLING, RagiumBlocks.ASSEMBLER) @JvmField diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt index 749dff840c..d095ceb82f 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt @@ -502,29 +502,29 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu }.save(exporter) // Circuit Chip + Circuit Board -> Electric Circuit RagiumRecipeBuilders.assembling { - primary { + ingredient { items { +RagiumItems.CIRCUIT_CHIP } count = 2 } - secondary { items { +RagiumItems.CIRCUIT_BOARD } } + extra { items { +RagiumItems.CIRCUIT_BOARD } } result { +RagiumItems.ELECTRIC_CIRCUIT } }.save(exporter) // Machine Parts RagiumRecipeBuilders.assembling { - primary { + ingredient { +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.BLACK_STEEL) count = 4 } - secondary { items { +RagiumItems.ELECTRIC_CIRCUIT } } + extra { items { +RagiumItems.ELECTRIC_CIRCUIT } } result { +RagiumItems.getParts(HTMachineType.ELECTRONICS) } recipeId suffix "_by_black_metal" }.save(exporter) RagiumRecipeBuilders.assembling { - primary { + ingredient { +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.VOID_METAL) count = 2 } - secondary { items { +RagiumItems.ELECTRIC_CIRCUIT } } + extra { items { +RagiumItems.ELECTRIC_CIRCUIT } } result { +RagiumItems.getParts(HTMachineType.ELECTRONICS) } }.save(exporter) } diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumMechanicalRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumMechanicalRecipeProvider.kt index c2e50d079a..9a4bf2d42d 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumMechanicalRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumMechanicalRecipeProvider.kt @@ -45,8 +45,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 +54,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 +63,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 +95,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 +112,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,8 +121,8 @@ 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 @@ -130,26 +130,26 @@ class RagiumMechanicalRecipeProvider(packOutput: PackOutput, future: Completable }.save(exporter) // Iron Ingot + Chest -> Hopper RagiumRecipeBuilders.assembling { - primary { + ingredient { +holderSet(CommonTagPrefixes.INGOT, RagiumMaterial.Metal.IRON) count = 5 } - secondary { +holderSet(Tags.Items.CHESTS_WOODEN) } + extra { +holderSet(Tags.Items.CHESTS_WOODEN) } result { +Items.HOPPER } }.save(exporter) // Dropper + Bow -> Dispenser RagiumRecipeBuilders.assembling { - primary { items { +Items.DROPPER } } - secondary { +holderSet(Tags.Items.TOOLS_BOW) } + ingredient { items { +Items.DROPPER } } + extra { +holderSet(Tags.Items.TOOLS_BOW) } result { +Items.DISPENSER } }.save(exporter) // TNT RagiumRecipeBuilders.assembling { - primary { + ingredient { +holderSet(Tags.Items.SANDS) count = 4 } - secondary { + extra { +holderSet(Tags.Items.GUNPOWDERS) count = 5 } @@ -160,24 +160,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 +186,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 +197,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) } @@ -640,7 +640,7 @@ class RagiumMechanicalRecipeProvider(packOutput: PackOutput, future: Completable // Raw XX -> XX Dust for (metal: RagiumMaterial.Metal in RagiumMaterial.Metal.entries) { if (!metal.hasRawVariant) continue - val dust: HTSimpleDeferredItem = RagiumItems.MATERIAL_ITEMS.get(HTItemPart.DUST, metal) ?: continue + val dust: HTSimpleDeferredItem = RagiumItems.MATERIAL_ITEMS[HTItemPart.DUST, metal] ?: continue RagiumRecipeBuilders.crushing { ingredient { +holderSet(CommonTagPrefixes.RAW_MATERIALS, metal) 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/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/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/electric_circuit.json b/src/generated/resources/data/ragium/recipe/assembling/electric_circuit.json index 177e5a8d5a..aa1faac67b 100644 --- a/src/generated/resources/data/ragium/recipe/assembling/electric_circuit.json +++ b/src/generated/resources/data/ragium/recipe/assembling/electric_circuit.json @@ -1,6 +1,10 @@ { "type": "ragium:assembling", - "primary_ingredient": { + "extra": { + "count": 1, + "items": "ragium:circuit_board" + }, + "ingredient": { "count": 2, "items": "ragium:circuit_chip" }, @@ -8,9 +12,5 @@ "count": 1, "id": "ragium:electric_circuit" }, - "secondary_ingredient": { - "count": 1, - "items": "ragium:circuit_board" - }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/assembling/electronics_machine_parts.json b/src/generated/resources/data/ragium/recipe/assembling/electronics_machine_parts.json index d2d5622e41..73392ae268 100644 --- a/src/generated/resources/data/ragium/recipe/assembling/electronics_machine_parts.json +++ b/src/generated/resources/data/ragium/recipe/assembling/electronics_machine_parts.json @@ -1,6 +1,10 @@ { "type": "ragium:assembling", - "primary_ingredient": { + "extra": { + "count": 1, + "items": "ragium:electric_circuit" + }, + "ingredient": { "count": 2, "items": "#c:ingots/void_metal" }, @@ -8,9 +12,5 @@ "count": 1, "id": "ragium:electronics_machine_parts" }, - "secondary_ingredient": { - "count": 1, - "items": "ragium:electric_circuit" - }, "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 index dde74d8df4..e7be79da01 100644 --- a/src/generated/resources/data/ragium/recipe/assembling/electronics_machine_parts_by_black_metal.json +++ b/src/generated/resources/data/ragium/recipe/assembling/electronics_machine_parts_by_black_metal.json @@ -1,6 +1,10 @@ { "type": "ragium:assembling", - "primary_ingredient": { + "extra": { + "count": 1, + "items": "ragium:electric_circuit" + }, + "ingredient": { "count": 4, "items": "#c:ingots/black_steel" }, @@ -8,9 +12,5 @@ "count": 1, "id": "ragium:electronics_machine_parts" }, - "secondary_ingredient": { - "count": 1, - "items": "ragium:electric_circuit" - }, "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 index 90f84d7554..2b706df6f5 100644 --- a/src/generated/resources/data/ragium/recipe/assembling/hopper.json +++ b/src/generated/resources/data/ragium/recipe/assembling/hopper.json @@ -1,6 +1,10 @@ { "type": "ragium:assembling", - "primary_ingredient": { + "extra": { + "count": 1, + "items": "#c:chests/wooden" + }, + "ingredient": { "count": 5, "items": "#c:ingots/iron" }, @@ -8,9 +12,5 @@ "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/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/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/recipe/base/HTTripleItemToItemRecipe.kt b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTTripleItemToItemRecipe.kt new file mode 100644 index 0000000000..915e7bd670 --- /dev/null +++ b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTTripleItemToItemRecipe.kt @@ -0,0 +1,122 @@ +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 getRequiredAmount(first: ItemInstance, second: ItemInstance): Pair = + ingredient.getRequiredAmount(first) to secondary.getRequiredAmount(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 getRequiredAmount( + first: ItemInstance, + second: ItemInstance, + third: ItemInstance + ): Triple { + val firstCount: Int = ingredient.getRequiredAmount(first) + return when { + secondary.test(second) -> Triple( + firstCount, + secondary.getRequiredAmount(second), + tertiary?.getRequiredAmount(third) ?: 0 + ) + + secondary.test(third) -> Triple( + firstCount, + (tertiary?.getRequiredAmount(second) ?: 0), + secondary.getRequiredAmount(third) + ) + + else -> Triple(0, 0, 0) + } + } + } +} 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..b1fe72c9a2 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 @@ -8,6 +8,7 @@ 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 +38,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 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/RagiumRecipeLookups.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeLookups.kt index c37cbb7bdb..e2878ec68a 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeLookups.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeLookups.kt @@ -8,6 +8,7 @@ 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 +34,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) 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/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTAssemblerBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTAssemblerBlockEntity.kt index cda50d42be..f94e9bd9d2 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,8 @@ package hiiragi283.ragium.common.block.entity.machine +import hiiragi283.lib.recipe.base.HTDoubleItemToItemRecipe +import hiiragi283.lib.recipe.base.HTTripleItemToItemRecipe +import hiiragi283.lib.recipe.lookup.HTRecipeLookup import hiiragi283.lib.sounds.HTSoundInstance import hiiragi283.ragium.api.RagiumConfig import hiiragi283.ragium.api.config.HTEnergyConfig @@ -11,7 +14,17 @@ 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(), LOOKUP, pos, state) { + companion object { + @JvmStatic + private val LOOKUP: HTRecipeLookup = + HTRecipeLookup { context: HTRecipeLookup.Context -> + RagiumRecipeLookups.ASSEMBLING + .getAllRecipes(context) + .mapNotNull { it.mapNotNull(HTTripleItemToItemRecipe::asDoubleInput) } + } + } + 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/base/HTDoubleItemToItemBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTDoubleItemToItemBlockEntity.kt index 234427cb4e..aa064a04d8 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 @@ -133,7 +133,7 @@ abstract class HTDoubleItemToItemBlockEntity( ) widgetHolder.track(primarySlot) widgetHolder += HTItemWidget.Container( - primarySlot, + secondarySlot, 1, HTSlotHelper.getSlotPosX(2.5), HTSlotHelper.getSlotPosY(0.5), From ff40939b57128d89194f3c4cce0ee4d4c601f8cb Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Sun, 20 Sep 2026 21:00:58 +0900 Subject: [PATCH 23/44] =?UTF-8?q?feat:=20=E6=96=B0=E3=81=97=E3=81=84?= =?UTF-8?q?=E3=83=96=E3=83=AD=E3=83=83=E3=82=AF=E3=82=92=E8=BF=BD=E5=8A=A0?= =?UTF-8?q?=20-=20Precision=20Assembler=20/=20=E7=B2=BE=E5=AF=86=E7=B5=84?= =?UTF-8?q?=E7=AB=8B=E6=A9=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/integration/jei/RagiumJeiPlugin.kt | 1 + .../data/lang/RagiumEnglishLangProvider.kt | 1 + .../data/lang/RagiumJapaneseLangProvider.kt | 1 + .../recipe/RagiumVanillaRecipeProvider.kt | 1 + .../blockstates/precision_assembler.json | 34 ++++ .../ragium/items/precision_assembler.json | 6 + .../resources/assets/ragium/lang/en_us.json | 1 + .../resources/assets/ragium/lang/ja_jp.json | 1 + .../models/block/precision_assembler.json | 8 + .../tags/block/mineable/pickaxe.json | 1 + .../blocks/precision_assembler.json | 31 +++ .../recipe/shaped/precision_assembler.json | 18 ++ .../tags/block/machines/electronics.json | 1 + .../tags/item/machines/electronics.json | 1 + .../hiiragi283/ragium/api/RagiumConfig.kt | 4 + .../hiiragi283/ragium/api/RagiumConstants.kt | 1 + .../ragium/common/block/RagiumBlocks.kt | 5 + .../block/entity/RagiumBlockEntityTypes.kt | 7 + .../HTPrecisionAssemblerBlockEntity.kt | 23 +++ .../base/HTTripleItemToItemBlockEntity.kt | 185 ++++++++++++++++++ 20 files changed, 331 insertions(+) create mode 100644 src/generated/resources/assets/ragium/blockstates/precision_assembler.json create mode 100644 src/generated/resources/assets/ragium/items/precision_assembler.json create mode 100644 src/generated/resources/assets/ragium/models/block/precision_assembler.json create mode 100644 src/generated/resources/data/ragium/loot_table/blocks/precision_assembler.json create mode 100644 src/generated/resources/data/ragium/recipe/shaped/precision_assembler.json create mode 100644 src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTPrecisionAssemblerBlockEntity.kt create mode 100644 src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTTripleItemToItemBlockEntity.kt diff --git a/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiPlugin.kt b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiPlugin.kt index 6abb107602..bc2f763fc4 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiPlugin.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiPlugin.kt @@ -275,6 +275,7 @@ 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) } diff --git a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt index ee429bd233..257815d873 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt @@ -58,6 +58,7 @@ 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") diff --git a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt index fbbaacb859..027f2ace1c 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt @@ -54,6 +54,7 @@ class RagiumJapaneseLangProvider(output: PackOutput) : add(RagiumBlocks.BREWERY, "醸造機") add(RagiumBlocks.PLANTER, "栽培機") + add(RagiumBlocks.PRECISION_ASSEMBLER, "精密組立機") add(RagiumBlocks.SCANNER, "レーザースキャナ") add(RagiumBlocks.ENCHANTER, "エンチャンター") diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt index 19b3c8f4a8..26edfc3858 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt @@ -263,6 +263,7 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut 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 } } 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/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/lang/en_us.json b/src/generated/resources/assets/ragium/lang/en_us.json index 776e1d5b4c..3ff0553001 100644 --- a/src/generated/resources/assets/ragium/lang/en_us.json +++ b/src/generated/resources/assets/ragium/lang/en_us.json @@ -88,6 +88,7 @@ "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", diff --git a/src/generated/resources/assets/ragium/lang/ja_jp.json b/src/generated/resources/assets/ragium/lang/ja_jp.json index d13173ac11..5a10cbdfce 100644 --- a/src/generated/resources/assets/ragium/lang/ja_jp.json +++ b/src/generated/resources/assets/ragium/lang/ja_jp.json @@ -88,6 +88,7 @@ "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": "赤色の染料", 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/data/minecraft/tags/block/mineable/pickaxe.json b/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json index a1eb255c04..4d11ef66d3 100644 --- a/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json +++ b/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json @@ -34,6 +34,7 @@ "ragium:niter_ore", "ragium:pitch_coke_block", "ragium:planter", + "ragium:precision_assembler", "ragium:pyrolyzer", "ragium:refinery", "ragium:scanner", 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/recipe/shaped/precision_assembler.json b/src/generated/resources/data/ragium/recipe/shaped/precision_assembler.json new file mode 100644 index 0000000000..80c22915ea --- /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/black_steel", + "B": "ragium:bio_machine_parts", + "C": "#c:gears/emerald", + "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/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/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/lib/kotlin/hiiragi283/ragium/api/RagiumConfig.kt b/src/lib/kotlin/hiiragi283/ragium/api/RagiumConfig.kt index e130da3f95..cdf93d6091 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/RagiumConfig.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/RagiumConfig.kt @@ -155,6 +155,10 @@ 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, 64) diff --git a/src/lib/kotlin/hiiragi283/ragium/api/RagiumConstants.kt b/src/lib/kotlin/hiiragi283/ragium/api/RagiumConstants.kt index a5fc84682a..315b9e08e3 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/RagiumConstants.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/RagiumConstants.kt @@ -33,6 +33,7 @@ data object RagiumConstants { const val PLANTER = "planter" // Electronics + const val PRECISION_ASSEMBLER = "precision_assembler" const val SCANNER = "scanner" // Arcane diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt b/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt index f69480baa7..8fce168b02 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt @@ -245,6 +245,10 @@ data object RagiumBlocks { registerMachine(RagiumBlockEntityTypes.PLANTER) // Electronics + @JvmField + val PRECISION_ASSEMBLER: HTBasicDeferredBlockAndItem = + registerMachine(RagiumBlockEntityTypes.PRECISION_ASSEMBLER) + @JvmField val SCANNER: HTBasicDeferredBlockAndItem = registerFakeMachine(RagiumConstants.SCANNER) @@ -277,6 +281,7 @@ data object RagiumBlocks { put(HTMachineType.BIO, BREWERY) put(HTMachineType.BIO, PLANTER) + put(HTMachineType.ELECTRONICS, PRECISION_ASSEMBLER) put(HTMachineType.ELECTRONICS, SCANNER) put(HTMachineType.ARCANE, ENCHANTER) 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 e825b1c4af..d354f3c0e2 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/RagiumBlockEntityTypes.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/RagiumBlockEntityTypes.kt @@ -24,6 +24,7 @@ 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 @@ -111,6 +112,10 @@ data object RagiumBlockEntityTypes { registerTick(RagiumConstants.PLANTER, ::HTPlanterBlockEntity) // Electronics + @JvmField + val PRECISION_ASSEMBLER: HTDeferredBlockEntityType = + registerTick(RagiumConstants.PRECISION_ASSEMBLER, ::HTPrecisionAssemblerBlockEntity) + // Arcane @JvmField val ENCHANTER: HTDeferredBlockEntityType = @@ -177,6 +182,8 @@ data object RagiumBlockEntityTypes { registerProcessor(BREWERY.get()) registerProcessor(PLANTER.get()) + registerProcessor(PRECISION_ASSEMBLER.get()) + registerProcessor(ENCHANTER.get()) // Storage registerBlockEntity(TANK.get()) 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/base/HTTripleItemToItemBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTTripleItemToItemBlockEntity.kt new file mode 100644 index 0000000000..0fc3d114b1 --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTTripleItemToItemBlockEntity.kt @@ -0,0 +1,185 @@ +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.HTInputSlot +import hiiragi283.lib.recipe.handler.HTOutputSlot +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.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: HTInputSlot.SingleItem by lazy { + HTInputSlot.SingleItem(this@HTTripleItemToItemBlockEntity.primarySlot) + } + private val secondarySlot: HTInputSlot.SingleItem by lazy { + HTInputSlot.SingleItem(this@HTTripleItemToItemBlockEntity.secondarySlot) + } + private val tertiarySlot: HTInputSlot.SingleItem by lazy { + HTInputSlot.SingleItem(this@HTTripleItemToItemBlockEntity.tertiarySlot) + } + private val outputSlot: HTOutputSlot by lazy { + HTOutputSlot.SingleItem(this@HTTripleItemToItemBlockEntity.outputSlot) + } + + override fun createInput(): RecipeInput = + HTItemListRecipeInput(primarySlot.getStack(), secondarySlot.getStack(), tertiarySlot.getStack()) + + override fun findRecipe(level: ServerLevel, input: RecipeInput): HTTripleItemToItemRecipe? = + cache.findFirstRecipe(input, level) + + override fun canComplete(recipe: HTTripleItemToItemRecipe, input: RecipeInput, output: ItemStack): Boolean { + val (firstCount: Int, secondCount: Int, thirdCount: Int) = recipe.getRequiredAmount( + input.getItemOrEmpty(0), + input.getItemOrEmpty(1), + input.getItemOrEmpty(2) + ) + useTransaction { transaction: Transaction -> + if (firstCount > 0 && !primarySlot.canExtract(firstCount, transaction)) { + return false + } + if (secondCount > 0 && !secondarySlot.canExtract(secondCount, transaction)) { + return false + } + if (thirdCount > 0 && !tertiarySlot.canExtract(thirdCount, transaction)) { + return false + } + return outputSlot.canInsert(output, transaction) + } + } + + override fun onComplete(recipe: HTTripleItemToItemRecipe, input: RecipeInput, output: ItemStack) { + val (firstCount: Int, secondCount: Int, thirdCount: Int) = recipe.getRequiredAmount( + input.getItemOrEmpty(0), + input.getItemOrEmpty(1), + input.getItemOrEmpty(2) + ) + useTransaction { transaction: Transaction -> + if (firstCount > 0) { + primarySlot.extract(firstCount, transaction) + } + if (secondCount > 0) { + secondarySlot.extract(secondCount, transaction) + } + if (thirdCount > 0) { + tertiarySlot.extract(thirdCount, transaction) + } + outputSlot.insert(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) + } +} From 61f3757733e304e585320ba42bd61faa48ff7dbb Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Sun, 20 Sep 2026 21:25:39 +0900 Subject: [PATCH 24/44] =?UTF-8?q?feat:=20Assembling=20=E3=83=AC=E3=82=B7?= =?UTF-8?q?=E3=83=94=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../recipe/RagiumMechanicalRecipeProvider.kt | 101 ++++++++++++++++-- .../recipe/RagiumVanillaRecipeProvider.kt | 25 +++++ .../recipe/assembling/activator_rail.json | 22 ++++ .../ragium/recipe/assembling/comparator.json | 28 +++++ .../recipe/assembling/detector_rail.json | 25 +++++ .../assembling/dispenser_stackable.json | 22 ++++ .../recipe/assembling/powered_rail.json | 22 ++++ .../assembling/{hopper.json => rail.json} | 8 +- .../ragium/recipe/assembling/repeater.json | 22 ++++ .../recipe/shaped/hopper_by_black_steel.json | 17 +++ .../recipe/shaped/hopper_by_sooty_iron.json | 17 +++ .../recipe/shaped/precision_assembler.json | 6 +- .../lib/data/recipe/HTRecipeProvider.kt | 7 +- 13 files changed, 304 insertions(+), 18 deletions(-) create mode 100644 src/generated/resources/data/ragium/recipe/assembling/activator_rail.json create mode 100644 src/generated/resources/data/ragium/recipe/assembling/comparator.json create mode 100644 src/generated/resources/data/ragium/recipe/assembling/detector_rail.json create mode 100644 src/generated/resources/data/ragium/recipe/assembling/dispenser_stackable.json create mode 100644 src/generated/resources/data/ragium/recipe/assembling/powered_rail.json rename src/generated/resources/data/ragium/recipe/assembling/{hopper.json => rail.json} (62%) create mode 100644 src/generated/resources/data/ragium/recipe/assembling/repeater.json create mode 100644 src/generated/resources/data/ragium/recipe/shaped/hopper_by_black_steel.json create mode 100644 src/generated/resources/data/ragium/recipe/shaped/hopper_by_sooty_iron.json diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumMechanicalRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumMechanicalRecipeProvider.kt index 9a4bf2d42d..d8c52ce9e9 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumMechanicalRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumMechanicalRecipeProvider.kt @@ -20,6 +20,7 @@ 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 @@ -28,6 +29,7 @@ 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.BlockTagIngredient import net.neoforged.neoforge.common.crafting.DifferenceIngredient import java.util.concurrent.CompletableFuture @@ -128,21 +130,106 @@ class RagiumMechanicalRecipeProvider(packOutput: PackOutput, future: Completable count = 2 } }.save(exporter) - // Iron Ingot + Chest -> Hopper + // Repeater RagiumRecipeBuilders.assembling { - ingredient { - +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 + } + }.save(exporter) + // Comparator + RagiumRecipeBuilders.assembling { + ingredient { +holderSet(Tags.Items.STONES) } + extra { + items { +Items.REDSTONE_TORCH } + count = 3 + } + extra { + +dustOrGem(RagiumMaterial.Gem.QUARTZ) + } + result { + +Items.COMPARATOR + count = 2 } - extra { +holderSet(Tags.Items.CHESTS_WOODEN) } - result { +Items.HOPPER } }.save(exporter) - // Dropper + Bow -> Dispenser + // 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 { ingredient { diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt index 26edfc3858..b9d6cf7431 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt @@ -230,6 +230,31 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut } 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 // 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/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/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_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/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/hopper.json b/src/generated/resources/data/ragium/recipe/assembling/rail.json similarity index 62% rename from src/generated/resources/data/ragium/recipe/assembling/hopper.json rename to src/generated/resources/data/ragium/recipe/assembling/rail.json index 2b706df6f5..82b51f8597 100644 --- a/src/generated/resources/data/ragium/recipe/assembling/hopper.json +++ b/src/generated/resources/data/ragium/recipe/assembling/rail.json @@ -2,15 +2,15 @@ "type": "ragium:assembling", "extra": { "count": 1, - "items": "#c:chests/wooden" + "items": "#c:rods/wooden" }, "ingredient": { - "count": 5, + "count": 6, "items": "#c:ingots/iron" }, "result": { - "count": 1, - "id": "minecraft:hopper" + "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/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/shaped/precision_assembler.json b/src/generated/resources/data/ragium/recipe/shaped/precision_assembler.json index 80c22915ea..c7ebde1de5 100644 --- a/src/generated/resources/data/ragium/recipe/shaped/precision_assembler.json +++ b/src/generated/resources/data/ragium/recipe/shaped/precision_assembler.json @@ -2,9 +2,9 @@ "type": "minecraft:crafting_shaped", "category": "misc", "key": { - "A": "#c:nuggets/black_steel", - "B": "ragium:bio_machine_parts", - "C": "#c:gears/emerald", + "A": "#c:nuggets/void_metal", + "B": "ragium:electronics_machine_parts", + "C": "#c:gears/diamond", "D": "ragium:assembler" }, "pattern": [ diff --git a/src/lib/kotlin/hiiragi283/lib/data/recipe/HTRecipeProvider.kt b/src/lib/kotlin/hiiragi283/lib/data/recipe/HTRecipeProvider.kt index 768d544a53..2330815c26 100644 --- a/src/lib/kotlin/hiiragi283/lib/data/recipe/HTRecipeProvider.kt +++ b/src/lib/kotlin/hiiragi283/lib/data/recipe/HTRecipeProvider.kt @@ -86,12 +86,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) } } } From 414e9b932d5ff4d41a88e4e7e6049ca5867ce482 Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Sun, 20 Sep 2026 23:54:53 +0900 Subject: [PATCH 25/44] =?UTF-8?q?refactor:=20Alloying=20=E3=83=AC=E3=82=B7?= =?UTF-8?q?=E3=83=94=E3=82=82=20HTTripleItemToItemRecipe=20=E3=81=AB?= =?UTF-8?q?=E5=A4=89=E6=9B=B4=20feat!:=20Fluorine=20=E3=82=92=E5=89=8A?= =?UTF-8?q?=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hiiragi283/ragium/client/RagiumClient.kt | 4 -- .../client/integration/jei/RagiumJeiPlugin.kt | 3 +- .../integration/jei/RagiumJeiRecipeTypes.kt | 3 +- .../data/lang/RagiumEnglishLangProvider.kt | 1 - .../data/lang/RagiumJapaneseLangProvider.kt | 1 - .../data/recipe/RagiumCommonRecipeProvider.kt | 37 +++++++------------ .../data/recipe/RagiumHeatRecipeProvider.kt | 20 +++++----- .../assets/ragium/items/fluorine_bucket.json | 13 ------- .../resources/assets/ragium/lang/en_us.json | 4 -- .../resources/assets/ragium/lang/ja_jp.json | 4 -- .../resources/data/c/tags/fluid/fluorine.json | 5 --- .../resources/data/c/tags/fluid/gaseous.json | 1 - .../resources/data/c/tags/item/buckets.json | 1 - .../data/c/tags/item/buckets/fluorine.json | 5 --- .../recipe/alloying/aluminum_ingot.json | 22 +++++------ .../recipe/alloying/black_steel_ingot.json | 10 ++--- .../alloying/chemical_machine_parts.json | 18 ++++----- .../ragium/recipe/alloying/circuit_board.json | 18 ++++----- .../alloying/crude_silicon_from_amethyst.json | 24 ++++++------ .../crude_silicon_from_amethyst_block.json | 18 ++++----- .../alloying/crude_silicon_from_quartz.json | 22 +++++------ .../crude_silicon_from_quartz_block.json | 18 ++++----- .../recipe/alloying/netherite_ingot.json | 10 ++--- .../ragium/recipe/alloying/silicon_wafer.json | 10 ++--- .../alloying/sooty_iron_ingot_by_coals.json | 22 +++++------ .../alloying/sooty_iron_ingot_by_cokes.json | 10 ++--- .../{fluorine.json => hydrogen_fluoride.json} | 2 +- .../recipe/reacting/hydrogen_fluoride.json | 16 -------- .../lib/recipe/base/HTRecipePredicates.kt | 10 ++--- .../lib/recipe/lookup/HTRecipeLookup.kt | 14 +++++++ .../recipe/builder/RagiumRecipeBuilders.kt | 7 ++-- .../ragium/api/recipe/RTAlloyingRecipe.kt | 9 +++-- .../ragium/api/recipe/RagiumRecipeLookups.kt | 3 +- .../machine/HTAlloySmelterBlockEntity.kt | 4 +- .../entity/machine/HTAssemblerBlockEntity.kt | 20 ++++------ .../ragium/common/fluid/RagiumFluids.kt | 3 -- 36 files changed, 166 insertions(+), 226 deletions(-) delete mode 100644 src/generated/resources/assets/ragium/items/fluorine_bucket.json delete mode 100644 src/generated/resources/data/c/tags/fluid/fluorine.json delete mode 100644 src/generated/resources/data/c/tags/item/buckets/fluorine.json rename src/generated/resources/data/ragium/recipe/mixing/{fluorine.json => hydrogen_fluoride.json} (90%) delete mode 100644 src/generated/resources/data/ragium/recipe/reacting/hydrogen_fluoride.json diff --git a/src/client/kotlin/hiiragi283/ragium/client/RagiumClient.kt b/src/client/kotlin/hiiragi283/ragium/client/RagiumClient.kt index 6614278df8..fabde0999a 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/RagiumClient.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/RagiumClient.kt @@ -113,10 +113,6 @@ data object RagiumClient : HTClientMod() { transparent() colorTint(Color(0x3399cc)) } - register.register(RagiumFluids.FLUORINE) { - transparent() - colorTint(Color(0x33cc99)) - } register.register(RagiumFluids.CHLORINE) { transparent() colorTint(Color(0x99cc33)) 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 bc2f763fc4..699019fc32 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiPlugin.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiPlugin.kt @@ -3,7 +3,6 @@ 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 @@ -125,7 +124,7 @@ class RagiumJeiPlugin : HTJeiPlugin(RagiumAPI.MOD_ID) { 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), 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 0ec77f2fda..38055704b7 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiRecipeTypes.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiRecipeTypes.kt @@ -2,7 +2,6 @@ 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 @@ -44,7 +43,7 @@ data object RagiumJeiRecipeTypes { // Heat @JvmField - val ALLOYING: HTHolderJeiRecipeType = + val ALLOYING: HTHolderJeiRecipeType = HTJeiRecipeType(RagiumRecipeTypes.ALLOYING, RagiumBlocks.ALLOY_SMELTER) @JvmField diff --git a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt index 257815d873..0979daee71 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt @@ -81,7 +81,6 @@ class RagiumEnglishLangProvider(output: PackOutput) : addFluid(RagiumFluids.HYDROGEN, "Hydrogen") addFluid(RagiumFluids.OXYGEN, "Oxygen") - addFluid(RagiumFluids.FLUORINE, "Fluorine") addFluid(RagiumFluids.CHLORINE, "Chlorine") addFluid(RagiumFluids.WOOD_TAR, "Wood Tar") diff --git a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt index 027f2ace1c..79937f32a3 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt @@ -77,7 +77,6 @@ class RagiumJapaneseLangProvider(output: PackOutput) : addFluid(RagiumFluids.HYDROGEN, "水素") addFluid(RagiumFluids.OXYGEN, "酸素") - addFluid(RagiumFluids.FLUORINE, "フッ素") addFluid(RagiumFluids.CHLORINE, "塩素") addFluid(RagiumFluids.WOOD_TAR, "木タール") diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt index d095ceb82f..78ea13b10d 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt @@ -344,15 +344,6 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu itemIngredient { +dustOrGem(RagiumMaterial.Gem.FLUORITE) } fluidIngredient { +holderSet(RagiumFluids.SULFURIC_ACID) } result { - +RagiumFluids.FLUORINE - amount *= 2 - } - }.save(exporter) - // H2 + F2 -> 2 HF - RagiumRecipeBuilders.reacting { - primaryIngredient { +holderSet(RagiumFluids.HYDROGEN) } - secondaryIngredient { +holderSet(RagiumFluids.FLUORINE) } - fluidResult { +RagiumFluids.HYDROGEN_FLUORIDE amount *= 2 } @@ -398,7 +389,7 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu }.save(exporter) // Al2O3 + Na3AlF6 -> Al RagiumRecipeBuilders.alloying { - primary { + ingredient { +materialTags( nelOf(CommonTagPrefixes.DUST, CommonTagPrefixes.GEM), nelOf( @@ -408,7 +399,7 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu ) ) } - secondary { +dustOrGem(RagiumMaterial.Gem.CRYOLITE) } + extra { +dustOrGem(RagiumMaterial.Gem.CRYOLITE) } result { +RagiumItems.getOrThrow(HTItemPart.INGOT, RagiumMaterial.Metal.ALUMINUM) count = 3 @@ -432,14 +423,14 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu ) // Quartz + Coal Coke -> Crude Si RagiumRecipeBuilders.alloying { - primary { +dustOrGem(RagiumMaterial.Gem.QUARTZ) } - secondary { +dustOrCoke } + ingredient { +dustOrGem(RagiumMaterial.Gem.QUARTZ) } + extra { +dustOrCoke } result { +RagiumItems.CRUDE_SILICON } recipeId suffix "_from_quartz" }.save(exporter) RagiumRecipeBuilders.alloying { - primary { +holderSet(RagiumTags.BlockItem.QUARTZ_BLOCKS.item) } - secondary { + ingredient { +holderSet(RagiumTags.BlockItem.QUARTZ_BLOCKS.item) } + extra { +dustOrCoke count = 4 } @@ -452,17 +443,17 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu }.save(exporter) // Amethyst + Coal Coke -> Crude Si RagiumRecipeBuilders.alloying { - primary { + ingredient { +dustOrGem(RagiumMaterial.Gem.AMETHYST) count = 4 } - secondary { +dustOrCoke } + extra { +dustOrCoke } result { +RagiumItems.CRUDE_SILICON } recipeId suffix "_from_amethyst" }.save(exporter) RagiumRecipeBuilders.alloying { - primary { items { +Items.AMETHYST_BLOCK } } - secondary { +dustOrCoke } + ingredient { items { +Items.AMETHYST_BLOCK } } + extra { +dustOrCoke } result { +RagiumItems.CRUDE_SILICON } recipeId suffix "_from_amethyst_block" }.save(exporter) @@ -478,11 +469,11 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu }.save(exporter) // Si Dust + Redstone -> Silicon Wafer RagiumRecipeBuilders.alloying { - primary { + ingredient { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Other.SILICON) count = 8 } - secondary { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Mineral.RAGINITE) } + extra { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Mineral.RAGINITE) } result { +RagiumItems.SILICON_WAFER } }.save(exporter) // Silicon Wafer -> Circuit Chip @@ -496,8 +487,8 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu // Plastic + Gold Dust -> Circuit Board RagiumRecipeBuilders.alloying { - primary { +holderSet(HTCommonTags.Items.PLASTICS) } - secondary { +dustOrIngot(RagiumMaterial.Metal.GOLD) } + ingredient { +holderSet(HTCommonTags.Items.PLASTICS) } + extra { +dustOrIngot(RagiumMaterial.Metal.GOLD) } result { +RagiumItems.CIRCUIT_BOARD } }.save(exporter) // Circuit Chip + Circuit Board -> Electric Circuit diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumHeatRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumHeatRecipeProvider.kt index 378f072ce6..70377eb273 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumHeatRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumHeatRecipeProvider.kt @@ -31,11 +31,11 @@ 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 } @@ -44,17 +44,17 @@ class RagiumHeatRecipeProvider(packOutput: PackOutput, future: CompletableFuture // 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 { - primary { +dustOrIngot(RagiumMaterial.Metal.IRON) } - secondary { + ingredient { +dustOrIngot(RagiumMaterial.Metal.IRON) } + extra { +materialTags( nelOf( CommonTagPrefixes.DUST.itemTagKey(RagiumMaterial.Fuel.COAL), @@ -68,11 +68,11 @@ class RagiumHeatRecipeProvider(packOutput: PackOutput, future: CompletableFuture }.save(exporter) // 2x Iron + Cokes -> 2x Sooty Iron RagiumRecipeBuilders.alloying { - primary { + ingredient { +dustOrIngot(RagiumMaterial.Metal.IRON) count = 2 } - secondary { +holderSet(RagiumTags.Items.COKES) } + extra { +holderSet(RagiumTags.Items.COKES) } result { +RagiumItems.getOrThrow(HTItemPart.INGOT, RagiumMaterial.Metal.SOOTY_IRON) count = 2 @@ -81,8 +81,8 @@ class RagiumHeatRecipeProvider(packOutput: PackOutput, future: CompletableFuture }.save(exporter) // Sooty Iron + Obsidian Dust -> Black Steel RagiumRecipeBuilders.alloying { - primary { +dustOrIngot(RagiumMaterial.Metal.SOOTY_IRON) } - secondary { + ingredient { +dustOrIngot(RagiumMaterial.Metal.SOOTY_IRON) } + extra { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Other.OBSIDIAN) count = 2 } diff --git a/src/generated/resources/assets/ragium/items/fluorine_bucket.json b/src/generated/resources/assets/ragium/items/fluorine_bucket.json deleted file mode 100644 index 5944435aef..0000000000 --- a/src/generated/resources/assets/ragium/items/fluorine_bucket.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "model": { - "type": "neoforge:fluid_container", - "apply_fluid_luminosity": false, - "flip_gas": true, - "fluid": "ragium:fluorine", - "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/lang/en_us.json b/src/generated/resources/assets/ragium/lang/en_us.json index 3ff0553001..daa6ba22ff 100644 --- a/src/generated/resources/assets/ragium/lang/en_us.json +++ b/src/generated/resources/assets/ragium/lang/en_us.json @@ -51,7 +51,6 @@ "block.ragium.electrolyzer": "Electrolyzer", "block.ragium.electronics_machine_casing": "Machine Casing (Electronics)", "block.ragium.enchanter": "Enchanter", - "block.ragium.fluorine": "Fluorine", "block.ragium.freezer": "Freezer", "block.ragium.fuel": "Fuel", "block.ragium.gray_dye": "Gray Dye", @@ -201,7 +200,6 @@ "item.ragium.electronics_machine_parts": "Machine Parts (Electronics)", "item.ragium.emerald_dust": "Emerald Dust", "item.ragium.emerald_gear": "Emerald Gear", - "item.ragium.fluorine_bucket": "Fluorine Bucket", "item.ragium.fluorite": "Fluorite", "item.ragium.fluorite_dust": "Fluorite Dust", "item.ragium.fuel_bucket": "Fuel Bucket", @@ -332,7 +330,6 @@ "tag.fluid.c.dyes.red": "Red Dye", "tag.fluid.c.dyes.white": "White Dye", "tag.fluid.c.dyes.yellow": "Yellow Dye", - "tag.fluid.c.fluorine": "Fluorine", "tag.fluid.c.fuel": "Fuel", "tag.fluid.c.honey": "Honey", "tag.fluid.c.hydrochloric_acid": "Hydrochloric Acid", @@ -377,7 +374,6 @@ "tag.item.c.buckets.dye.red": "Red Dye Bucket", "tag.item.c.buckets.dye.white": "White Dye Bucket", "tag.item.c.buckets.dye.yellow": "Yellow Dye Bucket", - "tag.item.c.buckets.fluorine": "Fluorine Bucket", "tag.item.c.buckets.fuel": "Fuel Bucket", "tag.item.c.buckets.honey": "Honey Bucket", "tag.item.c.buckets.hydrochloric_acid": "Hydrochloric Acid Bucket", diff --git a/src/generated/resources/assets/ragium/lang/ja_jp.json b/src/generated/resources/assets/ragium/lang/ja_jp.json index 5a10cbdfce..76023f897a 100644 --- a/src/generated/resources/assets/ragium/lang/ja_jp.json +++ b/src/generated/resources/assets/ragium/lang/ja_jp.json @@ -51,7 +51,6 @@ "block.ragium.electrolyzer": "電解機", "block.ragium.electronics_machine_casing": "機械筐体 (電子)", "block.ragium.enchanter": "エンチャンター", - "block.ragium.fluorine": "フッ素", "block.ragium.freezer": "冷凍機", "block.ragium.fuel": "燃料油", "block.ragium.gray_dye": "灰色の染料", @@ -201,7 +200,6 @@ "item.ragium.electronics_machine_parts": "機械部品 (電子)", "item.ragium.emerald_dust": "エメラルドの粉", "item.ragium.emerald_gear": "エメラルドの歯車", - "item.ragium.fluorine_bucket": "フッ素入りバケツ", "item.ragium.fluorite": "蛍石", "item.ragium.fluorite_dust": "蛍石の粉", "item.ragium.fuel_bucket": "燃料油入りバケツ", @@ -332,7 +330,6 @@ "tag.fluid.c.dyes.red": "赤色の染料", "tag.fluid.c.dyes.white": "白色の染料", "tag.fluid.c.dyes.yellow": "黄色の染料", - "tag.fluid.c.fluorine": "フッ素", "tag.fluid.c.fuel": "燃料油", "tag.fluid.c.honey": "ハチミツ", "tag.fluid.c.hydrochloric_acid": "塩酸", @@ -377,7 +374,6 @@ "tag.item.c.buckets.dye.red": "赤色の染料入りバケツ", "tag.item.c.buckets.dye.white": "白色の染料入りバケツ", "tag.item.c.buckets.dye.yellow": "黄色の染料入りバケツ", - "tag.item.c.buckets.fluorine": "フッ素入りバケツ", "tag.item.c.buckets.fuel": "燃料油入りバケツ", "tag.item.c.buckets.honey": "ハチミツ入りバケツ", "tag.item.c.buckets.hydrochloric_acid": "塩酸入りバケツ", diff --git a/src/generated/resources/data/c/tags/fluid/fluorine.json b/src/generated/resources/data/c/tags/fluid/fluorine.json deleted file mode 100644 index e2bf96ecaa..0000000000 --- a/src/generated/resources/data/c/tags/fluid/fluorine.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "ragium:fluorine" - ] -} \ 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 e78e0040d6..1f94bcb1d7 100644 --- a/src/generated/resources/data/c/tags/fluid/gaseous.json +++ b/src/generated/resources/data/c/tags/fluid/gaseous.json @@ -1,7 +1,6 @@ { "values": [ "#c:chlorine", - "#c:fluorine", "#c:hydrogen", "#c:hydrogen_chloride", "#c:hydrogen_fluoride", diff --git a/src/generated/resources/data/c/tags/item/buckets.json b/src/generated/resources/data/c/tags/item/buckets.json index b3d8ab72dc..02e9d4d53c 100644 --- a/src/generated/resources/data/c/tags/item/buckets.json +++ b/src/generated/resources/data/c/tags/item/buckets.json @@ -23,7 +23,6 @@ "#c:buckets/dye/red", "#c:buckets/dye/white", "#c:buckets/dye/yellow", - "#c:buckets/fluorine", "#c:buckets/fuel", "#c:buckets/honey", "#c:buckets/hydrochloric_acid", diff --git a/src/generated/resources/data/c/tags/item/buckets/fluorine.json b/src/generated/resources/data/c/tags/item/buckets/fluorine.json deleted file mode 100644 index d8a313ba53..0000000000 --- a/src/generated/resources/data/c/tags/item/buckets/fluorine.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "ragium:fluorine_bucket" - ] -} \ 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 index 1910343881..802aff7fd6 100644 --- a/src/generated/resources/data/ragium/recipe/alloying/aluminum_ingot.json +++ b/src/generated/resources/data/ragium/recipe/alloying/aluminum_ingot.json @@ -1,6 +1,16 @@ { "type": "ragium:alloying", - "primary_ingredient": { + "extra": { + "count": 1, + "items": { + "neoforge:ingredient_type": "ragium:material_tags", + "tags": [ + "c:dusts/cryolite", + "c:gems/cryolite" + ] + } + }, + "ingredient": { "count": 1, "items": { "neoforge:ingredient_type": "ragium:material_tags", @@ -18,15 +28,5 @@ "count": 3, "id": "ragium:aluminum_ingot" }, - "secondary_ingredient": { - "count": 1, - "items": { - "neoforge:ingredient_type": "ragium:material_tags", - "tags": [ - "c:dusts/cryolite", - "c:gems/cryolite" - ] - } - }, "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 a506d02746..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,6 +1,10 @@ { "type": "ragium:alloying", - "primary_ingredient": { + "extra": { + "count": 2, + "items": "#c:dusts/obsidian" + }, + "ingredient": { "count": 1, "items": { "neoforge:ingredient_type": "ragium:material_tags", @@ -14,9 +18,5 @@ "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/chemical_machine_parts.json b/src/generated/resources/data/ragium/recipe/alloying/chemical_machine_parts.json index 7c0714b970..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,14 +1,6 @@ { "type": "ragium:alloying", - "primary_ingredient": { - "count": 2, - "items": "#c:ingots/black_steel" - }, - "result": { - "count": 1, - "id": "ragium:chemical_machine_parts" - }, - "secondary_ingredient": { + "extra": { "count": 1, "items": { "neoforge:ingredient_type": "ragium:material_tags", @@ -18,5 +10,13 @@ ] } }, + "ingredient": { + "count": 2, + "items": "#c:ingots/black_steel" + }, + "result": { + "count": 1, + "id": "ragium:chemical_machine_parts" + }, "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 index 836b81380d..6b98f7f568 100644 --- a/src/generated/resources/data/ragium/recipe/alloying/circuit_board.json +++ b/src/generated/resources/data/ragium/recipe/alloying/circuit_board.json @@ -1,14 +1,6 @@ { "type": "ragium:alloying", - "primary_ingredient": { - "count": 1, - "items": "#c:plastics" - }, - "result": { - "count": 1, - "id": "ragium:circuit_board" - }, - "secondary_ingredient": { + "extra": { "count": 1, "items": { "neoforge:ingredient_type": "ragium:material_tags", @@ -18,5 +10,13 @@ ] } }, + "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 index dee9e30e55..7b1bceb3e1 100644 --- 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 @@ -1,6 +1,17 @@ { "type": "ragium:alloying", - "primary_ingredient": { + "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", @@ -14,16 +25,5 @@ "count": 1, "id": "ragium:crude_silicon" }, - "secondary_ingredient": { - "count": 1, - "items": { - "neoforge:ingredient_type": "ragium:material_tags", - "tags": [ - "c:dusts/coal_coke", - "c:dusts/pitch_coke", - "ragium:cokes" - ] - } - }, "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 index a193616913..fc99110c76 100644 --- 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 @@ -1,14 +1,6 @@ { "type": "ragium:alloying", - "primary_ingredient": { - "count": 1, - "items": "minecraft:amethyst_block" - }, - "result": { - "count": 1, - "id": "ragium:crude_silicon" - }, - "secondary_ingredient": { + "extra": { "count": 1, "items": { "neoforge:ingredient_type": "ragium:material_tags", @@ -19,5 +11,13 @@ ] } }, + "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 index d0776e1360..2538f11f84 100644 --- 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 @@ -1,29 +1,29 @@ { "type": "ragium:alloying", - "primary_ingredient": { + "extra": { "count": 1, "items": { "neoforge:ingredient_type": "ragium:material_tags", "tags": [ - "c:dusts/quartz", - "c:gems/quartz" + "c:dusts/coal_coke", + "c:dusts/pitch_coke", + "ragium:cokes" ] } }, - "result": { - "count": 1, - "id": "ragium:crude_silicon" - }, - "secondary_ingredient": { + "ingredient": { "count": 1, "items": { "neoforge:ingredient_type": "ragium:material_tags", "tags": [ - "c:dusts/coal_coke", - "c:dusts/pitch_coke", - "ragium:cokes" + "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 index e89b5f06d6..415a8e5c8a 100644 --- 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 @@ -1,14 +1,6 @@ { "type": "ragium:alloying", - "primary_ingredient": { - "count": 1, - "items": "#ragium:quartz_blocks" - }, - "result": { - "count": 4, - "id": "ragium:crude_silicon" - }, - "secondary_ingredient": { + "extra": { "count": 4, "items": { "neoforge:ingredient_type": "ragium:material_tags", @@ -19,5 +11,13 @@ ] } }, + "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/netherite_ingot.json b/src/generated/resources/data/ragium/recipe/alloying/netherite_ingot.json index 4be678ed49..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,6 +1,10 @@ { "type": "ragium:alloying", - "primary_ingredient": { + "extra": { + "count": 2, + "items": "minecraft:netherite_scrap" + }, + "ingredient": { "count": 2, "items": { "neoforge:ingredient_type": "ragium:material_tags", @@ -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/silicon_wafer.json b/src/generated/resources/data/ragium/recipe/alloying/silicon_wafer.json index ab9f028eef..c3926089c9 100644 --- a/src/generated/resources/data/ragium/recipe/alloying/silicon_wafer.json +++ b/src/generated/resources/data/ragium/recipe/alloying/silicon_wafer.json @@ -1,6 +1,10 @@ { "type": "ragium:alloying", - "primary_ingredient": { + "extra": { + "count": 1, + "items": "#c:dusts/raginite" + }, + "ingredient": { "count": 8, "items": "#c:dusts/silicon" }, @@ -8,9 +12,5 @@ "count": 1, "id": "ragium:silicon_wafer" }, - "secondary_ingredient": { - "count": 1, - "items": "#c:dusts/raginite" - }, "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 index 78a9c1cc70..53cdba98ba 100644 --- 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 @@ -1,29 +1,29 @@ { "type": "ragium:alloying", - "primary_ingredient": { + "extra": { "count": 1, "items": { "neoforge:ingredient_type": "ragium:material_tags", "tags": [ - "c:dusts/iron", - "c:ingots/iron" + "c:dusts/coal", + "c:dusts/charcoal", + "ragium:coals" ] } }, - "result": { - "count": 1, - "id": "ragium:sooty_iron_ingot" - }, - "secondary_ingredient": { + "ingredient": { "count": 1, "items": { "neoforge:ingredient_type": "ragium:material_tags", "tags": [ - "c:dusts/coal", - "c:dusts/charcoal", - "ragium:coals" + "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 index 40544c6093..d508bb4987 100644 --- 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 @@ -1,6 +1,10 @@ { "type": "ragium:alloying", - "primary_ingredient": { + "extra": { + "count": 1, + "items": "#ragium:cokes" + }, + "ingredient": { "count": 2, "items": { "neoforge:ingredient_type": "ragium:material_tags", @@ -14,9 +18,5 @@ "count": 2, "id": "ragium:sooty_iron_ingot" }, - "secondary_ingredient": { - "count": 1, - "items": "#ragium:cokes" - }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/mixing/fluorine.json b/src/generated/resources/data/ragium/recipe/mixing/hydrogen_fluoride.json similarity index 90% rename from src/generated/resources/data/ragium/recipe/mixing/fluorine.json rename to src/generated/resources/data/ragium/recipe/mixing/hydrogen_fluoride.json index a1a72eb6ca..f761179495 100644 --- a/src/generated/resources/data/ragium/recipe/mixing/fluorine.json +++ b/src/generated/resources/data/ragium/recipe/mixing/hydrogen_fluoride.json @@ -16,7 +16,7 @@ }, "result": { "amount": 2000, - "id": "ragium:fluorine" + "id": "ragium:hydrogen_fluoride" }, "time": 200 } \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/reacting/hydrogen_fluoride.json b/src/generated/resources/data/ragium/recipe/reacting/hydrogen_fluoride.json deleted file mode 100644 index b59801b6f4..0000000000 --- a/src/generated/resources/data/ragium/recipe/reacting/hydrogen_fluoride.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "ragium:reacting", - "fluid_result": { - "amount": 2000, - "id": "ragium:hydrogen_fluoride" - }, - "primary_ingredient": { - "amount": 1000, - "fluids": "#c:hydrogen" - }, - "secondary_ingredient": { - "amount": 1000, - "fluids": "#c:fluorine" - }, - "time": 200 -} \ No newline at end of file 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/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/ragium/api/data/recipe/builder/RagiumRecipeBuilders.kt b/src/lib/kotlin/hiiragi283/ragium/api/data/recipe/builder/RagiumRecipeBuilders.kt index b1fe72c9a2..addd618269 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/data/recipe/builder/RagiumRecipeBuilders.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/data/recipe/builder/RagiumRecipeBuilders.kt @@ -2,7 +2,6 @@ package hiiragi283.ragium.api.data.recipe.builder -import hiiragi283.lib.data.recipe.builder.HTDoubleItemToItemRecipeBuilder import hiiragi283.lib.data.recipe.builder.HTFluidToRecipeBuilder import hiiragi283.lib.data.recipe.builder.HTItemAndFluidToRecipeBuilder import hiiragi283.lib.data.recipe.builder.HTItemToDoubleItemRecipeBuilder @@ -99,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 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/RagiumRecipeLookups.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeLookups.kt index e2878ec68a..de8ac85d47 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeLookups.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeLookups.kt @@ -1,7 +1,6 @@ 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 @@ -53,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) 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 f94e9bd9d2..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,8 +1,7 @@ package hiiragi283.ragium.common.block.entity.machine -import hiiragi283.lib.recipe.base.HTDoubleItemToItemRecipe import hiiragi283.lib.recipe.base.HTTripleItemToItemRecipe -import hiiragi283.lib.recipe.lookup.HTRecipeLookup +import hiiragi283.lib.recipe.lookup.mapNotNull import hiiragi283.lib.sounds.HTSoundInstance import hiiragi283.ragium.api.RagiumConfig import hiiragi283.ragium.api.config.HTEnergyConfig @@ -14,17 +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(), LOOKUP, pos, state) { - companion object { - @JvmStatic - private val LOOKUP: HTRecipeLookup = - HTRecipeLookup { context: HTRecipeLookup.Context -> - RagiumRecipeLookups.ASSEMBLING - .getAllRecipes(context) - .mapNotNull { it.mapNotNull(HTTripleItemToItemRecipe::asDoubleInput) } - } - } - + 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/fluid/RagiumFluids.kt b/src/main/kotlin/hiiragi283/ragium/common/fluid/RagiumFluids.kt index b9f0ff34f3..e04b805b5a 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/fluid/RagiumFluids.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/fluid/RagiumFluids.kt @@ -127,9 +127,6 @@ data object RagiumFluids { @JvmField val OXYGEN: HTFluidContent.Virtual = REGISTER.registerVirtual("oxygen") { properties = gaseous() } - @JvmField - val FLUORINE: HTFluidContent.Virtual = REGISTER.registerVirtual("fluorine") { properties = gaseous() } - // 4th @JvmField val CHLORINE: HTFluidContent.Virtual = REGISTER.registerVirtual("chlorine") { properties = gaseous() } From 906169b93685ff2306a55b1e57a87de088ea3645 Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Mon, 21 Sep 2026 00:39:33 +0900 Subject: [PATCH 26/44] =?UTF-8?q?feat!:=20Alumina=20Dust=20=E3=82=92?= =?UTF-8?q?=E5=89=8A=E9=99=A4=20feat:=20=E6=96=B0=E3=81=97=E3=81=84?= =?UTF-8?q?=E6=B6=B2=E4=BD=93:=20Molten=20Aluminum=20/=20=E6=BA=B6?= =?UTF-8?q?=E8=9E=8D=E3=82=A2=E3=83=AB=E3=83=9F=E3=83=8B=E3=82=A6=E3=83=A0?= =?UTF-8?q?=E3=82=92=E8=BF=BD=E5=8A=A0=20feat:=20=E6=BA=B6=E8=9E=8D?= =?UTF-8?q?=E6=B6=B2=E4=BD=93=E3=81=AE=E3=83=86=E3=82=AF=E3=82=B9=E3=83=81?= =?UTF-8?q?=E3=83=A3=E3=82=92=E5=B7=AE=E3=81=97=E6=88=BB=E3=81=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hiiragi283/ragium/client/RagiumClient.kt | 4 ++ .../data/lang/RagiumEnglishLangProvider.kt | 1 + .../data/lang/RagiumJapaneseLangProvider.kt | 1 + .../data/recipe/RagiumCommonRecipeProvider.kt | 57 +++++++++--------- .../data/recipe/RagiumHeatRecipeProvider.kt | 8 +++ .../assets/ragium/items/alumina_dust.json | 6 -- .../ragium/items/molten_aluminum_bucket.json | 12 ++++ .../resources/assets/ragium/lang/en_us.json | 5 +- .../resources/assets/ragium/lang/ja_jp.json | 5 +- .../ragium/models/item/alumina_dust.json | 6 -- .../data/c/tags/fluid/molten_aluminum.json | 5 ++ .../resources/data/c/tags/item/buckets.json | 1 + .../c/tags/item/buckets/molten_aluminum.json | 5 ++ .../resources/data/c/tags/item/dusts.json | 1 - .../data/c/tags/item/dusts/alumina.json | 5 -- .../recipe/alloying/aluminum_ingot.json | 32 ---------- .../ragium/recipe/bathing/alumina_dust.json | 16 ----- .../recipe/bathing/salt_dust_from_block.json | 16 +++++ .../recipe/electrolyzing/molten_aluminum.json | 22 +++++++ .../recipe/freezing/aluminum_ingot.json | 12 ++++ .../recipe/mixing/alumina_solution.json | 2 +- .../recipe/mixing/hydrogen_chloride.json | 16 +++++ .../data/ragium/recipe/reacting/cryolite.json | 2 +- .../ragium/api/material/RagiumMaterial.kt | 5 -- .../lib/fluid/HTFluidModelBuilder.kt | 3 +- .../ragium/common/fluid/RagiumFluids.kt | 3 + .../ragium/common/item/RagiumItems.kt | 1 - .../ragium/textures/block/fluid/molten.png | Bin 412 -> 0 bytes .../textures/block/fluid/molten_flowing.png | Bin 0 -> 8528 bytes .../block/fluid/molten_flowing.png.mcmeta | 5 ++ .../textures/block/fluid/molten_still.png | Bin 0 -> 8341 bytes .../block/fluid/molten_still.png.mcmeta | 45 ++++++++++++++ 32 files changed, 197 insertions(+), 105 deletions(-) delete mode 100644 src/generated/resources/assets/ragium/items/alumina_dust.json create mode 100644 src/generated/resources/assets/ragium/items/molten_aluminum_bucket.json delete mode 100644 src/generated/resources/assets/ragium/models/item/alumina_dust.json create mode 100644 src/generated/resources/data/c/tags/fluid/molten_aluminum.json create mode 100644 src/generated/resources/data/c/tags/item/buckets/molten_aluminum.json delete mode 100644 src/generated/resources/data/c/tags/item/dusts/alumina.json delete mode 100644 src/generated/resources/data/ragium/recipe/alloying/aluminum_ingot.json delete mode 100644 src/generated/resources/data/ragium/recipe/bathing/alumina_dust.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/salt_dust_from_block.json create mode 100644 src/generated/resources/data/ragium/recipe/electrolyzing/molten_aluminum.json create mode 100644 src/generated/resources/data/ragium/recipe/freezing/aluminum_ingot.json create mode 100644 src/generated/resources/data/ragium/recipe/mixing/hydrogen_chloride.json delete mode 100644 src/main/resources/assets/ragium/textures/block/fluid/molten.png create mode 100644 src/main/resources/assets/ragium/textures/block/fluid/molten_flowing.png create mode 100644 src/main/resources/assets/ragium/textures/block/fluid/molten_flowing.png.mcmeta create mode 100644 src/main/resources/assets/ragium/textures/block/fluid/molten_still.png create mode 100644 src/main/resources/assets/ragium/textures/block/fluid/molten_still.png.mcmeta diff --git a/src/client/kotlin/hiiragi283/ragium/client/RagiumClient.kt b/src/client/kotlin/hiiragi283/ragium/client/RagiumClient.kt index fabde0999a..aa8895a795 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/RagiumClient.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/RagiumClient.kt @@ -171,6 +171,10 @@ data object RagiumClient : HTClientMod() { dull() colorTint(Color(0xcc9999)) } + register.register(RagiumFluids.MOLTEN_ALUMINUM) { + molten() + colorTint(Color(0xffcccc)) + } register.register(RagiumFluids.SULFUR_DIOXIDE) { transparent() colorTint(Color(0x996600)) diff --git a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt index 0979daee71..e0596905f1 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt @@ -96,6 +96,7 @@ class RagiumEnglishLangProvider(output: PackOutput) : addFluid(RagiumFluids.HYDROFLUORIC_ACID, "Hydrofluoric Acid") addFluid(RagiumFluids.NAOH_SOLUTION, "Sodium Hydroxide Solution") addFluid(RagiumFluids.ALUMINA_SOLUTION, "Alumina Solution") + addFluid(RagiumFluids.MOLTEN_ALUMINUM, "Molten Aluminum") addFluid(RagiumFluids.SULFUR_DIOXIDE, "Sulfur Dioxide") addFluid(RagiumFluids.SULFUR_TRIOXIDE, "Sulfur Trioxide") addFluid(RagiumFluids.SULFURIC_ACID, "Sulfuric Acid") diff --git a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt index 79937f32a3..7c58651ef0 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt @@ -92,6 +92,7 @@ class RagiumJapaneseLangProvider(output: PackOutput) : addFluid(RagiumFluids.HYDROFLUORIC_ACID, "フッ化水素酸") addFluid(RagiumFluids.NAOH_SOLUTION, "水酸化ナトリウム水溶液") addFluid(RagiumFluids.ALUMINA_SOLUTION, "アルミナ水溶液") + addFluid(RagiumFluids.MOLTEN_ALUMINUM, "溶融アルミニウム") addFluid(RagiumFluids.SULFUR_DIOXIDE, "二酸化硫黄") addFluid(RagiumFluids.SULFUR_TRIOXIDE, "三酸化硫黄") addFluid(RagiumFluids.SULFURIC_ACID, "硫酸") diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt index 78ea13b10d..44e139f963 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt @@ -5,7 +5,6 @@ import hiiragi283.lib.data.recipe.HTRecipeProvider import hiiragi283.lib.recipe.ingredient.HTMaterialTagsIngredient import hiiragi283.lib.tag.CommonTagPrefixes import hiiragi283.lib.tag.HTCommonTags -import hiiragi283.lib.tag.HTMaterialKey import hiiragi283.ragium.api.RagiumAPI import hiiragi283.ragium.api.data.recipe.builder.RagiumRecipeBuilders import hiiragi283.ragium.api.material.HTItemPart @@ -214,6 +213,26 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu } 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) } @@ -357,18 +376,9 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu } private fun aluminum() { - // Bauxite + NaOH aq -> Al2O3 - RagiumRecipeBuilders.bathing { - itemIngredient { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Mineral.BAUXITE) } - fluidIngredient { - +holderSet(RagiumFluids.NAOH_SOLUTION) - amount /= 2 - } - result { +RagiumItems.getOrThrow(HTItemPart.DUST, RagiumMaterial.Other.ALUMINA) } - }.save(exporter) - // Al2O3 + NaOH aq -> Alumina Solution + // Bauxite + NaOH aq -> Alumina Solution RagiumRecipeBuilders.mixing { - itemIngredient { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Other.ALUMINA) } + itemIngredient { +holderSet(CommonTagPrefixes.DUST, RagiumMaterial.Mineral.BAUXITE) } fluidIngredient { +holderSet(RagiumFluids.NAOH_SOLUTION) amount /= 2 @@ -382,27 +392,18 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu RagiumRecipeBuilders.reacting { primaryIngredient { +holderSet(RagiumFluids.ALUMINA_SOLUTION) } secondaryIngredient { - +holderSet(RagiumFluids.HYDROGEN_FLUORIDE) + +holderSet(RagiumFluids.HYDROFLUORIC_ACID) amount *= 6 } itemResult { +RagiumItems.getOrThrow(HTItemPart.GEM, RagiumMaterial.Gem.CRYOLITE) } }.save(exporter) - // Al2O3 + Na3AlF6 -> Al - RagiumRecipeBuilders.alloying { - ingredient { - +materialTags( - nelOf(CommonTagPrefixes.DUST, CommonTagPrefixes.GEM), - nelOf( - RagiumMaterial.Other.ALUMINA, - HTMaterialKey("ruby"), - HTMaterialKey("sapphire") - ) - ) - } - extra { +dustOrGem(RagiumMaterial.Gem.CRYOLITE) } + // Alumina Solution + Na3AlF6 -> Molten Al + RagiumRecipeBuilders.electrolyzing { + itemIngredient { +dustOrGem(RagiumMaterial.Gem.CRYOLITE) } + fluidIngredient { +holderSet(RagiumFluids.ALUMINA_SOLUTION) } result { - +RagiumItems.getOrThrow(HTItemPart.INGOT, RagiumMaterial.Metal.ALUMINUM) - count = 3 + +RagiumFluids.MOLTEN_ALUMINUM + amount = 90 * 3 } }.save(exporter) } diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumHeatRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumHeatRecipeProvider.kt index 70377eb273..2175979b1d 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumHeatRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumHeatRecipeProvider.kt @@ -111,6 +111,14 @@ class RagiumHeatRecipeProvider(packOutput: PackOutput, future: CompletableFuture ingredient { +holderSet(RagiumFluids.MOLTEN_GLASS) } result { +Items.GLASS } }.save(exporter) + // Aluminum + RagiumRecipeBuilders.freezing { + ingredient { + +holderSet(RagiumFluids.MOLTEN_ALUMINUM) + amount = 90 + } + result { +RagiumItems.getOrThrow(HTItemPart.INGOT, RagiumMaterial.Metal.ALUMINUM) } + }.save(exporter) } private fun melting() { diff --git a/src/generated/resources/assets/ragium/items/alumina_dust.json b/src/generated/resources/assets/ragium/items/alumina_dust.json deleted file mode 100644 index d205c7d88b..0000000000 --- a/src/generated/resources/assets/ragium/items/alumina_dust.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "model": { - "type": "minecraft:model", - "model": "ragium:item/alumina_dust" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/items/molten_aluminum_bucket.json b/src/generated/resources/assets/ragium/items/molten_aluminum_bucket.json new file mode 100644 index 0000000000..117ca0d5bd --- /dev/null +++ b/src/generated/resources/assets/ragium/items/molten_aluminum_bucket.json @@ -0,0 +1,12 @@ +{ + "model": { + "type": "neoforge:fluid_container", + "apply_fluid_luminosity": false, + "fluid": "ragium:molten_aluminum", + "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/lang/en_us.json b/src/generated/resources/assets/ragium/lang/en_us.json index daa6ba22ff..9c2b7eec7f 100644 --- a/src/generated/resources/assets/ragium/lang/en_us.json +++ b/src/generated/resources/assets/ragium/lang/en_us.json @@ -71,6 +71,7 @@ "block.ragium.mechanical_machine_casing": "Machine Casing (Mechanical)", "block.ragium.melter": "Melter", "block.ragium.mixer": "Mixer", + "block.ragium.molten_aluminum": "Molten Aluminum", "block.ragium.molten_ender": "Resonant Ender", "block.ragium.molten_glass": "Molten Glass", "block.ragium.molten_glowstone": "Energized Glowstone", @@ -157,7 +158,6 @@ "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.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", @@ -226,6 +226,7 @@ "item.ragium.magenta_dye_bucket": "Magenta Dye Bucket", "item.ragium.mechanical_machine_parts": "Machine Parts (Mechanical)", "item.ragium.memory_disc": "Memory Disc", + "item.ragium.molten_aluminum_bucket": "Molten Aluminum Bucket", "item.ragium.molten_ender_bucket": "Resonant Ender Bucket", "item.ragium.molten_glass_bucket": "Molten Glass Bucket", "item.ragium.molten_glowstone_bucket": "Energized Glowstone Bucket", @@ -338,6 +339,7 @@ "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_aluminum": "Molten Aluminum", "tag.fluid.c.molten_ender": "Resonant Ender", "tag.fluid.c.molten_glass": "Molten Glass", "tag.fluid.c.molten_glowstone": "Energized Glowstone", @@ -382,6 +384,7 @@ "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_aluminum": "Molten Aluminum Bucket", "tag.item.c.buckets.molten_ender": "Resonant Ender Bucket", "tag.item.c.buckets.molten_glass": "Molten Glass Bucket", "tag.item.c.buckets.molten_glowstone": "Energized Glowstone Bucket", diff --git a/src/generated/resources/assets/ragium/lang/ja_jp.json b/src/generated/resources/assets/ragium/lang/ja_jp.json index 76023f897a..072f27c9be 100644 --- a/src/generated/resources/assets/ragium/lang/ja_jp.json +++ b/src/generated/resources/assets/ragium/lang/ja_jp.json @@ -71,6 +71,7 @@ "block.ragium.mechanical_machine_casing": "機械筐体 (機械加工)", "block.ragium.melter": "溶融炉", "block.ragium.mixer": "混合機", + "block.ragium.molten_aluminum": "溶融アルミニウム", "block.ragium.molten_ender": "共振エンダー", "block.ragium.molten_glass": "溶融ガラス", "block.ragium.molten_glowstone": "活性グロウストーン", @@ -157,7 +158,6 @@ "item.minecraft.tipped_arrow.effect.frostbite": "凍傷の矢", "item.minecraft.tipped_arrow.effect.golden_apple": "金リンゴの矢", "item.minecraft.tipped_arrow.effect.hunger": "空腹の矢", - "item.ragium.alumina_dust": "アルミナの粉", "item.ragium.alumina_solution_bucket": "アルミナ水溶液入りバケツ", "item.ragium.aluminum_ingot": "アルミニウムインゴット", "item.ragium.aluminum_nugget": "アルミニウムナゲット", @@ -226,6 +226,7 @@ "item.ragium.magenta_dye_bucket": "赤紫色の染料入りバケツ", "item.ragium.mechanical_machine_parts": "機械部品 (機械加工)", "item.ragium.memory_disc": "メモリーディスク", + "item.ragium.molten_aluminum_bucket": "溶融アルミニウム入りバケツ", "item.ragium.molten_ender_bucket": "共振エンダー入りバケツ", "item.ragium.molten_glass_bucket": "溶融ガラス入りバケツ", "item.ragium.molten_glowstone_bucket": "活性グロウストーン入りバケツ", @@ -338,6 +339,7 @@ "tag.fluid.c.hydrogen_chloride": "塩化水素", "tag.fluid.c.hydrogen_fluoride": "フッ化水素", "tag.fluid.c.liquid_explosive": "液体爆薬", + "tag.fluid.c.molten_aluminum": "溶融アルミニウム", "tag.fluid.c.molten_ender": "共振エンダー", "tag.fluid.c.molten_glass": "溶融ガラス", "tag.fluid.c.molten_glowstone": "活性グロウストーン", @@ -382,6 +384,7 @@ "tag.item.c.buckets.hydrogen_chloride": "塩化水素入りバケツ", "tag.item.c.buckets.hydrogen_fluoride": "フッ化水素入りバケツ", "tag.item.c.buckets.liquid_explosive": "液体爆薬入りバケツ", + "tag.item.c.buckets.molten_aluminum": "溶融アルミニウム入りバケツ", "tag.item.c.buckets.molten_ender": "共振エンダー入りバケツ", "tag.item.c.buckets.molten_glass": "溶融ガラス入りバケツ", "tag.item.c.buckets.molten_glowstone": "活性グロウストーン入りバケツ", diff --git a/src/generated/resources/assets/ragium/models/item/alumina_dust.json b/src/generated/resources/assets/ragium/models/item/alumina_dust.json deleted file mode 100644 index 6a44d7b20f..0000000000 --- a/src/generated/resources/assets/ragium/models/item/alumina_dust.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "ragium:item/alumina_dust" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/fluid/molten_aluminum.json b/src/generated/resources/data/c/tags/fluid/molten_aluminum.json new file mode 100644 index 0000000000..610443f14f --- /dev/null +++ b/src/generated/resources/data/c/tags/fluid/molten_aluminum.json @@ -0,0 +1,5 @@ +{ + "values": [ + "ragium:molten_aluminum" + ] +} \ 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 02e9d4d53c..29959cb0b6 100644 --- a/src/generated/resources/data/c/tags/item/buckets.json +++ b/src/generated/resources/data/c/tags/item/buckets.json @@ -31,6 +31,7 @@ "#c:buckets/hydrogen_chloride", "#c:buckets/hydrogen_fluoride", "#c:buckets/liquid_explosive", + "#c:buckets/molten_aluminum", "#c:buckets/molten_ender", "#c:buckets/molten_glass", "#c:buckets/molten_glowstone", diff --git a/src/generated/resources/data/c/tags/item/buckets/molten_aluminum.json b/src/generated/resources/data/c/tags/item/buckets/molten_aluminum.json new file mode 100644 index 0000000000..200c0cbea2 --- /dev/null +++ b/src/generated/resources/data/c/tags/item/buckets/molten_aluminum.json @@ -0,0 +1,5 @@ +{ + "values": [ + "ragium:molten_aluminum_bucket" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/dusts.json b/src/generated/resources/data/c/tags/item/dusts.json index 4decc30e59..0ca0c44a83 100644 --- a/src/generated/resources/data/c/tags/item/dusts.json +++ b/src/generated/resources/data/c/tags/item/dusts.json @@ -1,6 +1,5 @@ { "values": [ - "#c:dusts/alumina", "#c:dusts/amethyst", "#c:dusts/bauxite", "#c:dusts/borax", diff --git a/src/generated/resources/data/c/tags/item/dusts/alumina.json b/src/generated/resources/data/c/tags/item/dusts/alumina.json deleted file mode 100644 index 2f303e18ab..0000000000 --- a/src/generated/resources/data/c/tags/item/dusts/alumina.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "ragium:alumina_dust" - ] -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/alloying/aluminum_ingot.json b/src/generated/resources/data/ragium/recipe/alloying/aluminum_ingot.json deleted file mode 100644 index 802aff7fd6..0000000000 --- a/src/generated/resources/data/ragium/recipe/alloying/aluminum_ingot.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "type": "ragium:alloying", - "extra": { - "count": 1, - "items": { - "neoforge:ingredient_type": "ragium:material_tags", - "tags": [ - "c:dusts/cryolite", - "c:gems/cryolite" - ] - } - }, - "ingredient": { - "count": 1, - "items": { - "neoforge:ingredient_type": "ragium:material_tags", - "tags": [ - "c:dusts/alumina", - "c:dusts/ruby", - "c:dusts/sapphire", - "c:gems/alumina", - "c:gems/ruby", - "c:gems/sapphire" - ] - } - }, - "result": { - "count": 3, - "id": "ragium:aluminum_ingot" - }, - "time": 200 -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/bathing/alumina_dust.json b/src/generated/resources/data/ragium/recipe/bathing/alumina_dust.json deleted file mode 100644 index 5266da408a..0000000000 --- a/src/generated/resources/data/ragium/recipe/bathing/alumina_dust.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "ragium:bathing", - "fluid_ingredient": { - "amount": 500, - "fluids": "#c:sodium_hydroxide_solution" - }, - "item_ingredient": { - "count": 1, - "items": "#c:dusts/bauxite" - }, - "result": { - "count": 1, - "id": "ragium:alumina_dust" - }, - "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/electrolyzing/molten_aluminum.json b/src/generated/resources/data/ragium/recipe/electrolyzing/molten_aluminum.json new file mode 100644 index 0000000000..4fc163ab1a --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/electrolyzing/molten_aluminum.json @@ -0,0 +1,22 @@ +{ + "type": "ragium:electrolyzing", + "fluid_ingredient": { + "amount": 1000, + "fluids": "#c:alumina_solution" + }, + "item_ingredient": { + "count": 1, + "items": { + "neoforge:ingredient_type": "ragium:material_tags", + "tags": [ + "c:dusts/cryolite", + "c:gems/cryolite" + ] + } + }, + "result": { + "amount": 270, + "id": "ragium:molten_aluminum" + }, + "time": 200 +} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/freezing/aluminum_ingot.json b/src/generated/resources/data/ragium/recipe/freezing/aluminum_ingot.json new file mode 100644 index 0000000000..9281d7c99c --- /dev/null +++ b/src/generated/resources/data/ragium/recipe/freezing/aluminum_ingot.json @@ -0,0 +1,12 @@ +{ + "type": "ragium:freezing", + "ingredient": { + "amount": 90, + "fluids": "#c:molten_aluminum" + }, + "result": { + "count": 1, + "id": "ragium:aluminum_ingot" + }, + "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 index dce9812d4b..7e240bd248 100644 --- a/src/generated/resources/data/ragium/recipe/mixing/alumina_solution.json +++ b/src/generated/resources/data/ragium/recipe/mixing/alumina_solution.json @@ -6,7 +6,7 @@ }, "item_ingredient": { "count": 1, - "items": "#c:dusts/alumina" + "items": "#c:dusts/bauxite" }, "result": { "amount": 500, 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/reacting/cryolite.json b/src/generated/resources/data/ragium/recipe/reacting/cryolite.json index 602323f23c..4446d36927 100644 --- a/src/generated/resources/data/ragium/recipe/reacting/cryolite.json +++ b/src/generated/resources/data/ragium/recipe/reacting/cryolite.json @@ -10,7 +10,7 @@ }, "secondary_ingredient": { "amount": 6000, - "fluids": "#c:hydrogen_fluoride" + "fluids": "#c:hydrofluoric_acid" }, "time": 200 } \ No newline at end of file diff --git a/src/lib/kotlin/hiiragi283/ragium/api/material/RagiumMaterial.kt b/src/lib/kotlin/hiiragi283/ragium/api/material/RagiumMaterial.kt index e72b74ffd3..bf16e0c5a0 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/material/RagiumMaterial.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/material/RagiumMaterial.kt @@ -165,11 +165,6 @@ sealed interface RagiumMaterial : // Common CARBON(false, "Carbon", "炭素"), - /** - * @since 26.1.7 - */ - ALUMINA(false, "Alumina", "アルミナ"), - /** * @since 26.1.7 */ diff --git a/src/libClient/kotlin/hiiragi283/lib/fluid/HTFluidModelBuilder.kt b/src/libClient/kotlin/hiiragi283/lib/fluid/HTFluidModelBuilder.kt index 5ef3f10ebe..8e122ef15f 100644 --- a/src/libClient/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/main/kotlin/hiiragi283/ragium/common/fluid/RagiumFluids.kt b/src/main/kotlin/hiiragi283/ragium/common/fluid/RagiumFluids.kt index e04b805b5a..e56ac80886 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/fluid/RagiumFluids.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/fluid/RagiumFluids.kt @@ -206,6 +206,9 @@ data object RagiumFluids { properties = liquid() } + @JvmField + val MOLTEN_ALUMINUM: HTFluidContent.Virtual = REGISTER.registerVirtual("molten_aluminum") { properties = molten() } + @JvmField val SULFUR_DIOXIDE: HTFluidContent.Virtual = REGISTER.registerVirtual("sulfur_dioxide") { properties = gaseous() } diff --git a/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt b/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt index e7fab4d32c..3900525aa9 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt @@ -97,7 +97,6 @@ data object RagiumItems { 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) }.flatMapTable { (material: RagiumMaterial, parts: Collection) -> parts.map { part: HTItemPart -> 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 5d8dbca7b0a804917a4cd6261d517e57efb30b89..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 412 zcmV;N0b~A&P)|hzbxTP!^RSDj+5#qy$6-h=7<5_Vh+FTHW1BU$+1MwuhO`<2Zi$ zzW*%CQXmKXf1pA5^Kl%huIuFYJIB$0wryLw?;D-ekVBm3`4O1#fMo2tF1=naWeQ#_ z10+NnING*-OzOI>)BF8S`@a7fQa*tRG>SHgpb>^)P!<>{;VT1dMj{+PMDe<=r1?D0 zR8FS=hKq+FduH_*ZQR&r_dxTWNj)W$F-q{aNtE8T3>o(Uvz(VVd=`IU!l!x)J! zTsDPTTA&p~w1q+2i3K%Y?Apk*-j$e-v%dU#i61115+pi`)HCZF4u`8uquja@cXxLY zM11C4pyTlR;GhLfITt|$Z@FQU#KX;<+Uo|RpsDobl$DvKv4%Q(@aaZpwTv${@$B6= zSl%;eMN^YQ@gS@A3qz?=#@VS4_UcdY}fSOUUN}Vjn`!?fjZ7u|FT%)YJ;ZUgHZ_5S)qRx zz|oVe#O5MefguY=;r91Ju>1-=M7r>ks{UI)78hlR?cj|ezfIQu!pd&RlH%;oJ0`Kx3}%&{aY9t{fE)TB;b zi|UwKT`i}hii+|Xd=ua9s1%#aZraGn$z5@erGMz}=S|WO%wFEEvp2RF)X9EZSGR!b zyLlD|n~UJl!0&9X`k-Lk(T1CGJZCk!H{tY%IG%Bc#!CXU)Blent9A?>g*g`d9RGqW zDIR!+E~XKTN-?Y-Q>3od*((wyY?Ab_f6cAkU;4_?kuVoHu`v<4y|}%xoR;rlBgmIo zUz$dpOY6<|8qN3k=Bt`HXJu)ri`A`J4Vl>3ZQ0*lu8`kurV^!>8`t{Yzkfe8WZC2> z_Jl&B`@jki#2iF&ax&;?|1kvd?NS6hLGm$&iKu2MOz){A#zh#kwCEGwu_i~VaxWZ` zg8+?&_r~%U7JVcXRLDzX2E1!eQgASKO`YL&IK+Oq>r$d?;N82+X?L63SZ=mo)42j= z&G(QHhKQ3T7wW;i_deEL=}tAIJ#$SFFrm=Pm$zlqpBv;!Vp@w)c@j_x9S5T{FPjux zlR}S-jkejsp|{QmvBrnc6uM9@)&n3L~O$~df@pok^B%t1^Zl0vJZ z(V(^!@)t=RYr%PDBje+OtS)L9pe_&{;V4j;8ZT2$>Y5?`=LhL5dq+n{2M3PuFxKhq z&=Skhu`vNX98x&UEC*3!E}NE?1}2EZBy^);!bpnGh-SvT;HTESTvk%@IOnr>?W!}c z^zGZX!Gv=hfJO&0_~*=HuhAw)rC!V2{`sFjkNr~4FqX;t%&ki5APDtQsTSaQyP;jWEX}l4n&8cGg!|wJ*`AmYN>~o@gPxm_fD2Dufy?%K+ zbMAQ5Q^kI^RdXn7PlbF>`>Ll(+SG;|v7(}4fU&NN^@F+l`&XOGHsM#p1vI78XJ=hU zYcA*V{D;-@7(8F?dBnX%Y=-K>JxLMTF*4i9>Rk)Co0Vd*4^Ajr_ zdFL*gPBt>dP(PQK)Mt%Sa%wgltVNOT)!EnC|3=?cN%Kg3Pbhdc01%Y+3(fQAaGr7& zm5z~+`B>3dUj7KlZlXXETCoXgawJQBQsdW?N$!DqK$EfjC&k2gqC0+7Dv=73T&FI8 zmg@GxkZ0Bc9foD{3f<`SisCoVrc7S6foV#^c5Jcy#e+qRdNeiS0UZVIa*4St%Ka1{ z@&NNP5k%`%vg9h7XMLzbzEO)`Z@zRhDFW`?egp@rwJlj+_qVV(jWM&Rb}YM$eJ0hl zibspYgP)Xb8rDZ46o4`2x`ZKXnSf5WSL~^{W0RDF!1CK9t?zD3TqWPM5v(}Dm$@@7 z)H1&wH0GTQ1wAhul{x2;TGQNYEVH<=4X_H;uQOZr}DDLnu4yDGRbxylV z&uUo+^XF5^J=)i-_#@415&WEy%;KHOMwY?v*^i6e3{F_pe$RfFRm}8nxI&LXr9h~v zhScxv*L;&9<!!{RQ+uSLgOa@;>_3ef6w{cEO=EWh0s-K^Hp{D9V=!J9+YWl#8%_ zRLG52gWXum4gU}YYA!nHP#$*BHWT+&k)ZvkmhQGsKddMsdJz~Tx~p_Uc`{W z6@|8lQO?L^+9tVjf2q#3DCeH=-OA~33x|%Ue@1fYVZm64 zv-Uzerl3ZL61t%DYTKj5$pAmNx!-=Gqx$C7z-PeWA`Hf%zMi|MfIuK7w=lHQDZWzxqb1VF7{?SO+S~(MidwSM|A+Kufz|mo=2M> z`PRK*sPSc@1Aj_F!b?gNSZ$!J9@UK#%ctD%nG{7{CAW6>f4k$LO;+?*nEV}tn4+6B zbsngsrQ|<$eN0pNcoXG%cB&9TBSq;dQcWo|0f?%DbC!<#^*nVblgr*$NVWM*3 zf`x^bN}7vs{+!=0tw@(EGDhTAj%C9P|Czr2Tb+cghpmof(SKvhhOwOQlfx{V^mF@{ zH@rp_1!KFPfz=BTj6z>^MjpyBm;F!?x8{>)#;b?BcaQICzFDCb;zoPo*qDRC!pDyv z8x@S9%0`#CO{~5R9vshIZRY*K>(M-7Nd|e(UZJU=_9dij?l}~&E9n{3Vva~>+bc%j zSh=Heqbo5!{wM^2THTp+Ca_rL_FLQ7;9%~`A~s1~gn~k@WWgzjI6w&orPmL5ak-usb#{-LLl!9f7q(JF1D(rWqErKk5+tckZ|n93iF>;k@&-}BHNt97z&7J zUs&{E*RS1|7UKX5QV$|*gugd_g-oA+da#;hC6~Nd@k5J_)-2X5rb0f=)KypKAq)y=b&ZXN+XOxA4?ndxc;AgB zhiA&Pqy+@==N8~9Q-R~kz1PcQgq#b$9l&5tiB^*9d|gasfk{@*3BlX!6-UigEq5B9 zt7K7cr&<=84-E}{oIR_?lAu)nC=8xiGpeX z=Wkcr^6Py*133Sa&|jy9{X-@$^IYQB8y+5p?x08ywtk+T9;=X7o`!_C5~%-j+5>Vs z89&KFB&p8GTUZF_rC2?IwBb%I4qXbXoc_=e&4Yb#Ne`$st1`!IaTyXF2sJR>L+0sO zJ|?a>^wxatlN?0*lsbkS8ygE=34Y9z)-$_ORv}N{gMkJ4ySAk(Tb1il%n1Zs-1x2i zX$+uU-3reQA~{TIYHAR9UDuzQaps9PZDk0qE`P17Y;M*NiC<|;S>eCREA$yfva_*y zD#?)vsgRF$xh4F5VBlB~BjN8CEBq2B1}DMSK*K#1mp0WycTij%cbm7O<^p$2r5eK? zTHD&{OmTmh87i?WtPE$=1F@6uF)bn@cd&c3N3?p*iD;apJmQ~1^#LwWKw~O@*_Fyc z-CrnRf5o^+OZqpM4CRO*gYiI&V~LS!{?WN+%JmE95U72dfB>z|&BN;R`A% zMT0=vxV9fz47dnk*6EG_+d;tG!r#kl(XG-222Km8RE`T!vtR|h)J)CiSUYA!3k6!3 zQBP8k3h*RAJCL8WJ`kkuw(JIwC7+qy%DF{GJU57PF*UfD!QFX6w}4UqSxcUj#mBw0 zKE?csj(WJua0<-4z(vmwV^)BAEydE=f^lf75ND)kbv+P(ipjh;SCp7uj@(&VS~{j< zy}D*pOh@(f^psd0i9Zi&0fdm|-s+Q(iT&wVr9Zo&sS`G<|4Si`i#75FBZXuKlEw2T z_w}%y=jm11kcVLOAe|NR4#QKYhCQpNQI2+Y+r4)~*BDOwB4f$3zQ-S@3Yc6Y>u|7y z29YJ3g4Vw~?f(%nYn1PyW@)x;i3?H^Hzpp6)u#Gr&j0xFW|#ri{-6s|_+>HopaO&y z5cY+FEQ!eM2wqnz9O7fgRwTgvEGEIN5|joEU^pBw!Kyx&>;g`~@gG1VfWsL%AJ9Oe zBd27zV~dK^NPMhqU%rSmo4%S|@cVL0IVma0G(!K#nG@qUSe3PBYSemssl_`FFpaAe zu?LwOv&l|6TUW^h4kh^Pkmvc}?1F-VaQN4H|07u!Nc2_w&e;8l?3JYPUv@AP5{c9b zaE|3Tue6_!{L;3#Qacyx;~*S*Ke=URmQmL7K7i%H89l5P9Kr(?AJED(D;)F$EpyB0 zqN=Nn{>-3fwRi0i=0|n!+uGU&1_svG&+|EI9h$G-oB6<}9Pn*zYkhrv6`y|W3cp^B zmy^9ct9C0<`oV(-czZx4Bpu}iHFs7zeCxO(j&z#<&f)VgB&3({&7{fl1NHMKS=*FcmGPgFS$8MHC(}EYiOv8D3 zdEK~i0|ooNy}OG4i;yMfi2NBLq7Qi#&NllV88{9%;g@X_$LFcSfJd_A}=rUnnS;9!Cx+74OOS+CB_&qL4_Wy9L=&uf#X zwww3A56XSL+-@Uk);W#eqdwd_m#X^I!gQv&(D{+I=~|RV+kp(v-B}i9{#lZbU2S4uQaiW1j;P7LQEuM(dG&RDp*EXut5MhO|6KQ6 zVvR$8*tD_ycwQ4JKEK>HapvLncl&#lkiC|m#+S;UYjzKQ{o+Ww2~+vxW#kmwW?R1A zI{=oy?o4&fj}YnaY)f=hT)JA8R%M?X#Ou?4FOJ?q-&Ph`Zr)b>Ueq!53CZ=>C(MIJ z!Oq0XPejENXM9x&C;vEeh-1j<85!9Hyd9=K>F({+6gA8-dzrzy?C)(e)YZk-&hlN$c8jpj>Us4IzM{H1vX|*qTvfD?P(E@aA2eItJxYaq zdI?w@F@BUo`}eqX+xu(HWvgvVLR)xLc@5g8@gh-EgM$JF^DnX^^f7+{=wDh{ftJ)R zxW#g4E^kG81B;-5)&`d`*DiO2o&dz8Rs`5={kfMX2W(5+MpZ=lf7D_jMoqQ}U9GCI z^o2iv)B=q6E2D*6m#d zn34KsNwa2!gkV$I=g8QR?S}xw*X)+&BXs2(N@G2J%B^)BFQv)s1lz36j5j@an;&Uu z35YwK<=#|cPOG=@VKZhv;Me#tDRboxddd)|10Cz^$0sI0)8+QxLczY*lMF7_`w9VM zAAi7;=p~5(t$>5wZ*VY=3(VBi)VyHC7fN}t1b7!;re(23X9T0Z$&rUo{VlhWk`mTf znh@p>n6s_BJrsBjk5c?YyN0CL6OVd~bap7=_w+~u%5&VZzR{T`b{2Ru+Yh$}RZgh?x4js67 z@#1IwR$`=p=6!V!l{7?XyLKOv3woq+qO`Qs*@Z=pMQW$fIo|tOVj>^w@lU{mM2i9| zA}y5h247!M!A$D~O=R_R$|vRi0a4&YM~dnmchUJFTeW} zMb=b1bs7^+#QXcR#dGY{&kx;bzt(|#`=&ocg^-aq|i1_PLxmlhA1Nr)`&|l8!U^#nk35k0k@pP zr2J-SS((=;iH`U1;8+T?PArUyQO6`WW3^T;VZ>TIz<7F|&u6H2g08)9QMQ>a} z5GB58t_P|6U7frN+^wLdOye4DA(`}^@}@5C3)NU%JYX2gDB-Zp<|juX-vY;~umlD1 zv%rnk61v!IfQJGh+tzZyi=RrRZtrTu#BpRDSTX-@(YCZU_JxxB@=(LdwgO`lKH<~H zqQs3;3^(hxI&Uc-(_8&EnUI!vM3r<=Rdr!wd!7bFz8Ey7sK|PHWk9D-n}@$KhBrT! zzTY!v#oq;nnd!{@l?>y863eSJWpu}{amw`OaD=|kcir{lGE4)9^85k=kN4SJV2_uN zDZs&iFtT+E49PJZXyt?w~~b*f>c4- z$nd^)!-v_~)85qzq%5Ay@cU}YvKX>$iQrAtl~1M}{p`I&>C2ZduLm{t-*S$Q+vT$5 zc^latW9@T%I)lRmDC*zr_+K8^WI6|{lzGxHRpbBoA1@2GjGsVFRVg@`-tdn`G($3L zTQllE05^iir<@~_i-Pk`VlumQEq%kMCr&_9teSND-2Od3wbD@#bEIcxPJa~S3teg@ zH0a|`31?*fzT@Hwa)8x(6GIeU^nsN&wUCZEX`_QK#Xa%+~-G;*>jtmC&zg zUsc19!M1(o-zI(Ga*0wnVE^Kh89StFp0*Y_&j4*H-IOnTe z+BLCuKR>mf2)R%VPlqJe&BV5AhBW1F!`Gq*C!hB<1YbsyZuv7$wI>WGfxQ}Y+Vebn zxBpnMMoVMkolzC8`F_n*6(sxuI^++3&?&i0S>nJQmHzgn(doZEQ^>rQEI%h%(&fiRl}&4@Lihe&ni8cE;0%-9LgM0ba04lgQ*oB<{2@OY->Hi)eHwwY{kb z>?J3`Z*B!NOP|xT-%iJYJQMg*Xpq2IuX=2F7nC zuL;(8a{SEe0D249S3X0BT*Ue0Nz(V1$MvQoHIK)AHYHJ9oqdqm0gg&S`tV}+C^ZGmtL^WQ<`WCS|?lC-P;pQ zG`41b9vsIG-+H-jR#?^05StyffXp|@11ESiGzu zATBXyD&*(Zwm=vP`MY^}qUpf~h+S_9xE&Nty%Bjw_dLG2Se(^!;y}^{Yw*YC5PTl z7fNEleE=DeHZ*vB&?>`N`lOYwukXNO0QNzIKT99pa5FIFh+YRA0+u8k0{CKw;Hm+Z zf69(MSyc)Rf+n?$%#4hYnxk?Kal?m&ByszbaAW{Dn|m|%a@YUASXKd5XJqxml4p^wie z(DM%tivkMG!H&&is0HDtUc`*CyyqPBJg*H!o_xw-qDpFbuu&?B0Rg0f2o`{LS!wCY zY2ahRxEscn0IinF1U?T)9o!n|Uq4;+0)GtHJNPd^0??Zq8yo%S(jCu4C~1E=+Vda5 zueKIM3UgifJuq`+@>cXa8UXDFQk9qk!WZ|fkZ&mCY||?otO55Eb^%bC74u@qE6Ilc zlk@JaWtm7N8W%+1SI}h>%Rp4MK9q13Fx&x~Z*6Vu;{ByoPbCMbd5UiA`DfO_bqVq* zD>v`n$b%5fQod_W#n{afs~|7xs5`b&nO^(NSOlwdG!ZVo2+} zH3+8Bj$m0F8FNto0KVVmQEdT%j literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..7653fb70ba418226d2ee90b1fc736d15c404d87b GIT binary patch literal 8341 zcmW-ndpy(c`^U*?YO%DmBsnZi?W^S@EiH$!G_|sdn)4JPr^#u`nbBlvF(Si+K7=Ba zn$yy%rKP1M=fsqplH`zn_viQiXCB7h+kM~H>w3Ok*RDDow_CqfYptA|++mqlC zCMPFv1z7`rGWWe04j$w$owUQtRlm{xDkrBaN3^v*?VAwp(i7VEpDh)+qX#!bHO{zZt5`m>%<_2UvZ_0}c{eBE1`li6V-Wr9ZEnKyee?UF!ET2h zp_%=1zj`iC)=LLG|E?~y9Auq>6Y6?!2M%22`QmguJUkAv3`DhP5l(zD&yeY*Eo`bj z#g$#GcV;82CkFca|Ce*r(Q$UMzu%1{dGqGYXKYYoFN3ORZAIrc242SL2x(U$BF37k z(W0j6<>o>p5l-;SGl3cq-|Zi~GWV@}_bbe6uLm@d|B!?>SXsS+cpuNFtMm)?CLL0dI`seU%p#7MA7R z6N1GZJSZ^@v?yF|_TZHI6H5VRU&kg~!W@Yy?9dhh<%&(d6${OD{4ns0$omiZh$_l27h}B%(!N10o|M zH|d~7yuz4YJ)NDTmcbn4*Y3(Qbgn{S*2xtO0j8;1NPA7|`});rl)llc*o*kKux?T3KUtZQp)(Dm*ntO^`%kfs#D>$z5 z_Y2)!TL}MhisKDaTwY$*U3WVN#Uzk_MjsN=&?5hO=lrco;^M4iDvGIJ`miUUp*Il! zVszA7TSy?kpO{~-^KE`9ny)4ZG1USJMP#EzYqDYZ&)CCnEq)IrfxQo$k;CXx_mOTQ ziLm5}i3u#ro8kobj*MKGnyN-IJO6o6tIeQtWfc_>=G#aTP;Dh$FKS;e#IQyXjK@t) zysUS%=q-$^BUsWYe400f$%7O2795wD_74o0kuI6sT3H_adz@`chHDTus9BTY64S_t zh+`7hDko5$64TxW0{M0AJ@iomxgFD|YYa)Ou+Sx8S^3AyqkQ`i7Ka@j_mM7{7gRg# zMnZNuQ#fQecx7i!cYxU;vEY`5o0KHEvhw=@6;V|6^1O*wMmy%(NUm&gPxJ53H&0l! z1^;ELxJl)YW_4m&O4cv}*|B?90qsoR?Cflq`Q&^wg|kgt`}^c%r)&-_3h3o{)A{Zv z$|d>vTczQSjwDG~QYwo1s`h=jo1+VGB*0v_ zaDl=Bi`=*K-8Cx0(QyRpgBY8c$z1LoT>TK#n9jpM&*5~E&<^k8&k@q|rWy6VkjXiQr`dO|=+Q2m7|pzTmiJ7a@%!@`e*K4%@&KzZ@mQ>z%96 zN5yll(yDI%GCxq3t+_8`qoD^1j+2w4xPzZQed_Jq&0Iqr#TpYeb`jZBgkK*10}$Yq zWEou=ej_J-3Vi(0(NSgfM}9-{(LfCrqWM@Bf&A=}x^hx2+K(%{YyQF#8BpcqVx02= zC7x5X9-=o(C-y>ZX0BMn;^}#vhCH=h^q=EhA3kuVmuuYld14tEzTx)X+@6L>fk1G) zyzVTTAt(lQf?AvC04H!|Y~&v%SWG7GZ8*PoQj<_zu}kl~MWKhgJ08NI=9YoG_MP#F z0Xv({OB+EPP*@Y;wx4t=?U(?=M#@*DmHBo0%z<($^D`ud0_CUCXpxb!Wefbz?>%+p zCkplB!J28?Rd(Z}@g~-HK?$jOR5?{oXyDIN#<-So7CP4xQYR-TgBmBAf+(EKoaX60 zn(47E)5{hRwtt=z#~bWESL(ly43|#qyJKiS;fb;Ou@V1m-u#fcxt3Zgk$uN6Iy^iD zpVs#Udt4gcr)mm5zUG3oWwpLP$fjLARiF!bXX*_)D`lo!7m^m9SH?qyp5Wqcb^6e> z4VE`N;h}cXJ@b6{?y1q96i%7n+QE@w)$?%DJEy6+4DM!b~#>Ralu+MpA z!yeWNGMUVqqQRgtc{4ciLd<&=+immm{niKu=px)sA0iu;X)L7GqNNk_fCLVg$n%j* z{TaDYm9ajI_BZ6zCL;4y@AN`3dk%M^%nQY; zdYwKumw!r5?7T^=kpijg4|3t8goHnFBajnyXK=wd9Tn@Mi6*q@v~(UPPEc`lJito& z7G#zW>59Uw?!g5F2Fho0W%JR8P|Eg3Q`Q{smHk9EmUXdSDpyg&U z<``GTzaaf@q zT4l5}ym)1*Y3k4NLSsV%kcNeo#Y;dLMEHzEXzPeGr(w#5T9U81q5q~nwywm3& z)<{o)vRp0t$yqcz|g_978ha~2g`LzsQ=RqF7pNwc*g%@0;a5n8X z%O{Z}tpIiyRFo*Rr0e%+jz=xJ1TE4eByf~N)kqs_<1Snff_}nuZ;9ofMVmz%L2cv) zO*=sqI9H7|OMVTf>S1qPXgUOgVKT`#hx#_3GCzv%9KaQcd?llSZ&dBBmrK zEUTmw{{e$CA|b$4N;pMU+LohViw+JBF644QOaM|*PHGE%Y|DyQ>z#}!mr!b?M-Bj< zU?ahfjbQPRkbpeH5a_-`S{d5HVQh7muLFZRz`qsGN*Xs|MZHTY#71+hF7hu1|m#l6dH{5t%AEQWGA5f%eQ?9>RRQm-W z-QGd~A9OZS7u~0tEPwJ-cz@FWUucmpg7KS$WtE`p*|uvzJr6K*L2Hi76^o1c<5w)~{GW=w$Z)X7nT06kWW?6C zQipG7(NgpElfAyC@hV&yg+r2@X5Wc;@<+6%C4dVH(#VPc0^ttcm0wFH_9%fDV@uHnSx5~DBsXW~T_6-}9hl%jJ91OJUfx5DSn-pkOW%rtM2G{6ZL3c5%`A=*d27x3ds?B`+wwB0>)$TB1 z>Q8l~Z`O74{GZ4Ke(b&1%=%B7FI+&8w|x!yTZG-sSN!olykGUpc zJ7t5E5v(=rEXUC?JUCeWwH4V!_bYHVg-{7h6WY{Y7`NI((xyQ=I?#?nqlQuwAJAR`UrM)R=7PuWtZp&P{-l>w+jj~gd-LGThvlv|9cyH1Y>XH zW}Ji4e7iU6q>%R3&52ax4Xg>E4lFC3_kwmCe3CX#x$^B}azD4L{Tvpg7Ml71FbLMa(6Kk#c8};86Bqhg7q!+^5x4#3s{zs-WPxz+Cu*21+~yN%(d7S z^?#HbhnH79F_}ms@ugi%{aDo%wCKmc02fKzzkh!&d7?NB5=KR zIc+Esq^biebOo}ux!WI5rvu_UR8T|=af`(1M4A@>VydrK>Qxrz$R1M>edUF*dB~S` z+hgFu*$`~7q6%(hiG3gxz$>i;GTGXCmRW*Su5j>SUmgl?#%rUXE}tUv7w=f zHwT8~pRJ`sY~(!klXYLltu9`8y>I-#3}qXRQN8}64EDijLGKgGKZ$=fMY(9F+mZ3%vPR+ip~u`gc$;|>+0n8(X6MMkE& zys8ZVZL(bQ@_b@>X}rF#AxQ#`W?0yriKUJXr7P>P{vqE`rF{#7ao3|0VAe&TFmK-6 zI3&+*K#PJJmuH4;-hB=GH2G^_K*uE3EFVMzKR$oPvyox0nbn!{_0AcWS6ArTLXX(R z9rvOf07fgbL*BjJf7kQN*qHLb6Dk60Xsi6ut{`=noX#VOM1o}<5l$7jgSur7MG`ZIl=X{vhH|9Ft z-IrRyj@%S84WnhtuKtiTm{20=H|uJbHzCEW$yk$F*>GhGxJ?2JzL;unLKE!&08{@ zkdu?+m$xRjuW>N;pw9KZmUd}-rO`7(@_LGT)`(-0zW)BwDyMY?kXP8HL$6EoI>$UQ zt=S270?Z?sxDe>s%bkUa)($kHws2-ve%mqj{(`v>?6ceM()kL0JXua8U$x`o%Q@WC zS4sK(%2a`#`C!FSyEv8o+X1m_rp!gt>8j_my;ZLi#{lzbHP_Z=UDEaF>C-!pjO`7c z1MA=ZZ^t%X@iKrcvnZHivE=Lbsi`u*C9p`+a0*AMqD*4sga3_uca^7ZXK;2Hgg*ya zH_MEE<6(*dOwmr1p=74p;eOZaqTipN5Xesf=}u1mPdvBvpqF`pQ;w#hwWDLaswEXM z_TxvWgoQ^NOzYi`C;k*<^D``a?VtHQgDu?m?PID#sGkDW?AseKH)gaII*zH*B3_@{pWqyM(JW;&DoVmG!$u91p> zKc>gTtj7&a=%w{e{_=Xz>VBlL7j#w(B4Ea|*UZ!fWE}6i)oiteA8qB0K1__xgYX@po>dVv7j-5ODAo#+2eD?$hoTwO~^Yr2utZRqkE8%7YMh5;dMqp+%WuYnbkZ zO@v#=%i;SK4noyVRyidtTo2qhxUl@kA~u1Fn7SUfV&Hr<(|A`J57i%(15o zu$Q6syejG2xA`W&yhPpj@q|>IINVKUvG@h#FhFUCtk2jS%iVTF<%s?5rJAU_-Tu=P zJ3Kdi+9pg~vU0dE*c>x~RhudD(^|9MNHB+c4js=hbJTgAGT8g`c9t0cA(Jd();i|s zu6t_nDu7t}lkXj8E9$(fiE4Ft+U4u&=2ooKLGWDX8LzPS6$YAOq}-9V<-+K{B|c}O ztUi#j#$>o&76hIgngaOrV8NT`$o6)vyLF$kyTbp(;4sjC5YVEc@o4^YI~rl;M17Ld zMTHQ;CA-RY1$)M&GY5t-{ln!y#av?*9dp zC*KUTGDoyS2cEwH_3Zv8tqkSrGC!@9PnCve#?9WEdDgvc2n>N5I>6=PA1hcVe%R`+ z{-SLThxQtyAJ+>!?U-VnvK0UMsz(QQP3J!X%)>5U-7HL;ULuSXmF=L9IJ6OOwnoEi zYf`?yqmpW33t;zg1}S}`qWrxE`;jxzs#g*ME779Zd6&w5n``xZ$sJ2*J*40e7e1`1>0vZ?z#wo^8-a zV=PTcg0w9ICi>|af=;Wl{-EoJ4Fa;gV%5h4NadsQMKymjRPOBZ-^^WqQ70E$i`5^fiZm$*c*jka{==FKv*`4*$`;p`)C@BByOs{GMmTMv@5*d>6Bu9J<19C;l9!0 zZkc0 zk;r5pRDq~`^a4&ta7VtS#;J0x`bTvhPJAvGxSstdIWSjP!tly$We>-fv z{d3ED{OhgM;Gf|Wbf}=Utb>ei(9?jK=9P5;!=A46LBk=U*dpOIKyeo9?PZ>8fEwaj zV)++rb$^h-wjvjmBzf}(!0SD*;K&YW(hiA}99p*kA2By~X^2`9)6_o&f`mEk?2Vh- z#;fucy^4}O9k{Z#A8EP)@~`2$alpjo8EURG8#qFSA3S(4>!@3k^Tc60US++^XYTS zpDq{>AN0kmv{svZ@Wt$JySL@?#*c(@OiV?AEyT>UG(>|;s5IKq;j%MP_fd8F4jo(Q zdQ-KngBhvCf?)?TJU761G_wk_!>2Ceu)wsl%lAu@aYwPI-8E{iPu z(b18~KZP#va#GQGSqmL|2?BXI;!RdO0HDMfH?-#2*@|Q;Oc7{D6yIy4@v{*y2JLGa zHyb^4ukqkVr#z2JN(BQwh|<~Wk7Lgfh%Hwy*a%80c6F@T)P6EB($n#gmT!{Nr^$xu z3B`M2T3=Texyni4?Ej>nVd?O72Rdvg5f2>D#JYD%l@?JmR?=`GP1oGBcLq0&RU;6U zd-X023Kh`Xe!fI>1V?Zs&kGL|uNZi=$VFLD}5&2$&dre6BdwfMS9ewQUJJ-5=EWt$fxEu?|et zl60-qleSthEa^X<)!ut~KJ@bC^t09ztiuK%ReyByf8A*m$wM%+7?zjz9AWztA32jD zi9=w;6j_z$QiurQUcyt)2zm9SwxZgcVMVtC<^5sZL2B(Q^wt*+Pb=bOrN5D zL)@ZMNKiV_^J|~$TAR1ltry%MoUTK!TRc5H3__Xg zep{;gL6#)IOgOSPf=;`PkXr?&ted%8JolfoX>m2au^~;h$s3N%+5r=mT^DS1|84(v zOIg!=^tOE0?%WCBq(MqIbO^+ymP_LXVI3dUmOSS5AZuRB?f+x5QfP@ae7YTjfL7Pk z+_0QEq>|KD6BR#^(w?%007+;~oLSm~)7^k7{TTdbICcBbT*AR!t9?(Y2}47pW)f2n zM(g?%KbX;g`?q#?Z))45cXMH3;W~>oV-ncd`{!F_&FW05Wjtdx56m{;If4uKxrtR* zU!MQ5G(Q1sYmZ6==pW19>%_XJ<^Q&M#(&X=!f)_O`+Cs!ozF*L7Ua(A~m-m gqoPf2!SJgp`MGQ6C#Uy)11~2>BpkP`#(O6IA6=>PrT_o{ literal 0 HcmV?d00001 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 + ] + } +} From c81189ed0ed541052d46e634dce92b095bba3b4f Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Mon, 21 Sep 2026 01:01:10 +0900 Subject: [PATCH 27/44] =?UTF-8?q?build:=20=E4=BE=9D=E5=AD=98=E9=96=A2?= =?UTF-8?q?=E4=BF=82=E3=82=92=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gradle/libs.versions.toml | 6 +++--- .../recipe/ingredient/HTMaterialTagsIngredient.kt | 4 +++- .../assets/ragium/textures/item/alumina_dust.png | Bin 342 -> 0 bytes 3 files changed, 6 insertions(+), 4 deletions(-) delete mode 100644 src/main/resources/assets/ragium/textures/item/alumina_dust.png diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index acbb697bb0..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] diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTMaterialTagsIngredient.kt b/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTMaterialTagsIngredient.kt index 4139f51b26..a19c247a38 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTMaterialTagsIngredient.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTMaterialTagsIngredient.kt @@ -42,7 +42,9 @@ data class HTMaterialTagsIngredient(val tags: Nel>) : ICustomIngred override fun test(stack: ItemStack): Boolean = tags.any(stack::`is`) override fun items(): Stream> = tags.stream() - .flatMap { tagKey: TagKey -> BuiltInRegistries.ITEM.get(tagKey).stream().flatMap { it.stream() } } + .map(BuiltInRegistries.ITEM::get) + .flatMap { it.stream() } + .flatMap { it.stream() } override fun isSimple(): Boolean = true diff --git a/src/main/resources/assets/ragium/textures/item/alumina_dust.png b/src/main/resources/assets/ragium/textures/item/alumina_dust.png deleted file mode 100644 index d4aae0120ac6b54faaa382c0f80709a33ad23ef2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 342 zcmV-c0jd6pP)Sh7iX=A^{jMrVBaa%lMuQnw`5zoYx0H z&DwX}A0=O}NU`ciLP7x741_5Ti?v*Wb0ow9Ftalz#Lb)0oKP};_9@RylJiobNi2X) zZo{ZC|AG7xoG1xE{)b6kFAF%HZ^EcRUT30aCZL9yRfts<(47twyH#Ky9I6?EPC(2> z^wNVYfP@1ev;IVa<(87!9V2zuOhX7j0SKZQ6C$RD=y}%%Ko4ntm)6~HEWmAy%O3y$ o0RR8b2Qjq(000I_L_t&o07n&&A(v$EH2?qr07*qoM6N<$g0={XJ^%m! From 4c4ef91c066facbb37632adf3778a5353c10e299 Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Mon, 21 Sep 2026 18:27:57 +0900 Subject: [PATCH 28/44] =?UTF-8?q?refactor:=20HTInputSlot=20=E3=82=92?= =?UTF-8?q?=E5=86=8D=E6=A7=8B=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/integration/jei/RagiumJeiPlugin.kt | 6 +- .../recipe/base/HTDoubleItemToItemRecipe.kt | 4 +- .../lib/recipe/base/HTFluidToRecipe.kt | 2 +- .../lib/recipe/base/HTItemAndFluidToRecipe.kt | 4 +- .../recipe/base/HTItemToDoubleItemRecipe.kt | 6 +- .../recipe/base/HTItemToItemAndFluidRecipe.kt | 2 +- .../lib/recipe/base/HTItemToRecipe.kt | 2 +- .../lib/recipe/base/HTRecipeFactories.kt | 13 ++- .../recipe/base/HTTripleItemToItemRecipe.kt | 27 +++--- .../lib/recipe/handler/HTFluidInputTank.kt | 32 +++++++ .../lib/recipe/handler/HTInputSlot.kt | 96 +++++++++---------- .../lib/recipe/handler/HTItemInputSlot.kt | 32 +++++++ .../lib/recipe/handler/HTResourceInputSlot.kt | 61 ++++++++++++ .../recipe/ingredient/HTFluidIngredient.kt | 8 +- .../lib/recipe/ingredient/HTIngredient.kt | 11 +-- .../recipe/ingredient/HTIngredientHelper.kt | 21 +++- .../lib/recipe/ingredient/HTItemIngredient.kt | 8 +- .../lib/recipe/result/HTItemAndFluidResult.kt | 47 +++++---- .../lib/registry/HTFluidContentRegister.kt | 10 +- .../api/data/oreSlurry/HTOreSlurryData.kt | 4 - .../api/recipe/RTElectrolyzingRecipe.kt | 7 +- .../ragium/api/recipe/RTEnchantingRecipe.kt | 4 +- .../ragium/api/recipe/RTReactingRecipe.kt | 6 +- .../ragium/api/recipe/RTRefiningRecipe.kt | 14 +-- .../hiiragi283/ragium/common/RagiumCommon.kt | 9 ++ .../entity/machine/HTMelterBlockEntity.kt | 21 ++-- .../entity/machine/HTSmelterBlockEntity.kt | 36 +++---- .../base/HTDoubleItemToItemBlockEntity.kt | 45 ++++----- .../base/HTItemAndFluidToFluidBlockEntity.kt | 47 ++++----- .../base/HTItemAndFluidToItemBlockEntity.kt | 47 ++++----- .../base/HTItemToDoubleItemBlockEntity.kt | 28 +++--- .../machine/base/HTItemToItemBlockEntity.kt | 26 ++--- .../base/HTTripleItemToItemBlockEntity.kt | 64 +++++-------- .../common/recipe/RTOreSlurryWashingRecipe.kt | 34 +++++++ .../common/recipe/RTOreSolvingRecipe.kt | 16 ++-- .../recipe/RTPotionBottleDrainingRecipe.kt | 8 +- .../recipe/RTPotionBottleFillingRecipe.kt | 9 +- 37 files changed, 485 insertions(+), 332 deletions(-) create mode 100644 src/lib/kotlin/hiiragi283/lib/recipe/handler/HTFluidInputTank.kt create mode 100644 src/lib/kotlin/hiiragi283/lib/recipe/handler/HTItemInputSlot.kt create mode 100644 src/lib/kotlin/hiiragi283/lib/recipe/handler/HTResourceInputSlot.kt create mode 100644 src/main/kotlin/hiiragi283/ragium/common/recipe/RTOreSlurryWashingRecipe.kt diff --git a/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiPlugin.kt b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiPlugin.kt index 699019fc32..5e820414b9 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiPlugin.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiPlugin.kt @@ -237,13 +237,11 @@ class RagiumJeiPlugin : HTJeiPlugin(RagiumAPI.MOD_ID) { RagiumJeiRecipeTypes.REACTING, HTPhysicalSideHelper.registryOrThrow(RagiumRegistries.Keys.ORE_SLURRY_DATA) .asHolderSequence() - .mapNotNull { holder: Holder -> - val template: ItemStack = holder.value().createResult() - if (template.isEmpty) return@mapNotNull null + .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() 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 095ee36b93..e46db7e7da 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTItemToDoubleItemRecipe.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTItemToDoubleItemRecipe.kt @@ -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 @@ -80,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/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/HTTripleItemToItemRecipe.kt b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTTripleItemToItemRecipe.kt index 915e7bd670..dd0489f74f 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/base/HTTripleItemToItemRecipe.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/base/HTTripleItemToItemRecipe.kt @@ -80,8 +80,11 @@ interface HTTripleItemToItemRecipe : override fun apply(first: ItemInstance, second: ItemInstance): ItemStack = result.create() - override fun getRequiredAmount(first: ItemInstance, second: ItemInstance): Pair = - ingredient.getRequiredAmount(first) to secondary.getRequiredAmount(second) + override fun getMatchingStack( + first: ItemInstance, + second: ItemInstance + ): Pair = + ingredient.getMatchingStack(first) to secondary.getMatchingStack(second) } } @@ -96,26 +99,26 @@ interface HTTripleItemToItemRecipe : override fun apply(first: ItemInstance, second: ItemInstance, third: ItemInstance): ItemStack = result.create() - override fun getRequiredAmount( + override fun getMatchingStack( first: ItemInstance, second: ItemInstance, third: ItemInstance - ): Triple { - val firstCount: Int = ingredient.getRequiredAmount(first) + ): Triple { + val firstInput = ingredient.getMatchingStack(first) return when { secondary.test(second) -> Triple( - firstCount, - secondary.getRequiredAmount(second), - tertiary?.getRequiredAmount(third) ?: 0 + firstInput, + secondary.getMatchingStack(second), + tertiary?.getMatchingStack(third) ?: ItemStack.EMPTY ) secondary.test(third) -> Triple( - firstCount, - (tertiary?.getRequiredAmount(second) ?: 0), - secondary.getRequiredAmount(third) + firstInput, + (tertiary?.getMatchingStack(second) ?: ItemStack.EMPTY), + secondary.getMatchingStack(third) ) - else -> Triple(0, 0, 0) + 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..4dead45e7c 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/handler/HTInputSlot.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/handler/HTInputSlot.kt @@ -1,74 +1,74 @@ 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() - - override fun extract(amount: Int, transaction: TransactionContext): Int = - slot.extractSelf(amount, transaction, HTTransferAccess.INTERNAL) - } + fun use(input: INSTANCE?, transaction: TransactionContext): 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, + + /** + * 入力を消費できない場合 + */ + NOT_CONSUMED, + + /** + * 入力を消費できる場合 + */ + CONSUMED + ; + + /** + * 入力の消費に成功した場合は`true` + */ + val succeeded: Boolean get() = !failed - override fun extract(amount: Int, transaction: TransactionContext): Int = - tank.extractSelf(amount, transaction, HTTransferAccess.INTERNAL) + /** + * 入力の消費に失敗した場合は`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/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/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/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/registry/HTFluidContentRegister.kt b/src/lib/kotlin/hiiragi283/lib/registry/HTFluidContentRegister.kt index 6ace45f615..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 @@ -155,7 +153,7 @@ class HTFluidContentRegister(modId: String) : RegistryAliasAcceptor { lateinit var properties: FluidType.Properties /** - * [FluidType]をを作るブロック + * [FluidType]を作るブロック */ var typeFactory: (FluidType.Properties) -> FluidType = ::FluidType @@ -258,12 +256,12 @@ class HTFluidContentRegister(modId: String) : RegistryAliasAcceptor { /** * 液体源を作るブロック */ - 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 /** * 液体ブロックを作成するブロック @@ -287,7 +285,7 @@ class HTFluidContentRegister(modId: String) : RegistryAliasAcceptor { ) { 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/ragium/api/data/oreSlurry/HTOreSlurryData.kt b/src/lib/kotlin/hiiragi283/ragium/api/data/oreSlurry/HTOreSlurryData.kt index 761da5200d..844915d74f 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/data/oreSlurry/HTOreSlurryData.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/data/oreSlurry/HTOreSlurryData.kt @@ -3,7 +3,6 @@ package hiiragi283.ragium.api.data.oreSlurry import com.mojang.serialization.Codec import hiiragi283.lib.HTConstants import hiiragi283.lib.recipe.result.HTItemResult -import hiiragi283.lib.recipe.result.createOrEmpty import hiiragi283.lib.serialization.codec.HTCodecs import hiiragi283.lib.serialization.network.HTStreamCodecs import hiiragi283.lib.text.Text @@ -13,7 +12,6 @@ import net.minecraft.network.RegistryFriendlyByteBuf import net.minecraft.network.codec.ByteBufCodecs import net.minecraft.network.codec.StreamCodec import net.minecraft.util.ExtraCodecs -import net.minecraft.world.item.ItemStack /** * @author Hiiragi Tsubasa @@ -49,6 +47,4 @@ data class HTOreSlurryData(val title: Text, val color: Int, val result: HTItemRe val STREAM_CODEC: StreamCodec> = HTStreamCodecs.holder(RagiumRegistries.Keys.ORE_SLURRY_DATA, DIRECT_STREAM_CODEC) } - - fun createResult(): ItemStack = result.createOrEmpty() } diff --git a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTElectrolyzingRecipe.kt b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTElectrolyzingRecipe.kt index a6d84f3329..9c2f742687 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTElectrolyzingRecipe.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RTElectrolyzingRecipe.kt @@ -23,6 +23,7 @@ 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 @@ -75,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/main/kotlin/hiiragi283/ragium/common/RagiumCommon.kt b/src/main/kotlin/hiiragi283/ragium/common/RagiumCommon.kt index fc1c24d45f..fac9ba6330 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/RagiumCommon.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/RagiumCommon.kt @@ -20,6 +20,8 @@ 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 @@ -187,6 +189,13 @@ internal data object RagiumCommon { }.build() } } + + RagiumRecipeLookups.MIXING.addRecipes( + RecipeKey(RagiumAPI.id("/${RagiumConstants.MIXING}", "ore_solvation")) to RTOreSolvingRecipe + ) + RagiumRecipeLookups.REACTING.addRecipes( + RecipeKey(RagiumAPI.id("/${RagiumConstants.REACTING}", "ore_slurry_washing")) to RTOreSlurryWashingRecipe + ) } private fun HolderGetter.Provider.getOrNull(content: HTFluidContent): HolderSet? = diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTMelterBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTMelterBlockEntity.kt index af10d1c482..23e9b58a34 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,7 +5,7 @@ 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.lookup.HTRecipeCache import hiiragi283.lib.transfer.item.HTBasicItemSlot @@ -23,6 +23,7 @@ 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 +49,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) } - 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,18 +63,14 @@ 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()) + inputSlot.use(inputConsume, transaction).succeeded && outputSlot.canInsert(output, transaction) } override fun onComplete(recipe: HTItemToFluidRecipe, input: SingleRecipeInput, output: FluidStack) { useTransaction { transaction: Transaction -> - inputSlot.extract(recipe.getRequiredAmount(input.item()), transaction) + inputSlot.use(recipe.getMatchingStack(input.item()), transaction) outputSlot.insert(output, transaction) transaction.commit() } diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTSmelterBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTSmelterBlockEntity.kt index 6e60fd2ad0..16c18495e2 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,10 @@ 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.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 +62,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) } - 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,37 +80,28 @@ 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 -> - when { - !inputSlot.canExtract(inputCount, transaction) -> false - else -> outputSlot.canInsert(output, transaction) - } + override fun canComplete(recipe: HTItemToItemRecipe, input: SingleRecipeInput, output: ItemStack): Boolean = + useTransaction { transaction: Transaction -> + val inputConsume: ItemInstance = recipe.getMatchingStack(input.item()) + inputSlot.use(inputConsume, transaction).succeeded && outputSlot.canInsert(output, transaction) } - } 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) - } + inputSlot.use(recipe.getMatchingStack(input.item()), transaction) outputSlot.insert(output, transaction) transaction.commit() } diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTDoubleItemToItemBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTDoubleItemToItemBlockEntity.kt index aa064a04d8..16bc167905 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,7 +5,7 @@ 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.input.HTItemListRecipeInput import hiiragi283.lib.recipe.input.getItemOrEmpty @@ -20,6 +20,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,50 +55,40 @@ 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) } 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.canInsert(output, transaction) } - 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) - } + primarySlot.use(firstConsume, transaction) + secondarySlot.use(secondConsume, transaction) outputSlot.insert(output, transaction) transaction.commit() } diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemAndFluidToFluidBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemAndFluidToFluidBlockEntity.kt index 7d11de35b6..5a8cdc7a44 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemAndFluidToFluidBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemAndFluidToFluidBlockEntity.kt @@ -5,7 +5,8 @@ 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.HTInputSlot +import hiiragi283.lib.recipe.handler.HTFluidInputTank +import hiiragi283.lib.recipe.handler.HTItemInputSlot import hiiragi283.lib.recipe.handler.HTOutputSlot import hiiragi283.lib.recipe.input.HTItemAndFluidRecipeInput import hiiragi283.lib.recipe.lookup.HTRecipeCache @@ -22,10 +23,12 @@ 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 @@ -56,18 +59,18 @@ abstract class HTItemAndFluidToFluidBlockEntity( super.initializeVariables(listener) recipeHandler = object : EnergizedHandler() { - private val inputTank: HTInputSlot.SingleFluid by lazy { - HTInputSlot.SingleFluid(this@HTItemAndFluidToFluidBlockEntity.inputTank) + private val inputTank: HTFluidInputTank by lazy { + HTFluidInputTank(this@HTItemAndFluidToFluidBlockEntity.inputTank) } - private val inputSlot: HTInputSlot.SingleItem by lazy { - HTInputSlot.SingleItem(this@HTItemAndFluidToFluidBlockEntity.inputSlot) + private val inputSlot: HTItemInputSlot by lazy { + HTItemInputSlot(this@HTItemAndFluidToFluidBlockEntity.inputSlot) } private val outputTank: HTOutputSlot by lazy { HTOutputSlot.SingleFluid(this@HTItemAndFluidToFluidBlockEntity.outputTank) } override fun createInput(): HTItemAndFluidRecipeInput = - HTItemAndFluidRecipeInput(inputSlot.getStack(), inputTank.getStack()) + HTItemAndFluidRecipeInput(inputSlot.getStoredInput(), inputTank.getStoredInput()) override fun findRecipe( level: ServerLevel, @@ -78,16 +81,15 @@ abstract class HTItemAndFluidToFluidBlockEntity( recipe: HTItemAndFluidToFluidRecipe, input: HTItemAndFluidRecipeInput, output: FluidStack - ): 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 outputTank.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 -> outputTank.canInsert(output, transaction) } } @@ -96,14 +98,13 @@ abstract class HTItemAndFluidToFluidBlockEntity( input: HTItemAndFluidRecipeInput, output: FluidStack ) { - 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) - } + val (itemInput: ItemInstance, fluidInput: FluidInstance) = recipe.getMatchingStack( + input.item, + input.fluid + ) + inputSlot.use(itemInput, transaction) + inputTank.use(fluidInput, transaction) outputTank.insert(output, transaction) transaction.commit() } 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 37e9f25c95..35b894b5af 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,7 +5,8 @@ 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.input.HTItemAndFluidRecipeInput import hiiragi283.lib.recipe.lookup.HTRecipeCache @@ -22,11 +23,13 @@ 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 +58,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) } 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 +78,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.canInsert(output, transaction) } } @@ -93,14 +95,13 @@ 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) - } + val (itemInput: ItemInstance, fluidInput: FluidInstance) = recipe.getMatchingStack( + input.item, + input.fluid + ) + inputSlot.use(itemInput, transaction) + inputTank.use(fluidInput, transaction) outputSlot.insert(output, transaction) transaction.commit() } 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..7a5489d417 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,7 +5,7 @@ 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.lookup.HTRecipeCache import hiiragi283.lib.recipe.lookup.HTRecipeLookup @@ -18,6 +18,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,8 +54,8 @@ 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) @@ -63,7 +64,7 @@ abstract class HTItemToDoubleItemBlockEntity( HTOutputSlot.SingleItem(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 +73,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.canInsert(output.first, transaction) -> false + else -> secondarySlot.canInsert(output.second, transaction) } } @@ -88,11 +87,8 @@ abstract class HTItemToDoubleItemBlockEntity( input: SingleRecipeInput, output: Pair ) { - val inputCount: Int = recipe.getRequiredAmount(input.item()) useTransaction { transaction: Transaction -> - if (inputCount > 0) { - inputSlot.extract(inputCount, transaction) - } + inputSlot.use(recipe.getMatchingStack(input.item()), transaction) primarySlot.insert(output.first, transaction) secondarySlot.insert(output.second, transaction) transaction.commit() diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemToItemBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemToItemBlockEntity.kt index b8526b020e..f65a606850 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,7 +5,7 @@ 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.lookup.HTRecipeCache import hiiragi283.lib.recipe.lookup.HTRecipeLookup @@ -18,6 +18,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,34 +53,25 @@ 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) } - 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 -> - when { - !inputSlot.canExtract(inputCount, transaction) -> false - else -> outputSlot.canInsert(output, transaction) - } + override fun canComplete(recipe: HTItemToItemRecipe, input: SingleRecipeInput, output: ItemStack): Boolean = + useTransaction { transaction: Transaction -> + val inputConsume: ItemInstance = recipe.getMatchingStack(input.item()) + inputSlot.use(inputConsume, transaction).succeeded && outputSlot.canInsert(output, transaction) } - } 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) - } + inputSlot.use(recipe.getMatchingStack(input.item()), transaction) outputSlot.insert(output, transaction) transaction.commit() } diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTTripleItemToItemBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTTripleItemToItemBlockEntity.kt index 0fc3d114b1..cb06a74628 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTTripleItemToItemBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTTripleItemToItemBlockEntity.kt @@ -5,7 +5,7 @@ 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.HTInputSlot +import hiiragi283.lib.recipe.handler.HTItemInputSlot import hiiragi283.lib.recipe.handler.HTOutputSlot import hiiragi283.lib.recipe.input.HTItemListRecipeInput import hiiragi283.lib.recipe.input.getItemOrEmpty @@ -20,6 +20,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 @@ -55,61 +56,48 @@ abstract class HTTripleItemToItemBlockEntity( override fun initializeVariables(listener: Runnable) { super.initializeVariables(listener) recipeHandler = object : EnergizedHandler() { - private val primarySlot: HTInputSlot.SingleItem by lazy { - HTInputSlot.SingleItem(this@HTTripleItemToItemBlockEntity.primarySlot) + private val primarySlot: HTItemInputSlot by lazy { + HTItemInputSlot(this@HTTripleItemToItemBlockEntity.primarySlot) } - private val secondarySlot: HTInputSlot.SingleItem by lazy { - HTInputSlot.SingleItem(this@HTTripleItemToItemBlockEntity.secondarySlot) + private val secondarySlot: HTItemInputSlot by lazy { + HTItemInputSlot(this@HTTripleItemToItemBlockEntity.secondarySlot) } - private val tertiarySlot: HTInputSlot.SingleItem by lazy { - HTInputSlot.SingleItem(this@HTTripleItemToItemBlockEntity.tertiarySlot) + private val tertiarySlot: HTItemInputSlot by lazy { + HTItemInputSlot(this@HTTripleItemToItemBlockEntity.tertiarySlot) } private val outputSlot: HTOutputSlot by lazy { HTOutputSlot.SingleItem(this@HTTripleItemToItemBlockEntity.outputSlot) } - override fun createInput(): RecipeInput = - HTItemListRecipeInput(primarySlot.getStack(), secondarySlot.getStack(), tertiarySlot.getStack()) + 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 (firstCount: Int, secondCount: Int, thirdCount: Int) = recipe.getRequiredAmount( - input.getItemOrEmpty(0), - input.getItemOrEmpty(1), - input.getItemOrEmpty(2) - ) - useTransaction { transaction: Transaction -> - if (firstCount > 0 && !primarySlot.canExtract(firstCount, transaction)) { - return false - } - if (secondCount > 0 && !secondarySlot.canExtract(secondCount, transaction)) { - return false - } - if (thirdCount > 0 && !tertiarySlot.canExtract(thirdCount, transaction)) { - return false + 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.canInsert(output, transaction) } - return outputSlot.canInsert(output, transaction) } } override fun onComplete(recipe: HTTripleItemToItemRecipe, input: RecipeInput, output: ItemStack) { - val (firstCount: Int, secondCount: Int, thirdCount: Int) = recipe.getRequiredAmount( - input.getItemOrEmpty(0), - input.getItemOrEmpty(1), - input.getItemOrEmpty(2) - ) + val (firstInput: ItemInstance, secondInput: ItemInstance, thirdInput: ItemInstance) = + recipe.getMatchingStack(input.getItemOrEmpty(0), input.getItemOrEmpty(1), input.getItemOrEmpty(2)) useTransaction { transaction: Transaction -> - if (firstCount > 0) { - primarySlot.extract(firstCount, transaction) - } - if (secondCount > 0) { - secondarySlot.extract(secondCount, transaction) - } - if (thirdCount > 0) { - tertiarySlot.extract(thirdCount, transaction) - } + primarySlot.use(firstInput, transaction) + secondarySlot.use(secondInput, transaction) + tertiarySlot.use(thirdInput, transaction) outputSlot.insert(output, transaction) transaction.commit() } 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..2561ee1b7f 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/recipe/RTPotionBottleDrainingRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/RTPotionBottleDrainingRecipe.kt @@ -5,8 +5,10 @@ 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 @@ -23,8 +25,8 @@ data class RTPotionBottleDrainingRecipe(val bottleType: HTBottleType, override v 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..b1ecc5d87f 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 @@ -25,8 +26,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) + ) } From 029939f13507f3c7a5c082da1a20d080de131f1e Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Mon, 21 Sep 2026 18:39:30 +0900 Subject: [PATCH 29/44] =?UTF-8?q?refactor:=20HTOutputSlot=20=E3=82=82?= =?UTF-8?q?=E5=86=8D=E6=A7=8B=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lib/recipe/handler/HTInputSlot.kt | 2 + .../lib/recipe/handler/HTOutputSlot.kt | 69 +++++++++++++------ .../entity/machine/HTMelterBlockEntity.kt | 7 +- .../entity/machine/HTSmelterBlockEntity.kt | 7 +- .../base/HTDoubleItemToItemBlockEntity.kt | 4 +- .../base/HTItemAndFluidToFluidBlockEntity.kt | 4 +- .../base/HTItemAndFluidToItemBlockEntity.kt | 4 +- .../base/HTItemToDoubleItemBlockEntity.kt | 8 +-- .../machine/base/HTItemToItemBlockEntity.kt | 7 +- .../base/HTTripleItemToItemBlockEntity.kt | 4 +- 10 files changed, 77 insertions(+), 39 deletions(-) diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/handler/HTInputSlot.kt b/src/lib/kotlin/hiiragi283/lib/recipe/handler/HTInputSlot.kt index 4dead45e7c..dd64ec0e04 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/handler/HTInputSlot.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/handler/HTInputSlot.kt @@ -39,6 +39,8 @@ interface HTInputSlot> { */ fun use(input: INSTANCE?, transaction: TransactionContext): UseResult + // UseResult // + /** * [HTInputSlot.use]の結果を表すクラスです。 * @author Hiiragi Tsubasa diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/handler/HTOutputSlot.kt b/src/lib/kotlin/hiiragi283/lib/recipe/handler/HTOutputSlot.kt index e03eb4b2d1..9965eab3a3 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/handler/HTOutputSlot.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/handler/HTOutputSlot.kt @@ -19,20 +19,45 @@ 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 + + // TakeResult // /** - * 完成品を搬入できるか判定します。 - * @param stack 搬入する完成品 - * @param transaction 現在のトランザクション - * @return 実際に消費される数量が[stack]の数量と等しい場合は`true` + * [HTOutputSlot.take]の結果を表すクラスです。 + * @author Hiiragi Tsubasa + * @since 26.1.7 */ - fun canInsert(stack: STACK, transaction: TransactionContext): Boolean + enum class TakeResult { + /** + * 出力を受け取れない場合 + */ + NONE, + + /** + * 出力を一部だけ受け取れる場合 + */ + PARTIALLY, + + /** + * 出力をすべて受け取れる場合 + */ + FULL; + + /** + * 出力の受け取りに失敗した場合は`true` + */ + val noneTaken: Boolean get() = this == NONE + + /** + * 出力の受け取りに成功した場合は`true` + */ + val anyTaken: Boolean get() = !noneTaken + } // Single // @@ -43,14 +68,15 @@ interface HTOutputSlot { */ @JvmRecord data class SingleItem(private val slot: HTItemSlot) : HTOutputSlot { - override fun insert(stack: ItemStack, transaction: TransactionContext): Int { - if (stack.isEmpty) return 0 + override fun take(stack: ItemStack, transaction: TransactionContext): TakeResult { + if (stack.isEmpty) return TakeResult.NONE val (resource: ItemResource, amount: Int) = stack.toResourcePair() - return slot.insert(resource, amount, transaction, HTTransferAccess.INTERNAL) + return when (slot.insert(resource, amount, transaction, HTTransferAccess.INTERNAL)) { + 0 -> TakeResult.NONE + amount -> TakeResult.FULL + else -> TakeResult.PARTIALLY + } } - - override fun canInsert(stack: ItemStack, transaction: TransactionContext): Boolean = - insert(stack, transaction) == stack.count() } /** @@ -60,13 +86,14 @@ interface HTOutputSlot { */ @JvmRecord data class SingleFluid(private val tank: HTFluidTank) : HTOutputSlot { - override fun insert(stack: FluidStack, transaction: TransactionContext): Int { - if (stack.isEmpty) return 0 + override fun take(stack: FluidStack, transaction: TransactionContext): TakeResult { + if (stack.isEmpty) return TakeResult.NONE val (resource: FluidResource, amount: Int) = stack.toResourcePair() - return tank.insert(resource, amount, transaction, HTTransferAccess.INTERNAL) + return when (tank.insert(resource, amount, transaction, HTTransferAccess.INTERNAL)) { + 0 -> TakeResult.NONE + amount -> TakeResult.FULL + else -> TakeResult.PARTIALLY + } } - - override fun canInsert(stack: FluidStack, transaction: TransactionContext): Boolean = - insert(stack, transaction) == stack.amount() } } 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 23e9b58a34..6bfd95a5c2 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTMelterBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTMelterBlockEntity.kt @@ -65,13 +65,16 @@ class HTMelterBlockEntity(pos: BlockPos, state: BlockState) : output: FluidStack ): Boolean = useTransaction { transaction: Transaction -> val inputConsume: ItemInstance = recipe.getMatchingStack(input.item()) - inputSlot.use(inputConsume, transaction).succeeded && outputSlot.canInsert(output, transaction) + 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.use(recipe.getMatchingStack(input.item()), transaction) - outputSlot.insert(output, transaction) + outputSlot.take(output, transaction) transaction.commit() } playSound(SoundEvents.LAVA_POP) 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 16c18495e2..e2c6fdf74d 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTSmelterBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTSmelterBlockEntity.kt @@ -96,13 +96,16 @@ class HTSmelterBlockEntity(pos: BlockPos, state: BlockState) : override fun canComplete(recipe: HTItemToItemRecipe, input: SingleRecipeInput, output: ItemStack): Boolean = useTransaction { transaction: Transaction -> val inputConsume: ItemInstance = recipe.getMatchingStack(input.item()) - inputSlot.use(inputConsume, transaction).succeeded && outputSlot.canInsert(output, transaction) + when { + inputSlot.use(inputConsume, transaction).failed -> false + else -> outputSlot.take(output, transaction) == HTOutputSlot.TakeResult.FULL + } } override fun onComplete(recipe: HTItemToItemRecipe, input: SingleRecipeInput, output: ItemStack) { useTransaction { transaction: Transaction -> inputSlot.use(recipe.getMatchingStack(input.item()), transaction) - outputSlot.insert(output, 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 16bc167905..70d0bf5b25 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 @@ -78,7 +78,7 @@ abstract class HTDoubleItemToItemBlockEntity( when { primarySlot.use(firstConsume, transaction).failed -> false secondarySlot.use(secondConsume, transaction).failed -> false - else -> outputSlot.canInsert(output, transaction) + else -> outputSlot.take(output, transaction) == HTOutputSlot.TakeResult.FULL } } } @@ -89,7 +89,7 @@ abstract class HTDoubleItemToItemBlockEntity( useTransaction { transaction: Transaction -> primarySlot.use(firstConsume, transaction) secondarySlot.use(secondConsume, transaction) - outputSlot.insert(output, transaction) + outputSlot.take(output, transaction) transaction.commit() } playSound(getCompletedSound()) diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemAndFluidToFluidBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemAndFluidToFluidBlockEntity.kt index 5a8cdc7a44..70a13b3718 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemAndFluidToFluidBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemAndFluidToFluidBlockEntity.kt @@ -89,7 +89,7 @@ abstract class HTItemAndFluidToFluidBlockEntity( when { inputSlot.use(itemInput, transaction).failed -> false inputTank.use(fluidInput, transaction).failed -> false - else -> outputTank.canInsert(output, transaction) + else -> outputTank.take(output, transaction) == HTOutputSlot.TakeResult.FULL } } @@ -105,7 +105,7 @@ abstract class HTItemAndFluidToFluidBlockEntity( ) inputSlot.use(itemInput, transaction) inputTank.use(fluidInput, transaction) - outputTank.insert(output, transaction) + outputTank.take(output, transaction) transaction.commit() } playSound(getCompletedSound()) 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 35b894b5af..e540b465f4 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 @@ -86,7 +86,7 @@ abstract class HTItemAndFluidToItemBlockEntity( when { inputSlot.use(itemInput, transaction).failed -> false inputTank.use(fluidInput, transaction).failed -> false - else -> outputSlot.canInsert(output, transaction) + else -> outputSlot.take(output, transaction) == HTOutputSlot.TakeResult.FULL } } @@ -102,7 +102,7 @@ abstract class HTItemAndFluidToItemBlockEntity( ) inputSlot.use(itemInput, transaction) inputTank.use(fluidInput, transaction) - outputSlot.insert(output, transaction) + outputSlot.take(output, transaction) transaction.commit() } playSound(getCompletedSound()) 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 7a5489d417..b916468e15 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 @@ -77,8 +77,8 @@ abstract class HTItemToDoubleItemBlockEntity( val inputConsume: ItemInstance = recipe.getMatchingStack(input.item()) when { inputSlot.use(inputConsume, transaction).failed -> false - !primarySlot.canInsert(output.first, transaction) -> false - else -> secondarySlot.canInsert(output.second, transaction) + primarySlot.take(output.first, transaction) != HTOutputSlot.TakeResult.FULL -> false + else -> secondarySlot.take(output.second, transaction) == HTOutputSlot.TakeResult.FULL } } @@ -89,8 +89,8 @@ abstract class HTItemToDoubleItemBlockEntity( ) { useTransaction { transaction: Transaction -> inputSlot.use(recipe.getMatchingStack(input.item()), transaction) - primarySlot.insert(output.first, transaction) - secondarySlot.insert(output.second, 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 f65a606850..e1fc866397 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemToItemBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemToItemBlockEntity.kt @@ -66,13 +66,16 @@ abstract class HTItemToItemBlockEntity( override fun canComplete(recipe: HTItemToItemRecipe, input: SingleRecipeInput, output: ItemStack): Boolean = useTransaction { transaction: Transaction -> val inputConsume: ItemInstance = recipe.getMatchingStack(input.item()) - inputSlot.use(inputConsume, transaction).succeeded && outputSlot.canInsert(output, transaction) + when { + inputSlot.use(inputConsume, transaction).failed -> false + else -> outputSlot.take(output, transaction) == HTOutputSlot.TakeResult.FULL + } } override fun onComplete(recipe: HTItemToItemRecipe, input: SingleRecipeInput, output: ItemStack) { useTransaction { transaction: Transaction -> inputSlot.use(recipe.getMatchingStack(input.item()), transaction) - outputSlot.insert(output, 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 index cb06a74628..c0c1011923 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTTripleItemToItemBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTTripleItemToItemBlockEntity.kt @@ -86,7 +86,7 @@ abstract class HTTripleItemToItemBlockEntity( primarySlot.use(firstInput, transaction).failed -> false secondarySlot.use(secondInput, transaction).failed -> false tertiarySlot.use(thirdInput, transaction).failed -> false - else -> outputSlot.canInsert(output, transaction) + else -> outputSlot.take(output, transaction) == HTOutputSlot.TakeResult.FULL } } } @@ -98,7 +98,7 @@ abstract class HTTripleItemToItemBlockEntity( primarySlot.use(firstInput, transaction) secondarySlot.use(secondInput, transaction) tertiarySlot.use(thirdInput, transaction) - outputSlot.insert(output, transaction) + outputSlot.take(output, transaction) transaction.commit() } playSound(getCompletedSound()) From 10022c9aa4cac7e71056b8659a8c647f70ed6397 Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Mon, 21 Sep 2026 18:57:54 +0900 Subject: [PATCH 30/44] =?UTF-8?q?refactor:=20HTOutputSlotHelper=20?= =?UTF-8?q?=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lib/recipe/handler/HTOutputSlot.kt | 47 ---------- .../lib/recipe/handler/HTOutputSlotHelper.kt | 88 +++++++++++++++++++ .../entity/machine/HTMelterBlockEntity.kt | 3 +- .../entity/machine/HTSmelterBlockEntity.kt | 3 +- .../base/HTDoubleItemToItemBlockEntity.kt | 3 +- .../base/HTItemAndFluidToFluidBlockEntity.kt | 3 +- .../base/HTItemAndFluidToItemBlockEntity.kt | 3 +- .../base/HTItemToDoubleItemBlockEntity.kt | 5 +- .../machine/base/HTItemToItemBlockEntity.kt | 3 +- .../base/HTTripleItemToItemBlockEntity.kt | 3 +- .../ragium/common/gui/HTContainerItemSlot.kt | 11 +-- 11 files changed, 107 insertions(+), 65 deletions(-) create mode 100644 src/lib/kotlin/hiiragi283/lib/recipe/handler/HTOutputSlotHelper.kt diff --git a/src/lib/kotlin/hiiragi283/lib/recipe/handler/HTOutputSlot.kt b/src/lib/kotlin/hiiragi283/lib/recipe/handler/HTOutputSlot.kt index 9965eab3a3..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 /** @@ -58,42 +49,4 @@ interface HTOutputSlot { */ val anyTaken: Boolean get() = !noneTaken } - - // Single // - - /** - * [アイテム][ItemStack]向けの[HTOutputSlot]の実装クラスです。 - * @author Hiiragi Tsubasa - * @since 26.1.0 - */ - @JvmRecord - 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 - } - } - } - - /** - * [液体][FluidStack]向けの[HTOutputSlot]の実装クラスです。 - * @author Hiiragi Tsubasa - * @since 26.1.0 - */ - @JvmRecord - 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 - } - } - } } 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/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTMelterBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/HTMelterBlockEntity.kt index 6bfd95a5c2..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 @@ -7,6 +7,7 @@ import hiiragi283.lib.gui.widget.HTWidgetHolder import hiiragi283.lib.recipe.base.HTItemToFluidRecipe import hiiragi283.lib.recipe.handler.HTItemInputSlot import hiiragi283.lib.recipe.handler.HTOutputSlot +import hiiragi283.lib.recipe.handler.HTOutputSlotHelper import hiiragi283.lib.recipe.lookup.HTRecipeCache import hiiragi283.lib.transfer.item.HTBasicItemSlot import hiiragi283.lib.transfer.useTransaction @@ -51,7 +52,7 @@ class HTMelterBlockEntity(pos: BlockPos, state: BlockState) : recipeHandler = object : EnergizedHandler() { 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.getStoredInput()) 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 e2c6fdf74d..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 @@ -8,6 +8,7 @@ import hiiragi283.lib.recipe.base.HTItemToItemRecipe import hiiragi283.lib.recipe.base.HTProgressData 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 @@ -64,7 +65,7 @@ class HTSmelterBlockEntity(pos: BlockPos, state: BlockState) : recipeHandler = object : EnergizedHandler() { 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.getStoredInput()) 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 70d0bf5b25..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 @@ -7,6 +7,7 @@ import hiiragi283.lib.gui.widget.HTWidgetHolder import hiiragi283.lib.recipe.base.HTDoubleItemToItemRecipe import hiiragi283.lib.recipe.handler.HTItemInputSlot import hiiragi283.lib.recipe.handler.HTOutputSlot +import hiiragi283.lib.recipe.handler.HTOutputSlotHelper import hiiragi283.lib.recipe.input.HTItemListRecipeInput import hiiragi283.lib.recipe.input.getItemOrEmpty import hiiragi283.lib.recipe.lookup.HTRecipeCache @@ -62,7 +63,7 @@ abstract class HTDoubleItemToItemBlockEntity( HTItemInputSlot(this@HTDoubleItemToItemBlockEntity.secondarySlot) } private val outputSlot: HTOutputSlot by lazy { - HTOutputSlot.SingleItem(this@HTDoubleItemToItemBlockEntity.outputSlot) + HTOutputSlotHelper.forItem(this@HTDoubleItemToItemBlockEntity.outputSlot) } override fun createInput(): RecipeInput = diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemAndFluidToFluidBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemAndFluidToFluidBlockEntity.kt index 70a13b3718..2de31fd35a 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemAndFluidToFluidBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTItemAndFluidToFluidBlockEntity.kt @@ -8,6 +8,7 @@ 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 @@ -66,7 +67,7 @@ abstract class HTItemAndFluidToFluidBlockEntity( HTItemInputSlot(this@HTItemAndFluidToFluidBlockEntity.inputSlot) } private val outputTank: HTOutputSlot by lazy { - HTOutputSlot.SingleFluid(this@HTItemAndFluidToFluidBlockEntity.outputTank) + HTOutputSlotHelper.forFluid(this@HTItemAndFluidToFluidBlockEntity.outputTank) } override fun createInput(): HTItemAndFluidRecipeInput = 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 e540b465f4..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 @@ -8,6 +8,7 @@ import hiiragi283.lib.recipe.base.HTItemAndFluidToItemRecipe 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 @@ -65,7 +66,7 @@ abstract class HTItemAndFluidToItemBlockEntity( HTItemInputSlot(this@HTItemAndFluidToItemBlockEntity.inputSlot) } private val outputSlot: HTOutputSlot by lazy { - HTOutputSlot.SingleItem(this@HTItemAndFluidToItemBlockEntity.outputSlot) + HTOutputSlotHelper.forItem(this@HTItemAndFluidToItemBlockEntity.outputSlot) } override fun createInput(): HTItemAndFluidRecipeInput = 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 b916468e15..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 @@ -7,6 +7,7 @@ import hiiragi283.lib.gui.widget.HTWidgetHolder import hiiragi283.lib.recipe.base.HTItemToDoubleItemRecipe import hiiragi283.lib.recipe.handler.HTItemInputSlot import hiiragi283.lib.recipe.handler.HTOutputSlot +import hiiragi283.lib.recipe.handler.HTOutputSlotHelper import hiiragi283.lib.recipe.lookup.HTRecipeCache import hiiragi283.lib.recipe.lookup.HTRecipeLookup import hiiragi283.lib.sounds.HTSoundInstance @@ -58,10 +59,10 @@ abstract class HTItemToDoubleItemBlockEntity( 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.getStoredInput()) 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 e1fc866397..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 @@ -7,6 +7,7 @@ import hiiragi283.lib.gui.widget.HTWidgetHolder import hiiragi283.lib.recipe.base.HTItemToItemRecipe import hiiragi283.lib.recipe.handler.HTItemInputSlot import hiiragi283.lib.recipe.handler.HTOutputSlot +import hiiragi283.lib.recipe.handler.HTOutputSlotHelper import hiiragi283.lib.recipe.lookup.HTRecipeCache import hiiragi283.lib.recipe.lookup.HTRecipeLookup import hiiragi283.lib.sounds.HTSoundInstance @@ -55,7 +56,7 @@ abstract class HTItemToItemBlockEntity( recipeHandler = object : EnergizedHandler() { 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.getStoredInput()) diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTTripleItemToItemBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTTripleItemToItemBlockEntity.kt index c0c1011923..5fda3b8e2a 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTTripleItemToItemBlockEntity.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/machine/base/HTTripleItemToItemBlockEntity.kt @@ -7,6 +7,7 @@ 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 @@ -66,7 +67,7 @@ abstract class HTTripleItemToItemBlockEntity( HTItemInputSlot(this@HTTripleItemToItemBlockEntity.tertiarySlot) } private val outputSlot: HTOutputSlot by lazy { - HTOutputSlot.SingleItem(this@HTTripleItemToItemBlockEntity.outputSlot) + HTOutputSlotHelper.forItem(this@HTTripleItemToItemBlockEntity.outputSlot) } override fun createInput(): RecipeInput = HTItemListRecipeInput( 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 From 6676abb269a576fd91173e5ca6090594eb4d8d7b Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Tue, 22 Sep 2026 19:09:58 +0900 Subject: [PATCH 31/44] =?UTF-8?q?feat:=20=E6=96=B0=E3=81=97=E3=81=84?= =?UTF-8?q?=E6=B6=B2=E4=BD=93=E3=82=92=E8=BF=BD=E5=8A=A0=20-=20Resin=20/?= =?UTF-8?q?=20=E6=A8=B9=E8=84=82=20-=20Synthetic=20Resin=20/=20=E5=90=88?= =?UTF-8?q?=E6=88=90=E6=A8=B9=E8=84=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hiiragi283/ragium/client/RagiumClient.kt | 13 ++- .../data/lang/RagiumEnglishLangProvider.kt | 2 + .../data/lang/RagiumJapaneseLangProvider.kt | 2 + .../ragium/data/model/RagiumModelProvider.kt | 2 + .../data/recipe/RagiumCommonRecipeProvider.kt | 84 +++++++++++++++++- .../data/recipe/RagiumHeatRecipeProvider.kt | 17 ++++ .../data/tag/RagiumFluidTagsProvider.kt | 5 ++ .../assets/ragium/blockstates/resin.json | 7 ++ .../assets/ragium/items/resin_bucket.json | 12 +++ .../ragium/items/synthetic_resin_bucket.json | 12 +++ .../resources/assets/ragium/lang/en_us.json | 8 ++ .../resources/assets/ragium/lang/ja_jp.json | 8 ++ .../assets/ragium/models/block/resin.json | 5 ++ .../resources/data/c/tags/fluid/resin.json | 6 ++ .../data/c/tags/fluid/synthetic_resin.json | 5 ++ .../resources/data/c/tags/item/buckets.json | 2 + .../data/c/tags/item/buckets/resin.json | 5 ++ .../c/tags/item/buckets/synthetic_resin.json | 5 ++ .../recipe/bathing/black_dye_from_carbon.json | 16 ++++ .../recipe/bathing/blue_dye_from_lapis.json | 16 ++++ .../bathing/brown_dye_from_bauxite.json | 16 ++++ .../freezing/black_dye_from_liquid_dye.json | 12 +++ .../freezing/blue_dye_from_liquid_dye.json | 12 +++ .../freezing/brown_dye_from_liquid_dye.json | 12 +++ .../freezing/cyan_dye_from_liquid_dye.json | 12 +++ .../freezing/gray_dye_from_liquid_dye.json | 12 +++ .../freezing/green_dye_from_liquid_dye.json | 12 +++ .../light_blue_dye_from_liquid_dye.json | 12 +++ .../light_gray_dye_from_liquid_dye.json | 12 +++ .../freezing/lime_dye_from_liquid_dye.json | 12 +++ .../freezing/magenta_dye_from_liquid_dye.json | 12 +++ .../freezing/orange_dye_from_liquid_dye.json | 12 +++ .../freezing/pink_dye_from_liquid_dye.json | 12 +++ .../freezing/purple_dye_from_liquid_dye.json | 12 +++ .../freezing/red_dye_from_liquid_dye.json | 12 +++ .../freezing/white_dye_from_liquid_dye.json | 12 +++ .../freezing/yellow_dye_from_liquid_dye.json | 12 +++ .../recipe/melting/resin_from_block.json | 12 +++ .../recipe/melting/resin_from_clump.json | 12 +++ .../data/ragium/recipe/mixing/black_dye.json | 16 ++++ .../data/ragium/recipe/mixing/blue_dye.json | 16 ++++ .../data/ragium/recipe/mixing/brown_dye.json | 16 ++++ .../data/ragium/recipe/mixing/cyan_dye.json | 16 ++++ .../data/ragium/recipe/mixing/gray_dye.json | 16 ++++ .../data/ragium/recipe/mixing/green_dye.json | 16 ++++ .../ragium/recipe/mixing/light_blue_dye.json | 16 ++++ .../ragium/recipe/mixing/light_gray_dye.json | 16 ++++ .../data/ragium/recipe/mixing/lime_dye.json | 16 ++++ .../ragium/recipe/mixing/magenta_dye.json | 16 ++++ .../data/ragium/recipe/mixing/orange_dye.json | 16 ++++ .../data/ragium/recipe/mixing/pink_dye.json | 16 ++++ .../data/ragium/recipe/mixing/purple_dye.json | 16 ++++ .../data/ragium/recipe/mixing/red_dye.json | 16 ++++ .../data/ragium/recipe/mixing/white_dye.json | 16 ++++ .../data/ragium/recipe/mixing/yellow_dye.json | 16 ++++ .../ragium/recipe/reacting/plastic_plate.json | 2 +- .../recipe/reacting/synthetic_resin.json | 16 ++++ .../data/ragium/tags/fluid/resins.json | 6 ++ .../hiiragi283/ragium/api/tag/RagiumTags.kt | 6 ++ .../ragium/common/fluid/RagiumFluids.kt | 18 +++- .../textures/block/fluid/molten_flowing.png | Bin 8528 -> 9432 bytes .../textures/block/fluid/molten_still.png | Bin 8341 -> 8149 bytes 62 files changed, 761 insertions(+), 7 deletions(-) create mode 100644 src/generated/resources/assets/ragium/blockstates/resin.json create mode 100644 src/generated/resources/assets/ragium/items/resin_bucket.json create mode 100644 src/generated/resources/assets/ragium/items/synthetic_resin_bucket.json create mode 100644 src/generated/resources/assets/ragium/models/block/resin.json create mode 100644 src/generated/resources/data/c/tags/fluid/resin.json create mode 100644 src/generated/resources/data/c/tags/fluid/synthetic_resin.json create mode 100644 src/generated/resources/data/c/tags/item/buckets/resin.json create mode 100644 src/generated/resources/data/c/tags/item/buckets/synthetic_resin.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/black_dye_from_carbon.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/blue_dye_from_lapis.json create mode 100644 src/generated/resources/data/ragium/recipe/bathing/brown_dye_from_bauxite.json create mode 100644 src/generated/resources/data/ragium/recipe/freezing/black_dye_from_liquid_dye.json create mode 100644 src/generated/resources/data/ragium/recipe/freezing/blue_dye_from_liquid_dye.json create mode 100644 src/generated/resources/data/ragium/recipe/freezing/brown_dye_from_liquid_dye.json create mode 100644 src/generated/resources/data/ragium/recipe/freezing/cyan_dye_from_liquid_dye.json create mode 100644 src/generated/resources/data/ragium/recipe/freezing/gray_dye_from_liquid_dye.json create mode 100644 src/generated/resources/data/ragium/recipe/freezing/green_dye_from_liquid_dye.json create mode 100644 src/generated/resources/data/ragium/recipe/freezing/light_blue_dye_from_liquid_dye.json create mode 100644 src/generated/resources/data/ragium/recipe/freezing/light_gray_dye_from_liquid_dye.json create mode 100644 src/generated/resources/data/ragium/recipe/freezing/lime_dye_from_liquid_dye.json create mode 100644 src/generated/resources/data/ragium/recipe/freezing/magenta_dye_from_liquid_dye.json create mode 100644 src/generated/resources/data/ragium/recipe/freezing/orange_dye_from_liquid_dye.json create mode 100644 src/generated/resources/data/ragium/recipe/freezing/pink_dye_from_liquid_dye.json create mode 100644 src/generated/resources/data/ragium/recipe/freezing/purple_dye_from_liquid_dye.json create mode 100644 src/generated/resources/data/ragium/recipe/freezing/red_dye_from_liquid_dye.json create mode 100644 src/generated/resources/data/ragium/recipe/freezing/white_dye_from_liquid_dye.json create mode 100644 src/generated/resources/data/ragium/recipe/freezing/yellow_dye_from_liquid_dye.json create mode 100644 src/generated/resources/data/ragium/recipe/melting/resin_from_block.json create mode 100644 src/generated/resources/data/ragium/recipe/melting/resin_from_clump.json create mode 100644 src/generated/resources/data/ragium/recipe/mixing/black_dye.json create mode 100644 src/generated/resources/data/ragium/recipe/mixing/blue_dye.json create mode 100644 src/generated/resources/data/ragium/recipe/mixing/brown_dye.json create mode 100644 src/generated/resources/data/ragium/recipe/mixing/cyan_dye.json create mode 100644 src/generated/resources/data/ragium/recipe/mixing/gray_dye.json create mode 100644 src/generated/resources/data/ragium/recipe/mixing/green_dye.json create mode 100644 src/generated/resources/data/ragium/recipe/mixing/light_blue_dye.json create mode 100644 src/generated/resources/data/ragium/recipe/mixing/light_gray_dye.json create mode 100644 src/generated/resources/data/ragium/recipe/mixing/lime_dye.json create mode 100644 src/generated/resources/data/ragium/recipe/mixing/magenta_dye.json create mode 100644 src/generated/resources/data/ragium/recipe/mixing/orange_dye.json create mode 100644 src/generated/resources/data/ragium/recipe/mixing/pink_dye.json create mode 100644 src/generated/resources/data/ragium/recipe/mixing/purple_dye.json create mode 100644 src/generated/resources/data/ragium/recipe/mixing/red_dye.json create mode 100644 src/generated/resources/data/ragium/recipe/mixing/white_dye.json create mode 100644 src/generated/resources/data/ragium/recipe/mixing/yellow_dye.json create mode 100644 src/generated/resources/data/ragium/recipe/reacting/synthetic_resin.json create mode 100644 src/generated/resources/data/ragium/tags/fluid/resins.json diff --git a/src/client/kotlin/hiiragi283/ragium/client/RagiumClient.kt b/src/client/kotlin/hiiragi283/ragium/client/RagiumClient.kt index aa8895a795..aa4a17b70f 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/RagiumClient.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/RagiumClient.kt @@ -77,6 +77,9 @@ 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 -> @@ -119,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) { @@ -131,7 +134,7 @@ data object RagiumClient : HTClientMod() { colorTint(Color(0xffcc99)) } register.register(RagiumFluids.CRUDE_OIL) { - sticky() + molten() colorTint(Color(0x333333)) } register.register(RagiumFluids.NAPHTHA) { @@ -146,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)) diff --git a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt index e0596905f1..610f253363 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt @@ -71,6 +71,7 @@ class RagiumEnglishLangProvider(output: PackOutput) : add(RagiumBlocks.MACHINE_CASING, "Machine Casing") // 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") @@ -90,6 +91,7 @@ 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") diff --git a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt index 7c58651ef0..b435aee014 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt @@ -67,6 +67,7 @@ class RagiumJapaneseLangProvider(output: PackOutput) : add(RagiumBlocks.MACHINE_CASING, "機械ケーシング") // Fluid addFluid(RagiumFluids.HONEY, "ハチミツ") + addFluid(RagiumFluids.RESIN, "樹脂") // add(RagiumFluids.POTION.getFluidType().descriptionId, "無効なポーション") add(RagiumFluids.POTION.bucketHolder, $$"%1$s入りバケツ") addFluid(RagiumFluids.OMINOUS_FLUX, "不吉な流動体") @@ -86,6 +87,7 @@ 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, "フッ化水素") diff --git a/src/data/kotlin/hiiragi283/ragium/data/model/RagiumModelProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/model/RagiumModelProvider.kt index 9da18f743e..906b15f1b7 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/model/RagiumModelProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/model/RagiumModelProvider.kt @@ -34,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) @@ -43,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) diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt index 44e139f963..605917e2b6 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt @@ -1,8 +1,10 @@ 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 @@ -18,6 +20,7 @@ import net.minecraft.core.HolderLookup import net.minecraft.data.PackOutput import net.minecraft.tags.ItemTags import net.minecraft.tags.TagKey +import net.minecraft.world.item.DyeColor import net.minecraft.world.item.Item import net.minecraft.world.item.Items import net.minecraft.world.item.crafting.Ingredient @@ -172,7 +175,10 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu +holderSet(RagiumFluids.OXYGEN) amount /= 4 } - itemResult { +RagiumItems.PLASTIC_PLATE } + itemResult { + +RagiumItems.PLASTIC_PLATE + count = 2 + } }.save(exporter) // Naphtha + Redstone -> Anti-rust Oil RagiumRecipeBuilders.mixing { @@ -198,11 +204,29 @@ 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() @@ -212,6 +236,64 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu 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 { diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumHeatRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumHeatRecipeProvider.kt index 2175979b1d..e1e90013cd 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumHeatRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumHeatRecipeProvider.kt @@ -185,6 +185,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 -> 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/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/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/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/lang/en_us.json b/src/generated/resources/assets/ragium/lang/en_us.json index 9c2b7eec7f..b5c1f53085 100644 --- a/src/generated/resources/assets/ragium/lang/en_us.json +++ b/src/generated/resources/assets/ragium/lang/en_us.json @@ -93,6 +93,7 @@ "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", @@ -101,6 +102,7 @@ "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", @@ -253,6 +255,7 @@ "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", @@ -272,6 +275,7 @@ "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", @@ -348,10 +352,12 @@ "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", @@ -393,10 +399,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 072f27c9be..daf2e3024d 100644 --- a/src/generated/resources/assets/ragium/lang/ja_jp.json +++ b/src/generated/resources/assets/ragium/lang/ja_jp.json @@ -93,6 +93,7 @@ "block.ragium.pyrolyzer": "熱分解炉", "block.ragium.red_dye": "赤色の染料", "block.ragium.refinery": "精製機", + "block.ragium.resin": "樹脂", "block.ragium.scanner": "レーザースキャナ", "block.ragium.smelter": "製錬炉", "block.ragium.sodium_hydroxide_solution": "水酸化ナトリウム水溶液", @@ -101,6 +102,7 @@ "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": "廃棄タンク", @@ -253,6 +255,7 @@ "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": "シリコンウェハ", @@ -272,6 +275,7 @@ "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": "小さな石炭", @@ -348,10 +352,12 @@ "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": "防錆油入りバケツ", @@ -393,10 +399,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/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/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 29959cb0b6..ae3e8b8943 100644 --- a/src/generated/resources/data/c/tags/item/buckets.json +++ b/src/generated/resources/data/c/tags/item/buckets.json @@ -42,10 +42,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/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/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/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/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/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/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/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/reacting/plastic_plate.json b/src/generated/resources/data/ragium/recipe/reacting/plastic_plate.json index 901e54265e..13da8c0df8 100644 --- a/src/generated/resources/data/ragium/recipe/reacting/plastic_plate.json +++ b/src/generated/resources/data/ragium/recipe/reacting/plastic_plate.json @@ -1,7 +1,7 @@ { "type": "ragium:reacting", "item_result": { - "count": 1, + "count": 2, "id": "ragium:plastic_plate" }, "primary_ingredient": { 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/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/lib/kotlin/hiiragi283/ragium/api/tag/RagiumTags.kt b/src/lib/kotlin/hiiragi283/ragium/api/tag/RagiumTags.kt index ae1818a999..dce7951a7d 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/tag/RagiumTags.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/tag/RagiumTags.kt @@ -37,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)) } diff --git a/src/main/kotlin/hiiragi283/ragium/common/fluid/RagiumFluids.kt b/src/main/kotlin/hiiragi283/ragium/common/fluid/RagiumFluids.kt index e56ac80886..8197da74f2 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/fluid/RagiumFluids.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/fluid/RagiumFluids.kt @@ -92,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() @@ -133,7 +139,7 @@ data object RagiumFluids { // Chemical // - // 3rd + // C @JvmField val WOOD_TAR: HTFluidContent.Virtual = REGISTER.registerVirtual("wood_tar") { properties = liquid() @@ -176,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() } @@ -185,6 +195,7 @@ data object RagiumFluids { typeFactory = { HTExplosiveFluidType(6f, it) } } + // F @JvmField val HYDROGEN_FLUORIDE: HTFluidContent.Virtual = REGISTER.registerVirtual("hydrogen_fluoride") { properties = gaseous() @@ -195,12 +206,13 @@ data object RagiumFluids { properties = liquid() } - // 4th + // 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() @@ -209,6 +221,7 @@ data object RagiumFluids { @JvmField val MOLTEN_ALUMINUM: HTFluidContent.Virtual = REGISTER.registerVirtual("molten_aluminum") { properties = molten() } + // S @JvmField val SULFUR_DIOXIDE: HTFluidContent.Virtual = REGISTER.registerVirtual("sulfur_dioxide") { properties = gaseous() } @@ -221,6 +234,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/resources/assets/ragium/textures/block/fluid/molten_flowing.png b/src/main/resources/assets/ragium/textures/block/fluid/molten_flowing.png index 9dc9bf8efddae79915dc329f0a9ca5bfbb92cd1f..b90273a04450e7edff4818acf44f152c914e98c3 100644 GIT binary patch literal 9432 zcmZ8{cUV*1yJZLogx-D8dX7chh(y%{<|X`d)WK&6NfBnSow zML|RX>7ocylp;*{-MKS!=dZJ$oa9N)n|H6Z-nDjyt+fdgJs&*)0AMmRHMFN(MF0RG z0764qEt`dH0RXH3GebQ`B-QuN*IRB57SQg%t>6-c{VNsGV_MRpqPr-Rw9u(p9@0Qx zq@UqWvIHyS-7JyH#|PmVMFbVL4QnCCTKw<4n=jRgaN5i%wYYJs<<*Sqd#Y%CI-D!M?vZ#f^7v`jtyQ%dH;&Qut*6~#tD!GGKac890n1-K`?FjO3m9{YA7IjG zjycy@NNAgUeaRgu+8eO3b;%>aPJPz%UerpyNy(2F3%#euTP=PG2|dl7Yh`}biHEXx zf4;iC8~&u@gWSSD=ZQz#-9Jb6H>ciF-s>)uu+v{q*Mb$iJs-KcQfPDe(#;sVkFhg1 z4brQVj++ure!M_F7!v-cr|0LvlL>Blr4FzA;0pbOT+V*?F`)Wpy=5u;%(MO2huP}%4oWw> zVtoBwpT0gj?njp%fn_0!n!z8Me^DL@Q|-IC)li+}D%I1&bGx=-| zaSMsRe|-vno!Z1SKI8GvO~~O=ns7<{-kOo7`VxA__SpQ+Zdk2omUBQ{ef=i)jSxFG zamF;x5`nnk0?Dvkueaoxhq>@BNWad{9vDgXJN#&+@Yj6w_@Jgo{A%$kWu;gi^2`h> zQG-*tgndaV%lY5mO4_g=U;CQSv)@0qy(6SDRA$P4MEcCvrik1Ke-%q9xQS4_gl<&{ zt#HClVAm>b{ldw1cZ;Qh;Svjm5T9-ED^(%U@0+YcJ-VJ-TsZLGC*9j!se6eB@2?M{ z2Q*Y?=4UW+1|FsRluBOCg&zl&!UC)<-#M9N-}^;Jg6KuxFAj`MT(7)++2z=oDZ61e zZW>PqnNkdXDpB%qzudV}pb|RQo_~$ZRQD5E6D1?W#1Ke)aMY1Qi+-^AU=I%o z){4_5@1oRD9x;?Fz+(fsn7h*_yp$ow0o1j`*Sij9{LIUZCNNn~yWM88j4!nsrl62`Bx*dC~}bo=sXP702-l?rQP%T7;+(Z0%Wq!GN60F)PYg zHQ_scNZ+B#3YH;5)5|f^`X}jIQv)$V&xW#V00=sILl)_^L5M46HHZWm~e4V)gwif%wHZ+}OhYq)1vBREY zA{gr!dGo1hqr%@tgr1I-n@09D^_PFn|Gq7O?(yc z3^!Aqe(6=3b~94bC=7^^6k&J1W=LnAxQRPs;PjlK-<3azt{3JACjD9RD-V61Vb2(v ztwqaOVgo<&^(D2Bkxdd2phjBHzG24X+Eje+*G&0LG4!5-sJZh%b5lw!JP+4G!48k< z^z0|dOZKGGMMJ?^*Ksj=9sxYvQpJIOyYHs_W-P>A*3!(d%#5y96E`uJh?aP3BAn=G z>E?1QV+&EPgmpfQR9lTw4Nmz$nBXMwZF5M{3-BJ_a+7SJ=d>JadqOLgBI0j;(S#Fv zJnM877u~g-oI|TEwDDhyNu)?NZSyYE4}^a2jq^_v0l~d@1(F^3otcVWj;sAvy7?&G$g|i2_`xVKf$7d|gD)=ior!QJR z2)f*RvVG(7tNlq8b#-o?Z@kBL$zN;kF=u{`A_W;)WI+|r55{S@L)XVDZ+wT1uuMZB zSBl^z%U2F(#ShOz`n_eY+E(;2hHvly68|2|EH}~VkMPs^I;-qo`;o?dh*k^Ix+;PO zf){LcTJwMCCTCrVVPp!}l;0R#VYiVg{(WyH0kMAC7t0jQ_YTaZ1SzP?T`5X?O~Kau zEwd?Qg0p*L;DqY>rJm|*j2S2GjER16%O5d%+e3SP#IHA*Wn2c+{Zt2*bgm9h=F)Sv zKWq{=DLR?3Pa*IT%Ns0=Z{DuH>zYjXExM17mCtg84U|r3imt=7hBE`dpIYnuaD>!W z4B0T6J&dhTNF<@FO6<3M?$|9hB7!snQ|YKA9$8*i&}xiWso*^ZNLV(B3t3SMJ!Kr2 z|Mi-}G|KkK-*1Ii3&b$CzlInS)iTH%6qw9e&(L&XFxyK0)-*?DGn9T!Q(>>Xwr&5K z6+(BasB<*zU5TRn2MmSo@(TuAp&BOlIXKRb#_U~=N2a8YCwwJ z&^h)@*7~I!TIa{hR9-rMBSqeci+O8c*dt=;QNHOh3|af%-L=?~OMAA8?BiqceH)>7 zx%vjR@e%@CllWY9fPM#c@@)To!e>;YC4{=t$NO&@bzcjHshN6_pUCP^0=I{~Tu`rQ z2nu363C8Lhp~cV=V3A#y96)=kKBm{aA4;RYq+90omVQ!2zN%6=Vw9Q*GZ3${feoPS z-v0Saww(6Dy<~5mNj~xHdNg=Jv*Av19nWW5%BF$7aI{F)cY5UDf={6Gsm6Jfml9t+ z`JHnrVc@|Qt!fDkK@lR}G8HdZS%E8_cPs4o*-4>R(jD&n66YaZa=?F`M~||53bzcNNw9sT1_t_KR{tu zp<30-f_tlq#bt1_|Gn%lWFK-Vx5Z2y{*{JMiD8P{w&mX;xCH#bFAYr^)R zKH~hD%j$AHKBvqO?SS4PepgxX^bq1=*Y06!TeKKKD_>lZ!gQ{at_`|XN3qtB`u7!= zqWJ3Bxvk*&bu0|zs#326OV0YhZCw*_5!{>>vz$D8m%?H%ZvQ>fM{a_wJoK=RbtPd^ zl?@di{0&m|GQy(-4#==Rog|JY&<#u-0Tm_d^m859`z%dwxbpKE6ywfsCIh1@VeFJT$84Q~@#fEw@##f<4# zmr$t7U$au~6?Q%Q6%d3$_q)Zk($}}g=I%WW*r3kaiSlYRma)<}tm3loQB|yt8j;HMHqtK@!Wvbl(HJ={~=wa2uFufN6oUxhSC>5 zv0+vn=x4UONJ3DFKhu*E-2ddA*Hl8Yu`|D3FJ-*XrA0Bd(sxaG>L5S@ZIR#vZ5FW3 za~hUDdY5ClCj?t+(;7h=TYb}lYn|1)wx0n!F4tH$6H4GhVKZ#3a%O`(?6tDV0K0fm z`TiskUQRYZcQSxczH#%uZ9p*%6c`t_$UcSpQ;0 z_w=qsd2|8KXoo`L;PlJAh}r73_F9}25aMf1hTKYDVZ%^Bpw6eFDV57B&`5`{12%Yw z5S5I!mXKMW^%$ERdia?rXdq~=N~b3S_mm1*i_0adVA4HLB@M31*+O57abnsZmCjrd zxceQydk3)&4L8Bb{=->N5iOIbYx2mat)?`$i7AaYujJc3{X8Ry+MG3vKR78L*OH#y zIfoikTMr!EdiB7mLT8BT2;G@1S+)t=-+g#}ZCY8>a@f77(Heyd;)!mn{aH5tWzr0C zmXFJAa+dbjD{G|QbmIuC|H5$jWlbPj70eHGPznguXRK>!SI)^~&q?TibT40W z#Bgg^fH|7wMTGWa?~>lKsi1!&^_M^Iq9T7FQA77{kJkFAd_(q;W_MALO=RC!U#f4& z#g=5+q*FW(Gsg_8F8+8IU@Iz(0zWw@@iR$(kg-H$1b~AA;2I+z-OCgf)VT`P)YmVZvq~$xkZ`m#=oUX@r|l7LRM=d>tBsO z-_kXK!oBWj`INwGQAe@q%2M_!uitPxjdfbzxPdGayq2_7v35)$p7*ZaTr!XRc=&F_ z3I}!nDN#zuu%*8H=x zqJ=PbO)6s=Y&Y(Uje$O$9f@vL=Sk(B#364$1)Gw^F!_3EUZij8#h9M777iCdOB5ek zj;ZkV|3T5+_jEZ%%5uYCSII&2#5Zm&h{&^}^-C$_`FIn!9^%?H3aCEbyl$%e>Sj!( za>t(bKaamk{kIqJ0F_BIa8H)XSwCgO?(+kjFqaJUmSvW#-uBDooG6NzyJR!tGxF)l z-!iXT_b)XFTp)Ml6hY#lz`M5Cw;DyOH#OwdJ)nZo`cA>?n8`FSn%f~0|dMxHV-O=`WHC2T4C8G41|I0)_fwnpNlf-7K6fV z?Fg4MI`v=m)niUv#ow?V-(o1qSOwccF_if_JfCaRO&wHmM-Xe4X{&ILsP10UJ6GXt zUr8-eU=zf9)idm)vcn#o(-MRE?_V^tPzzxjTSPCpHGzdX8&mJ=}BgDOHeN zD`i&=1j=XlvlVU`p8GMva2fxfSbd*La#4KU!q){-Kwuz~8XiKs z3d2ZV{Pqa3wi;#Wtldj-&}tx8vg&%^JK1sFJ<^|t3<+We!awU_Ibw^?-d(=`df$Aj zM0&DInK)nJNen*FgHxc1^=VJu(W}JbkIJgs`gZnrPIrffPQt!CNg2gadYr%-MgYdQOiDGDVVnDE9`1!VIdsdE$WZ8Y4xUh;!6u^Cf(;0E&D zFaT8co#lK;3JnP%%>=UMvDk9>PNOnTDrPW~v?9p|ST>RTnpvjgEGj0F-&n6k#Mg$t zTQne`sS4$*DIXOn?IGvT2|#xLFrIiM><$iAsmK`H&T*t4@*X3tWSC+Y!?sv?QuCVA zQF4!Ze1{9ZzCDFgKl0bpr=T5F3l0~uA?yV5=1a>=L$K9;-=*(pa25KPnp&v4DjImy zU4JG#26i5yyJmuQj^`GCECjO{uh8IBSaL1tRguh&G3T$mMLN$#p~1RqTjO@mK!}1m z;VXK{y!GfM1>drrNaN4Ufy6Dd)Z|b^Rdo~?_ zQhzEcsjBjcJnmCQQ_9|6FDR`#rY!+E9b${`Y`=NdXJSZmzIbUZ^P(ZMo;=Zh&C#F5 zAqO{u$A$%R%1E?Ks-|d$Lktm^-m-(h#|F6dKL_op7WyVTEJ6Y z!R;zz3SRYv82)wtDC?oC(B}>F8*`D*_IKC8*$?la?zDEGGU7Y5@fmNO+p>(Ia8H7Y zkGB7YiH$9^v&b@tn6yup89>Hlcr zb6Vu$ly_`L=B<+bYrBR+)XB8idbLHuF|#Mib!-5g(~6>DdAU7*_4)8*8h|Iondx8y zG`pj(kQ<|pWX_>#-Ud740)W00*@nl@r_%Zs*&A}y zariV4l4xnD>*D6~6-J}Ig+v*Vm;_mzrAfaN1_(ZIR<;uF=#=<-Ke3JIb>AIIv#?=E zw=h%K4{{W-RGKYG%4|h_*hN847``SS+~)h#cNXg1*XPt^ z=p3W14IUrOZy&+-#Stl{ay0%_f`E+p&u%|&gNYy6jAI0C!OoCbEHh5{RR{kZRU5Q6 zV+^61d&mLe=m7SC!&L7+18mh$#;x$pBDZfvaZZ{Xd14?AcA98Q)OE{5r>hZP4lcHE zO!I^g4H~nQNSLkAJ^9{tpSJWpgNV1~XeJ066WAfTU%ZLs?^E5@M$`VSXEg|Z^))s0 zPWs0Kzjq~E>yP#+>VLTy{353>__cI?+&enWx=}Nr8iH_1RW`l^9%WDpb@&vQdT>pp z^nqmH=qE|}vc1zmI}k#j_xO*z5J_%6t8*N*v`Q?RiZt#JpINzAF?~Blc1i1M5nM{l zx(@0Wh2srI3}B2&9K?8^Z9ZC6-GnzsjDLTgWzt4ZWi3y9VdKbOYUn*{m+|_O8hwh2 z)oj&x!Gy~N8c_>NaV@QsMlwrF4zTjzWUFmqi$zk>PK6_W8_RU`ZJ#Jwm+eHVRDJY0 zEnlE4U8P32d;h#G9yrx~)xblmC?`e^6x19Yq%ozPSPHKAD}74IPGWZp)U53sZ0@xmNj^194tO%q(-d z{Ns z)#cGetz=(w45}em4B>Mpd$VmHF93UWl@`HT7L8zp_&hd7vZ0$QZ&%AGGg4gV$I_4L zZs?YCVUh2FVB=r#jPzha!M)=#N;kHmhE0MnYXTOAfe8R{Ae(*=@g@I18UOa=gDIAz z0)H@=#yXIOGYXp-YeX+!kLTv)$vipKvJggrVEohC8g#O7Wep<8lWV5pK~Y(a=D*XG zYAXA7HH)JH?`|BC(1bkdsJFyf}bF`iqn(_H9R@A{1=ca zLCqry@fYb7j3GDUL=o@RP@DxNjW0`ZEj)mlC?Gb^KM!i$R}XqGg#WqNMFVETfS>K3 zKSAJpWVQ7mAf!1W#P{fjEcU};amdddK>{u~#R`)IGWA5Teu6?}f9TGCw}ZQSr<8{9 zh!jii(jwXZW7eTQ+|pBB_RO(wQzwod0j`S_BccpzraKrD0qkoZ@(G2zGq~52A}qd9 zHjaNjUX@3-myf^YO$az(4qMPI|GDm2hik5uLKUt zV=;xNavFc5DtKRChZ7M9RV(A@gR+Sjc*K(SzsT2$e-HsldEbP~@D7r-vIlU5jTD9O zSb23Y>dLOQ0sitT!PF4?YP{!51nYF7REq)y^Uwl{k~mEN%0o8GF9C59Xf6kyJ5_y& z31}mgeNj}J6StDPo23Hw8>a&YYrT3$YGwK&3wkH43y(if@UX(b4|7UCm1{s>yo8=y zU`P_708zF}44J4k8XRD(D7sL5Nr?ITz}HGOcxyEWWg>Bo16Df_pdaO^2JWSd?x_(Z6T=#y5t!N# z$R&%icV=~>&@4Tt_Vfykh}I){hi9R*t&_8CJjDj4)_=_8ZEN03QFfeR*$*mk{kmg2 z<{(~+26M0Y4|QR*V-PQcW;Kq*d2Ao+X)P~x`1sbzfNC*@pZj+tf_ck~-U-*SXRx_k zZ2LTL71L7+Xy+^t*y-6DlmAz|d7^AdwE2nqK`moq$BCJaj|In3^*2cJ>0fPYSw3v} z!^yIbi2+R%_n=Cwr%^nU7l_HR;%%7wx4`3 z2AESm%$sDVRpVlJIjB)(pAD>i>vgj-qh+u&nzJ7=cokZ}!j4v(A5h^vmYI_6=8c94 z)Dtf`_$WzS8-W-_M<>TG{(7gR)VxATVgc-yu_Ha$VC_Rku!O;llEuGk!0@mGS~cv# zBT7gEOtlq5-DV-iio-GG zZu|>4S=ZwK(X4&1!9wX)PjMF>KgG85)UF|Pg(apXR7|1ruWf;!NvzjMnhd9(sLVMd z8vp=M?8UhN$_#_Ge!dK${wDB^%Je(aFpHj21|0%;#mC&)B*tLV06_B9Fpnj(SOqb& zcrWVU5RnTu+MADnU3y0Ui2)H|0FK2F*AeOve?ltB66JqP3B@m&-H)a~poKICAps%f z-wx}|rdrr>5i?Jh;>_BJ#w0n`c)D9+9gRuN+W!8oa<;P{3W?p!gl>;D!wuX%KFFx; zgYOldHb_x3FE_~-q2kx1BV+9h>6*}{c%+$*=1NgO*Nd3fNcx%I0E&vq1>G6?Bffbc z@hO|a#Z0Uo5)zA%UEh14vvMxyX9aaCy>d6M2R5;3=bD~TQb-U^ycZPA^ zmX}{M#Wdc$jrG}!}+GuWM1lyVf$;xJ{OLF^$nuT(%pJWG=HbIij% zRyKX57CS^mKYo8F#5&NbFYiNb3M&XE0E+m++UkgbpN%zrM=lXkQy-KcWGVT#*W-tW zZUxMW`3b1B!KnWoS>2KqWp;en4*B%`OW_kQJf|LpCazq9pZ@N02h zZZ%TIv@E?R+Sm}H_QCd1pBvUyGF6&Z4OW)tCY^wRm-qKuT%9YyyXTG zX5E;nHpxHfzDug(psk54f>alkvEO9uno#J+-b$L*^&w`7nc-dy#T)5U*KgxuF}*6v ztly~owsbi`ys++T*@a%yBu3@rFhc$zMTz#7&JBb_2*ak>zYd~Hndn3Vw=RxV06C5; z>V*Hk8F*=K`5qNwel+%7k&>QyqIc3;wiLkiH-0Ay>r+gQhoT(8mI}Yu(I6-%7RXsu zkEvSC|7HS;^0**D=tPz*Q))RKF^}xN9KvJq`IQQzoHsb-KUfB)7Y+Q~LpeDi@vr4b zd)YBtzoTW*_Pl{J8{?K3J zj0-LH*_LnVQTak1)__WgIFvJ7u#_wJTDqW(!V>WQj)N` z73>|YuB+0GKFg0wlYSJ*+wRZ~tn?5?kMu7x3c9p=GpzP^ABAAMBJ1e&-2~zQS*&k{?X_|VZTsqZZ@p;(EbCr zC^Ng7KqozoA~=Aqo^lk!R~gjq>+hhlzK3Nd5{1P>kM}nRIXKUHvxnsjgt^}~uTzfI z-2T785`d*BhgN0l==`qkjxgm|()sxn{jn;_g60B%r~#Ylfd;LFFJ6>a0A@zkhEMf9 GQ~nnjxRQ+k literal 8528 zcmZ8{c{r5)+kUnTiIFu;42iK%B@K-=)W|ln?FS=hKq+FduH_*ZQR&r_dxTWNj)W$F-q{aNtE8T3>o(Uvz(VVd=`IU!l!x)J! zTsDPTTA&p~w1q+2i3K%Y?Apk*-j$e-v%dU#i61115+pi`)HCZF4u`8uquja@cXxLY zM11C4pyTlR;GhLfITt|$Z@FQU#KX;<+Uo|RpsDobl$DvKv4%Q(@aaZpwTv${@$B6= zSl%;eMN^YQ@gS@A3qz?=#@VS4_UcdY}fSOUUN}Vjn`!?fjZ7u|FT%)YJ;ZUgHZ_5S)qRx zz|oVe#O5MefguY=;r91Ju>1-=M7r>ks{UI)78hlR?cj|ezfIQu!pd&RlH%;oJ0`Kx3}%&{aY9t{fE)TB;b zi|UwKT`i}hii+|Xd=ua9s1%#aZraGn$z5@erGMz}=S|WO%wFEEvp2RF)X9EZSGR!b zyLlD|n~UJl!0&9X`k-Lk(T1CGJZCk!H{tY%IG%Bc#!CXU)Blent9A?>g*g`d9RGqW zDIR!+E~XKTN-?Y-Q>3od*((wyY?Ab_f6cAkU;4_?kuVoHu`v<4y|}%xoR;rlBgmIo zUz$dpOY6<|8qN3k=Bt`HXJu)ri`A`J4Vl>3ZQ0*lu8`kurV^!>8`t{Yzkfe8WZC2> z_Jl&B`@jki#2iF&ax&;?|1kvd?NS6hLGm$&iKu2MOz){A#zh#kwCEGwu_i~VaxWZ` zg8+?&_r~%U7JVcXRLDzX2E1!eQgASKO`YL&IK+Oq>r$d?;N82+X?L63SZ=mo)42j= z&G(QHhKQ3T7wW;i_deEL=}tAIJ#$SFFrm=Pm$zlqpBv;!Vp@w)c@j_x9S5T{FPjux zlR}S-jkejsp|{QmvBrnc6uM9@)&n3L~O$~df@pok^B%t1^Zl0vJZ z(V(^!@)t=RYr%PDBje+OtS)L9pe_&{;V4j;8ZT2$>Y5?`=LhL5dq+n{2M3PuFxKhq z&=Skhu`vNX98x&UEC*3!E}NE?1}2EZBy^);!bpnGh-SvT;HTESTvk%@IOnr>?W!}c z^zGZX!Gv=hfJO&0_~*=HuhAw)rC!V2{`sFjkNr~4FqX;t%&ki5APDtQsTSaQyP;jWEX}l4n&8cGg!|wJ*`AmYN>~o@gPxm_fD2Dufy?%K+ zbMAQ5Q^kI^RdXn7PlbF>`>Ll(+SG;|v7(}4fU&NN^@F+l`&XOGHsM#p1vI78XJ=hU zYcA*V{D;-@7(8F?dBnX%Y=-K>JxLMTF*4i9>Rk)Co0Vd*4^Ajr_ zdFL*gPBt>dP(PQK)Mt%Sa%wgltVNOT)!EnC|3=?cN%Kg3Pbhdc01%Y+3(fQAaGr7& zm5z~+`B>3dUj7KlZlXXETCoXgawJQBQsdW?N$!DqK$EfjC&k2gqC0+7Dv=73T&FI8 zmg@GxkZ0Bc9foD{3f<`SisCoVrc7S6foV#^c5Jcy#e+qRdNeiS0UZVIa*4St%Ka1{ z@&NNP5k%`%vg9h7XMLzbzEO)`Z@zRhDFW`?egp@rwJlj+_qVV(jWM&Rb}YM$eJ0hl zibspYgP)Xb8rDZ46o4`2x`ZKXnSf5WSL~^{W0RDF!1CK9t?zD3TqWPM5v(}Dm$@@7 z)H1&wH0GTQ1wAhul{x2;TGQNYEVH<=4X_H;uQOZr}DDLnu4yDGRbxylV z&uUo+^XF5^J=)i-_#@415&WEy%;KHOMwY?v*^i6e3{F_pe$RfFRm}8nxI&LXr9h~v zhScxv*L;&9<!!{RQ+uSLgOa@;>_3ef6w{cEO=EWh0s-K^Hp{D9V=!J9+YWl#8%_ zRLG52gWXum4gU}YYA!nHP#$*BHWT+&k)ZvkmhQGsKddMsdJz~Tx~p_Uc`{W z6@|8lQO?L^+9tVjf2q#3DCeH=-OA~33x|%Ue@1fYVZm64 zv-Uzerl3ZL61t%DYTKj5$pAmNx!-=Gqx$C7z-PeWA`Hf%zMi|MfIuK7w=lHQDZWzxqb1VF7{?SO+S~(MidwSM|A+Kufz|mo=2M> z`PRK*sPSc@1Aj_F!b?gNSZ$!J9@UK#%ctD%nG{7{CAW6>f4k$LO;+?*nEV}tn4+6B zbsngsrQ|<$eN0pNcoXG%cB&9TBSq;dQcWo|0f?%DbC!<#^*nVblgr*$NVWM*3 zf`x^bN}7vs{+!=0tw@(EGDhTAj%C9P|Czr2Tb+cghpmof(SKvhhOwOQlfx{V^mF@{ zH@rp_1!KFPfz=BTj6z>^MjpyBm;F!?x8{>)#;b?BcaQICzFDCb;zoPo*qDRC!pDyv z8x@S9%0`#CO{~5R9vshIZRY*K>(M-7Nd|e(UZJU=_9dij?l}~&E9n{3Vva~>+bc%j zSh=Heqbo5!{wM^2THTp+Ca_rL_FLQ7;9%~`A~s1~gn~k@WWgzjI6w&orPmL5ak-usb#{-LLl!9f7q(JF1D(rWqErKk5+tckZ|n93iF>;k@&-}BHNt97z&7J zUs&{E*RS1|7UKX5QV$|*gugd_g-oA+da#;hC6~Nd@k5J_)-2X5rb0f=)KypKAq)y=b&ZXN+XOxA4?ndxc;AgB zhiA&Pqy+@==N8~9Q-R~kz1PcQgq#b$9l&5tiB^*9d|gasfk{@*3BlX!6-UigEq5B9 zt7K7cr&<=84-E}{oIR_?lAu)nC=8xiGpeX z=Wkcr^6Py*133Sa&|jy9{X-@$^IYQB8y+5p?x08ywtk+T9;=X7o`!_C5~%-j+5>Vs z89&KFB&p8GTUZF_rC2?IwBb%I4qXbXoc_=e&4Yb#Ne`$st1`!IaTyXF2sJR>L+0sO zJ|?a>^wxatlN?0*lsbkS8ygE=34Y9z)-$_ORv}N{gMkJ4ySAk(Tb1il%n1Zs-1x2i zX$+uU-3reQA~{TIYHAR9UDuzQaps9PZDk0qE`P17Y;M*NiC<|;S>eCREA$yfva_*y zD#?)vsgRF$xh4F5VBlB~BjN8CEBq2B1}DMSK*K#1mp0WycTij%cbm7O<^p$2r5eK? zTHD&{OmTmh87i?WtPE$=1F@6uF)bn@cd&c3N3?p*iD;apJmQ~1^#LwWKw~O@*_Fyc z-CrnRf5o^+OZqpM4CRO*gYiI&V~LS!{?WN+%JmE95U72dfB>z|&BN;R`A% zMT0=vxV9fz47dnk*6EG_+d;tG!r#kl(XG-222Km8RE`T!vtR|h)J)CiSUYA!3k6!3 zQBP8k3h*RAJCL8WJ`kkuw(JIwC7+qy%DF{GJU57PF*UfD!QFX6w}4UqSxcUj#mBw0 zKE?csj(WJua0<-4z(vmwV^)BAEydE=f^lf75ND)kbv+P(ipjh;SCp7uj@(&VS~{j< zy}D*pOh@(f^psd0i9Zi&0fdm|-s+Q(iT&wVr9Zo&sS`G<|4Si`i#75FBZXuKlEw2T z_w}%y=jm11kcVLOAe|NR4#QKYhCQpNQI2+Y+r4)~*BDOwB4f$3zQ-S@3Yc6Y>u|7y z29YJ3g4Vw~?f(%nYn1PyW@)x;i3?H^Hzpp6)u#Gr&j0xFW|#ri{-6s|_+>HopaO&y z5cY+FEQ!eM2wqnz9O7fgRwTgvEGEIN5|joEU^pBw!Kyx&>;g`~@gG1VfWsL%AJ9Oe zBd27zV~dK^NPMhqU%rSmo4%S|@cVL0IVma0G(!K#nG@qUSe3PBYSemssl_`FFpaAe zu?LwOv&l|6TUW^h4kh^Pkmvc}?1F-VaQN4H|07u!Nc2_w&e;8l?3JYPUv@AP5{c9b zaE|3Tue6_!{L;3#Qacyx;~*S*Ke=URmQmL7K7i%H89l5P9Kr(?AJED(D;)F$EpyB0 zqN=Nn{>-3fwRi0i=0|n!+uGU&1_svG&+|EI9h$G-oB6<}9Pn*zYkhrv6`y|W3cp^B zmy^9ct9C0<`oV(-czZx4Bpu}iHFs7zeCxO(j&z#<&f)VgB&3({&7{fl1NHMKS=*FcmGPgFS$8MHC(}EYiOv8D3 zdEK~i0|ooNy}OG4i;yMfi2NBLq7Qi#&NllV88{9%;g@X_$LFcSfJd_A}=rUnnS;9!Cx+74OOS+CB_&qL4_Wy9L=&uf#X zwww3A56XSL+-@Uk);W#eqdwd_m#X^I!gQv&(D{+I=~|RV+kp(v-B}i9{#lZbU2S4uQaiW1j;P7LQEuM(dG&RDp*EXut5MhO|6KQ6 zVvR$8*tD_ycwQ4JKEK>HapvLncl&#lkiC|m#+S;UYjzKQ{o+Ww2~+vxW#kmwW?R1A zI{=oy?o4&fj}YnaY)f=hT)JA8R%M?X#Ou?4FOJ?q-&Ph`Zr)b>Ueq!53CZ=>C(MIJ z!Oq0XPejENXM9x&C;vEeh-1j<85!9Hyd9=K>F({+6gA8-dzrzy?C)(e)YZk-&hlN$c8jpj>Us4IzM{H1vX|*qTvfD?P(E@aA2eItJxYaq zdI?w@F@BUo`}eqX+xu(HWvgvVLR)xLc@5g8@gh-EgM$JF^DnX^^f7+{=wDh{ftJ)R zxW#g4E^kG81B;-5)&`d`*DiO2o&dz8Rs`5={kfMX2W(5+MpZ=lf7D_jMoqQ}U9GCI z^o2iv)B=q6E2D*6m#d zn34KsNwa2!gkV$I=g8QR?S}xw*X)+&BXs2(N@G2J%B^)BFQv)s1lz36j5j@an;&Uu z35YwK<=#|cPOG=@VKZhv;Me#tDRboxddd)|10Cz^$0sI0)8+QxLczY*lMF7_`w9VM zAAi7;=p~5(t$>5wZ*VY=3(VBi)VyHC7fN}t1b7!;re(23X9T0Z$&rUo{VlhWk`mTf znh@p>n6s_BJrsBjk5c?YyN0CL6OVd~bap7=_w+~u%5&VZzR{T`b{2Ru+Yh$}RZgh?x4js67 z@#1IwR$`=p=6!V!l{7?XyLKOv3woq+qO`Qs*@Z=pMQW$fIo|tOVj>^w@lU{mM2i9| zA}y5h247!M!A$D~O=R_R$|vRi0a4&YM~dnmchUJFTeW} zMb=b1bs7^+#QXcR#dGY{&kx;bzt(|#`=&ocg^-aq|i1_PLxmlhA1Nr)`&|l8!U^#nk35k0k@pP zr2J-SS((=;iH`U1;8+T?PArUyQO6`WW3^T;VZ>TIz<7F|&u6H2g08)9QMQ>a} z5GB58t_P|6U7frN+^wLdOye4DA(`}^@}@5C3)NU%JYX2gDB-Zp<|juX-vY;~umlD1 zv%rnk61v!IfQJGh+tzZyi=RrRZtrTu#BpRDSTX-@(YCZU_JxxB@=(LdwgO`lKH<~H zqQs3;3^(hxI&Uc-(_8&EnUI!vM3r<=Rdr!wd!7bFz8Ey7sK|PHWk9D-n}@$KhBrT! zzTY!v#oq;nnd!{@l?>y863eSJWpu}{amw`OaD=|kcir{lGE4)9^85k=kN4SJV2_uN zDZs&iFtT+E49PJZXyt?w~~b*f>c4- z$nd^)!-v_~)85qzq%5Ay@cU}YvKX>$iQrAtl~1M}{p`I&>C2ZduLm{t-*S$Q+vT$5 zc^latW9@T%I)lRmDC*zr_+K8^WI6|{lzGxHRpbBoA1@2GjGsVFRVg@`-tdn`G($3L zTQllE05^iir<@~_i-Pk`VlumQEq%kMCr&_9teSND-2Od3wbD@#bEIcxPJa~S3teg@ zH0a|`31?*fzT@Hwa)8x(6GIeU^nsN&wUCZEX`_QK#Xa%+~-G;*>jtmC&zg zUsc19!M1(o-zI(Ga*0wnVE^Kh89StFp0*Y_&j4*H-IOnTe z+BLCuKR>mf2)R%VPlqJe&BV5AhBW1F!`Gq*C!hB<1YbsyZuv7$wI>WGfxQ}Y+Vebn zxBpnMMoVMkolzC8`F_n*6(sxuI^++3&?&i0S>nJQmHzgn(doZEQ^>rQEI%h%(&fiRl}&4@Lihe&ni8cE;0%-9LgM0ba04lgQ*oB<{2@OY->Hi)eHwwY{kb z>?J3`Z*B!NOP|xT-%iJYJQMg*Xpq2IuX=2F7nC zuL;(8a{SEe0D249S3X0BT*Ue0Nz(V1$MvQoHIK)AHYHJ9oqdqm0gg&S`tV}+C^ZGmtL^WQ<`WCS|?lC-P;pQ zG`41b9vsIG-+H-jR#?^05StyffXp|@11ESiGzu zATBXyD&*(Zwm=vP`MY^}qUpf~h+S_9xE&Nty%Bjw_dLG2Se(^!;y}^{Yw*YC5PTl z7fNEleE=DeHZ*vB&?>`N`lOYwukXNO0QNzIKT99pa5FIFh+YRA0+u8k0{CKw;Hm+Z zf69(MSyc)Rf+n?$%#4hYnxk?Kal?m&ByszbaAW{Dn|m|%a@YUASXKd5XJqxml4p^wie z(DM%tivkMG!H&&is0HDtUc`*CyyqPBJg*H!o_xw-qDpFbuu&?B0Rg0f2o`{LS!wCY zY2ahRxEscn0IinF1U?T)9o!n|Uq4;+0)GtHJNPd^0??Zq8yo%S(jCu4C~1E=+Vda5 zueKIM3UgifJuq`+@>cXa8UXDFQk9qk!WZ|fkZ&mCY||?otO55Eb^%bC74u@qE6Ilc zlk@JaWtm7N8W%+1SI}h>%Rp4MK9q13Fx&x~Z*6Vu;{ByoPbCMbd5UiA`DfO_bqVq* zD>v`n$b%5fQod_W#n{afs~|7xs5`b&nO^(NSOlwdG!ZVo2+} zH3+8Bj$m0F8FNto0KVVmQEdT%j 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 index 7653fb70ba418226d2ee90b1fc736d15c404d87b..0c2466a5f0f5f9742c504ad771b96ed5198a1cd7 100644 GIT binary patch literal 8149 zcmV;`A1dI9P)+q000mGNkluAPEU1{15&B-}pud2?Pi(!JWq4okkjW*Y3V^p0}s& z+?nZ2%{iy`sU)BgSP%P-R}zx?vFxl1m& zWct!eFP*;p^2;N4=bd*(&g-+!K0Do4T4|+PXPtFw_0?CeZ@&4a-hA`Tnp~(QOO|A8 zzWL^L$RUT+;fEhy{{8;@@3p}O8`S>$@1J#jYHF%B+ibI1e);9=&p-dHC!Tnso__l2 zdh*F9Yn4@2DGUDi{r3?jwA^yb z6)UXou)_{Dai{LO>#iVLV~sUx#Er#Vp=&#~o|lym__e znrp_=_SpU3c9Ad$-+oD=x4=!Q8oXg96c%t+2uhwc&;v#_hg% z@nXp8yYIfs1YsnZ^d97Q-g&1Udg!5g^wCEXsSiK=u%3VZ`TFd$&#JR}=%I(!dh4wh zlAe0%sj`4|5GnZi=bsbW)>p$u7S_8q~Y%a4?IxUUw?gl_0?C=^U_N%RmVPU(%7r49WZ_vTGfn>*WVvrS2+7hZUwx)3QAx&7Ep%YZW4-s@dnJSxy2h#;Iq0B+l4uO_f4l9rOSyN15JHqi(10dYrzSN5zKS*Q z^3Om2q;@viXrofBf)2a|DI&wj}Z?)A{ zVi_mQ6JT#9OMr=50MxX`8XA!QMI&pr3lHP>8I;ir$9|bq zmYRm#mOR*p1{a{~2Rb!mT$B^!KZKl`;*A^!0Y%o3(q{u7xL`<)M?5(%ns%&jS zriE+e1k?a4;DQaZ9FQM&Z3@Y_9v494znqtKAAImZYM&KE+3N5_nWUmj{vf&|hcSr& zPl*cko?@uH>e5QOO9~Tw1J8SGv%~@+++bdqh4udX@2^ik{WLpzchMrXZjrPl=vBj@ zKx8x-96`8r>CzOGwKM%d9+==exP*}<;~atPgOpK#ua7?ZC})NA17Q+MNF)c+Gz^Ch z*0}fj>#vvW#6DMrkbxX9z&+rA1IjB4nu;_PQbh*Y)TG6qefHUP(n%+!u|meJnSKBP z*e)PXJ+N#}B!rVy$|&UqV_gdC3F_RWvOVUQW3qj-3bHn4(H(c(QMcZDYY8{_jHDlk ztzw~3ek0O*oDh`eyYIexS~}Mt)NJCyQAZtBD$oZUD3)!08!w)~4GZKGjm2rk_!~yGsxhSEyM}f^)UL=up zn^#|bwd6O5a-T~UfNPOGQ&{cVq5(B-a#AJ0B7Y%~=g?Tpl6GeSmqb8Bgd4h?5BSeN zv6iB;Q6^Ht4ICKCojW3+ULXyL`hm2i(IP`ch8voTz6pV(g2vvUlH&r{7PG<)i&;RH z_s~&Bv2a3#H-@`np;j?cm;0?v}S5LTxZO-Nd&AAmxuJ&+{{qG_^V`_e1a z1nZ1RFs>joVFZmf7QuDVoRA6`Yj$kgy3ZDJ8=7=wM>e6f$lky|iwIf31w?ukZgPwm zDJDKkQG_8=b-H)7;jjXo_OEV^Jn~5EOJXIFkYoR5YCGDngX!#pnZNzsB1AKhIT zi&tNLbq*8`So`g_U+zc{C+5z^6gtK0$fMEVEH2Q_SL}|?gfKZFI*6r+Wd+1Cd3SEz zIan%78l6W$u>vYf6v+`aVG%dDNQu1YnB8NKJ&F<&pxOrs7)WH9t0Lv*Qw^wz^aE_m zEFZ891vG@f*I)=kLjkfy4I+v=KgC_0i?wXDL&-$_fFNJNR;diSj%eI;#1Z6zunoxG zi#?xNbR7~dN^ywDb`j7EL6%5hIbi5Ml(1~hIY~32Kr`8O*IjcI%pHrgB}A(Q*yb;& z63tE}I!NWB)F0vOCN&2H$}SO5M1(X~iVWx|=9cS77vgjzN+949AqB&C1heGT2JGO) z4V`?^qD8sW%N>i91l1yp%Q~D;%9503Sws*?A=x01NXViDLEs7@axH|2BB6#p1SBVPBgBUCu%2S#;0f7)J`IafeB5-T@JqvB2`q);c*{>4hz24n zaf2gdYBErzA7EM+rX30bEMwjRJb_Ljm+TYBwX>(3eE^+hjN^d?J2mE^L>|Qw2nXQH z;2@ycxyYpV1S}LrN(pk2LN4kDlsYqFC50816x8O~Ru`Ug19hP5l$S)2iG8j#^DRPgc0QHuDdSx0SXEdz0yKYuoRoc z_6GM(P%?y zr4v#MtcZpHuuU@WYK9H2G`a z2iFCRi!o)aDIU;;R$<}8?H|{(wSlJdiYrUH4<)jW5{<)q{Xnmv1W)p$vt;9ROV2-$ zSu!j@n1YhZnk?94tn->1PreHe=0UZHfOsR2MK>W9;6<(=)#oGy=!TOv0aX zR&DMDWS`Jk%s-(76XTRXXOa1VE_W>8%fJB}^LnCif$f?F{C9#;aCR|sNhHVI8*aFv z_$qYBLX=m?R4O9vNESmQGr8VvTdW9?3wQvZB_R|}QGrHJ6g6^OwKkbJXYz2-7Z4Ie zd|5#lLUo~$g_LvCD^k@>mprNqftcl&uo5yvf-s8+6a}u4W1xeH17{zHYzae|F$4*- zhKCVCu1Wcvm7&m7z?ToAV&@?wbWX0`^B?g)*b)7XHD!~gF?b-ykxjSCV5~2WInRU9oBU! z$S6?O1_B|Jk;wz_-1_?7jGxF6M)QC>}%L#d) z7f5ReaD)@@6k>xpdYwruvl0f_h%C;8hV8`MhQ-g?2Vv+s-Q3~{wyF-tTk2dDX|55 zWaR5(bJ^NxB7{se4?b&LV-XT_vKEQH?eRp%)2$pdJs0tV1ez()R9K@7675|0M8{{* zl5F@%S4IZrEz)@iu_y|{DQUQgAM^GOH9{^8WrU2dmQGMYAq#wh7K)I0Xnm$6F7S;N zi^0SRGKJQ`L(&MHLAiba9ffJCT%g1RAzL`Bwl{p3_j#a^(iAb4Omxv82%>WJSrvlm zJ;=z`d~twmb2%r1>;pmduU*LnA@kWhgfdb;a2$~KjHRgx-*LwsSF{dcO%(z|IJqK9 zLN_v2@0e+-!#|T+yUq(TrK1;8;zTR;wSd-Ib%H+Jbkj}w3WOq-xS<|wVeV#hWb+8D z$v+|XIIQytDSVpD=YM=v8=j*GrE3bzMNP*mZn)XS(}eFG3957CAx#SV1q@}jGEpKc zgb-@JUGnhL1+er0f}%1t`C>*i5XUv#aK$z9@+YTtS*RblcS4l#5VS~D66U{G70RIN zUK2(>OHTx`N;8-&>U(ayC>2iqK>NG+;*0Z?r}J4Nd3H`aU!^mcb|P~ux7PBLA_#B3 z`R4o@#5p0q0`b+52T?~HaYRXD3?tF77+JP?wE>ypLZTAyNYe`peu8R|;RND&t7iv@ zv=}m>$AOKgi}Uc!ISHXG@Lzrm5?gEeii`nALhF=#POAKJ*Cuh4C@Xlt4a*dc&_cFg z!Gdz+A=fnwtV7`+{tC6A*#nC4q+Ex(Kco53Iu000kuNkl@g5Qz&+Lt`9is#s0h_ZHWne&4@?l$w&ei$pc?9f-}X)? zTd4JlJXaK=(1{Cd?iwakynp1TrVvz{Y{c0DR>iL8WdV^t%(ExjC*$Wd^!5 z6*^i~9(V>}Aq1K4WMrN>*T{1IbHU4ifnRwfA|pPNVj& z7f4ltDi2v+eWug`25cxu)-#gIeABYPk`qG^(>R)~K+lAVEV&%A_(qArl9=GO%jRbF~nXv>jPf7pb{xZw$M5f zdbRO%7Zj4@KoCV>YHLt{YT(8r5oAmM)>`RW$wV;+$FPVZ3MmE^+tONII9xi#OMk|@ z$NnnI4oo8@pcCNhnP;9^jx-~jh+~9eMshwNs6n_O67pT!k{3vHjcb&%YH&&Q=4qaV zr<`(1eo6`^pUpXZI}=0avuJpwKpx#Va%xN|}QiI4)3 znZpgYeux^MEtXh17j9H*ib-b{DlHxlLWNAi7OPNh>VeQQq8_}@0fV56Cb@uV$>qU= zTL94@j2}D*JNLL51T;ErNFJ70l{k{ctA*w)W&j7S8L0)nfr-Q+NIOoTgJ{fqML5LX zcWFxqL__6a+akFj3ak=_0Q2?=pBc>aM8Yn59q|Qwa3b!MC@#+y5Y08N&-4S3S#&`J zkmv}gE?8obWuf&1*!fBL!-0zQa0zru3>n7)B-}EjF5g9mLD$j`kjMfz4D9MUZtsN* zWXhGhu!@wPU`@BziL>$r8wY%Mq_xnGdnFovATlJHJn-bBJDDm9kO{fSf>3!3sGuNX zt+nPQLqEv*V9}yQnQ#iBgmp?xBG5Br=K#vhd4*E=C0_agLR8x*93s3zgn@0rP=;tqg^xk+x!zlA`LfnQ3yBiOMb^DHL<2%QH$_PG zeIpbz{Xm9+hGi%yL9jCeL4!MXD|@3ef^MGEx=qBl7}_-Gtf&iwTBuSrQ3a=N81YJB zzWMe>+8Q83Abn+=yHt5Xp?M1Bhddyg1BTGBMo_APk38kfE!Pc;Et2|_$kKFWkS!!& zu~!SZBi_TZYZN(Ka>@HVKVTh1ll&8F7ljjvB0wnx2KRinCjGz%7g%bo<)`P~4^Es^ z26T~uOk)xDxF9ja-K*q5D!0^x1C~C(h>Vo(@<0;dDGF?!j(VUQ7?w2LfrL90$N^k& zm3yw`&ea=2G#Y9`sY)(Pv+C83r9u^%h*6sD-Go#IyS0|zBg-;jwApx?rF;#jxS}Gp zwmeTn3M)De|79G7lpq&3P`37;en632NEivZy#bwnlz@jsc~2ST<_y*mD^t4-QUt_W zhoQ{Ch0uY`HHl>oc@UFHKhSNl>n2LbKn0DEkXl5T5}&yW1=1NzKah!F$}ng^WL-GD zYP^Jn+d>ghx!$KAup(qEAO{DmI!ww!77ZwH0}}+vWz83gadA9AZmi&hIxMD#ZV79t%ECMjjQo{p*p+RB6p>*ugp{fQ3FNx@^aIch zFy({05}8I39^8~FYfA7WoZxe})8qqYWf~!$Wtfj> zRU1Dkrj&An67vX6F(DCT9N6!qG9jr9vSGpCgPbVYOJ@231QLk_F;@FH!8~ND&>T5# zlYuY@Xk$e-vV=Svig**W81o1=Pa!_!N5UvA^#gSv54eOtvGyKWEc=usi5Rrj<#{5~KvsRi!wOU^xR(+Iu2In1vY!!=!Aqjx0s#@=impVFeyB?I1a6J@ z&_R|=1W&B_DrAN^gkjxdap)K^Pfo@%f}14LC?+|MS-wkGX!vZQY=p`p?uj0y=?6mS z0s>VShV4SK4{S$%CsS61mb~T?1uUvQ{+ev9^4oPKu3t#?)>{7Z5b-*hgJ%9h zOkseCS?40D>b+12nPft=!6gH^NhHwaJ&2HC7(B?7EHoD2#JsBX8KSN@#FW3-WdTX% zxWHe-Tx+e6tMEh)!t?{0!ITFqAWkI2+rp{I7ndx8tVgme2O!T;7esy|k!4{u@InY# zEPMKoREB(({>enJ!9tje5=Y$e(%Q1rg$(o39Z$*{N9hNw*ze>$$Q0-W9zt6vnJo5g zphCil;aYdr)9(fkt+jmhG1x~Gf4OInlg?b>M#6|B+7QJW_I-BbA0b| z2`eh^r8N@e1IXNxY$G=i&1lM5R)J2)pa3eY`-4Dm88L7|7C*R|Q6Opb16IVJRg4=J zBAU-WQy_W_r60%v+E|yWdVzk3NR7iELHW8Ae9&3vDsuC!uf_bq0c+qp4}i-GvJk8< zwAM-il9vnlxiLWlaTdC*bt5i>;_og+`cfuS88K9Eep<(OJ`=DIOac%YK8rut=2`YC zopU~Dt>v%Il`AEz=*~FdC*oRb`2tU=>zS@oJmI64fASoe-Xl)(AZ;i!udI=bBa2dj4vDrUv{3lWvd5$eL|Df@1rtB>)YC&qbI8LD*{)a!nGkR9Y4)BXR#^jASP{ygNH|NSBOwD>+8C{J zfgqFZs1;;v;GAgey@i=Ybi+YH}s zj>0hyL2Iq#fpSkjFlq3S{{;CgEA<11Z+@#n3&}Dl{GIT)=+$Vg<Iqa~*%E?UJSvK!gSQVEX$^%K0hQ*Yz$Y;?I2?YhA0fmSlI0{U- zFn8|U{LW0=S*OU)>aMuriZD+OKdd7inMh4Ppb-MF+?jejEQts~zn^5yf zWkR-Y)-?(Y6JimOr=Na$`Hv6@ov@06G>$?--iSTepn9bcT#U;;n~L}5oE7v0@6!+X zY#>gj)jULHAoJM*kXdHLdx-Kx6M=~2vj-2Vjez8V&?{w7nzxX3%JO|9jV28Y8w7CT z+87oKsU3-8cQH9+fiIOUB8)ggR9G=@f!tScvRB=>mLIz6ceDEeq0tYxMv=wmoO4e8 zOJ2Uf<4*E`-=d%fWTFf130iCUO~$w`S476Q!(<>eQjOk7TUL+-9@e39O<{@uZMWT) z|4IWHd~mJXJaJ%x5>1o^@5P-ks9HRP5RpeXLUTS~L3RlzGNrMFhB?+L^%)|(xSLh} zx$V;rG>#KaIH9<~iV*t#jn%QxVtmO|{Xl-?d|(1(J#WB<#Hq}18sVbFULk-QPyf{q zEM^fRX)V0`bnv!FENnjt`@_u_7d zHy-o@ztvGZ+_n9iBbzU-34$Y4HA-hAB~5^zeyix-S_GUABpZ3W<<8X`7ZHP9&BSMY zpIe|p=(>44K_Zmhfr0?PC_<8faZ!O{_HeJ@cYIKDDgA&TmZdWbGSEp)RMb3cAR|_( va}zfd{|f*B|NmZr%8CF000v1!K~w_(1mR#ZJPLe?00000NkvXXu0mjf40Q!u literal 8341 zcmW-ndpy(c`^U*?YO%DmBsnZi?W^S@EiH$!G_|sdn)4JPr^#u`nbBlvF(Si+K7=Ba zn$yy%rKP1M=fsqplH`zn_viQiXCB7h+kM~H>w3Ok*RDDow_CqfYptA|++mqlC zCMPFv1z7`rGWWe04j$w$owUQtRlm{xDkrBaN3^v*?VAwp(i7VEpDh)+qX#!bHO{zZt5`m>%<_2UvZ_0}c{eBE1`li6V-Wr9ZEnKyee?UF!ET2h zp_%=1zj`iC)=LLG|E?~y9Auq>6Y6?!2M%22`QmguJUkAv3`DhP5l(zD&yeY*Eo`bj z#g$#GcV;82CkFca|Ce*r(Q$UMzu%1{dGqGYXKYYoFN3ORZAIrc242SL2x(U$BF37k z(W0j6<>o>p5l-;SGl3cq-|Zi~GWV@}_bbe6uLm@d|B!?>SXsS+cpuNFtMm)?CLL0dI`seU%p#7MA7R z6N1GZJSZ^@v?yF|_TZHI6H5VRU&kg~!W@Yy?9dhh<%&(d6${OD{4ns0$omiZh$_l27h}B%(!N10o|M zH|d~7yuz4YJ)NDTmcbn4*Y3(Qbgn{S*2xtO0j8;1NPA7|`});rl)llc*o*kKux?T3KUtZQp)(Dm*ntO^`%kfs#D>$z5 z_Y2)!TL}MhisKDaTwY$*U3WVN#Uzk_MjsN=&?5hO=lrco;^M4iDvGIJ`miUUp*Il! zVszA7TSy?kpO{~-^KE`9ny)4ZG1USJMP#EzYqDYZ&)CCnEq)IrfxQo$k;CXx_mOTQ ziLm5}i3u#ro8kobj*MKGnyN-IJO6o6tIeQtWfc_>=G#aTP;Dh$FKS;e#IQyXjK@t) zysUS%=q-$^BUsWYe400f$%7O2795wD_74o0kuI6sT3H_adz@`chHDTus9BTY64S_t zh+`7hDko5$64TxW0{M0AJ@iomxgFD|YYa)Ou+Sx8S^3AyqkQ`i7Ka@j_mM7{7gRg# zMnZNuQ#fQecx7i!cYxU;vEY`5o0KHEvhw=@6;V|6^1O*wMmy%(NUm&gPxJ53H&0l! z1^;ELxJl)YW_4m&O4cv}*|B?90qsoR?Cflq`Q&^wg|kgt`}^c%r)&-_3h3o{)A{Zv z$|d>vTczQSjwDG~QYwo1s`h=jo1+VGB*0v_ zaDl=Bi`=*K-8Cx0(QyRpgBY8c$z1LoT>TK#n9jpM&*5~E&<^k8&k@q|rWy6VkjXiQr`dO|=+Q2m7|pzTmiJ7a@%!@`e*K4%@&KzZ@mQ>z%96 zN5yll(yDI%GCxq3t+_8`qoD^1j+2w4xPzZQed_Jq&0Iqr#TpYeb`jZBgkK*10}$Yq zWEou=ej_J-3Vi(0(NSgfM}9-{(LfCrqWM@Bf&A=}x^hx2+K(%{YyQF#8BpcqVx02= zC7x5X9-=o(C-y>ZX0BMn;^}#vhCH=h^q=EhA3kuVmuuYld14tEzTx)X+@6L>fk1G) zyzVTTAt(lQf?AvC04H!|Y~&v%SWG7GZ8*PoQj<_zu}kl~MWKhgJ08NI=9YoG_MP#F z0Xv({OB+EPP*@Y;wx4t=?U(?=M#@*DmHBo0%z<($^D`ud0_CUCXpxb!Wefbz?>%+p zCkplB!J28?Rd(Z}@g~-HK?$jOR5?{oXyDIN#<-So7CP4xQYR-TgBmBAf+(EKoaX60 zn(47E)5{hRwtt=z#~bWESL(ly43|#qyJKiS;fb;Ou@V1m-u#fcxt3Zgk$uN6Iy^iD zpVs#Udt4gcr)mm5zUG3oWwpLP$fjLARiF!bXX*_)D`lo!7m^m9SH?qyp5Wqcb^6e> z4VE`N;h}cXJ@b6{?y1q96i%7n+QE@w)$?%DJEy6+4DM!b~#>Ralu+MpA z!yeWNGMUVqqQRgtc{4ciLd<&=+immm{niKu=px)sA0iu;X)L7GqNNk_fCLVg$n%j* z{TaDYm9ajI_BZ6zCL;4y@AN`3dk%M^%nQY; zdYwKumw!r5?7T^=kpijg4|3t8goHnFBajnyXK=wd9Tn@Mi6*q@v~(UPPEc`lJito& z7G#zW>59Uw?!g5F2Fho0W%JR8P|Eg3Q`Q{smHk9EmUXdSDpyg&U z<``GTzaaf@q zT4l5}ym)1*Y3k4NLSsV%kcNeo#Y;dLMEHzEXzPeGr(w#5T9U81q5q~nwywm3& z)<{o)vRp0t$yqcz|g_978ha~2g`LzsQ=RqF7pNwc*g%@0;a5n8X z%O{Z}tpIiyRFo*Rr0e%+jz=xJ1TE4eByf~N)kqs_<1Snff_}nuZ;9ofMVmz%L2cv) zO*=sqI9H7|OMVTf>S1qPXgUOgVKT`#hx#_3GCzv%9KaQcd?llSZ&dBBmrK zEUTmw{{e$CA|b$4N;pMU+LohViw+JBF644QOaM|*PHGE%Y|DyQ>z#}!mr!b?M-Bj< zU?ahfjbQPRkbpeH5a_-`S{d5HVQh7muLFZRz`qsGN*Xs|MZHTY#71+hF7hu1|m#l6dH{5t%AEQWGA5f%eQ?9>RRQm-W z-QGd~A9OZS7u~0tEPwJ-cz@FWUucmpg7KS$WtE`p*|uvzJr6K*L2Hi76^o1c<5w)~{GW=w$Z)X7nT06kWW?6C zQipG7(NgpElfAyC@hV&yg+r2@X5Wc;@<+6%C4dVH(#VPc0^ttcm0wFH_9%fDV@uHnSx5~DBsXW~T_6-}9hl%jJ91OJUfx5DSn-pkOW%rtM2G{6ZL3c5%`A=*d27x3ds?B`+wwB0>)$TB1 z>Q8l~Z`O74{GZ4Ke(b&1%=%B7FI+&8w|x!yTZG-sSN!olykGUpc zJ7t5E5v(=rEXUC?JUCeWwH4V!_bYHVg-{7h6WY{Y7`NI((xyQ=I?#?nqlQuwAJAR`UrM)R=7PuWtZp&P{-l>w+jj~gd-LGThvlv|9cyH1Y>XH zW}Ji4e7iU6q>%R3&52ax4Xg>E4lFC3_kwmCe3CX#x$^B}azD4L{Tvpg7Ml71FbLMa(6Kk#c8};86Bqhg7q!+^5x4#3s{zs-WPxz+Cu*21+~yN%(d7S z^?#HbhnH79F_}ms@ugi%{aDo%wCKmc02fKzzkh!&d7?NB5=KR zIc+Esq^biebOo}ux!WI5rvu_UR8T|=af`(1M4A@>VydrK>Qxrz$R1M>edUF*dB~S` z+hgFu*$`~7q6%(hiG3gxz$>i;GTGXCmRW*Su5j>SUmgl?#%rUXE}tUv7w=f zHwT8~pRJ`sY~(!klXYLltu9`8y>I-#3}qXRQN8}64EDijLGKgGKZ$=fMY(9F+mZ3%vPR+ip~u`gc$;|>+0n8(X6MMkE& zys8ZVZL(bQ@_b@>X}rF#AxQ#`W?0yriKUJXr7P>P{vqE`rF{#7ao3|0VAe&TFmK-6 zI3&+*K#PJJmuH4;-hB=GH2G^_K*uE3EFVMzKR$oPvyox0nbn!{_0AcWS6ArTLXX(R z9rvOf07fgbL*BjJf7kQN*qHLb6Dk60Xsi6ut{`=noX#VOM1o}<5l$7jgSur7MG`ZIl=X{vhH|9Ft z-IrRyj@%S84WnhtuKtiTm{20=H|uJbHzCEW$yk$F*>GhGxJ?2JzL;unLKE!&08{@ zkdu?+m$xRjuW>N;pw9KZmUd}-rO`7(@_LGT)`(-0zW)BwDyMY?kXP8HL$6EoI>$UQ zt=S270?Z?sxDe>s%bkUa)($kHws2-ve%mqj{(`v>?6ceM()kL0JXua8U$x`o%Q@WC zS4sK(%2a`#`C!FSyEv8o+X1m_rp!gt>8j_my;ZLi#{lzbHP_Z=UDEaF>C-!pjO`7c z1MA=ZZ^t%X@iKrcvnZHivE=Lbsi`u*C9p`+a0*AMqD*4sga3_uca^7ZXK;2Hgg*ya zH_MEE<6(*dOwmr1p=74p;eOZaqTipN5Xesf=}u1mPdvBvpqF`pQ;w#hwWDLaswEXM z_TxvWgoQ^NOzYi`C;k*<^D``a?VtHQgDu?m?PID#sGkDW?AseKH)gaII*zH*B3_@{pWqyM(JW;&DoVmG!$u91p> zKc>gTtj7&a=%w{e{_=Xz>VBlL7j#w(B4Ea|*UZ!fWE}6i)oiteA8qB0K1__xgYX@po>dVv7j-5ODAo#+2eD?$hoTwO~^Yr2utZRqkE8%7YMh5;dMqp+%WuYnbkZ zO@v#=%i;SK4noyVRyidtTo2qhxUl@kA~u1Fn7SUfV&Hr<(|A`J57i%(15o zu$Q6syejG2xA`W&yhPpj@q|>IINVKUvG@h#FhFUCtk2jS%iVTF<%s?5rJAU_-Tu=P zJ3Kdi+9pg~vU0dE*c>x~RhudD(^|9MNHB+c4js=hbJTgAGT8g`c9t0cA(Jd();i|s zu6t_nDu7t}lkXj8E9$(fiE4Ft+U4u&=2ooKLGWDX8LzPS6$YAOq}-9V<-+K{B|c}O ztUi#j#$>o&76hIgngaOrV8NT`$o6)vyLF$kyTbp(;4sjC5YVEc@o4^YI~rl;M17Ld zMTHQ;CA-RY1$)M&GY5t-{ln!y#av?*9dp zC*KUTGDoyS2cEwH_3Zv8tqkSrGC!@9PnCve#?9WEdDgvc2n>N5I>6=PA1hcVe%R`+ z{-SLThxQtyAJ+>!?U-VnvK0UMsz(QQP3J!X%)>5U-7HL;ULuSXmF=L9IJ6OOwnoEi zYf`?yqmpW33t;zg1}S}`qWrxE`;jxzs#g*ME779Zd6&w5n``xZ$sJ2*J*40e7e1`1>0vZ?z#wo^8-a zV=PTcg0w9ICi>|af=;Wl{-EoJ4Fa;gV%5h4NadsQMKymjRPOBZ-^^WqQ70E$i`5^fiZm$*c*jka{==FKv*`4*$`;p`)C@BByOs{GMmTMv@5*d>6Bu9J<19C;l9!0 zZkc0 zk;r5pRDq~`^a4&ta7VtS#;J0x`bTvhPJAvGxSstdIWSjP!tly$We>-fv z{d3ED{OhgM;Gf|Wbf}=Utb>ei(9?jK=9P5;!=A46LBk=U*dpOIKyeo9?PZ>8fEwaj zV)++rb$^h-wjvjmBzf}(!0SD*;K&YW(hiA}99p*kA2By~X^2`9)6_o&f`mEk?2Vh- z#;fucy^4}O9k{Z#A8EP)@~`2$alpjo8EURG8#qFSA3S(4>!@3k^Tc60US++^XYTS zpDq{>AN0kmv{svZ@Wt$JySL@?#*c(@OiV?AEyT>UG(>|;s5IKq;j%MP_fd8F4jo(Q zdQ-KngBhvCf?)?TJU761G_wk_!>2Ceu)wsl%lAu@aYwPI-8E{iPu z(b18~KZP#va#GQGSqmL|2?BXI;!RdO0HDMfH?-#2*@|Q;Oc7{D6yIy4@v{*y2JLGa zHyb^4ukqkVr#z2JN(BQwh|<~Wk7Lgfh%Hwy*a%80c6F@T)P6EB($n#gmT!{Nr^$xu z3B`M2T3=Texyni4?Ej>nVd?O72Rdvg5f2>D#JYD%l@?JmR?=`GP1oGBcLq0&RU;6U zd-X023Kh`Xe!fI>1V?Zs&kGL|uNZi=$VFLD}5&2$&dre6BdwfMS9ewQUJJ-5=EWt$fxEu?|et zl60-qleSthEa^X<)!ut~KJ@bC^t09ztiuK%ReyByf8A*m$wM%+7?zjz9AWztA32jD zi9=w;6j_z$QiurQUcyt)2zm9SwxZgcVMVtC<^5sZL2B(Q^wt*+Pb=bOrN5D zL)@ZMNKiV_^J|~$TAR1ltry%MoUTK!TRc5H3__Xg zep{;gL6#)IOgOSPf=;`PkXr?&ted%8JolfoX>m2au^~;h$s3N%+5r=mT^DS1|84(v zOIg!=^tOE0?%WCBq(MqIbO^+ymP_LXVI3dUmOSS5AZuRB?f+x5QfP@ae7YTjfL7Pk z+_0QEq>|KD6BR#^(w?%007+;~oLSm~)7^k7{TTdbICcBbT*AR!t9?(Y2}47pW)f2n zM(g?%KbX;g`?q#?Z))45cXMH3;W~>oV-ncd`{!F_&FW05Wjtdx56m{;If4uKxrtR* zU!MQ5G(Q1sYmZ6==pW19>%_XJ<^Q&M#(&X=!f)_O`+Cs!ozF*L7Ua(A~m-m gqoPf2!SJgp`MGQ6C#Uy)11~2>BpkP`#(O6IA6=>PrT_o{ From 9ccd1d5718db06928014108dff59018c27926cc3 Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Tue, 22 Sep 2026 20:44:39 +0900 Subject: [PATCH 32/44] =?UTF-8?q?feat:=20=E6=96=B0=E3=81=97=E3=81=84?= =?UTF-8?q?=E3=83=AC=E3=82=B7=E3=83=94=E3=82=BF=E3=82=A4=E3=83=97=E3=82=92?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0=20-=20Resource=20Extracting=20/=20=E8=B3=87?= =?UTF-8?q?=E6=BA=90=E6=8E=A1=E9=9B=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/integration/jei/RagiumJeiPlugin.kt | 7 ++ .../integration/jei/RagiumJeiRecipeTypes.kt | 4 + .../RTResourceExtractingRecipeCategory.kt | 71 ++++++++++++++++++ .../data/lang/RagiumEnglishLangProvider.kt | 4 + .../data/lang/RagiumJapaneseLangProvider.kt | 4 + .../recipe/RagiumElectronicsRecipeProvider.kt | 50 +++++++++++++ .../recipe/RagiumRecipePriorityProvider.kt | 8 +- .../resources/assets/ragium/lang/en_us.json | 10 ++- .../resources/assets/ragium/lang/ja_jp.json | 10 ++- .../data/neoforge/recipe_priorities.json | 5 +- .../ragium/ragium/ore_slurry_data/copper.json | 2 +- .../ragium/ragium/ore_slurry_data/gold.json | 2 +- .../ragium/ragium/ore_slurry_data/iron.json | 2 +- .../ore_slurry_data/netherite_scrap.json | 2 +- .../crude_oil_at_soul_sand_valley.json | 9 +++ .../resource/extracting/lava_at_nether.json | 9 +++ .../resource/extracting/water_at_ocean.json | 9 +++ .../resource/extracting/water_at_river.json | 9 +++ .../extracting/water_at_wet_biomes.json | 9 +++ .../ingredient/HTBiomeConditionBuilder.kt | 50 +++++++++++++ .../kotlin/hiiragi283/lib/item/ItemStacks.kt | 6 ++ .../lib/recipe/ingredient/HTBiomeCondition.kt | 72 ++++++++++++++++++ .../lib/recipe/ingredient/HTStackPreview.kt | 2 +- .../lib/recipe/result/HTItemResult.kt | 2 +- .../hiiragi283/lib/resource/Identifiers.kt | 29 ++++++- .../lib/text/HTCommonTranslation.kt | 2 + .../hiiragi283/ragium/api/RagiumConstants.kt | 2 + .../RTResourceExtractingRecipeBuilder.kt | 52 +++++++++++++ .../recipe/builder/RagiumRecipeBuilders.kt | 11 +++ .../api/recipe/RTResourceExtractingRecipe.kt | 75 +++++++++++++++++++ .../ragium/api/recipe/RagiumRecipeLookups.kt | 2 + .../api/recipe/RagiumRecipeSerializers.kt | 3 + .../ragium/api/recipe/RagiumRecipeTypes.kt | 2 + 33 files changed, 516 insertions(+), 20 deletions(-) create mode 100644 src/client/kotlin/hiiragi283/ragium/client/integration/jei/category/RTResourceExtractingRecipeCategory.kt create mode 100644 src/generated/resources/data/ragium/recipe/resource/extracting/crude_oil_at_soul_sand_valley.json create mode 100644 src/generated/resources/data/ragium/recipe/resource/extracting/lava_at_nether.json create mode 100644 src/generated/resources/data/ragium/recipe/resource/extracting/water_at_ocean.json create mode 100644 src/generated/resources/data/ragium/recipe/resource/extracting/water_at_river.json create mode 100644 src/generated/resources/data/ragium/recipe/resource/extracting/water_at_wet_biomes.json create mode 100644 src/lib/kotlin/hiiragi283/lib/data/recipe/ingredient/HTBiomeConditionBuilder.kt create mode 100644 src/lib/kotlin/hiiragi283/lib/recipe/ingredient/HTBiomeCondition.kt create mode 100644 src/lib/kotlin/hiiragi283/ragium/api/data/recipe/builder/RTResourceExtractingRecipeBuilder.kt create mode 100644 src/lib/kotlin/hiiragi283/ragium/api/recipe/RTResourceExtractingRecipe.kt diff --git a/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiPlugin.kt b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiPlugin.kt index 5e820414b9..229385d130 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiPlugin.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiPlugin.kt @@ -26,6 +26,7 @@ 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 mezz.jei.api.JeiPlugin @@ -138,6 +139,7 @@ class RagiumJeiPlugin : HTJeiPlugin(RagiumAPI.MOD_ID) { HTItemAndFluidToFluidRecipeCategory(guiHelper, RagiumJeiRecipeTypes.BREWING), HTItemToDoubleItemRecipeCategory(guiHelper, RagiumJeiRecipeTypes.PLANTING), // Electronics + RTResourceExtractingRecipeCategory(guiHelper), // Arcane RTEnchantingRecipeCategory(guiHelper) ) @@ -170,6 +172,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) 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 38055704b7..e27fd82fb2 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiRecipeTypes.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiRecipeTypes.kt @@ -12,6 +12,7 @@ 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 @@ -89,6 +90,9 @@ data object RagiumJeiRecipeTypes { HTJeiRecipeType(RagiumRecipeTypes.PLANTING, RagiumBlocks.PLANTER) // Electronics + @JvmField + val RESOURCE_EXTRACTING: HTHolderJeiRecipeType = + HTJeiRecipeType(RagiumRecipeTypes.RESOURCE_EXTRACTING, RagiumBlocks.MACHINE_CASING) // Arcane @JvmField 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..aef9760569 --- /dev/null +++ b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/category/RTResourceExtractingRecipeCategory.kt @@ -0,0 +1,71 @@ +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 + recipe.result.let { + builder + .addOutputSlot(getPosition(3), getPosition(0)) + .add(it) + .setSlotBackground(HTBackgroundType.OUTPUT, it.amount) + } + } + + override fun setupRecipeExtras( + builder: IRecipeExtrasBuilder, + recipe: RTResourceExtractingRecipe, + focuses: IFocusGroup + ) { + builder.addRecipeArrow(recipe).setPosition(getPosition(1.25), getPosition(0)) + } +} diff --git a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt index 610f253363..d3c9e57629 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt @@ -169,6 +169,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 @@ -190,6 +192,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 b435aee014..fbd0cf8a09 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt @@ -165,6 +165,8 @@ class RagiumJapaneseLangProvider(output: PackOutput) : add(RagiumRecipeTypes.BREWING, "醸造") add(RagiumRecipeTypes.PLANTING, "栽培") + add(RagiumRecipeTypes.RESOURCE_EXTRACTING, "資源採集") + add(RagiumRecipeTypes.ENCHANTING, "エンチャント") // Text - Lib @@ -186,6 +188,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/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/RagiumRecipePriorityProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumRecipePriorityProvider.kt index 7625dd8a19..ee5e3c2a76 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumRecipePriorityProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumRecipePriorityProvider.kt @@ -10,6 +10,12 @@ 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.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/generated/resources/assets/ragium/lang/en_us.json b/src/generated/resources/assets/ragium/lang/en_us.json index b5c1f53085..4128452ef3 100644 --- a/src/generated/resources/assets/ragium/lang/en_us.json +++ b/src/generated/resources/assets/ragium/lang/en_us.json @@ -128,6 +128,7 @@ "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", @@ -290,10 +291,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", - "ore_slurry_data.ragium.netherite_scrap": "Ancient Debris 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", @@ -312,6 +313,7 @@ "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", diff --git a/src/generated/resources/assets/ragium/lang/ja_jp.json b/src/generated/resources/assets/ragium/lang/ja_jp.json index daf2e3024d..58d29fc8d5 100644 --- a/src/generated/resources/assets/ragium/lang/ja_jp.json +++ b/src/generated/resources/assets/ragium/lang/ja_jp.json @@ -128,6 +128,7 @@ "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", @@ -290,10 +291,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": "鉄の鉱石泥", - "ore_slurry_data.ragium.netherite_scrap": "古代の鉱石泥", + "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": "化学洗浄", @@ -312,6 +313,7 @@ "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": "芳香族化合物", diff --git a/src/generated/resources/data/neoforge/recipe_priorities.json b/src/generated/resources/data/neoforge/recipe_priorities.json index 37b1caf2ce..c08aebb89e 100644 --- a/src/generated/resources/data/neoforge/recipe_priorities.json +++ b/src/generated/resources/data/neoforge/recipe_priorities.json @@ -1,5 +1,8 @@ { "entries": { - "ragium:melting/molten_glass_from_panes": 1 + "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/ragium/ore_slurry_data/copper.json b/src/generated/resources/data/ragium/ragium/ore_slurry_data/copper.json index e2df3b5abc..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 @@ -12,6 +12,6 @@ } }, "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 54afb05178..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 @@ -12,6 +12,6 @@ } }, "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 49d74bcfff..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 @@ -12,6 +12,6 @@ } }, "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 index b9c45b152b..d656b3144e 100644 --- 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 @@ -5,6 +5,6 @@ "id": "minecraft:netherite_scrap" }, "title": { - "translate": "ore_slurry_data.ragium.netherite_scrap" + "translate": "ragium.ore_slurry_data.ragium.netherite_scrap" } } \ 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/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/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/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/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/result/HTItemResult.kt b/src/lib/kotlin/hiiragi283/lib/recipe/result/HTItemResult.kt index 9edf85abfa..5634aa29c1 100644 --- a/src/lib/kotlin/hiiragi283/lib/recipe/result/HTItemResult.kt +++ b/src/lib/kotlin/hiiragi283/lib/recipe/result/HTItemResult.kt @@ -236,7 +236,7 @@ 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() } 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/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/ragium/api/RagiumConstants.kt b/src/lib/kotlin/hiiragi283/ragium/api/RagiumConstants.kt index 315b9e08e3..2016b67c66 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/RagiumConstants.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/RagiumConstants.kt @@ -71,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/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 addd618269..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 @@ -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/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 de8ac85d47..ae8e51d504 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeLookups.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeLookups.kt @@ -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 From d04b3ecc7d9d965ecbffa38ee0bfa12906bfd879 Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Tue, 22 Sep 2026 21:12:41 +0900 Subject: [PATCH 33/44] =?UTF-8?q?refactor:=20=E4=BB=8A=E5=BE=8C=E4=BD=BF?= =?UTF-8?q?=E3=82=8F=E3=81=AA=E3=81=95=E3=81=9D=E3=81=86=E3=81=AA=E3=82=AF?= =?UTF-8?q?=E3=83=A9=E3=82=B9=E3=82=92=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hiiragi283/ragium/client/RagiumClient.kt | 4 +- .../advancement/RagiumAdvancementProvider.kt | 5 +- .../data/loot/RagiumBlockLootTableProvider.kt | 6 +- .../lib/data/tag/HTBlockItemTagBuilder.kt | 10 +- .../lib/data/tag/HTItemTagsProvider.kt | 4 +- .../lib/registry/HTDeferredBlockAndItem.kt | 13 +- .../lib/resource/HTBlockItemWithKey.kt | 27 ---- .../api/data/oreSlurry/RagiumOreSlurryData.kt | 12 +- .../ragium/api/material/HTMaterialAccess.kt | 27 ---- .../ragium/api/material/HTMaterialContents.kt | 80 ---------- .../common/material/HTMaterialAccessImpl.kt | 141 ------------------ .../common/material/HTMaterialContentsImpl.kt | 14 -- ...gi283.ragium.api.material.HTMaterialAccess | 1 - 13 files changed, 29 insertions(+), 315 deletions(-) delete mode 100644 src/lib/kotlin/hiiragi283/lib/resource/HTBlockItemWithKey.kt delete mode 100644 src/lib/kotlin/hiiragi283/ragium/api/material/HTMaterialAccess.kt delete mode 100644 src/lib/kotlin/hiiragi283/ragium/api/material/HTMaterialContents.kt delete mode 100644 src/main/kotlin/hiiragi283/ragium/common/material/HTMaterialAccessImpl.kt delete mode 100644 src/main/kotlin/hiiragi283/ragium/common/material/HTMaterialContentsImpl.kt delete mode 100644 src/main/resources/META-INF/services/hiiragi283.ragium.api.material.HTMaterialAccess diff --git a/src/client/kotlin/hiiragi283/ragium/client/RagiumClient.kt b/src/client/kotlin/hiiragi283/ragium/client/RagiumClient.kt index aa4a17b70f..5f07de6143 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/RagiumClient.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/RagiumClient.kt @@ -175,8 +175,8 @@ data object RagiumClient : HTClientMod() { colorTint(Color(0x003366)) } register.register(RagiumFluids.ALUMINA_SOLUTION) { - dull() - colorTint(Color(0xcc9999)) + transparent() + colorTint(Color(0xffcccc)) } register.register(RagiumFluids.MOLTEN_ALUMINUM) { molten() diff --git a/src/data/kotlin/hiiragi283/ragium/data/advancement/RagiumAdvancementProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/advancement/RagiumAdvancementProvider.kt index 66074ec629..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 @@ -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/loot/RagiumBlockLootTableProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/loot/RagiumBlockLootTableProvider.kt index 77c30b71e9..d91f0f42ba 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/loot/RagiumBlockLootTableProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/loot/RagiumBlockLootTableProvider.kt @@ -2,16 +2,16 @@ package hiiragi283.ragium.data.loot import hiiragi283.lib.data.loot.HTBlockLootTableProvider 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.core.component.DataComponents -import net.minecraft.world.level.ItemLike import net.minecraft.world.level.block.Block import net.minecraft.world.level.storage.loot.LootPool import net.minecraft.world.level.storage.loot.LootTable @@ -48,7 +48,7 @@ class RagiumBlockLootTableProvider(registries: HolderLookup.Provider) : private fun registerOres(material: RagiumMaterial, rawPart: HTItemPart, countProvider: NumberProvider? = null) { for (part: HTOreBlockPart in HTOreBlockPart.entries) { val block: HTSimpleDeferredBlockAndItem = RagiumBlocks.MATERIAL_ORES[part, material] ?: continue - val drop: ItemLike = HTMaterialAccess.INSTANCE.getMaterialItem(rawPart, 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) diff --git a/src/lib/kotlin/hiiragi283/lib/data/tag/HTBlockItemTagBuilder.kt b/src/lib/kotlin/hiiragi283/lib/data/tag/HTBlockItemTagBuilder.kt index 7803d2ec66..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.blockItemKeyOrThrow, 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 e7eb412d69..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.resource.HTSimpleBlockItemWithKey +import hiiragi283.lib.registry.HTSimpleDeferredBlockAndItem import hiiragi283.lib.tag.HTMaterialLike import hiiragi283.lib.tag.HTTagPrefix import net.minecraft.core.HolderLookup @@ -45,7 +45,7 @@ abstract class HTItemTagsProvider : HTTagsProvider { * @since 26.1.7 */ protected fun HTTagBuilder.add( - blockItem: HTSimpleBlockItemWithKey, + blockItem: HTSimpleDeferredBlockAndItem, type: HTTagDependType = HTTagDependType.REQUIRED ): HTTagBuilder = this.add(blockItem.item, type) } diff --git a/src/lib/kotlin/hiiragi283/lib/registry/HTDeferredBlockAndItem.kt b/src/lib/kotlin/hiiragi283/lib/registry/HTDeferredBlockAndItem.kt index 85df80b0f7..0ad706e5ad 100644 --- a/src/lib/kotlin/hiiragi283/lib/registry/HTDeferredBlockAndItem.kt +++ b/src/lib/kotlin/hiiragi283/lib/registry/HTDeferredBlockAndItem.kt @@ -2,7 +2,6 @@ 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 @@ -36,10 +35,9 @@ typealias HTBasicDeferredBlockAndItem = HTDeferredBlockAndItem( - override val block: HTDeferredBlock, - override val item: HTDeferredItem -) : HTBlockItemWithKey, - HTValueWithKey by block, + val block: HTDeferredBlock, + val item: HTDeferredItem +) : HTValueWithKey by block, HTHasTranslationKey by item, HTHasText by item, ItemLike by item, @@ -51,6 +49,11 @@ data class HTDeferredBlockAndItem( constructor(id: Identifier) : this(HTDeferredBlock(id), HTDeferredItem(id)) + /** + * @since 26.1.7 + */ + val blockItemKey = BlockItemKey(block.key, item.key) + /** * @since 26.1.7 */ 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 b4527a59d5..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 blockItemKeyOrNull: BlockItemKey? get() = block.keyOrNull?.let { blockKey: ResourceKey -> - item.keyOrNull?.let { itemKey: ResourceKey -> BlockItemKey(blockKey, itemKey) } - } - val blockItemKeyOrThrow: BlockItemKey get() = BlockItemKey(block.keyOrThrow, item.keyOrThrow) -} 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 f09dad3384..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,13 +1,13 @@ 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.HolderGetter import net.minecraft.core.registries.Registries @@ -56,10 +56,12 @@ data object RagiumOreSlurryData { count: Int = 1 ) { val tagEntry = HTItemResult.TagEntry(getter.getOrThrow(part.tagPrefix.itemTagKey(material))) - val entry: HTItemResult.Entry = HTMaterialAccess.INSTANCE.getMaterialItem(part, material) - ?.item - ?.let { HTItemResult.WithFallbackEntry(tagEntry, HTItemResult.SimpleEntry(it)) } - ?: tagEntry + val fallback = HTSimpleDeferredItem(RagiumAPI.id(part.createName(material))) + val entry: HTItemResult.Entry = if (fallback.isBound) { + HTItemResult.WithFallbackEntry(tagEntry, HTItemResult.SimpleEntry(fallback)) + } else { + tagEntry + } register( key, color, 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/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/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 From 065bd39a56695c7d5f9973a77943a1df851ff875 Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Tue, 22 Sep 2026 21:20:19 +0900 Subject: [PATCH 34/44] =?UTF-8?q?refactor:=20=E5=AE=89=E5=85=A8=E3=81=AA?= =?UTF-8?q?=E5=88=A4=E5=AE=9A=E3=83=A1=E3=82=BD=E3=83=83=E3=83=89=E3=82=92?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ragium/client/event/RagiumClientEventHandler.kt | 2 +- src/lib/kotlin/hiiragi283/lib/recipe/HTRecipeHolder.kt | 6 +++++- src/lib/kotlin/hiiragi283/lib/registry/HTDeferredHolder.kt | 6 ++++++ src/lib/kotlin/hiiragi283/lib/registry/HTFluidContent.kt | 6 ++++++ .../ragium/common/recipe/RTPotionBottleDrainingRecipe.kt | 2 +- .../ragium/common/recipe/RTPotionBottleFillingRecipe.kt | 2 +- 6 files changed, 20 insertions(+), 4 deletions(-) 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/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/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/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/main/kotlin/hiiragi283/ragium/common/recipe/RTPotionBottleDrainingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/RTPotionBottleDrainingRecipe.kt index 2561ee1b7f..12977f8cb0 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/recipe/RTPotionBottleDrainingRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/RTPotionBottleDrainingRecipe.kt @@ -18,7 +18,7 @@ data class RTPotionBottleDrainingRecipe(val bottleType: HTBottleType, override v constructor(bottleType: HTBottleType) : this(bottleType, HTProgressData.time(60)) 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(), diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/RTPotionBottleFillingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/RTPotionBottleFillingRecipe.kt index b1ecc5d87f..aefca36d67 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/recipe/RTPotionBottleFillingRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/RTPotionBottleFillingRecipe.kt @@ -18,7 +18,7 @@ data class RTPotionBottleFillingRecipe(val bottleType: HTBottleType, override va constructor(bottleType: HTBottleType) : this(bottleType, HTProgressData.time(60)) 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 } From 556d7f0b764be7a21202d1c76c8c9a5c1e249aff Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Tue, 22 Sep 2026 21:40:05 +0900 Subject: [PATCH 35/44] =?UTF-8?q?feat:=20Alumina=20Dust=20=E3=82=92?= =?UTF-8?q?=E5=86=8D=E3=81=B3=E8=BF=BD=E5=8A=A0=20feat!:=20Molten=20Alumin?= =?UTF-8?q?um=20=E3=82=92=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hiiragi283/ragium/client/RagiumClient.kt | 4 -- .../data/lang/RagiumEnglishLangProvider.kt | 1 - .../data/lang/RagiumJapaneseLangProvider.kt | 1 - .../data/recipe/RagiumCommonRecipeProvider.kt | 36 +++++++++++++----- .../data/recipe/RagiumHeatRecipeProvider.kt | 8 ---- .../recipe/RagiumRecipePriorityProvider.kt | 1 + .../assets/ragium/items/alumina_dust.json | 6 +++ .../ragium/items/molten_aluminum_bucket.json | 12 ------ .../resources/assets/ragium/lang/en_us.json | 5 +-- .../resources/assets/ragium/lang/ja_jp.json | 5 +-- .../ragium/models/item/alumina_dust.json | 6 +++ .../data/c/tags/fluid/molten_aluminum.json | 5 --- .../resources/data/c/tags/item/buckets.json | 1 - .../c/tags/item/buckets/molten_aluminum.json | 5 --- .../resources/data/c/tags/item/dusts.json | 1 + .../data/c/tags/item/dusts/alumina.json | 5 +++ .../data/neoforge/recipe_priorities.json | 1 + .../recipe/alloying/aluminum_ingot.json | 16 ++++++++ .../aluminum_ingot_with_cryolite.json | 28 ++++++++++++++ .../recipe/electrolyzing/molten_aluminum.json | 22 ----------- .../recipe/freezing/aluminum_ingot.json | 12 ------ .../recipe/mixing/alumina_solution.json | 2 +- .../refining/alumina_dust_from_solution.json | 16 ++++++++ .../ragium/api/material/RagiumMaterial.kt | 5 +++ .../ragium/common/fluid/RagiumFluids.kt | 3 -- .../ragium/common/item/RagiumItems.kt | 1 + .../ragium/textures/item/alumina_dust.png | Bin 0 -> 342 bytes 27 files changed, 115 insertions(+), 93 deletions(-) create mode 100644 src/generated/resources/assets/ragium/items/alumina_dust.json delete mode 100644 src/generated/resources/assets/ragium/items/molten_aluminum_bucket.json create mode 100644 src/generated/resources/assets/ragium/models/item/alumina_dust.json delete mode 100644 src/generated/resources/data/c/tags/fluid/molten_aluminum.json delete mode 100644 src/generated/resources/data/c/tags/item/buckets/molten_aluminum.json create mode 100644 src/generated/resources/data/c/tags/item/dusts/alumina.json create mode 100644 src/generated/resources/data/ragium/recipe/alloying/aluminum_ingot.json create mode 100644 src/generated/resources/data/ragium/recipe/alloying/aluminum_ingot_with_cryolite.json delete mode 100644 src/generated/resources/data/ragium/recipe/electrolyzing/molten_aluminum.json delete mode 100644 src/generated/resources/data/ragium/recipe/freezing/aluminum_ingot.json create mode 100644 src/generated/resources/data/ragium/recipe/refining/alumina_dust_from_solution.json create mode 100644 src/main/resources/assets/ragium/textures/item/alumina_dust.png diff --git a/src/client/kotlin/hiiragi283/ragium/client/RagiumClient.kt b/src/client/kotlin/hiiragi283/ragium/client/RagiumClient.kt index 5f07de6143..4f8e444835 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/RagiumClient.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/RagiumClient.kt @@ -178,10 +178,6 @@ data object RagiumClient : HTClientMod() { transparent() colorTint(Color(0xffcccc)) } - register.register(RagiumFluids.MOLTEN_ALUMINUM) { - molten() - colorTint(Color(0xffcccc)) - } register.register(RagiumFluids.SULFUR_DIOXIDE) { transparent() colorTint(Color(0x996600)) diff --git a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt index d3c9e57629..a7cef0471f 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt @@ -98,7 +98,6 @@ class RagiumEnglishLangProvider(output: PackOutput) : addFluid(RagiumFluids.HYDROFLUORIC_ACID, "Hydrofluoric Acid") addFluid(RagiumFluids.NAOH_SOLUTION, "Sodium Hydroxide Solution") addFluid(RagiumFluids.ALUMINA_SOLUTION, "Alumina Solution") - addFluid(RagiumFluids.MOLTEN_ALUMINUM, "Molten Aluminum") addFluid(RagiumFluids.SULFUR_DIOXIDE, "Sulfur Dioxide") addFluid(RagiumFluids.SULFUR_TRIOXIDE, "Sulfur Trioxide") addFluid(RagiumFluids.SULFURIC_ACID, "Sulfuric Acid") diff --git a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt index fbd0cf8a09..ea89dfd643 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt @@ -94,7 +94,6 @@ class RagiumJapaneseLangProvider(output: PackOutput) : addFluid(RagiumFluids.HYDROFLUORIC_ACID, "フッ化水素酸") addFluid(RagiumFluids.NAOH_SOLUTION, "水酸化ナトリウム水溶液") addFluid(RagiumFluids.ALUMINA_SOLUTION, "アルミナ水溶液") - addFluid(RagiumFluids.MOLTEN_ALUMINUM, "溶融アルミニウム") addFluid(RagiumFluids.SULFUR_DIOXIDE, "二酸化硫黄") addFluid(RagiumFluids.SULFUR_TRIOXIDE, "三酸化硫黄") addFluid(RagiumFluids.SULFURIC_ACID, "硫酸") diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt index 605917e2b6..2bf41e32b3 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt @@ -24,6 +24,7 @@ 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 @@ -465,10 +466,14 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu +holderSet(RagiumFluids.NAOH_SOLUTION) amount /= 2 } - result { - +RagiumFluids.ALUMINA_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 { @@ -479,14 +484,25 @@ class RagiumCommonRecipeProvider(packOutput: PackOutput, future: CompletableFutu } itemResult { +RagiumItems.getOrThrow(HTItemPart.GEM, RagiumMaterial.Gem.CRYOLITE) } }.save(exporter) - // Alumina Solution + Na3AlF6 -> Molten Al - RagiumRecipeBuilders.electrolyzing { - itemIngredient { +dustOrGem(RagiumMaterial.Gem.CRYOLITE) } - fluidIngredient { +holderSet(RagiumFluids.ALUMINA_SOLUTION) } + // 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 { - +RagiumFluids.MOLTEN_ALUMINUM - amount = 90 * 3 + +RagiumItems.getOrThrow(HTItemPart.INGOT, RagiumMaterial.Metal.ALUMINUM) + count = 3 } + recipeId suffix "_with_cryolite" }.save(exporter) } diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumHeatRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumHeatRecipeProvider.kt index e1e90013cd..6d397b1340 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumHeatRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumHeatRecipeProvider.kt @@ -111,14 +111,6 @@ class RagiumHeatRecipeProvider(packOutput: PackOutput, future: CompletableFuture ingredient { +holderSet(RagiumFluids.MOLTEN_GLASS) } result { +Items.GLASS } }.save(exporter) - // Aluminum - RagiumRecipeBuilders.freezing { - ingredient { - +holderSet(RagiumFluids.MOLTEN_ALUMINUM) - amount = 90 - } - result { +RagiumItems.getOrThrow(HTItemPart.INGOT, RagiumMaterial.Metal.ALUMINUM) } - }.save(exporter) } private fun melting() { diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumRecipePriorityProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumRecipePriorityProvider.kt index ee5e3c2a76..0a639cddaf 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumRecipePriorityProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumRecipePriorityProvider.kt @@ -11,6 +11,7 @@ class RagiumRecipePriorityProvider(output: PackOutput, registries: CompletableFu RecipePrioritiesProvider(output, registries, RagiumAPI.MOD_ID) { override fun start() { // 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) diff --git a/src/generated/resources/assets/ragium/items/alumina_dust.json b/src/generated/resources/assets/ragium/items/alumina_dust.json new file mode 100644 index 0000000000..d205c7d88b --- /dev/null +++ b/src/generated/resources/assets/ragium/items/alumina_dust.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "ragium:item/alumina_dust" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/ragium/items/molten_aluminum_bucket.json b/src/generated/resources/assets/ragium/items/molten_aluminum_bucket.json deleted file mode 100644 index 117ca0d5bd..0000000000 --- a/src/generated/resources/assets/ragium/items/molten_aluminum_bucket.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "model": { - "type": "neoforge:fluid_container", - "apply_fluid_luminosity": false, - "fluid": "ragium:molten_aluminum", - "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/lang/en_us.json b/src/generated/resources/assets/ragium/lang/en_us.json index 4128452ef3..818a60b41f 100644 --- a/src/generated/resources/assets/ragium/lang/en_us.json +++ b/src/generated/resources/assets/ragium/lang/en_us.json @@ -71,7 +71,6 @@ "block.ragium.mechanical_machine_casing": "Machine Casing (Mechanical)", "block.ragium.melter": "Melter", "block.ragium.mixer": "Mixer", - "block.ragium.molten_aluminum": "Molten Aluminum", "block.ragium.molten_ender": "Resonant Ender", "block.ragium.molten_glass": "Molten Glass", "block.ragium.molten_glowstone": "Energized Glowstone", @@ -161,6 +160,7 @@ "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.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", @@ -229,7 +229,6 @@ "item.ragium.magenta_dye_bucket": "Magenta Dye Bucket", "item.ragium.mechanical_machine_parts": "Machine Parts (Mechanical)", "item.ragium.memory_disc": "Memory Disc", - "item.ragium.molten_aluminum_bucket": "Molten Aluminum Bucket", "item.ragium.molten_ender_bucket": "Resonant Ender Bucket", "item.ragium.molten_glass_bucket": "Molten Glass Bucket", "item.ragium.molten_glowstone_bucket": "Energized Glowstone Bucket", @@ -345,7 +344,6 @@ "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_aluminum": "Molten Aluminum", "tag.fluid.c.molten_ender": "Resonant Ender", "tag.fluid.c.molten_glass": "Molten Glass", "tag.fluid.c.molten_glowstone": "Energized Glowstone", @@ -392,7 +390,6 @@ "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_aluminum": "Molten Aluminum Bucket", "tag.item.c.buckets.molten_ender": "Resonant Ender Bucket", "tag.item.c.buckets.molten_glass": "Molten Glass Bucket", "tag.item.c.buckets.molten_glowstone": "Energized Glowstone Bucket", diff --git a/src/generated/resources/assets/ragium/lang/ja_jp.json b/src/generated/resources/assets/ragium/lang/ja_jp.json index 58d29fc8d5..93a1470752 100644 --- a/src/generated/resources/assets/ragium/lang/ja_jp.json +++ b/src/generated/resources/assets/ragium/lang/ja_jp.json @@ -71,7 +71,6 @@ "block.ragium.mechanical_machine_casing": "機械筐体 (機械加工)", "block.ragium.melter": "溶融炉", "block.ragium.mixer": "混合機", - "block.ragium.molten_aluminum": "溶融アルミニウム", "block.ragium.molten_ender": "共振エンダー", "block.ragium.molten_glass": "溶融ガラス", "block.ragium.molten_glowstone": "活性グロウストーン", @@ -161,6 +160,7 @@ "item.minecraft.tipped_arrow.effect.frostbite": "凍傷の矢", "item.minecraft.tipped_arrow.effect.golden_apple": "金リンゴの矢", "item.minecraft.tipped_arrow.effect.hunger": "空腹の矢", + "item.ragium.alumina_dust": "アルミナの粉", "item.ragium.alumina_solution_bucket": "アルミナ水溶液入りバケツ", "item.ragium.aluminum_ingot": "アルミニウムインゴット", "item.ragium.aluminum_nugget": "アルミニウムナゲット", @@ -229,7 +229,6 @@ "item.ragium.magenta_dye_bucket": "赤紫色の染料入りバケツ", "item.ragium.mechanical_machine_parts": "機械部品 (機械加工)", "item.ragium.memory_disc": "メモリーディスク", - "item.ragium.molten_aluminum_bucket": "溶融アルミニウム入りバケツ", "item.ragium.molten_ender_bucket": "共振エンダー入りバケツ", "item.ragium.molten_glass_bucket": "溶融ガラス入りバケツ", "item.ragium.molten_glowstone_bucket": "活性グロウストーン入りバケツ", @@ -345,7 +344,6 @@ "tag.fluid.c.hydrogen_chloride": "塩化水素", "tag.fluid.c.hydrogen_fluoride": "フッ化水素", "tag.fluid.c.liquid_explosive": "液体爆薬", - "tag.fluid.c.molten_aluminum": "溶融アルミニウム", "tag.fluid.c.molten_ender": "共振エンダー", "tag.fluid.c.molten_glass": "溶融ガラス", "tag.fluid.c.molten_glowstone": "活性グロウストーン", @@ -392,7 +390,6 @@ "tag.item.c.buckets.hydrogen_chloride": "塩化水素入りバケツ", "tag.item.c.buckets.hydrogen_fluoride": "フッ化水素入りバケツ", "tag.item.c.buckets.liquid_explosive": "液体爆薬入りバケツ", - "tag.item.c.buckets.molten_aluminum": "溶融アルミニウム入りバケツ", "tag.item.c.buckets.molten_ender": "共振エンダー入りバケツ", "tag.item.c.buckets.molten_glass": "溶融ガラス入りバケツ", "tag.item.c.buckets.molten_glowstone": "活性グロウストーン入りバケツ", diff --git a/src/generated/resources/assets/ragium/models/item/alumina_dust.json b/src/generated/resources/assets/ragium/models/item/alumina_dust.json new file mode 100644 index 0000000000..6a44d7b20f --- /dev/null +++ b/src/generated/resources/assets/ragium/models/item/alumina_dust.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "ragium:item/alumina_dust" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/fluid/molten_aluminum.json b/src/generated/resources/data/c/tags/fluid/molten_aluminum.json deleted file mode 100644 index 610443f14f..0000000000 --- a/src/generated/resources/data/c/tags/fluid/molten_aluminum.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "ragium:molten_aluminum" - ] -} \ 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 ae3e8b8943..fc1fe9cb84 100644 --- a/src/generated/resources/data/c/tags/item/buckets.json +++ b/src/generated/resources/data/c/tags/item/buckets.json @@ -31,7 +31,6 @@ "#c:buckets/hydrogen_chloride", "#c:buckets/hydrogen_fluoride", "#c:buckets/liquid_explosive", - "#c:buckets/molten_aluminum", "#c:buckets/molten_ender", "#c:buckets/molten_glass", "#c:buckets/molten_glowstone", diff --git a/src/generated/resources/data/c/tags/item/buckets/molten_aluminum.json b/src/generated/resources/data/c/tags/item/buckets/molten_aluminum.json deleted file mode 100644 index 200c0cbea2..0000000000 --- a/src/generated/resources/data/c/tags/item/buckets/molten_aluminum.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "ragium:molten_aluminum_bucket" - ] -} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/item/dusts.json b/src/generated/resources/data/c/tags/item/dusts.json index 0ca0c44a83..4decc30e59 100644 --- a/src/generated/resources/data/c/tags/item/dusts.json +++ b/src/generated/resources/data/c/tags/item/dusts.json @@ -1,5 +1,6 @@ { "values": [ + "#c:dusts/alumina", "#c:dusts/amethyst", "#c:dusts/bauxite", "#c:dusts/borax", 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/neoforge/recipe_priorities.json b/src/generated/resources/data/neoforge/recipe_priorities.json index c08aebb89e..9bd3e6e365 100644 --- a/src/generated/resources/data/neoforge/recipe_priorities.json +++ b/src/generated/resources/data/neoforge/recipe_priorities.json @@ -1,5 +1,6 @@ { "entries": { + "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, 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/electrolyzing/molten_aluminum.json b/src/generated/resources/data/ragium/recipe/electrolyzing/molten_aluminum.json deleted file mode 100644 index 4fc163ab1a..0000000000 --- a/src/generated/resources/data/ragium/recipe/electrolyzing/molten_aluminum.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "type": "ragium:electrolyzing", - "fluid_ingredient": { - "amount": 1000, - "fluids": "#c:alumina_solution" - }, - "item_ingredient": { - "count": 1, - "items": { - "neoforge:ingredient_type": "ragium:material_tags", - "tags": [ - "c:dusts/cryolite", - "c:gems/cryolite" - ] - } - }, - "result": { - "amount": 270, - "id": "ragium:molten_aluminum" - }, - "time": 200 -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/freezing/aluminum_ingot.json b/src/generated/resources/data/ragium/recipe/freezing/aluminum_ingot.json deleted file mode 100644 index 9281d7c99c..0000000000 --- a/src/generated/resources/data/ragium/recipe/freezing/aluminum_ingot.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "ragium:freezing", - "ingredient": { - "amount": 90, - "fluids": "#c:molten_aluminum" - }, - "result": { - "count": 1, - "id": "ragium:aluminum_ingot" - }, - "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 index 7e240bd248..660da860bd 100644 --- a/src/generated/resources/data/ragium/recipe/mixing/alumina_solution.json +++ b/src/generated/resources/data/ragium/recipe/mixing/alumina_solution.json @@ -9,7 +9,7 @@ "items": "#c:dusts/bauxite" }, "result": { - "amount": 500, + "amount": 1000, "id": "ragium:alumina_solution" }, "time": 200 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/lib/kotlin/hiiragi283/ragium/api/material/RagiumMaterial.kt b/src/lib/kotlin/hiiragi283/ragium/api/material/RagiumMaterial.kt index bf16e0c5a0..e72b74ffd3 100644 --- a/src/lib/kotlin/hiiragi283/ragium/api/material/RagiumMaterial.kt +++ b/src/lib/kotlin/hiiragi283/ragium/api/material/RagiumMaterial.kt @@ -165,6 +165,11 @@ sealed interface RagiumMaterial : // Common CARBON(false, "Carbon", "炭素"), + /** + * @since 26.1.7 + */ + ALUMINA(false, "Alumina", "アルミナ"), + /** * @since 26.1.7 */ diff --git a/src/main/kotlin/hiiragi283/ragium/common/fluid/RagiumFluids.kt b/src/main/kotlin/hiiragi283/ragium/common/fluid/RagiumFluids.kt index 8197da74f2..f8be09857c 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/fluid/RagiumFluids.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/fluid/RagiumFluids.kt @@ -218,9 +218,6 @@ data object RagiumFluids { properties = liquid() } - @JvmField - val MOLTEN_ALUMINUM: HTFluidContent.Virtual = REGISTER.registerVirtual("molten_aluminum") { properties = molten() } - // S @JvmField val SULFUR_DIOXIDE: HTFluidContent.Virtual = REGISTER.registerVirtual("sulfur_dioxide") { properties = gaseous() } diff --git a/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt b/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt index 3900525aa9..e7fab4d32c 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt @@ -97,6 +97,7 @@ data object RagiumItems { 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) }.flatMapTable { (material: RagiumMaterial, parts: Collection) -> parts.map { part: HTItemPart -> 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 0000000000000000000000000000000000000000..d4aae0120ac6b54faaa382c0f80709a33ad23ef2 GIT binary patch literal 342 zcmV-c0jd6pP)Sh7iX=A^{jMrVBaa%lMuQnw`5zoYx0H z&DwX}A0=O}NU`ciLP7x741_5Ti?v*Wb0ow9Ftalz#Lb)0oKP};_9@RylJiobNi2X) zZo{ZC|AG7xoG1xE{)b6kFAF%HZ^EcRUT30aCZL9yRfts<(47twyH#Ky9I6?EPC(2> z^wNVYfP@1ev;IVa<(87!9V2zuOhX7j0SKZQ6C$RD=y}%%Ko4ntm)6~HEWmAy%O3y$ o0RR8b2Qjq(000I_L_t&o07n&&A(v$EH2?qr07*qoM6N<$g0={XJ^%m! literal 0 HcmV?d00001 From 4c38707d113da3ee89b29bdff8aa599309ba67c0 Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Wed, 23 Sep 2026 00:10:25 +0900 Subject: [PATCH 36/44] =?UTF-8?q?feat:=20=E6=96=B0=E3=81=97=E3=81=84?= =?UTF-8?q?=E3=83=80=E3=83=A1=E3=83=BC=E3=82=B8=E3=82=BF=E3=82=A4=E3=83=97?= =?UTF-8?q?=E3=82=92=E8=BF=BD=E5=8A=A0=20-=20Chemical=20Burn=20/=20?= =?UTF-8?q?=E5=8C=96=E5=AD=A6=E7=81=AB=E5=82=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hiiragi283/ragium/data/RagiumDataGen.kt | 6 +++ .../data/lang/RagiumEnglishLangProvider.kt | 8 ++++ .../data/lang/RagiumJapaneseLangProvider.kt | 8 ++++ .../data/recipe/RagiumBioRecipeProvider.kt | 38 +++++++++++++++++++ .../data/recipe/RagiumHeatRecipeProvider.kt | 19 ++++++++++ .../data/tag/RagiumDamageTypeTagsProvider.kt | 20 ++++++++++ .../ragium/data/tag/RagiumItemTagsProvider.kt | 14 ++++--- .../resources/assets/ragium/lang/en_us.json | 19 ++++++++++ .../resources/assets/ragium/lang/ja_jp.json | 19 ++++++++++ .../tags/damage_type/bypasses_armor.json | 5 +++ .../tags/damage_type/no_knockback.json | 5 +++ .../tags/damage_type/panic_causes.json | 5 +++ .../tags/item/beacon_payment_items.json | 10 +++++ .../ragium/damage_type/chemical_burn.json | 6 +++ .../data/ragium/recipe/alloying/brick.json | 16 ++++++++ .../ragium/recipe/alloying/nether_brick.json | 16 ++++++++ .../recipe/brewing/potion/blindness.json | 27 +++++++++++++ .../ragium/recipe/brewing/potion/nausea.json | 27 +++++++++++++ .../ragium/recipe/brewing/potion/wither.json | 30 +++++++++++++++ .../api/world/DamageSourcesExtensions.kt | 24 ++++++++++++ .../ragium/api/world/RagiumDamageTypes.kt | 30 +++++++++++++++ .../ragium/common/effect/RagiumMobEffects.kt | 6 +++ .../common/event/RagiumEventHandlers.kt | 7 ++++ .../common/item/alchemy/RagiumPotions.kt | 3 ++ 24 files changed, 363 insertions(+), 5 deletions(-) create mode 100644 src/data/kotlin/hiiragi283/ragium/data/tag/RagiumDamageTypeTagsProvider.kt create mode 100644 src/generated/resources/data/minecraft/tags/damage_type/bypasses_armor.json create mode 100644 src/generated/resources/data/minecraft/tags/damage_type/no_knockback.json create mode 100644 src/generated/resources/data/minecraft/tags/damage_type/panic_causes.json create mode 100644 src/generated/resources/data/minecraft/tags/item/beacon_payment_items.json create mode 100644 src/generated/resources/data/ragium/damage_type/chemical_burn.json create mode 100644 src/generated/resources/data/ragium/recipe/alloying/brick.json create mode 100644 src/generated/resources/data/ragium/recipe/alloying/nether_brick.json create mode 100644 src/generated/resources/data/ragium/recipe/brewing/potion/blindness.json create mode 100644 src/generated/resources/data/ragium/recipe/brewing/potion/nausea.json create mode 100644 src/generated/resources/data/ragium/recipe/brewing/potion/wither.json create mode 100644 src/lib/kotlin/hiiragi283/ragium/api/world/DamageSourcesExtensions.kt create mode 100644 src/lib/kotlin/hiiragi283/ragium/api/world/RagiumDamageTypes.kt diff --git a/src/data/kotlin/hiiragi283/ragium/data/RagiumDataGen.kt b/src/data/kotlin/hiiragi283/ragium/data/RagiumDataGen.kt index 5f10634f39..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) ) @@ -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/lang/RagiumEnglishLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt index a7cef0471f..940c3b9e91 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt @@ -69,6 +69,9 @@ class RagiumEnglishLangProvider(output: PackOutput) : 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") @@ -131,6 +134,7 @@ class RagiumEnglishLangProvider(output: PackOutput) : // Mob Effect add(RagiumMobEffects.FROSTBITE, "Frostbite") + add(RagiumMobEffects.CHEMICAL_BURN, "Chemical Burn") // Ore Slurry addOreSlurry(RagiumOreSlurryData.COPPER, "Copper Ore Slurry") @@ -140,8 +144,12 @@ class RagiumEnglishLangProvider(output: PackOutput) : // 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") diff --git a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt index ea89dfd643..9abe0c15aa 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt @@ -65,6 +65,9 @@ class RagiumJapaneseLangProvider(output: PackOutput) : 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, "樹脂") @@ -127,6 +130,7 @@ class RagiumJapaneseLangProvider(output: PackOutput) : // Mob Effect add(RagiumMobEffects.FROSTBITE, "凍傷") + add(RagiumMobEffects.CHEMICAL_BURN, "化学火傷") // Ore Slurry addOreSlurry(RagiumOreSlurryData.COPPER, "銅の鉱石泥") @@ -136,8 +140,12 @@ class RagiumJapaneseLangProvider(output: PackOutput) : // 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", "エンチャントされた金リンゴ") diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumBioRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumBioRecipeProvider.kt index b5b0eaf0f8..c1fcee3a4e 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumBioRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumBioRecipeProvider.kt @@ -49,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 } } @@ -64,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 diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumHeatRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumHeatRecipeProvider.kt index 6d397b1340..f6c179ddf9 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumHeatRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumHeatRecipeProvider.kt @@ -14,6 +14,7 @@ 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 @@ -41,6 +42,24 @@ class RagiumHeatRecipeProvider(packOutput: PackOutput, future: CompletableFuture } 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 { 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/RagiumItemTagsProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumItemTagsProvider.kt index bed589230c..ce5433f6f1 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumItemTagsProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumItemTagsProvider.kt @@ -33,12 +33,16 @@ class RagiumItemTagsProvider(output: PackOutput, lookupProvider: CompletableFutu // Material 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) diff --git a/src/generated/resources/assets/ragium/lang/en_us.json b/src/generated/resources/assets/ragium/lang/en_us.json index 818a60b41f..7cd5372df6 100644 --- a/src/generated/resources/assets/ragium/lang/en_us.json +++ b/src/generated/resources/assets/ragium/lang/en_us.json @@ -118,12 +118,15 @@ "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", @@ -140,26 +143,42 @@ "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", diff --git a/src/generated/resources/assets/ragium/lang/ja_jp.json b/src/generated/resources/assets/ragium/lang/ja_jp.json index 93a1470752..838030c9df 100644 --- a/src/generated/resources/assets/ragium/lang/ja_jp.json +++ b/src/generated/resources/assets/ragium/lang/ja_jp.json @@ -118,12 +118,15 @@ "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", @@ -140,26 +143,42 @@ "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": "アルミニウムインゴット", 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/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/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/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/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/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/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/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/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) } From 3d4e202265887c4ed8b82f95f25edd18dae0c967 Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Wed, 23 Sep 2026 21:50:55 +0900 Subject: [PATCH 37/44] =?UTF-8?q?refactor:=20NonEmptyList=20=E3=82=92?= =?UTF-8?q?=E6=9C=80=E9=81=A9=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data/lang/RagiumEnglishLangProvider.kt | 18 ++++----- .../data/lang/RagiumJapaneseLangProvider.kt | 18 ++++----- .../data/recipe/RagiumHeatRecipeProvider.kt | 14 +++++++ .../hiiragi283/lib/collection/NonEmptyList.kt | 39 ++++--------------- .../lib/data/lang/HTLangProvider.kt | 6 +-- .../hiiragi283/lib/resource/HTValueAndKey.kt | 20 ++++++++++ 6 files changed, 62 insertions(+), 53 deletions(-) create mode 100644 src/lib/kotlin/hiiragi283/lib/resource/HTValueAndKey.kt diff --git a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt index 940c3b9e91..75553c1b4e 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt @@ -22,21 +22,21 @@ 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.ASSEMBLER, "Assembler") add(RagiumBlocks.CRUSHER, "Crusher") diff --git a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt index 9abe0c15aa..ba8a11f624 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt @@ -22,17 +22,17 @@ 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.ASSEMBLER, "組立機") add(RagiumBlocks.CRUSHER, "破砕機") diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumHeatRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumHeatRecipeProvider.kt index f6c179ddf9..6610f3b0de 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumHeatRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumHeatRecipeProvider.kt @@ -107,6 +107,20 @@ class RagiumHeatRecipeProvider(packOutput: PackOutput, future: CompletableFuture } 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() { 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/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/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 +} From 186b50b8bade756505bd06960ba76b7ea44475a0 Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Wed, 23 Sep 2026 22:04:22 +0900 Subject: [PATCH 38/44] =?UTF-8?q?refactor:=20Table=20=E3=82=92=E6=9C=80?= =?UTF-8?q?=E9=81=A9=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lib/collection/DelegatingTable.kt | 59 ++++++++++++++++ .../hiiragi283/lib/collection/HTMaps.kt | 13 ---- .../hiiragi283/lib/collection/MultiMaps.kt | 6 +- .../hiiragi283/lib/collection/PairMapTable.kt | 67 ------------------- .../hiiragi283/lib/collection/Tables.kt | 18 ++--- 5 files changed, 71 insertions(+), 92 deletions(-) create mode 100644 src/lib/kotlin/hiiragi283/lib/collection/DelegatingTable.kt delete mode 100644 src/lib/kotlin/hiiragi283/lib/collection/PairMapTable.kt 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..c26fad9cc2 100644 --- a/src/lib/kotlin/hiiragi283/lib/collection/HTMaps.kt +++ b/src/lib/kotlin/hiiragi283/lib/collection/HTMaps.kt @@ -48,16 +48,3 @@ inline fun Map>.toMultiMap(): SetMultiMap = SetMultiMap.c @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/MultiMaps.kt b/src/lib/kotlin/hiiragi283/lib/collection/MultiMaps.kt index f267e489da..e5cee98438 100644 --- a/src/lib/kotlin/hiiragi283/lib/collection/MultiMaps.kt +++ b/src/lib/kotlin/hiiragi283/lib/collection/MultiMaps.kt @@ -187,9 +187,9 @@ inline fun buildSortedSetMultiMap( * @author Hiiragi Tsubasa * @since 26.1.0 */ -inline fun MultiMap.flatMapTable( +inline fun MultiMap.flatMapTable( transform: (Map.Entry>) -> Iterable> -): Table = this.flatMapTableTo(PairMapTable.Builder(), transform) +): Table = this.flatMapTableTo(DelegatingTable.Builder(), transform) /** * [Table]に変換します。 @@ -203,7 +203,7 @@ inline fun MultiMap.flatMapTable( * @author Hiiragi Tsubasa * @since 26.1.0 */ -inline fun > MultiMap.flatMapTableTo( +inline fun > MultiMap.flatMapTableTo( builder: D, transform: (Map.Entry>) -> Iterable> ): Table { 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/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 From 319f1fb697e24f160dc2dfd86beacc1a4dfa5c64 Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Wed, 23 Sep 2026 22:45:27 +0900 Subject: [PATCH 39/44] =?UTF-8?q?refactor!:=20MultiMap=20=E3=82=92?= =?UTF-8?q?=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data/loot/RagiumBlockLootTableProvider.kt | 2 +- .../ragium/data/model/RagiumModelProvider.kt | 32 ++-- .../data/tag/RagiumBlockItemTagsProvider.kt | 2 +- .../data/tag/RagiumBlockTagsProvider.kt | 2 +- .../lib/collection/AbstractMultiMap.kt | 76 --------- .../lib/collection/AbstractMultiMapBuilder.kt | 35 ++++ .../hiiragi283/lib/collection/HTMaps.kt | 18 -- .../hiiragi283/lib/collection/ListMultiMap.kt | 41 ----- .../lib/collection/ListMultiMapBuilder.kt | 17 ++ .../hiiragi283/lib/collection/MultiMap.kt | 117 ------------- .../lib/collection/MultiMapBuilder.kt | 49 ++++++ .../hiiragi283/lib/collection/MultiMaps.kt | 161 +++--------------- .../hiiragi283/lib/collection/SetMultiMap.kt | 69 -------- .../lib/collection/SetMultiMapBuilder.kt | 17 ++ .../hiiragi283/lib/data/tag/HTTagsProvider.kt | 9 +- .../ragium/common/block/RagiumBlocks.kt | 71 ++++---- .../ragium/common/item/RagiumItems.kt | 84 ++++----- 17 files changed, 255 insertions(+), 547 deletions(-) delete mode 100644 src/lib/kotlin/hiiragi283/lib/collection/AbstractMultiMap.kt create mode 100644 src/lib/kotlin/hiiragi283/lib/collection/AbstractMultiMapBuilder.kt delete mode 100644 src/lib/kotlin/hiiragi283/lib/collection/ListMultiMap.kt create mode 100644 src/lib/kotlin/hiiragi283/lib/collection/ListMultiMapBuilder.kt delete mode 100644 src/lib/kotlin/hiiragi283/lib/collection/MultiMap.kt create mode 100644 src/lib/kotlin/hiiragi283/lib/collection/MultiMapBuilder.kt delete mode 100644 src/lib/kotlin/hiiragi283/lib/collection/SetMultiMap.kt create mode 100644 src/lib/kotlin/hiiragi283/lib/collection/SetMultiMapBuilder.kt diff --git a/src/data/kotlin/hiiragi283/ragium/data/loot/RagiumBlockLootTableProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/loot/RagiumBlockLootTableProvider.kt index d91f0f42ba..f25f7f5f39 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/loot/RagiumBlockLootTableProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/loot/RagiumBlockLootTableProvider.kt @@ -36,7 +36,7 @@ class RagiumBlockLootTableProvider(registries: HolderLookup.Provider) : RagiumBlocks.STORAGE_BLOCKS.values.forEach(::dropSelf) // Machine - for (machine: HTSimpleDeferredBlockAndItem in RagiumBlocks.MACHINES.values) { + for (machine: HTSimpleDeferredBlockAndItem in RagiumBlocks.MACHINES.values.flatten()) { add(machine, ::copyComponent) } // Storage diff --git a/src/data/kotlin/hiiragi283/ragium/data/model/RagiumModelProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/model/RagiumModelProvider.kt index 906b15f1b7..7e0e0836fb 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/model/RagiumModelProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/model/RagiumModelProvider.kt @@ -83,19 +83,25 @@ class RagiumModelProvider(output: PackOutput) : HTModelProvider(output, RagiumAP generators.modelOutput ) } - RagiumBlocks.MACHINES.flatEntries - .forEach { (machineType: HTMachineType, blockItem: HTSimpleDeferredBlockAndItem) -> - generators.blockStateOutput.accept( - MultiVariantGenerator.dispatch(blockItem.getOrThrow()) - .with( - PropertyDispatch.initial(HTMachineBlock.IS_ACTIVE) - .select(false, BlockModelGenerators.plainVariant(inactiveModels[machineType]!!)) - .select( - true, - BlockModelGenerators.plainVariant(machineModel(generators, machineType, blockItem)) - ) - ).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: HTSimpleDeferredBlockAndItem) in RagiumBlocks.MACHINE_CASINGS) { diff --git a/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumBlockItemTagsProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumBlockItemTagsProvider.kt index 26e5782e69..07703b6075 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumBlockItemTagsProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumBlockItemTagsProvider.kt @@ -32,7 +32,7 @@ class RagiumBlockItemTagsProvider(factory: (BlockItemTag) -> HTBlockItemTagBuild .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 f18c884c14..efd9437053 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumBlockTagsProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumBlockTagsProvider.kt @@ -26,7 +26,7 @@ class RagiumBlockTagsProvider(output: PackOutput, lookupProvider: CompletableFut yieldAll(RagiumBlocks.MATERIAL_ORES.values) yieldAll(RagiumBlocks.STORAGE_BLOCKS.values) - yieldAll(RagiumBlocks.MACHINES.values) + yieldAll(RagiumBlocks.MACHINES.values.flatten()) yield(RagiumBlocks.MACHINE_CASING) yieldAll(RagiumBlocks.MACHINE_CASINGS.values) 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/HTMaps.kt b/src/lib/kotlin/hiiragi283/lib/collection/HTMaps.kt index c26fad9cc2..b007fb6d20 100644 --- a/src/lib/kotlin/hiiragi283/lib/collection/HTMaps.kt +++ b/src/lib/kotlin/hiiragi283/lib/collection/HTMaps.kt @@ -30,21 +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() 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 e5cee98438..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(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/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/data/tag/HTTagsProvider.kt b/src/lib/kotlin/hiiragi283/lib/data/tag/HTTagsProvider.kt index 2d2f6efccb..a4ba18493b 100644 --- a/src/lib/kotlin/hiiragi283/lib/data/tag/HTTagsProvider.kt +++ b/src/lib/kotlin/hiiragi283/lib/data/tag/HTTagsProvider.kt @@ -1,8 +1,9 @@ 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 @@ -45,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) } diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt b/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt index 8fce168b02..33dd677d80 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt @@ -2,10 +2,9 @@ package hiiragi283.ragium.common.block import hiiragi283.lib.capability.HTEnergyCapabilities import hiiragi283.lib.capability.HTFluidCapabilities -import hiiragi283.lib.collection.ListMultiMap 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 @@ -116,10 +115,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 @@ -259,33 +261,36 @@ data object RagiumBlocks { registerMachine(RagiumBlockEntityTypes.ENCHANTER) @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) - - 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) - } + 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) + } + ) // Storage // diff --git a/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt b/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt index e7fab4d32c..9d0aa3b27c 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/item/RagiumItems.kt @@ -2,7 +2,7 @@ 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 @@ -60,46 +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.TINY) - putAll(RagiumMaterial.Fuel.PITCH_COKE, 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) - 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) - }.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, From fcc4519543aff60812ed517e8bdbde61290a346e Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Thu, 24 Sep 2026 23:09:34 +0900 Subject: [PATCH 40/44] =?UTF-8?q?fix:=20=E3=83=9D=E3=83=BC=E3=82=B7?= =?UTF-8?q?=E3=83=A7=E3=83=B3=E7=93=B6=E3=81=AE=E4=B8=AD=E8=BA=AB=E3=82=92?= =?UTF-8?q?=E5=87=BA=E3=81=97=E5=85=A5=E3=82=8C=E3=81=99=E3=82=8B=E3=83=AC?= =?UTF-8?q?=E3=82=B7=E3=83=94=E3=81=AB=E3=81=A4=E3=81=84=E3=81=A6=EF=BC=8C?= =?UTF-8?q?JEI=E4=B8=8A=E3=81=A7=E3=81=AE=E5=87=A6=E7=90=86=E6=99=82?= =?UTF-8?q?=E9=96=93=E3=81=AE=E8=A1=A8=E7=A4=BA=E3=81=8C=E5=AE=9F=E9=9A=9B?= =?UTF-8?q?=E3=81=A8=E7=95=B0=E3=81=AA=E3=81=A3=E3=81=A6=E3=81=84=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ragium/client/integration/jei/RagiumJeiPlugin.kt | 4 ++++ .../lib/data/recipe/builder/HTProgressRecipeBuilder.kt | 4 ++-- .../ragium/common/recipe/RTPotionBottleDrainingRecipe.kt | 7 ++++++- .../ragium/common/recipe/RTPotionBottleFillingRecipe.kt | 7 ++++++- 4 files changed, 18 insertions(+), 4 deletions(-) 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 229385d130..20c296109b 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiPlugin.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiPlugin.kt @@ -29,6 +29,8 @@ import hiiragi283.ragium.client.integration.jei.category.RTRefiningRecipeCategor 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 @@ -196,6 +198,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}/") @@ -217,6 +220,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}/") 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/main/kotlin/hiiragi283/ragium/common/recipe/RTPotionBottleDrainingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/RTPotionBottleDrainingRecipe.kt index 12977f8cb0..037b4bbdc6 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/recipe/RTPotionBottleDrainingRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/RTPotionBottleDrainingRecipe.kt @@ -15,7 +15,12 @@ import net.minecraft.world.item.crafting.SingleRecipeInput 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 = bottleType.filledItem.isOf(input) && HTPotionHelper.hasAnyEffect(input) diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/RTPotionBottleFillingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/RTPotionBottleFillingRecipe.kt index aefca36d67..421a686e12 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/recipe/RTPotionBottleFillingRecipe.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/RTPotionBottleFillingRecipe.kt @@ -15,7 +15,12 @@ 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 { !bottleType.emptyItem.isOf(first) -> false From 877e04ffeba675e53d85c96b2f3479b6aa5e074c Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Thu, 24 Sep 2026 23:23:57 +0900 Subject: [PATCH 41/44] =?UTF-8?q?feat:=20JEI=E4=B8=8A=E3=81=AE=E7=9F=A2?= =?UTF-8?q?=E5=8D=B0=E3=81=AB=E5=BF=85=E8=A6=81=E3=82=A8=E3=83=8D=E3=83=AB?= =?UTF-8?q?=E3=82=AE=E3=83=BC/=E6=99=82=E9=96=93=E3=82=92=E8=A1=A8?= =?UTF-8?q?=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/lib/kotlin/hiiragi283/lib/recipe/base/HTProgressData.kt | 2 +- .../lib/integration/jei/category/HTBasicRecipeCategory.kt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) 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/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTBasicRecipeCategory.kt b/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTBasicRecipeCategory.kt index 94e74d4545..b1c634faef 100644 --- a/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTBasicRecipeCategory.kt +++ b/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTBasicRecipeCategory.kt @@ -119,7 +119,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) From 285719ad236fcc50506b63e5115c652f1defa089 Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Thu, 24 Sep 2026 23:24:23 +0900 Subject: [PATCH 42/44] =?UTF-8?q?build:=20=E3=83=90=E3=83=BC=E3=82=B8?= =?UTF-8?q?=E3=83=A7=E3=83=B3=E3=81=AE=E6=9C=AB=E5=B0=BE=E3=81=AB`-beta`?= =?UTF-8?q?=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 007ec677d8..928b3328f7 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -70,7 +70,7 @@ scmVersion { base { archivesName = modId group = "io.github.hiiragi283" - version = scmVersion.version + version = "${scmVersion.version}-beta" } val libModule: SourceSet = sourceSets.register("lib").get() From 6ff0c513b7b0042ea808cf987a9a620250795b1d Mon Sep 17 00:00:00 2001 From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com> Date: Fri, 25 Sep 2026 00:15:19 +0900 Subject: [PATCH 43/44] =?UTF-8?q?feat:=20=E6=96=B0=E3=81=97=E3=81=84?= =?UTF-8?q?=E3=83=96=E3=83=AD=E3=83=83=E3=82=AF=E3=82=92=E8=BF=BD=E5=8A=A0?= =?UTF-8?q?=20-=20Block=20of=20Fluorite=20-=20Fluorite=20Slab=20-=20Fluori?= =?UTF-8?q?te=20Stairs=20-=20Block=20of=20Cryolite=20-=20Cryolite=20Slab?= =?UTF-8?q?=20-=20Cryolite=20Stairs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data/lang/RagiumEnglishLangProvider.kt | 10 + .../data/lang/RagiumJapaneseLangProvider.kt | 10 + .../data/loot/RagiumBlockLootTableProvider.kt | 3 + .../ragium/data/model/RagiumModelProvider.kt | 11 + .../data/recipe/RagiumCommonRecipeProvider.kt | 3 +- .../recipe/RagiumMechanicalRecipeProvider.kt | 13 +- .../recipe/RagiumVanillaRecipeProvider.kt | 94 ++++---- .../data/tag/RagiumBlockTagsProvider.kt | 16 +- .../ragium/data/tag/RagiumItemTagsProvider.kt | 7 + .../ragium/blockstates/cryolite_block.json | 7 + .../ragium/blockstates/cryolite_slab.json | 13 ++ .../ragium/blockstates/cryolite_stairs.json | 209 ++++++++++++++++++ .../ragium/blockstates/fluorite_block.json | 7 + .../ragium/blockstates/fluorite_slab.json | 13 ++ .../ragium/blockstates/fluorite_stairs.json | 209 ++++++++++++++++++ .../assets/ragium/items/cryolite_block.json | 6 + .../assets/ragium/items/cryolite_slab.json | 6 + .../assets/ragium/items/cryolite_stairs.json | 6 + .../assets/ragium/items/fluorite_block.json | 6 + .../assets/ragium/items/fluorite_slab.json | 6 + .../assets/ragium/items/fluorite_stairs.json | 6 + .../resources/assets/ragium/lang/en_us.json | 6 + .../resources/assets/ragium/lang/ja_jp.json | 6 + .../ragium/models/block/cryolite_block.json | 6 + .../ragium/models/block/cryolite_slab.json | 8 + .../models/block/cryolite_slab_top.json | 8 + .../ragium/models/block/cryolite_stairs.json | 8 + .../models/block/cryolite_stairs_inner.json | 8 + .../models/block/cryolite_stairs_outer.json | 8 + .../ragium/models/block/fluorite_block.json | 6 + .../ragium/models/block/fluorite_slab.json | 8 + .../models/block/fluorite_slab_top.json | 8 + .../ragium/models/block/fluorite_stairs.json | 8 + .../models/block/fluorite_stairs_inner.json | 8 + .../models/block/fluorite_stairs_outer.json | 8 + .../data/c/tags/block/storage_blocks.json | 1 - .../c/tags/block/storage_blocks/echo.json | 5 - .../data/c/tags/item/storage_blocks.json | 1 - .../data/c/tags/item/storage_blocks/echo.json | 5 - .../tags/block/mineable/pickaxe.json | 6 + .../data/minecraft/tags/block/slabs.json | 6 + .../data/minecraft/tags/block/stairs.json | 6 + .../data/minecraft/tags/item/slabs.json | 6 + .../data/minecraft/tags/item/stairs.json | 6 + .../loot_table/blocks/cryolite_block.json | 21 ++ .../loot_table/blocks/cryolite_slab.json | 35 +++ .../loot_table/blocks/cryolite_stairs.json | 21 ++ .../loot_table/blocks/fluorite_block.json | 21 ++ .../loot_table/blocks/fluorite_slab.json | 35 +++ .../loot_table/blocks/fluorite_stairs.json | 21 ++ .../recipe/alloying/obzinite_ingot.json | 34 +++ .../data/ragium/recipe/crushing/cryolite.json | 12 + .../ragium/recipe/crushing/echo_shard.json | 12 + .../data/ragium/recipe/crushing/fluorite.json | 12 + .../ragium/recipe/shaped/cryolite_block.json | 15 ++ .../ragium/recipe/shaped/cryolite_slab.json | 15 ++ .../ragium/recipe/shaped/cryolite_stairs.json | 17 ++ .../data/ragium/recipe/shaped/echo_block.json | 5 +- .../ragium/recipe/shaped/fluorite_block.json | 15 ++ .../ragium/recipe/shaped/fluorite_slab.json | 15 ++ .../ragium/recipe/shaped/fluorite_stairs.json | 17 ++ .../shapeless/echo_shard_from_block.json | 12 - .../recipe/stonecutting/cryolite_slab.json | 8 + .../recipe/stonecutting/cryolite_stairs.json | 7 + .../recipe/stonecutting/fluorite_slab.json | 8 + .../recipe/stonecutting/fluorite_stairs.json | 7 + .../lib/data/model/HTModelProvider.kt | 17 +- .../lib/data/recipe/HTRecipeProvider.kt | 54 +++++ .../ragium/common/block/RagiumBlocks.kt | 49 +++- .../ragium/textures/block/cryolite_block.png | Bin 0 -> 354 bytes .../ragium/textures/block/fluorite_block.png | Bin 0 -> 356 bytes 71 files changed, 1201 insertions(+), 91 deletions(-) create mode 100644 src/generated/resources/assets/ragium/blockstates/cryolite_block.json create mode 100644 src/generated/resources/assets/ragium/blockstates/cryolite_slab.json create mode 100644 src/generated/resources/assets/ragium/blockstates/cryolite_stairs.json create mode 100644 src/generated/resources/assets/ragium/blockstates/fluorite_block.json create mode 100644 src/generated/resources/assets/ragium/blockstates/fluorite_slab.json create mode 100644 src/generated/resources/assets/ragium/blockstates/fluorite_stairs.json create mode 100644 src/generated/resources/assets/ragium/items/cryolite_block.json create mode 100644 src/generated/resources/assets/ragium/items/cryolite_slab.json create mode 100644 src/generated/resources/assets/ragium/items/cryolite_stairs.json create mode 100644 src/generated/resources/assets/ragium/items/fluorite_block.json create mode 100644 src/generated/resources/assets/ragium/items/fluorite_slab.json create mode 100644 src/generated/resources/assets/ragium/items/fluorite_stairs.json create mode 100644 src/generated/resources/assets/ragium/models/block/cryolite_block.json create mode 100644 src/generated/resources/assets/ragium/models/block/cryolite_slab.json create mode 100644 src/generated/resources/assets/ragium/models/block/cryolite_slab_top.json create mode 100644 src/generated/resources/assets/ragium/models/block/cryolite_stairs.json create mode 100644 src/generated/resources/assets/ragium/models/block/cryolite_stairs_inner.json create mode 100644 src/generated/resources/assets/ragium/models/block/cryolite_stairs_outer.json create mode 100644 src/generated/resources/assets/ragium/models/block/fluorite_block.json create mode 100644 src/generated/resources/assets/ragium/models/block/fluorite_slab.json create mode 100644 src/generated/resources/assets/ragium/models/block/fluorite_slab_top.json create mode 100644 src/generated/resources/assets/ragium/models/block/fluorite_stairs.json create mode 100644 src/generated/resources/assets/ragium/models/block/fluorite_stairs_inner.json create mode 100644 src/generated/resources/assets/ragium/models/block/fluorite_stairs_outer.json delete mode 100644 src/generated/resources/data/c/tags/block/storage_blocks/echo.json delete mode 100644 src/generated/resources/data/c/tags/item/storage_blocks/echo.json create mode 100644 src/generated/resources/data/minecraft/tags/block/slabs.json create mode 100644 src/generated/resources/data/minecraft/tags/block/stairs.json create mode 100644 src/generated/resources/data/minecraft/tags/item/slabs.json create mode 100644 src/generated/resources/data/minecraft/tags/item/stairs.json create mode 100644 src/generated/resources/data/ragium/loot_table/blocks/cryolite_block.json create mode 100644 src/generated/resources/data/ragium/loot_table/blocks/cryolite_slab.json create mode 100644 src/generated/resources/data/ragium/loot_table/blocks/cryolite_stairs.json create mode 100644 src/generated/resources/data/ragium/loot_table/blocks/fluorite_block.json create mode 100644 src/generated/resources/data/ragium/loot_table/blocks/fluorite_slab.json create mode 100644 src/generated/resources/data/ragium/loot_table/blocks/fluorite_stairs.json create mode 100644 src/generated/resources/data/ragium/recipe/alloying/obzinite_ingot.json create mode 100644 src/generated/resources/data/ragium/recipe/crushing/cryolite.json create mode 100644 src/generated/resources/data/ragium/recipe/crushing/echo_shard.json create mode 100644 src/generated/resources/data/ragium/recipe/crushing/fluorite.json create mode 100644 src/generated/resources/data/ragium/recipe/shaped/cryolite_block.json create mode 100644 src/generated/resources/data/ragium/recipe/shaped/cryolite_slab.json create mode 100644 src/generated/resources/data/ragium/recipe/shaped/cryolite_stairs.json create mode 100644 src/generated/resources/data/ragium/recipe/shaped/fluorite_block.json create mode 100644 src/generated/resources/data/ragium/recipe/shaped/fluorite_slab.json create mode 100644 src/generated/resources/data/ragium/recipe/shaped/fluorite_stairs.json delete mode 100644 src/generated/resources/data/ragium/recipe/shapeless/echo_shard_from_block.json create mode 100644 src/generated/resources/data/ragium/recipe/stonecutting/cryolite_slab.json create mode 100644 src/generated/resources/data/ragium/recipe/stonecutting/cryolite_stairs.json create mode 100644 src/generated/resources/data/ragium/recipe/stonecutting/fluorite_slab.json create mode 100644 src/generated/resources/data/ragium/recipe/stonecutting/fluorite_stairs.json create mode 100644 src/main/resources/assets/ragium/textures/block/cryolite_block.png create mode 100644 src/main/resources/assets/ragium/textures/block/fluorite_block.png diff --git a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt index 75553c1b4e..30609fcef1 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumEnglishLangProvider.kt @@ -38,6 +38,16 @@ class RagiumEnglishLangProvider(output: PackOutput) : addAdvancement(RagiumAdvancementKeys.FREEZER, "My power is 530,000.", "Acquire Freezer") addAdvancement(RagiumAdvancementKeys.MELTER, "(S)melter(y)", "Acquire Melter") // Block + add(RagiumBlocks.ECHO_BLOCK, "Block of Echo") + + add(RagiumBlocks.FLUORITE_BLOCK, "Block of Fluorite") + add(RagiumBlocks.FLUORITE_SLAB, "Fluorite Slab") + add(RagiumBlocks.FLUORITE_STAIRS, "Fluorite Stairs") + + add(RagiumBlocks.CRYOLITE_BLOCK, "Block of Cryolite") + add(RagiumBlocks.CRYOLITE_SLAB, "Cryolite Slab") + add(RagiumBlocks.CRYOLITE_STAIRS, "Cryolite Stairs") + add(RagiumBlocks.ASSEMBLER, "Assembler") add(RagiumBlocks.CRUSHER, "Crusher") add(RagiumBlocks.COMPRESSOR, "Compressor") diff --git a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt index ba8a11f624..1eaf4c1202 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/lang/RagiumJapaneseLangProvider.kt @@ -34,6 +34,16 @@ class RagiumJapaneseLangProvider(output: PackOutput) : addAdvancement(RagiumAdvancementKeys.FREEZER, "私の消費電力は53万です", "冷凍機を手に入れる") addAdvancement(RagiumAdvancementKeys.MELTER, "融けてしまいそう", "溶融炉を手に入れる") // Block + add(RagiumBlocks.ECHO_BLOCK, "残響ブロック") + + add(RagiumBlocks.FLUORITE_BLOCK, "蛍石ブロック") + add(RagiumBlocks.FLUORITE_SLAB, "蛍石のハーフブロック") + add(RagiumBlocks.FLUORITE_STAIRS, "蛍石の階段") + + add(RagiumBlocks.CRYOLITE_BLOCK, "氷晶石ブロック") + add(RagiumBlocks.CRYOLITE_SLAB, "氷晶石のハーフブロック") + add(RagiumBlocks.CRYOLITE_STAIRS, "氷晶石の階段") + add(RagiumBlocks.ASSEMBLER, "組立機") add(RagiumBlocks.CRUSHER, "破砕機") add(RagiumBlocks.COMPRESSOR, "圧縮機") diff --git a/src/data/kotlin/hiiragi283/ragium/data/loot/RagiumBlockLootTableProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/loot/RagiumBlockLootTableProvider.kt index f25f7f5f39..684f271ff4 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/loot/RagiumBlockLootTableProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/loot/RagiumBlockLootTableProvider.kt @@ -35,6 +35,9 @@ class RagiumBlockLootTableProvider(registries: HolderLookup.Provider) : registerOres(RagiumMaterial.Mineral.NITER, HTItemPart.DUST, UniformGenerator.between(2f, 5f)) 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) diff --git a/src/data/kotlin/hiiragi283/ragium/data/model/RagiumModelProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/model/RagiumModelProvider.kt index 7e0e0836fb..450da341df 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/model/RagiumModelProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/model/RagiumModelProvider.kt @@ -67,12 +67,23 @@ 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.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 .associateWith { machineType: HTMachineType -> diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt index 2bf41e32b3..2eb087236d 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumCommonRecipeProvider.kt @@ -102,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 diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumMechanicalRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumMechanicalRecipeProvider.kt index d8c52ce9e9..bbdd793e73 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumMechanicalRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumMechanicalRecipeProvider.kt @@ -15,6 +15,7 @@ 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 @@ -27,6 +28,7 @@ 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 @@ -432,12 +434,15 @@ 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) diff --git a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt index b9d6cf7431..08d6b9fbc0 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/recipe/RagiumVanillaRecipeProvider.kt @@ -3,7 +3,6 @@ package hiiragi283.ragium.data.recipe import hiiragi283.lib.collection.nelOf import hiiragi283.lib.data.recipe.HTRecipeProvider import hiiragi283.lib.data.recipe.builder.VanillaRecipeBuilders -import hiiragi283.lib.data.recipe.builder.vanilla.HTShapedRecipeBuilder import hiiragi283.lib.data.recipe.ingredient.IngredientBuilder import hiiragi283.lib.item.component.HTToolCollection import hiiragi283.lib.item.component.HTToolType @@ -423,16 +422,20 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut private fun material() { // XX <-> Storage Block - baseToBlock( - RagiumMaterial.Gem.ECHO, - CommonTagPrefixes.GEM, - HTSimpleDeferredItem(vanillaId("echo_shard")), - size = StorageBlockSize.FOUR - ) - baseToBlock(RagiumMaterial.Metal.ALUMINUM, HTItemPart.INGOT) - 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 = HTSimpleDeferredItem(vanillaId("netherite_ingot"))) ingotToNugget(RagiumMaterial.Metal.ALUMINUM) @@ -483,7 +486,7 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut for (fuel: RagiumMaterial.Fuel in RagiumMaterial.Fuel.entries) { val base: HTSimpleDeferredItem = RagiumMaterialHelper.getFuelBase(fuel) // Storage - baseToBlock(fuel, Ingredient.of(base), base) + nineToBlock(fuel, Ingredient.of(base), base) // Tiny val tiny: HTSimpleDeferredItem = RagiumItems.getOrThrow(HTItemPart.TINY, fuel) VanillaRecipeBuilders.shapeless { @@ -530,45 +533,52 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut }.save(exporter) } - private fun baseToBlock( - material: RagiumMaterial, - basePrefix: HTTagPrefix, - base: HTSimpleDeferredItem, - block: HTSimpleDeferredBlockAndItem? = RagiumBlocks.MATERIAL_BLOCKS[HTStorageBlockPart.DEFAULT, material], - size: StorageBlockSize = StorageBlockSize.NINE - ) { - baseToBlock(material, Ingredient.of(holderSet(basePrefix, material)), 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, - basePart: HTItemPart, - block: HTSimpleDeferredBlockAndItem? = RagiumBlocks.MATERIAL_BLOCKS[HTStorageBlockPart.DEFAULT, material], - size: StorageBlockSize = StorageBlockSize.NINE - ) { - val base: HTSimpleDeferredItem = RagiumItems.MATERIAL_ITEMS[basePart, material] ?: return - baseToBlock(material, basePart.tagPrefix, base, block, size) + 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 fun baseToBlock( - material: RagiumMaterial, - baseInput: Ingredient, - base: HTSimpleDeferredItem, - block: HTSimpleDeferredBlockAndItem? = RagiumBlocks.MATERIAL_BLOCKS[HTStorageBlockPart.DEFAULT, material], - size: StorageBlockSize = StorageBlockSize.NINE - ) { - if (block == null) return + 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 = size.count + count = 9 } group = base.id.path recipeId suffix "_from_block" }.save(exporter) VanillaRecipeBuilders.shaped { - size.pattern.invoke(this) + hollow8() define('A') { +baseInput } define('B') { items { +base } } result { +block } @@ -577,14 +587,6 @@ class RagiumVanillaRecipeProvider(packOutput: PackOutput, future: CompletableFut }.save(exporter) } - private enum class StorageBlockSize(val count: Int, val pattern: HTShapedRecipeBuilder.() -> Unit) { - FOUR(4, { - +"AA" - +"AB" - }), - NINE(9, HTShapedRecipeBuilder::hollow8) - } - private fun ingotToNugget( material: RagiumMaterial, ingot: HTSimpleDeferredItem? = RagiumItems.MATERIAL_ITEMS[HTItemPart.INGOT, material], diff --git a/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumBlockTagsProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumBlockTagsProvider.kt index efd9437053..a458c40f2c 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumBlockTagsProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumBlockTagsProvider.kt @@ -20,11 +20,18 @@ 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) + 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) @@ -35,5 +42,12 @@ class RagiumBlockTagsProvider(output: PackOutput, lookupProvider: CompletableFut 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/RagiumItemTagsProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumItemTagsProvider.kt index ce5433f6f1..42c47d2e5d 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumItemTagsProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/tag/RagiumItemTagsProvider.kt @@ -55,6 +55,13 @@ 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) 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/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/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_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/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_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/lang/en_us.json b/src/generated/resources/assets/ragium/lang/en_us.json index 7cd5372df6..d0dee0cd12 100644 --- a/src/generated/resources/assets/ragium/lang/en_us.json +++ b/src/generated/resources/assets/ragium/lang/en_us.json @@ -43,6 +43,9 @@ "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", @@ -51,6 +54,9 @@ "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", diff --git a/src/generated/resources/assets/ragium/lang/ja_jp.json b/src/generated/resources/assets/ragium/lang/ja_jp.json index 838030c9df..fae291e3f8 100644 --- a/src/generated/resources/assets/ragium/lang/ja_jp.json +++ b/src/generated/resources/assets/ragium/lang/ja_jp.json @@ -43,6 +43,9 @@ "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": "深層硝石鉱石", @@ -51,6 +54,9 @@ "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": "灰色の染料", 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/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/data/c/tags/block/storage_blocks.json b/src/generated/resources/data/c/tags/block/storage_blocks.json index 7512c62968..1192c30428 100644 --- a/src/generated/resources/data/c/tags/block/storage_blocks.json +++ b/src/generated/resources/data/c/tags/block/storage_blocks.json @@ -4,7 +4,6 @@ "#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/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/item/storage_blocks.json b/src/generated/resources/data/c/tags/item/storage_blocks.json index 7512c62968..1192c30428 100644 --- a/src/generated/resources/data/c/tags/item/storage_blocks.json +++ b/src/generated/resources/data/c/tags/item/storage_blocks.json @@ -4,7 +4,6 @@ "#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/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/minecraft/tags/block/mineable/pickaxe.json b/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json index 4d11ef66d3..40996203de 100644 --- a/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json +++ b/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json @@ -16,6 +16,9 @@ "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", @@ -23,6 +26,9 @@ "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", 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/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/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/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/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/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/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/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/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/shaped/echo_block.json b/src/generated/resources/data/ragium/recipe/shaped/echo_block.json index acad629312..6559026475 100644 --- a/src/generated/resources/data/ragium/recipe/shaped/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/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/shapeless/echo_shard_from_block.json b/src/generated/resources/data/ragium/recipe/shapeless/echo_shard_from_block.json deleted file mode 100644 index 36fe5038e8..0000000000 --- a/src/generated/resources/data/ragium/recipe/shapeless/echo_shard_from_block.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "category": "misc", - "group": "echo_shard", - "ingredients": [ - "#c:storage_blocks/echo" - ], - "result": { - "count": 4, - "id": "minecraft:echo_shard" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/ragium/recipe/stonecutting/cryolite_slab.json b/src/generated/resources/data/ragium/recipe/stonecutting/cryolite_slab.json 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/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/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/recipe/HTRecipeProvider.kt b/src/lib/kotlin/hiiragi283/lib/data/recipe/HTRecipeProvider.kt index 2330815c26..513cf30b19 100644 --- a/src/lib/kotlin/hiiragi283/lib/data/recipe/HTRecipeProvider.kt +++ b/src/lib/kotlin/hiiragi283/lib/data/recipe/HTRecipeProvider.kt @@ -6,7 +6,9 @@ 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 @@ -16,7 +18,10 @@ 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 @@ -73,6 +78,55 @@ abstract class HTRecipeProvider( fun dustOrIngot(material: HTMaterialLike): HTMaterialTagsIngredient = materialTags(nelOf(CommonTagPrefixes.DUST, CommonTagPrefixes.INGOT), material) + /** + * @since 26.1.7 + */ + fun registerSlabRecipes(slab: HTBasicDeferredBlockAndItem, base: Ingredient) { + // Shaped + VanillaRecipeBuilders.shaped { + +"AAA" + define('A') { +base } + result { + +slab + count = 6 + } + group = slab.idOrThrow.path + }.save(exporter) + // Stonecutting + VanillaRecipeBuilders.stonecutting { + ingredient = base + result { + +slab + count = 2 + } + group = slab.idOrThrow.path + }.save(exporter) + } + + /** + * @since 26.1.7 + */ + fun registerStairsRecipes(stairs: HTBasicDeferredBlockAndItem, base: Ingredient) { + // Shaped + VanillaRecipeBuilders.shaped { + +"A " + +"AA " + +"AAA" + define('A') { +base } + result { + +stairs + count = 4 + } + group = stairs.idOrThrow.path + }.save(exporter) + // Stonecutting + VanillaRecipeBuilders.stonecutting { + ingredient = base + result { +stairs } + group = stairs.idOrThrow.path + }.save(exporter) + } + // Integration // abstract class Integration( diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt b/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt index 33dd677d80..bf74266fd5 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/block/RagiumBlocks.kt @@ -31,6 +31,7 @@ import hiiragi283.ragium.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 @@ -39,7 +40,9 @@ import net.minecraft.world.level.ItemLike import net.minecraft.world.level.block.Block import net.minecraft.world.level.block.Blocks import net.minecraft.world.level.block.DropExperienceBlock +import net.minecraft.world.level.block.SlabBlock import net.minecraft.world.level.block.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 @@ -145,7 +148,6 @@ data object RagiumBlocks { 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.Fuel.PITCH_COKE to copyOf(Blocks.COAL_BLOCK).mapColor(MapColor.COLOR_BLUE), - RagiumMaterial.Gem.ECHO to copyOf(Blocks.AMETHYST_BLOCK).mapColor(MapColor.COLOR_CYAN), 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), @@ -176,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 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 0000000000000000000000000000000000000000..b375b5bdb8ff605b627449a87c5aca38830731f5 GIT binary patch literal 354 zcmV-o0iFJdP)aG&R6wsS;?#tyF&U5WRREL8a#7FGoxqy;k_t#u5W~o{?tgA))X+h% z0_+epgQF9UWG%G!U#OkjW=bB!2?N9fHfAfnM^afBf!Q*C6u0t}Wg zfEY1EXEWnJ0ZfR&bqG~3LJt+d5EwyB;Cc)y^gypx0E3Cj2x905rjXvsi`saN>$jFV z_3?dwjZ5@LgnR=40RR6t1`&|}000I_L_t&o0F0_RaGQfh-2eap07*qoM6N<$g2XM8 Ag8%>k literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..b3984ef61dca015d4c74c758760596e848492c03 GIT binary patch literal 356 zcmV-q0h|7bP)7t-JFd>JW}mcU=)!-htNOjy-N6o* zH&ansiK zV@tJOt>4-b^By7J00030|JR_-v;Y7A21!IgR09CG>@yH2fKiJ80000 Date: Fri, 25 Sep 2026 20:05:51 +0900 Subject: [PATCH 44/44] =?UTF-8?q?refactor:=20JEI=E4=B8=8A=E3=81=AE?= =?UTF-8?q?=E6=B6=B2=E4=BD=93=E3=81=AE=E6=8F=8F=E7=94=BB=E3=82=92=E6=94=B9?= =?UTF-8?q?=E5=96=84=20fix:=20GUI=E4=B8=8A=E3=81=AB=E3=81=8A=E3=81=84?= =?UTF-8?q?=E3=81=A6=EF=BC=8C=E7=9D=80=E8=89=B2=E5=87=A6=E7=90=86=E3=82=92?= =?UTF-8?q?=E3=82=82=E3=81=9F=E3=81=AA=E3=81=84=E6=B6=B2=E4=BD=93=E3=81=8C?= =?UTF-8?q?=E6=8F=8F=E7=94=BB=E3=81=95=E3=82=8C=E3=81=A6=E3=81=84=E3=81=AA?= =?UTF-8?q?=E3=81=8B=E3=81=A3=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gui/widget/HTFluidWidgetRenderer.kt | 12 +--- .../gui/widget/HTSpriteWidgetRenderer.kt | 6 +- .../client/integration/jei/RagiumJeiPlugin.kt | 6 ++ .../category/RTElectrolyzingRecipeCategory.kt | 17 ++---- .../jei/category/RTReactingRecipeCategory.kt | 22 +++---- .../jei/category/RTRefiningRecipeCategory.kt | 20 +++---- .../RTResourceExtractingRecipeCategory.kt | 10 ++-- .../kotlin/hiiragi283/lib/text/HTTextUtil.kt | 8 +-- .../hiiragi283/lib/gui/HTGuiRenderHelper.kt | 60 +++++++++++++++++++ .../jei/category/HTBasicRecipeCategory.kt | 23 ++----- .../HTItemAndFluidToFluidRecipeCategory.kt | 20 +++---- .../HTItemAndFluidToItemRecipeCategory.kt | 10 ++-- .../HTItemToItemAndFluidRecipeCategory.kt | 11 ++-- .../jei/category/HTSingleRecipeCategory.kt | 14 ++--- .../jei/ingredient/HTFluidSlotRenderer.kt | 55 +++++++++++++++++ .../jei/ingredient/HTIngredientTypes.kt | 22 +++++++ 16 files changed, 206 insertions(+), 110 deletions(-) create mode 100644 src/libClient/kotlin/hiiragi283/lib/gui/HTGuiRenderHelper.kt create mode 100644 src/libClient/kotlin/hiiragi283/lib/integration/jei/ingredient/HTFluidSlotRenderer.kt create mode 100644 src/libClient/kotlin/hiiragi283/lib/integration/jei/ingredient/HTIngredientTypes.kt 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 20c296109b..320d59f597 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiPlugin.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/RagiumJeiPlugin.kt @@ -9,6 +9,7 @@ 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 @@ -38,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 @@ -98,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, 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 index aef9760569..64ccdcd631 100644 --- a/src/client/kotlin/hiiragi283/ragium/client/integration/jei/category/RTResourceExtractingRecipeCategory.kt +++ b/src/client/kotlin/hiiragi283/ragium/client/integration/jei/category/RTResourceExtractingRecipeCategory.kt @@ -53,12 +53,10 @@ class RTResourceExtractingRecipeCategory(guiHelper: IGuiHelper) : } ) // output - recipe.result.let { - builder - .addOutputSlot(getPosition(3), getPosition(0)) - .add(it) - .setSlotBackground(HTBackgroundType.OUTPUT, it.amount) - } + builder + .addOutputSlot(getPosition(3), getPosition(0)) + .add(recipe.result) + .setSlotBackground(HTBackgroundType.OUTPUT) } override fun setupRecipeExtras( 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/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/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTBasicRecipeCategory.kt b/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTBasicRecipeCategory.kt index b1c634faef..defa8cd861 100644 --- a/src/libClient/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 = diff --git a/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTItemAndFluidToFluidRecipeCategory.kt b/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTItemAndFluidToFluidRecipeCategory.kt index 2a0c791c4b..85f68b30e1 100644 --- a/src/libClient/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/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTItemAndFluidToItemRecipeCategory.kt b/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTItemAndFluidToItemRecipeCategory.kt index aa2461e4e9..c77df37a94 100644 --- a/src/libClient/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/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTItemToItemAndFluidRecipeCategory.kt b/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTItemToItemAndFluidRecipeCategory.kt index ff3286c658..4f0280f4da 100644 --- a/src/libClient/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/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTSingleRecipeCategory.kt b/src/libClient/kotlin/hiiragi283/lib/integration/jei/category/HTSingleRecipeCategory.kt index 937e004c9a..72e3111ac7 100644 --- a/src/libClient/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 @@ -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/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) { + } +}